Assembly 查询英特尔CPU中缓存的大小、缓存线大小和关联性

Assembly 查询英特尔CPU中缓存的大小、缓存线大小和关联性,assembly,x86,intel,cpuid,Assembly,X86,Intel,Cpuid,对于AMD处理器,有CPUID 0x8000005u和0x8000006u来收集不同缓存级别的大小、关联和缓存线大小 对于Intel CPU,只有application note 485具有不同缓存大小的表,可以从较低的cpuid级别收集这些表。但这份文件已经多年没有更新了 那么,有没有一种方便的方法可以从英特尔CPU获取这些数据呢?似乎在本文中有所介绍。CPUID离开(eax)2和4为您提供可以解析的缓存信息。手册中有公式和表格。我相信这些信息是最新的。您是否确实尝试过这样做,但结果不正确?还

对于AMD处理器,有CPUID 0x8000005u和0x8000006u来收集不同缓存级别的大小、关联和缓存线大小

对于Intel CPU,只有application note 485具有不同缓存大小的表,可以从较低的cpuid级别收集这些表。但这份文件已经多年没有更新了


那么,有没有一种方便的方法可以从英特尔CPU获取这些数据呢?

似乎在本文中有所介绍。CPUID离开(
eax
)2和4为您提供可以解析的缓存信息。手册中有公式和表格。我相信这些信息是最新的。您是否确实尝试过这样做,但结果不正确?还是你在别的地方卡住了?谢谢,这是第214页(pdf第316页)描述的CPUID级别0x4。有人知道从哪个CPU开始支持这种类型的缓存描述符吗?至少从奔腾4(叶2)开始。据报道,可能在那之前。IDK关于leaf 4。根据,您可以假设Pentium Pro和更高版本支持leaf 2。对于leaf 4,您需要一个带超线程的奔腾4或更高版本。当然,你不应该硬编码。按照手册和维基百科的建议去做:先用叶0调用CPUID,看看支持的最高叶是什么。然后,如果大于或等于2,则调用CPUID以获取叶2信息。如果大于或等于4,则调用CPUID以获取叶4信息。否则,它不受支持。