如何以编程方式获取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