LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

C#代碼如何影響CPU緩存速度?

freeflydom
2025年6月11日 9:7 本文熱度 248

CPU與RAM的隔閡

CPU與RAM是兩個獨立的硬件,并非集成在一起。所以他們兩個之間一定會存在一個連接的橋梁,這個橋梁的名字叫做內存總線。

內存總線由三部分組成:

  1. 地址總線(Address Bus)
    用于傳輸內存地址,也就是我們經常看到的0X77F84FAB這種類似的內存地址,一根總線代表一個電信號,一個電信號能傳遞高電平/低電平兩種信息,用二進制表示就是1/0。因此總線數量的多少決定了可以傳遞內存地址的大小,比如你有32根總線,就代表你總線寬度32。2^32=4294967296,等于4GB內存,這就是32位操作系統只支持4G內存的由來。

  2. 數據總線(Data Bus)
    用于傳輸數據,原理同上,一根總線代表1bit傳輸段位,64根總線就是 64bit=8byte。一次性可以傳輸8byte單位的數據。

  3. 控制總線(Control Bus)
    用戶傳輸控制信號,比如一根用來"讀信號輸出"的開關,一根"寫信號輸出"的開關。一根"時鐘信號"的開關

更詳細可以參考此文:https://www.cnblogs.com/lmy5215006/p/18469027

CPU Cache

可以看到,假設CPU要讀取1kb的數據,你的數據總線總線只有64根,1024/8=128,你需要來回倒騰128次,才能讀取完畢,這一來二去就加大了內存之間的延遲,為了優化此性能瓶頸,
CPU除了寄存器外臨時存儲數據,還內置了Cache來臨時存儲數據與指令。

游戲神U 9800x3d就是依靠96MB的"巨大L3緩存",來降低了內存延遲,從而在游戲場景默秒全Intel

特性L1緩存L2緩存L3緩存
速度1-2納秒約10納秒約30納秒
容量幾十KB到幾百KB幾百KB到幾MB幾MB到幾十MB
位置集成在 CPU 核心內部每個核心獨立擁有(位于核心附近)多核共享(位于 CPU 芯片內)
緩存一致性每個核心獨立,與L3主從同步每個核心獨立,與L1/L3主從同步多核共享
場景需要立即執行的指令與高頻訪問的數據稍低頻但重復訪問的數據跨核心共享數據、大吞吐量計算

what is CacheLine?
CacheLine是CPU緩存中最小數據單元,當CPU從內存中讀取數據時,會一次性加載64byte的數據,而不是只加載特定數據,即使只想讀取1bit數據,也會加載64byte數據。這么做是因為,大多數情況下,數據都是順序讀取的,因此提前加載數據有利于減少延遲。

眼見為實

使用Coreinfo 來觀察CPU

C#代碼如何影響CPU緩存速度?

internal class Program
{
    static void Main(string[] args)
    {
        Stopwatch sw = new Stopwatch();
        sw.Start();
        Rows();
        sw.Stop();
        Console.WriteLine($"逐行賦值執行時間:{sw.ElapsedMilliseconds}");
        sw.Restart();
        Columns();
        sw.Stop();
        Console.WriteLine($"逐列賦值執行時間:{sw.ElapsedMilliseconds}");
    }
    static void Rows()
    {
        int[,] tab = new int[5000, 5000];
        for (int i = 0; i < 5000; i++)
        {
            for (int j = 0; j < 5000; j++)
            {
                tab[i, j] = 1;//逐行賦值,能成功利用到Cacheline提前加載的數據
            }
        }
    }
    static void Columns()
    {
        {
            int[,] tab = new int[5000, 5000];
            for (int i = 0; i < 5000; i++)
            {
                for (int j = 0; j < 5000; j++)
                {
                    tab[j, i] = 1;//逐列賦值,無法利用Cacheline提前加載的數據,只能丟棄重新讀取。
                }
            }
        }
    }
}

可以看到,非線性的數據檢索帶來了嚴重的性能問題,應當盡量避免對內存的非順序訪問。

?轉自https://www.cnblogs.com/lmy5215006/p/18916344


該文章在 2025/6/11 9:07:47 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved

黄频国产免费高清视频,久久不卡精品中文字幕一区,激情五月天AV电影在线观看,欧美国产韩国日本一区二区
在线观看免费午夜A级毛∧ 日韩欧美亚洲国产精品影视在线 | 亚洲午夜久久久久中文字幕久 | 精品久久久久久久久国产字幕 | 亚洲国语中文字幕理论片 | 伊伊综合网在线视频免费 | 婷婷综合缴情亚洲另类在线 |