Кажется, что многие процессоры Intel (вплоть до Skylake, если я ошибаюсь) демонстрируют низкую производительность при смешивании инструкций AVX-256 с инструкциями SSE.Почему инструкции SSE сохраняют верхние 128-битные регистры YMM?
В соответствии с Intel's documentation это вызвано инструкциями SSE, которые определены для сохранения верхних 128 бит регистров YMM, поэтому, чтобы иметь возможность экономить электроэнергию, не используя верхние 128 бит данных данных, центральный процессор сохраняет эти биты при выполнении кода SSE и перезагружает их при вводе кода AVX, а магазины и нагрузки стоят дорого.
Однако я не могу найти очевидной причины или объяснения, почему SSE-инструкции необходимы для сохранения этих верхних 128 бит. Соответствующие 128-битные инструкции VEX (использование которых позволяет избежать снижения производительности) работают, всегда очищая верхние 128 бит регистров YMM, а не сохраняя их. Мне кажется, что когда Intel определила архитектуру AVX, в том числе расширение регистров XMM в регистры YMM, они могли бы просто определить, что инструкции SSE также очистят верхние 128 бит. Очевидно, что поскольку регистры YMM были новыми, не могло существовать никакого устаревшего кода, который бы зависел от инструкций SSE, сохраняющих эти биты, и мне также кажется, что Intel могла легко увидеть это.
Итак, по какой причине Intel определила инструкции SSE для сохранения верхних 128 бит регистров YMM? Это когда-нибудь полезно?
Agner Fog имеет некоторое представление в вопросе, который получил ответ от Intel: https://software.intel.com/en-us/forums/intel-isa-extensions/topic/301853 –
@MichaelPetch: Отличная находка! – Dolda2000