Предполагая, что CPU с AVX вообще (т.е. не Pentium / Celeron, даже последнего поколения):
32-битный режим всегда имеет 8 архитектурных регистров YMM. 32-битный режим в основном устарел для высокопроизводительных вычислений.
64-битный режим имеет 16 регистров YMM, или с AVX512VL, 32, если вы включаете использование 256-битных версий инструкций в кодировке EVEX.
В любом случае они переименовываются в более крупный файл физического регистра (PRF), что позволяет избежать опасностей, связанных с записью после записи и записью после чтения. https://blog.stuffedcow.net/2013/05/measuring-rob-capacity/ содержит некоторую информацию о размере окна выполнения вне очереди, ограниченном размером PRF, а не буфером повторного заказа (ROB).
Вы могли обнаружить 64 -битный режим с #if defined(__x86_64__)
на большинстве компиляторов, #if defined(_M_X64)
на MSV C.
Определение AVX во время компиляции - __AVX__
, AVX512VL - __AVX512VL__
. (У обычных процессоров с AVX512 он есть, у Xeon Phi (KNL / KNM) нет; только унаследованный SSE или полноразмерный ZMM AVX512.) Возможно, вы захотите выполнить только обнаружение AVX во время выполнения, а не включать его в качестве базового уровня для всех ваших исходные файлы, тем не менее.