我在准备一个汇编x86项目时遇到了一个问题,该项目的主题是编写一个获取L1数据、L1代码、L2和L3缓存大小的程序。
我尝试在英特尔文档和互联网中查找一些内容,但失败了。
主要问题是:对于 AMD 处理器,只需将 EAX 寄存器设置为 80000005h 和 80000006h 值,并从 ECX 和 EDX 寄存器获取所需的数据,但对于 Intel 处理器,我只能获取 L2 的此信息。
我应该如何获取 Intel 处理器的 L1 和 L3 缓存大小?
Marat Dukhan 基本上给了你正确的答案。对于较新的 Intel 处理器,即过去 5-6 年制造的处理器,最佳解决方案是枚举 cpuid leaf 4,这意味着您调用 cpuid 几次,首先使用 EAX=4 和 ECX=0,然后使用 EAX= 4且ECX=1等等。这不仅会返回有关缓存大小和类型的信息,还会告诉您这些缓存如何连接到 CPU 内核和超线程/SMT 单元。算法和示例代码位于https://software.intel.com/en-us/articles/intel-64-architecture-processor-topology-enumeration/,更具体地说,在标题为“缓存拓扑枚举”的部分中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)