The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Проект Minotaur развивает оптимизатор векторных инструкций для LLVM , opennews (??), 16-Июл-23, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


31. "Проект Minotaur развивает оптимизатор векторных инструкций д..."  +1 +/
Сообщение от Аноним (65), 16-Июл-23, 14:51 
Внезапно, это прямое назначение векторных инструкций - выполнить одну операцию над кучей данных. А "примитивной" CMP вы будете долго и нудно ковырять эту строку по одному символу за раз.
Ответить | Правка | К родителю #24 | Наверх | Cообщить модератору

39. "Проект Minotaur развивает оптимизатор векторных инструкций д..."  +/
Сообщение от Аноньимъ (ok), 16-Июл-23, 15:40 
Стоит ли вообще такое делать без явного указания программиста что именно так нужно делать большой вопрос.

У меня есть много вопросов по конкретному примеру вообще.

Как приведенный в новости код векторизировать если неизвестен размер массива?

Если грузить память большими кусками то неизбежно будет захвачен кусок выходящий за пределы массива, и тут могут всякие чудеса вообще происходить.

Нормальная система такого позволять не должна.

Ответить | Правка | Наверх | Cообщить модератору

44. "Проект Minotaur развивает оптимизатор векторных инструкций д..."  +/
Сообщение от Tim (??), 16-Июл-23, 16:41 
Конкретно в этом примере не весь цикл, а только оператор сравнения. Фактически выбросили две бессмысленные операции.

Реализовать можно по-разному. Например три цикла, где первый побайтовый до границы кэш линии, затем векторный, и финал опять побайтовый. Или другой вариант – маскировать load/store.

AVX это не сопроцессор. Компилятор может выдать REP MOVSB или использовать быстрые инструкции, благо они все выполняются последовательно и не создают проблем при переключении задач.

Проблемы начнутся если для копирования будут использовать DMA каналы, так как их мало и работают асинхронно.

PS. Процессоры, которые кичатся своей RISC-овостью, могут load/store только с машинными словами, и только выровненными по границе слова.

Ответить | Правка | Наверх | Cообщить модератору

48. "Проект Minotaur развивает оптимизатор векторных инструкций д..."  +/
Сообщение от uis (??), 16-Июл-23, 16:55 
> PS. Процессоры, которые кичатся своей RISC-овостью, могут load/store только с машинными словами, и только выровненными по границе слова.

Не совсем. Хотя у POWER VMX очень интересно сделано: оно игнорирует последние n бит, всегда загружает выровненное слово и отказывается выдавать ошибку. Как результат - программная невыровненная загрузка выполняется в 3 инструкции.

Ответить | Правка | Наверх | Cообщить модератору

53. "Проект Minotaur развивает оптимизатор векторных инструкций д..."  +/
Сообщение от Аноньимъ (ok), 16-Июл-23, 17:23 
> Реализовать можно по-разному. Например три цикла, где первый побайтовый до границы кэш
> линии, затем векторный, и финал опять побайтовый. Или другой вариант –
> маскировать load/store.

Для этого компилятору нужно знать размер массива.


Ответить | Правка | К родителю #44 | Наверх | Cообщить модератору

50. "Проект Minotaur развивает оптимизатор векторных инструкций д..."  +/
Сообщение от An2 (?), 16-Июл-23, 17:08 
> Стоит ли вообще такое делать без явного указания программиста что именно так нужно делать большой вопрос.

Но откуда программисту знать, на каком процессоре код будет выполняться? Можно ли ему за раз 128 бит проверять или 256, а может и все 512?

Если оптимизатор не накладывает ограничений на кратность размера буфера - просто замечательно.

Ответить | Правка | К родителю #39 | Наверх | Cообщить модератору

52. "Проект Minotaur развивает оптимизатор векторных инструкций д..."  +/
Сообщение от Аноньимъ (ok), 16-Июл-23, 17:21 
>Но откуда программисту знать, на каком процессоре код будет выполняться?

Да просто не от куда, загадка!
Не говоря уже о том, что никогда никакой код и не пытается даже узнать это в рантайме прямо, это ведь невозможно.
Только компилятор может знать, или не может.
Кстати, откуда компилятору знать на каком процессоре будет код выполняться если программист этого не знает?

>Можно ли ему за раз 128 бит проверять или 256, а может и все 512?

Программисту ненужно знать сколько там бит и какие конкретно инструкции, достаточно сказать что это должна быть SIMD операция.
Обычно делается это через спец векторные примитивы.

Ответить | Правка | Наверх | Cообщить модератору

54. "Проект Minotaur развивает оптимизатор векторных инструкций д..."  +/
Сообщение от An2 (?), 16-Июл-23, 17:41 
> Не говоря уже о том, что никогда никакой код и не пытается даже узнать это в рантайме прямо, это ведь невозможно.

Очень даже возможно. Самый известный проигрыватель mplayer при запуске как раз об этом и сообщает: "Compiled with runtime CPU detection". И, самое главное, использует обнаруженные преимущества.

> Кстати, откуда компилятору знать на каком процессоре будет код выполняться если программист этого не знает?

Об этом ему может сообщить сборщик программы, который, в общем случае, не программист.

> это должна быть SIMD операция

Когда теперь чуть ли не каждый цикл можно автовекторизировать, то проще уже указывать обратное: вот именно тут, пожалуйста, никакой самодеятельности.

Ответить | Правка | Наверх | Cообщить модератору

62. "Проект Minotaur развивает оптимизатор векторных инструкций д..."  +/
Сообщение от Аноньимъ (ok), 16-Июл-23, 18:40 
> Когда теперь чуть ли не каждый цикл можно автовекторизировать, то проще уже
> указывать обратное: вот именно тут, пожалуйста, никакой самодеятельности.

Не знаю.
Я думаю это не такой простой вопрос.

Ответить | Правка | Наверх | Cообщить модератору

67. "Проект Minotaur развивает оптимизатор векторных инструкций д..."  +/
Сообщение от Аноним (65), 16-Июл-23, 19:39 
> Как приведенный в новости код векторизировать если неизвестен размер массива?

Очевидно, он известен, т.к. p указывает на конец, а name - на начало.

> Если грузить память большими кусками то неизбежно будет захвачен кусок выходящий за пределы массива, и тут могут всякие чудеса вообще происходить.

Никаких чудес, если в рамках страницы памяти. Да, всякие sanitizer'ы и valgrind будут вонять про выход за границы буфера, но на практике всё будет работать без проблем. Такой подход реально применялся раньше, пока sanitizer'ы не стали модными.

Ответить | Правка | К родителю #39 | Наверх | Cообщить модератору

68. "Проект Minotaur развивает оптимизатор векторных инструкций д..."  +/
Сообщение от Аноньимъ (ok), 16-Июл-23, 20:00 
> Очевидно, он известен, т.к. p указывает на конец, а name - на
> начало.

Да, вы правы, я как-то не так этот кот прочитал.

Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру