我想知道 C# 中是否有实现的东西允许访问 CPU 缓存。这对我来说很有趣,但目前我与 cpu 缓存无关。所以我想知道它是系统限制访问还是用户也可以使用。我说的是 L1/L2 或其他任何名称!
很高兴听到您的评论、外部链接以及一些代码片段!谢谢。
我想知道 C# 中是否有实现的东西允许访问 CPU 缓存。这对我来说很有趣,但目前我与 cpu 缓存无关。所以我想知道它是系统限制访问还是用户也可以使用。我说的是 L1/L2 或其他任何名称!
很高兴听到您的评论、外部链接以及一些代码片段!谢谢。
没有编程语言可以直接访问 CPU 缓存。读取和写入缓存是由硬件自动完成的;没有办法编写将缓存视为任何类型的单独实体的指令。对高速缓存的读取和写入是所有触及内存的指令的副作用。
对于此类活动,C# 的级别有点太高了。除非您调用其他一些用 C/ASM 编写的库 =) 当然,使用缓存通常是一个非常晦涩的话题,并且在大多数情况下它完全由硬件控制。另一方面,您可能已经遇到过一些关于 SO 的非常有趣的问题/讨论。
C++ 缓存感知编程
如何在 x86 Windows 中进行 CPU 缓存刷新?
无论如何,尽管有这些限制,您仍然可以(在某种程度上)预测缓存将要做什么,并将其用于特殊应用程序。
public static string GetComponent(string hwclass, string syntax)
{
var mos = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM " + hwclass);
foreach (var o in mos.Get())
{
var mj = (ManagementObject)o;
CpuModel = Convert.ToString(mj[syntax]);
}
return CpuModel;
}
private string L2CacheSize = HardwareManagement.GetComponent("Win32_Processor", "L2CacheSize");
private string L3CacheSize = HardwareManagement.GetComponent("Win32_Processor", "L3CacheSize");