如何以编程方式获取C ++中的CPU缓存页面大小?

时间:2020-03-06 14:53:32  来源:igfitidea点击:

我希望我的程序读取它在C ++中运行的CPU的缓存行大小。

我知道这是无法移植的,所以我将需要一个针对Linux的解决方案和一个针对Windows的解决方案(其他系统的解决方案可能对其他人有用,因此请在知道的情况下发布它们)。

对于Linux,我可以读取/ proc / cpuinfo的内容并解析以cache_alignment开头的行。也许有更好的方法来调用API。

对于Windows,我根本不知道。

解决方案

看起来至少SCO Unix(http://uw714doc.sco.com/en/man/html.3C/sysconf.3C.html)的sysconf具有_SC_CACHE_LINE。也许其他平台也有类似的东西?

在Win32上," GetLogicalProcessorInformation"将为我们返回" SYSTEM_LOGICAL_PROCESSOR_INFORMATION",其中包含" CACHE_DESCRIPTOR",其中包含我们所需的信息。

我认为我们需要从ntdll.dll中获取NtQuerySystemInformation

对于x86,是CPUID指令。谷歌快速搜索显示了一些用于Win32和C ++的库。我也通过内联汇编器使用过CPUID。

更多信息:

  • http://www.intel.com/Assets/PDF/appnote/241618.pdf
  • http://softpixel.com/~cwright/programming/simd/cpuid.php

在Linux上,尝试proccpuinfo库,这是一个与体系结构无关的C API,用于读取/ proc / cpuinfo