狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

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

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

CPU與RAM的隔閡

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

內(nèi)存總線由三部分組成:

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

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

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

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

CPU Cache

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

游戲神U 9800x3d就是依靠96MB的"巨大L3緩存",來降低了內(nèi)存延遲,從而在游戲場景默秒全I(xiàn)ntel

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

what is CacheLine?
CacheLine是CPU緩存中最小數(shù)據(jù)單元,當(dāng)CPU從內(nèi)存中讀取數(shù)據(jù)時,會一次性加載64byte的數(shù)據(jù),而不是只加載特定數(shù)據(jù),即使只想讀取1bit數(shù)據(jù),也會加載64byte數(shù)據(jù)。這么做是因?yàn)椋蠖鄶?shù)情況下,數(shù)據(jù)都是順序讀取的,因此提前加載數(shù)據(jù)有利于減少延遲。

眼見為實(shí)

使用Coreinfo 來觀察CPU

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

internal class Program
{
    static void Main(string[] args)
    {
        Stopwatch sw = new Stopwatch();
        sw.Start();
        Rows();
        sw.Stop();
        Console.WriteLine($"逐行賦值執(zhí)行時間:{sw.ElapsedMilliseconds}");
        sw.Restart();
        Columns();
        sw.Stop();
        Console.WriteLine($"逐列賦值執(zhí)行時間:{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提前加載的數(shù)據(jù)
            }
        }
    }
    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提前加載的數(shù)據(jù),只能丟棄重新讀取。
                }
            }
        }
    }
}

可以看到,非線性的數(shù)據(jù)檢索帶來了嚴(yán)重的性能問題,應(yīng)當(dāng)盡量避免對內(nèi)存的非順序訪問。

?轉(zhuǎn)自https://www.cnblogs.com/lmy5215006/p/18916344


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