精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Linux性能優化:Cache對性能的影響

麥辣雞腿堡 ? 來源:嵌入式Linux充電站 ? 作者: Vincent ? 2023-10-04 15:31 ? 次閱讀

Cache對性能的影響首先我們要知道,CPU訪問內存時,不是直接去訪問內存的,而是先訪問緩存(cache)。

當緩存中已經有了我們要的數據時,CPU就會直接從緩存中讀數據,而不是從內存中讀。

CPU和緩存的關系如下:

圖片

緩存分為一級、二級、三級,最靠近CPU的是一級緩存,最遠的是內存,離CPU越近速度越快。

訪問速度上,L1》L2》L3》內存,緩存比內存速度要快得非常多。

如果CPU操作的數據在緩存中,則直接從緩存中讀取,這個過程就叫緩存命中。

因此提升性能的關鍵,就是要提高緩存命中率。下面來看如何提高緩存命中率。

提高數據緩存命中率來看一個實例,有一個N*N的二維數組,例如:

int array[N][N];

現在用兩個for循環遍歷這個數組,訪問每個元素的內容:

for(i = 0; i 《 N; i+=1) { for(j = 0; j 《 N; j+=1) { array[i][j] = 0;//速度快
//array[j][i] = 0;//速度慢 } }

有兩種訪問方式:array[i][j]和array[j][i]。

在性能上,array[i][j]會比array[j][i]執行地更快,并且速度相差8倍。

1、速度更快的原因

首先數組在內存上是連續的,假設N等于2,則array[2][2]在內存中的排布是:

array[0][0]、array[0][1]、array[1][0]、array[1][1]、

以array[i][j]方式訪問,即按內存中的順序訪問,當訪問array[0][0]時,CPU就已經把數組的剩余三個數據(array[0][1]、array[1][0]、array[1][1])加載到了緩存當中。

當繼續訪問后三個元素時,CPU會直接從緩存中讀取數據,而不需要從內存中讀取(cache命中)。因此速度會很快。

如果以array[j][i]方式訪問數組,則訪問順序為:

array[0][0]、array[1][0]、array[0][1]、array[1][1]

此時訪問順序是跳躍的,并不是按數組在內存中的的排布順序來訪問。如果N很大的話,那么執行array[j][i]時,array[j+1][i]的內容是沒法讀進緩存里的,等到要訪問array[j+1][i]時就只能從內存中讀取。

所以array[j][i]的速度會慢于array[i][j]。

2、速度相差8倍的原因

剛剛提到,如果這個二維數組的N很大,array[j+1][i]的內容是沒法讀到緩存里的,那CPU一次能夠將多少數據加載進緩存里呢?

這個其實跟cache line有關,cache line代表緩存一次載入數據的大小。可以通過以下命令查看cache line為多大:

cat /sys/devices/system/cpu/cpu0/cache/index0/coherency_line_size

圖片

cache line為64,代表CPU緩存一次數據的大小為64字節。

當訪問array[0][0]時,該元素所占用的字節數不到64字節,CPU就會按順序補足后續元素,就會把后面的array[0][1]、array[1][0]等內容一起讀到緩存里,直到湊夠64字節。

正因如此,按順序訪問的array[i][j]才會比不按順序訪問的array[j][i]速度快。

再看看為什么速度相差8倍。我們知道,二維數組中,第一維元素放的是地址,第二維元素才是數據。64位系統中,地址占用8個字節,cache
line為64的話,地址已經占用了8字節,那每個cache line最多能載入不到8個二維數組元素,N很大的情況下,他們的性能平均下來就會相差將近8倍。

結論:按內存布局順序訪問,可以提高數據緩存命中率。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • cpu
    cpu
    +關注

    關注

    68

    文章

    10826

    瀏覽量

    211160
  • Linux
    +關注

    關注

    87

    文章

    11230

    瀏覽量

    208932
  • Cache
    +關注

    關注

    0

    文章

    129

    瀏覽量

    28300
收藏 人收藏

    評論

    相關推薦

    Linux性能優化大全!

    高并發和響應快對應著性能優化的兩個核心指標:吞吐和延時
    發表于 11-21 11:23 ?665次閱讀

    NAS存儲系統性能優化攻略

    無論是程序員,DBA還是網管,似乎所有的ITer都會遭遇同一問題:性能優化。NAS從業者也不例外,而且NAS的問題更加棘手,因為它所涉及的協議和設備很多。本系列博文將從共享協議入手,再到網絡,最后
    發表于 12-29 13:52

    HBase性能優化方法總結

    HBase是Hadoop生態系統中的一個組件,是一個分布式、面向列的開源數據庫,可以支持數百萬列、超過10億行的數據存儲,因此,對HBase性能提出了一定的要求,那么如何進行HBase性能優化
    發表于 04-20 17:16

    Linux系統的性能優化策略

    近年來,世界上許多大軟件公司紛紛推出各種Linux服務器系統及Linux下的應用軟件。目前,Linux 已可以與各種傳統的商業操作系統分庭抗禮,在服務器市場,占據了相當大的份額。本文分別從磁盤調優,文件系統,內存管理以及編譯
    發表于 07-16 06:23

    Linux和Android系統故障和優化性能的方法和流程探討

    作為一名Linux 或 Android 平臺的系統工程師,在開發系統新功能外,主要工作就是優化系統性能,使系統上以最優的狀態運行,但是由于硬件問題、軟件問題、網絡環境等的復雜性和多變性,導致對系統
    發表于 07-22 06:48

    linux性能問題

    最主要的工作是優化系統配置,使應用在系統上以最優的狀態運行,但是由于硬件問題、軟件問題、網絡環境等的復雜性 和多變性,導致對系統的優化變得異常復雜,如何定位性能問題出在哪個方面,是性能
    發表于 07-22 06:50

    基于Linux的Socket網絡編程的性能優化

    基于Linux的Socket網絡編程的性能優化 隨著Intenet的日益發展和普及,網絡在嵌入式系統中應用非常廣泛,越來越多的嵌入式設備采用Linux操作系統。
    發表于 10-22 20:48 ?1075次閱讀
    基于<b class='flag-5'>Linux</b>的Socket網絡編程的<b class='flag-5'>性能</b><b class='flag-5'>優化</b>

    你知道linuxcache memory?

    當你讀寫文件的時候,Linux內核為了提高讀寫性能與速度,會將文件在內存中進行緩存,這部分內存就是Cache Memory(緩存內存)。即使你的程序運行結束后,Cache Memory
    發表于 04-26 15:49 ?1233次閱讀

    Linux CPU的性能應該如何優化

    Linux系統中,由于成本的限制,往往會存在資源上的不足,例如 CPU、內存、網絡、IO 性能。本文,就對 Linux 進程和 CPU 的原理進行分析,總結出 CPU 性能
    的頭像 發表于 01-18 08:52 ?3335次閱讀

    Linux內核文件Cache機制

    Linux內核文件Cache機制(開關電源技術與設計 第二版)-Linux內核文件Cache機制? ? ? ? ? ? ? ??
    發表于 08-31 16:34 ?4次下載
    <b class='flag-5'>Linux</b>內核文件<b class='flag-5'>Cache</b>機制

    cache的排布與CPU的典型分布

    cache的掌握,對于Linux工程師(其他的非Linux工程師也一樣)寫出高效能代碼,以及優化Linux系統的
    的頭像 發表于 10-18 09:01 ?1871次閱讀

    Cache性能優化精彩問答38條

    占用非常大的面積,大概在一半以上,而且一個好的 Cache 的設計復雜度非常高,可能比較 CPU 的 Pipeline 還要復雜。這里要考慮成本,設計復雜度,或者其他方面的考慮。你知道 L1
    的頭像 發表于 01-11 09:34 ?1279次閱讀

    影響Linux性能的因素與優化方法

    ,那么linux作為一個開源平臺,最終要實現的是通過這些開源軟件的支持,以最低廉的成本,達到應用最優的性能。因此,談到性能問題,主要實現的是linux操作系統和應用程序的最佳結合。
    的頭像 發表于 04-12 09:18 ?802次閱讀

    Linux內核slab性能優化的核心思想

    今天分享一篇內存性能優化的文章,文章用了大量精美的圖深入淺出地分析了Linux內核slab性能優化的核心思想,slab是
    的頭像 發表于 11-13 11:45 ?594次閱讀
    <b class='flag-5'>Linux</b>內核slab<b class='flag-5'>性能</b><b class='flag-5'>優化</b>的核心思想

    如何優化Linux服務器的性能

    優化Linux服務器的性能是一個綜合性的任務,涉及硬件、軟件、配置、監控等多個方面。以下是一個詳細的指南,旨在幫助系統管理員和運維人員提升Linux服務器的
    的頭像 發表于 09-29 16:50 ?246次閱讀