我想知道是否在C#中實現了可以訪問CPU緩存的東西。這對我來說很有意思,但我暫時沒有和CPU緩存有關。所以我想知道,如果這是一個系統有限的訪問權限,或者它也是用戶可用的。我正在談論L1/L2或任何他們被稱爲!正在通過C#訪問CPU緩存(讀寫)嗎?
很高興聽到您的意見,外部鏈接和一些代碼片段!謝謝。
我想知道是否在C#中實現了可以訪問CPU緩存的東西。這對我來說很有意思,但我暫時沒有和CPU緩存有關。所以我想知道,如果這是一個系統有限的訪問權限,或者它也是用戶可用的。我正在談論L1/L2或任何他們被稱爲!正在通過C#訪問CPU緩存(讀寫)嗎?
很高興聽到您的意見,外部鏈接和一些代碼片段!謝謝。
沒有編程語言可以直接訪問CPU高速緩存。讀取和寫入緩存是由硬件自動完成的;沒有辦法編寫將緩存視爲任何類型的獨立實體的指令。讀取和寫入緩存對於所有觸摸內存的指令都會產生副作用。
也許是一個很好的通用答案,但[ARM9實際上可以在軟件中轉儲緩存以供審閱](http://stackoverflow.com/questions/1006981/read-cpu-cache-contents?rq=1)。我假設它維護高速緩存的副本,以便某些代理寄存器可以被軟件讀取,而不受影響_actual_高速緩存的相同操作的影響。 – 2013-11-27 20:29:49
這似乎不是真的。我已經看到了操作系統的發展情況,其中明確使用了L2的共享文件。因此操作系統必須具有一定的控制能力,操作系統採用編程語言進行編程。 – Offler 2014-03-14 06:51:37
對於這種類型的活動,C#有點太高。除非你正在調用C/ASM編寫的其他庫=)當然,一般來說,使用緩存是一個相當晦澀的話題,並且大部分它完全由硬件控制。另一方面,你可能已經遇到了一些關於SO的非常有趣的問題/討論。
C++ cache aware programming
How can I do a CPU cache flush in x86 Windows?
無論如何,儘管限制,仍可以預測(有點)什麼緩存會做和利用,對於特殊的應用。
好點的AR,但是當你有多個核心和共享L2高速緩存等時,這樣做會變得更加困難。 – Robinson 2011-05-27 12:23:24
不要誤解我的意思,這不是我想用十英尺的杆子試試。我可以想到更令人興奮的方式來頭痛= D – 2011-05-27 12:33:40
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");
雖然這可能回答這個問題,但最好解釋答案的基本部分。 – pirho 2017-12-04 18:15:55
不可能編寫真正的C#代碼,而不*訪問cpu緩存。所有內存讀取和寫入都通過緩存。這個問題沒有道理。 – 2011-05-27 13:15:13
@Hans嗯,我知道是否需要緩存將被填滿0和1,但問題是如果我們可以對緩存中的內容進行任何控制。 – 2011-05-27 13:24:21
通過解釋您認爲需要控制緩存的原因,使其成爲可回答的問題。 – 2011-05-27 14:54:08