Можно ли смешивать устаревшие инструкции в кодировке SSE и VEX в одном и том же пути кода?

Наряду с внедрением AVX корпорация Intel представила схему кодирования VEX в архитектуре Intel 64 и IA-32. Эта схема кодирования используется в основном с инструкциями AVX. Мне было интересно, можно ли смешивать инструкции, закодированные в VEX, и теперь называемые "устаревшими инструкциями SSE".

Основной причиной, по которой я задаю этот вопрос, является размер кода. Рассмотрим эти две инструкции:

shufps xmm0, xmm0, 0
vshufps xmm0, xmm0, xmm0, 0

Я обычно использую первый, чтобы "передать" скалярное значение во все места в регистре XMM. Теперь набор команд говорит, что единственное различие между этими двумя (в данном случае) состоит в том, что кодированный VEX очищает старшие (>=128) биты регистра YMM. Предположим, что мне это не нужно, в чем преимущество использования VEX-кодированной версии в этом случае? Первая инструкция занимает 4 байта (0FC6C000), второе - 5 (C5F8C6C000).

Спасибо за все ответы заранее.

2 ответа

Решение

В текущих реализациях, если (по крайней мере) верхние половины были сброшены (VZEROUPPER или VZEROALL), штраф за использование устаревших инструкций SSE отсутствует.

Как подробно описано на стр. 128 в Agner Fog: оптимизация подпрограмм при сборке с использованием устаревших инструкций SSE, когда (некоторые) верхние половины используются, влечет за собой снижение производительности. Это наказание применяется один раз при входе в состояние, в котором регистры YMM разбиты посередине, и еще раз при выходе из этого состояния.

Смешивание 128-битных инструкций в кодировке VEX и унаследованных инструкций SSE не является проблемой.

Это небезопасно. Согласно руководству разработчика программного обеспечения Intel, версия VEX.128 обнуляет верхнюю половину регистра YMM, а устаревшая версия SSE - нет. Хуже всего то, что некоторые ассемблеры (например, gasm) могут конвертировать SHUFPS в VSHUFPS при создании объектного файла (когда применяется флаг -mavx). Я обнаружил точно такую ​​же проблему при работе со сборочным файлом.

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