我在准备汇编程序x86项目时遇到了一个问题,该程序的主题是编写一个获取L1数据,L1代码,L2和L3缓存大小的程序.
我试图在英特尔文档和互联网上找到一些东西,但我失败了.
主要问题是:对于AMD处理器,只需将EAX寄存器设置为80000005h和80000006h值,并从ECX和EDX寄存器获取所需数据,但在Intel情况下,我只能获取L2的此信息.
我该怎么做才能获得英特尔处理器的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/中给出,更具体地在标题为“缓存拓扑枚举”的部分中给出。
归档时间: |
|
查看次数: |
3909 次 |
最近记录: |