Dan*_*nko 0 c++ cpu-registers avx
目前我正在开发使用 AVX 寄存器计算积分的函数。我想知道我的电脑上是否有足够的内容。我怎样才能知道呢?
假设一个带有 AVX 的 CPU(即不是 Pentium/Celeron,甚至是最新一代):
32 位模式总是有 8 个架构 YMM 寄存器。32 位模式对于高性能计算来说已经过时了。
64 位模式有 16 个 YMM regs,或者 AVX512VL,如果包括使用 EVEX 编码的 256 位版本的指令,则有 32 个。
在任何一种情况下,它们都被重命名为更大的物理寄存器文件 (PRF),以避免写后写和读后写的危险。 https://blog.stuffedcow.net/2013/05/measuring-rob-capacity/有一些关于乱序执行窗口大小受 PRF 大小限制的信息,而不是受重新排序缓冲区 (ROB) 限制。
您可以在 MSVC#if defined(__x86_64__)
上的大多数编译器#if defined(_M_X64)
上检测 64 位模式。
AVX 的编译时检测是__AVX__
,AVX512VL 是__AVX512VL__
。(带有 AVX512 的主流 CPU 有,至强融核 (KNL / KNM) 没有;只有传统的 SSE 或 AVX512 全宽 ZMM。)您可能只想对 AVX 进行运行时检测,而不是将其启用为所有您的基准但是,源文件。