Инженеры Intel написали, что мы должны использовать VZEROUPPER / VZEROALL, чтобы избежать дорогостоящего перехода в состояние без VEX на всех процессорах, включая будущий процессор Xeon, но не на Xeon Phi: https://software.intel.com/pt-br/node/704023
Еще люди замерили и выяснили, что VZEROUPPER и VZEROALL стоят дорого на Knights Landing:
36 тактов для обеих инструкций в 64-битном режиме (30 тактов в 32-битном режиме).
См. Ссылку выше.
Итак, мой код будет следующим, если я только что использовал ymm0 и ymm1:
if [we are running on a Xeon Phi]
vpxor ymm0,ymm0,ymm0
vpxor ymm1,ymm1,ymm1
else
vzeroall
endif
Как я могу обнаружить Xeon Phi (процессоры Knights Landing и более поздние версии Xeon Phi) для реализации вышеуказанного кода?
Теперь у нас есть следующая ситуация с VZEROUPPER / VZEROALL:
- Эти инструкции не нужны и очень дороги для Xeon Phi Knight Landing. 36 тактов для обеих инструкций в 64-битном режиме (30 тактов в 32-битном режиме).
- Эти инструкции очень дешевы и необходимы для процессоров Xeon и Core (Skylake / Kaby Lake) и будут необходимы для Xeon в обозримом будущем, чтобы избежать дорогостоящего перехода в состояние, отличное от VEX.
В рекламных материалах утверждается, что Xeon Phi (Knights Landing) полностью совместим с другими процессорами Xeon.
Есть ли надежный способ обнаружить Xeon Phi, чтобы избежать VZEROUPPER / VZEROALL?
Есть статья «Как определить приземление рыцарей. Поддержка AVX-512 (процессор Intel® Xeon Phi ™) »Джеймса Р., обновлено 22 февраля 2016 г., но в нем сосредоточены только конкретные новые инструкции, которые стали доступны в Knights Landing. Таким образом, все еще не очень ясно, что касается переходов VEX.
Было бы неплохо узнать, планирует ли Intel реализовать бит CPUID, чтобы показать, дорого обходится ли состояние, отличное от VEX? Например:
- Бит установлен в 0 - переходы между состояниями VEX являются дорогостоящими, но VZEROUPPER / VZEROALL дешевы и должны использоваться для очистки состояния;
- Бит установлен в 1 - штрафа за переход нет, VZEROUPPER / VZEROALL не требуется.
В упомянутой выше статье об обнаружении Knights Landing предлагается проверить биты AVX-512F + CD + ER + PF, представленные в Knights Landing.
Таким образом, код предлагает проверить все эти биты сразу, и если все они установлены, то мы находимся в Приземлении Рыцарей:
uint32_t avx2_bmi12_mask = (1 << 16) | // AVX-512F
(1 << 26) | // AVX-512PF
(1 << 27) | // AVX-512ER
(1 << 28); // AVX-512CD
Было бы неплохо узнать, планирует ли Intel добавить все эти биты в простые процессоры Xeon (не Phi) или Core в ближайшем будущем, чтобы они также поддерживали функции AVX-512F + CD + ER + PF, представленные в Knight Landding?
Если процессор Xeon и Core будет поддерживать AVX-512F + CD + ER + PF, мы не сможем отличить Xeon от Xeon Phi.
Пожалуйста, порекомендуйте.
cpuid.family == B
sandpile.org/x86/cpuid.htm - person ta.speot.is   schedule 11.06.2017