Для работы проектов iXBT.com нужны файлы cookie и сервисы аналитики.
Продолжая посещать сайты проектов вы соглашаетесь с нашей
Политикой в отношении файлов cookie
AVX не более быстрое, такое же, как SSE. Но, в отличие от SSE, в AVX появились новые команды, более удобная система кодирования команд (они стали, в основном, трёхоперандные) и новые регистры (ymm). Между прочим, в статье говорится не про AVX, а AVX2, которое уже существенно отличается от SSE. Также авторы почему-то умолчали о ещё одном очень «вкусном» расширении — FMA, которое обычно сопровождает AVX и AVX2.
Garry1010, такие процессоры были. Назывались Z80, и на их основе делались компьютеры ZX Spectrum. Там память работала практически без задержек. Программировать на ассемблере было одно удовольствие: не паришься с оптимизацией кода по доступу к памяти. К сожалению, достигалось это за счёт того, что всё было медленное. Сейчас так не получится.
Эти модули как раз заточены под грядущую архитектуру AMD Zen 3 Vermeer, где шина Infinity Fabric сможет работать на частоте 2200 МГц в синхронном режиме с памятью. Это будет наиболее производительный режим, который должен снизить задержки работы с памятью до уровня конкурирующих решений Intel.
Из ваших слов следует, что основное преимущество AVX-512 сводится к возможности одной командой умножить (4x4)-матрицу на число. И это всё? На AVX2 то же делается двумя командами, тоже очень дешёвая операция. Гораздо более важное действие в расчётах — умножение матрицы на вектор. Какое конкретное преимущество даёт AVX-512 для этого? Возможность разместить всю матрицу в одном регистре само по себе ничего не даёт.
Ещё раз обращаю ваше внимание. В отличие от AVX-2, теперь появилась возможность выполнить одну операцию сразу для всех 16-и элементов вектора. Как это поможет оптимизировать работу с четырьмя 4-векторами? Кроме узкого круга специфических задач — практически никак. Разве что (4x4)-матрицу на число теперь можно быстрее умножить, но, во-первых, это операция и на AVX2 будет очень дешёвая, во-вторых, она не настолько важна, как умножение матрицы на вектор. Я бы увидел реальную пользу AVX-512, если бы она одной командой умножала матрицу на вектор, но, насколько мне известно, там этого нет. Поправьте, если ошибаюсь.
"… загрузить все 16 элементов float" — сначала подумайте, насколько часто в реальных задачах требуется выполнить одну операцию над 16-ю наборами данных. В вашем же примере выше для 3d расчётов достаточно 4-векторов.
Intel действительно часто действовала непоследовательно, нередко руководствуясь политическими мотивами, а не желанием что-то улучшить. Например, ряд команд из семейства SSEx появились как функциональный аналог ранее существующих команд, но с какими-то улучшениями алгоритма их выполнения. Плодить зоопарк команд с идентичной логикой — признак бессистемности. В таких случаях в новом ядре процессора при желании просто оптимизируют алгоритм выполнения команды, не вводя новые машинные коды. Наверное, не совсем хорошо и чрезмерная необходимость программисту учитывать аппаратные особенности работы тех или иных команд. Например, у начинающих много вопросов вызывает, почему существует столько аналогичных команд (например, команд пересылки, логики), отличающихся только типами данными — single, double или dword.
Ещё один исторический пример. Гордыня помешала Intel принять удачное и передовое для того времени расширение набора инструкций 3DNow! от AMD (по сути, это была надстройка MMX), в результате оно было задушено, и сейчас перестало поддерживаться в новых процессорах AMD.
Во многом Линус Торвальд прав. SIMD-параллелизм даже над 4-мя наборами данных (AVX2 позволяет одновременно обрабатывать 4 числа double или 8 float) — довольно редкое явление, а над 8-ю double или 16-и float — и вовсе что-то исключительное. Где-то это может понадобиться, но основной массе приложений возможности AVX-512 не требуются. Лучше бы сделали, чтобы базовые x86-инструкции не имели узких мест. Сейчас, например, довольно медленно работают такие востребованные инструкции как loop(z,nz), stos, lods, movs. Кстати, в новых AMD процессорах команда loop работает практически без повышенной латентности (насчёт цепочечных команд, не знаю точно). Ещё один вариант, куда «деть» транзисторы — аппаратно реализовать расширение FPU с четверной или восьмерной точностью с возможностью его включения при необходимости. В ряде инженерных расчётов бывает востребована повышенная точность, о чём говорит множество соответствующих библиотек.
Я просто заново настроил оформление рабочего стола, удалять обновления не стал. Думаю, что эти обновления всё же не только для удаления обоев созданы, а с обоями просто ошибку допустили.
«Ну в отличии от SSE, который был пригоден только для научных вычислений, так как работал только с вещественными числами» —
SSE1-4 содержат весь набор векторных команд как целочисленных, так и вещественных. Причём для научных расчётов они далеко не всегда используются, поскольку для таких расчётов зачастую требуется повышенная точность (например, расширенная 80 бит) и не требуется векторизация, т.е. используются x87-инструкции. Наборы AVX1,2 в основном повторяют команды SSE1-4 (с расширением до 256 бит) и где-то дополняют их. В общем, AVX2 для подавляющего числа задач сегодня считаю более чем достаточным. Так что можно согласиться с тем, что AVX-512 не обязательно ставить там, где критично тепловыделение.
Объективно такой уровень векторизации (512 бит) довольно редко бывает нужен. Наступает ситуация, когда даже оптимизация приложений под данное расширение инструкций даст лишь незначительный средний прирост производительности (в отдельных специфических приложениях прирост будет хороший, в большинстве — без заметного прироста). В связи с этим рискну предположить, что следующее повышение разрядности векторных команд произойдёт нескоро (может лет через 5), либо это будет уже нечто принципиально новое.
В своё время Intel цинично задушили расширение системы команд 3DNow! от AMD. Вместо того, чтобы поддержать его в своих процессорах (для удобства пользователей), Intel внедрили похожую, но несовместимую технологию SSE. В основном с целью насолить конкурентам, которые их опередили с идеей simd-расширения для плавающей арифметики. В результате несколько лет назад AMD отказалась от 3DNow! в силу того, что она уже морально устарела и притом мало где использовалась. Политически мотивированные решения компаний нередко приводит к неудобству для конечных потребителей, да и самих производителей, когда приходится поддерживать обилие плохо продуманных наборов команд, которые к тому же сильно варьируются от процессора к процессору.
Что касается AVX 3 (AVX-512), в каких-то специфических приложениях от них будет несомненный выигрыш, но для большинства распространённых алгоритмов, возможность параллельно исполнять одну и ту же арифметическую операцию, скажем, для 8 операндов типа double или 16 операндов single, останется невостребованной. Есть разумный предел повышения разрядности simd-расширений, когда целесообразность этого начинает стремиться к нулю. Так что, думаю, AVX 3 в недалёком будущем внедрят во всё процессоры Intel и AMD, а дальше — сомнительно. Нужны новые пути повышения производительности.
Ещё один исторический пример. Гордыня помешала Intel принять удачное и передовое для того времени расширение набора инструкций 3DNow! от AMD (по сути, это была надстройка MMX), в результате оно было задушено, и сейчас перестало поддерживаться в новых процессорах AMD.
SSE1-4 содержат весь набор векторных команд как целочисленных, так и вещественных. Причём для научных расчётов они далеко не всегда используются, поскольку для таких расчётов зачастую требуется повышенная точность (например, расширенная 80 бит) и не требуется векторизация, т.е. используются x87-инструкции. Наборы AVX1,2 в основном повторяют команды SSE1-4 (с расширением до 256 бит) и где-то дополняют их. В общем, AVX2 для подавляющего числа задач сегодня считаю более чем достаточным. Так что можно согласиться с тем, что AVX-512 не обязательно ставить там, где критично тепловыделение.
Что касается AVX 3 (AVX-512), в каких-то специфических приложениях от них будет несомненный выигрыш, но для большинства распространённых алгоритмов, возможность параллельно исполнять одну и ту же арифметическую операцию, скажем, для 8 операндов типа double или 16 операндов single, останется невостребованной. Есть разумный предел повышения разрядности simd-расширений, когда целесообразность этого начинает стремиться к нулю. Так что, думаю, AVX 3 в недалёком будущем внедрят во всё процессоры Intel и AMD, а дальше — сомнительно. Нужны новые пути повышения производительности.