Почему процессоры с только AVX превосходят процессоры AVX2 по многим SIMD-алгоритмам?

Я исследовал преимущества алгоритмов SIMD в C# и C++ и обнаружил, что во многих случаях использование 128-разрядных регистров на процессоре AVX предлагает лучшее улучшение, чем использование 256-разрядных регистров на процессоре с AVX2, но я не не понимаю почему.

Под улучшением я подразумеваю ускорение алгоритма SIMD по сравнению с алгоритмом не SIMD на той же машине.

2 ответа

На процессоре AVX верхняя половина 256-битных регистров и модулей с плавающей запятой отключается центральным процессором, когда не выполняются инструкции AVX (кодовые коды VEX). Когда код использует инструкции AVX, ЦПУ должен включить блоки FP - это занимает около 70 микросекунд, в течение которых инструкции AVX фактически выполняются с использованием 128 микроопераций дважды.

Когда инструкции AVX не использовались в течение 700 микросекунд, процессор снова выключает верхнюю половину схемы.

Теперь он делает это, потому что верхняя половина схемы потребляет энергию (дох!) И, таким образом, выделяет тепло (вдвое больше!). Это означает, что процессор работает горячее при использовании инструкций AVX. Таким образом, учитывая, что процессоры могут "турбо ускоряться", когда у них есть тепловой запас, использование инструкций AVX уменьшает этот шанс, и фактически, процессор фактически снижает "базовую тактовую частоту". Так, если у вас есть, например, процессор, официально работающий на частоте 2,3 ГГц, который может увеличить турбо до 2,7, когда вы начнете использовать инструкции AVX, чип будет работать до 2,1 и увеличен до 2,3, а в крайних случаях базовая тактовая частота может быть уменьшен до 1,9 (см. страницы 2-4 этого).

На этом этапе ваш процессор выполняет ВСЕ инструкции примерно на 10-15%, возможно, даже на 20% МЕДЛЕННО, чем когда не используются инструкции AVX. Если вы выполняете множество SIMD-операций, инструкции шириной 256 битов стоят того. Но если вы выполняете несколько инструкций AVX, затем "нормальный" код, а затем немного AVX, тогда это снижение тактовой частоты будет стоить больше, чем все выгоды, которые вы можете получить только от AVX.

Это может быть причиной того, что SIMD шириной 128 бит может работать быстрее ширины 256 бит, если у вас нет длинных интенсивных пакетов операций с доминированием SIMD. Есть плата за использование оставшейся части кремния... (или, точнее, вознаграждение за неиспользование, которое мы иногда забываем, что получаем).

(Из комментариев по вопросу)

Если арифметические операции не являются узким местом в выполнении алгоритма, то использование SIMD не обеспечит ускорение. Другими узкими местами могут быть пропускная способность памяти, размеры кеша, скорость памяти, скорость кеша. Если процессор с AVX превосходит процессор AVX2 в этих областях, он выиграет больше от использования встроенных функций SIMD.

Другие вопросы по тегам