документация для vzeroall
выглядит противоречивой. В прозе говорится:
Инструкция обнуляет содержимое всех регистров XMM или YMM.
Однако приведенный ниже псевдокод указывает, что в 64-битном режиме затрагиваются только регистры с ymm0
по ymm15
:
IF (64-bit mode)
limit ←15
ELSE
limit ← 7
FOR i in 0 .. limit:
simd_reg_file[i][MAXVL-1:0] ← 0
На машинах, поддерживающих AVX-512, очистка до ymm15
не совпадает с очисткой «всех», потому что существуют от ymm16
до ymm31
.
Верна ли проза или псевдокод?
// clear only 16 registers even if AVX-512 is present
- person Jester   schedule 24.01.2020vzeroupper
на новых процессорах может быть намного хуже из-за эффекта слияния uops и неявное расширение (это то, что упоминалось в комментариях, на которые ссылался Питер). - person BeeOnRope   schedule 24.01.2020rep movsb
- это совсем другая тема), вы не пострадаете от эффекта и в конечном итоге получите лицензию L0. - person BeeOnRope   schedule 25.01.2020