当前,我正在开发使用AVX寄存器进行积分计数的函数。我想知道我的计算机上是否足够。我怎么知道的?
完全假定具有AVX的CPU(即不是Pentium / Celeron,甚至不是最新一代的CPU:]
32位模式始终有8个架构YMM寄存器。对于高性能计算,大多数情况下已不再使用32位模式。
64位模式具有16个YMM寄存器,如果使用的是EVEX编码的256位版本的指令,则带有AVX512VL,则为32个。
不论哪种情况,都将它们重命名为更大的物理寄存器文件(PRF),避免了写后写和读后写的危险。 https://blog.stuffedcow.net/2013/05/measuring-rob-capacity/具有一些有关无序执行窗口大小的信息,这些信息受PRF大小限制,而不是受ReOrder Buffer(ROB)限制。
[您可以在大多数编译器上用#if defined(__x86_64__)
检测到64位模式,可能在MSVC上也可以使用其他方法。
AVX的编译时检测为__AVX__
,AVX512VL为__AVX512VL__
。 (具有AVX512的主流CPU拥有它,至强融核(KNL / KNM)没有;只有传统的SSE或AVX512全宽ZMM。)您可能只想对AVX进行运行时检测,而不是将其用作所有基准的基线源文件。