是否可以通过C#访问CPU缓存(读写)?

时间:2011-05-27 12:10:02

标签: c# cpu second-level-cache

我想知道C#中是否存在允许访问CPU缓存的内容。这对我来说很有趣,但我目前没有与cpu缓存有关。所以我想知道它是否是一个系统受限访问,或者它也是用户可用的。我在谈论L1 / L2或其他任何东西!

很高兴听到您的评论,外部链接以及一些代码片段!感谢。

3 个答案:

答案 0 :(得分:10)

没有编程语言可以直接访问CPU缓存。读取和写入缓存是由硬件自动完成的;没有办法编写将缓存视为任何类型的独立实体的指令。对缓存的读取和写入对所有触摸存储器的指令都是副作用。

答案 1 :(得分:4)

对于这种类型的活动,C#有点过高。除非你调用一些用C / ASM编写的其他库=)当然,使用缓存通常是一个相当模糊的主题,并且在很大程度上它完全由硬件控制。另一方面,你可能已经遇到过一些非常有趣的问题/讨论。

C++ cache aware programming
How can I do a CPU cache flush in x86 Windows?

无论如何,尽管存在这些限制,您仍然可以(稍微)预测缓存将要执行的操作,并将其用于特殊应用程序。

答案 2 :(得分:0)

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");