【发布时间】:2012-12-26 07:56:20
【问题描述】:
我在准备一个汇编程序 x86 项目时遇到了一个问题,该项目的主题是编写一个获取 L1 数据、L1 代码、L2 和 L3 缓存大小的程序。
我试图在英特尔文档和 Internet 中查找内容,但失败了。
主要问题是:对于 AMD 处理器,只需将 EAX 寄存器设置为 80000005h 和 80000006h 值并从 ECX 和 EDX 寄存器获取所需数据,但对于 Intel,我只能为 L2 获取此信息。
我应该怎么做才能获得英特尔处理器的 L1 和 L3 缓存大小?
【问题讨论】:
-
它是用于您的个人项目还是您将交付给客户的东西?它应该独立于操作系统吗?
-
这是我的个人项目,没有任何商业意义。我希望它在 Windows 上工作,因为在这里我可以检查我得到的结果与 CPU-Z 程序相比是否正确,即
-
您可以使用 Yeppp 的 yepLibrary_GetCpuDataCacheSize 和 yepLibrary_GetCpuInstructionCacheSize 函数!图书馆 (www.yeppp.info)。请注意,这些 API 不受官方支持,将在未来版本中删除。
-
如果您想直接从 CPU 获取信息,请阅读英特尔架构手册中的 CPUID 指令说明。请注意,大约有 5 个 CPUID 叶子可以指定缓存大小信息。
-
CPUID 与缓存信息一起离开:2(缓存描述符,其含义参见 Intel 架构手册,另外参见 Cyrix 手册以了解它们在 Cyrix 处理器上的含义,AMD CPU 有 0 个缓存描述符),4(较新Intel CPUs), 0x80000005 (AMD-only), 0x80000006 (AMD-only expect L2 information which is also provided on Intel CPUs), 0x8000001D (AMD-only, used on Bulldozer CPUs, and can contradict the leaf 0x80000006)
标签: caching x86 intel cpu-cache cpuid