色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

CPU Cache偽共享問題

程序喵大人 ? 來源:程序喵大人 ? 作者:程序喵大人 ? 2022-12-12 09:17 ? 次閱讀

先看下這兩段代碼:

代碼段1:

const int row = 10240;
const int col = 10240;
int matrix[row][col];
int TestRow() {
  //按行遍歷
  int sum_row = 0;
  for (int r = 0; r < row; r++) {
    for (int c = 0; c < col; c++) {
      sum_row += matrix[r][c];
    }
  }
  return sum_row;
}

代碼段2:

int TestCol() {
  //按列遍歷
  int sum_col = 0;
  for (int c = 0; c < col; c++) {
    for (int r = 0; r < row; r++) {
      sum_col += matrix[r][c];
    }
  }
  return sum_col;
}

兩段代碼的目的相同,都是為了計算矩陣中所有元素的總和。

但有些區別:一個是按行遍歷元素做計算,一個是按列遍歷元素做計算。

它倆的運行速度有什么區別嗎?

如圖:

圖中可以看到,行遍歷的代碼速度比列遍歷的代碼速度快很多。

為什么按行遍歷的代碼比按列遍歷的代碼速度快?這里就是CPU Cache在起作用。

什么是CPU Cache?

可以先看下這個存儲器相關的金字塔圖:

從下到上,空間雖然越來越小,但是處理速度越來越快,相應的,設備價格也越來越貴。

圖中的寄存器和主存估計大家都知道,那中間的L1 、L2、L3是什么?它們起到了什么作用?

它們就是CPU 的Cache,如下圖:

可以理解為CPU Cache就是CPU與主存之間的橋梁。

當CPU想要訪問主存中的元素時,會先查看Cache中是否存在,如果存在(稱為Cache Hit),直接從Cache中獲取,如果不存在(稱為Cache Miss),才會從主存中獲取。Cache的處理速度比主存快得多。

所以,如果每次訪問數據時,都能直接從Cache中獲取,整個程序的性能肯定會更高。

那,如何提高CPU Cache的命中率?

但CPU Cache這里還有個小問題,看下這兩段代碼:

代碼段1:

struct Point {
  std::atomic x;
  // char a[128];
  std::atomic y;
};
void Test() {
  Point point;
  std::thread t1(
      [](Point *point) {
        for (int i = 0; i < 100000000; ++i) {
          point->x += 1;
        }
      },
      &point);
  std::thread t2(
      [](Point *point) {
        for (int i = 0; i < 100000000; ++i) {
          point->y += 1;
        }
      },
      &point);
  t1.join();
  t2.join();
}

代碼段2:

struct Point {
  std::atomic x;
  char a[128];
  std::atomic y;
};
void Test() {
  Point point;
  std::thread t1(
      [](Point *point) {
        for (int i = 0; i < 100000000; ++i) {
          point->x += 1;
        }
      },
      &point);
  std::thread t2(
      [](Point *point) {
        for (int i = 0; i < 100000000; ++i) {
          point->y += 1;
        }
      },
      &point);
  t1.join();
  t2.join();
}

兩端代碼的核心邏輯都是對Point結構體中的x和y不停+1。只有一點區別就是在中間塞了128字節的數組。

它們的執行速度卻相差很大。

帶128的比不帶128的代碼,執行速度快很多。

為什么?

看過我上面文章的同學應該就知道,每個CPU都有自己的L1和L2 Cache,而Cache line的大小一般是64字節,如果x和y之間沒有128字節的填充,它倆就會在同一個Cache line上。

代碼中開了兩個線程,兩個線程大概率會運行在不同的CPU上,每個CPU有自己的Cache。

當CPU1操作x時,會把y裝載到Cache中,其他CPU對應的的Cache line失效。

然后CPU2加載y,會觸發Cache Miss,它后面又把x裝載到了自己的Cache中,其他CPU對應的Cache line失效。

然后CPU1操作x時,又觸發Cache Miss。

它倆就會是大體這個流程:

頻繁的觸發Cache Miss,導致程序的性能相當差。

而如果x和y中間加了128字節的填充,x和y不在同一個Cache line上,不同CPU之前不會影響,它倆都會頻繁的命中自己的Cache,整個程序性能就會很高,這就是傳說中的False Sharing問題。

所以我們寫代碼時,可以基于此做深一層思考,如果我們寫單線程程序,最好保證訪問的數據能夠相鄰,在一個Cache line上,可以盡可能的命中Cache。

如果寫多線程程序,最好保證訪問的數據有間隔,讓它們不在一個Cache line上,減少False Sharing的頻率。

審核編輯:郭婷

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

    關注

    38

    文章

    7502

    瀏覽量

    163940
  • cpu
    cpu
    +關注

    關注

    68

    文章

    10873

    瀏覽量

    212056

原文標題:CPU Cache偽共享問題

文章出處:【微信號:程序喵大人,微信公眾號:程序喵大人】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    什么是緩存(Cache)及其作用

    緩存(Cache)是一種高速存儲器,用于臨時存儲數據,以便快速訪問。在計算機系統中,緩存的作用是減少處理器訪問主存儲器(如隨機存取存儲器RAM)所需的時間。 緩存(Cache)概述 緩存是一種位于
    的頭像 發表于 12-18 09:28 ?835次閱讀

    請問什么叫差分結構?什么叫真差分信號?

    請問什么叫差分結構?什么叫真差分信號?
    發表于 12-16 07:33

    OPA1642做一個差分和差分輸出轉換的電路,在差分的情況下遇到的問題求解

    我在做一個差分和差分輸出轉換的電路,但是在差分的情況下遇到下面的問題,用理想運放仿真負端就不會出現類似方波的情況,但是用OPA1642就有這個問題,方波的峰峰值大概5V,請幫忙看看是否是前端電阻匹配的不合適,兩個輸入信號是相位相差180度,峰值為5V的正弦波,謝謝
    發表于 11-07 06:07

    Cache和內存有什么區別

    Cache(高速緩存)和內存(Memory,通常指主存儲器或RAM)是計算機存儲系統中兩個重要的組成部分,它們在計算機的性能和數據處理中扮演著不同的角色。以下是對Cache和內存之間區別的詳細解析。
    的頭像 發表于 09-26 15:28 ?1720次閱讀

    做一個差分和差分輸出轉換的電路遇到的疑問求解

    我在做一個差分和差分輸出轉換的電路,但是在差分的情況下遇到下面的問題,用理想運放仿真負端就不會出現類似方波的情況,但是用OPA1642就有這個問題,方波的峰峰值大概5V,請幫忙看看是否是前端電阻匹配的不合適,兩個輸入信號是相位相差180度,峰值為5V的正弦波,謝謝
    發表于 09-20 06:28

    德國進口蔡司工業CT去散射影技術

    CT影始終是制約分析、數據處理、可靠性以及準確度的重大難題。毋庸置疑,影的種類繁多,像是射線硬化、多材料、散射或者環狀等均在其列。今日,要與諸位分享的乃是鋁壓鑄行業里最為常見的散射影。即便是
    的頭像 發表于 09-04 11:20 ?349次閱讀
    德國進口蔡司工業CT去散射<b class='flag-5'>偽</b>影技術

    解析Arm Neoverse N2 PMU事件L2D_CACHE_WR

    有客戶希望我們幫忙分析 Eigen gemm 基準測試的一些執行情況。具體來說是為什么 L1D_CACHE_WR 的值會低于 L2D_CACHE_WR,這種情況令人費解。
    的頭像 發表于 09-03 11:42 ?1314次閱讀
    解析Arm Neoverse N2 PMU事件L2D_<b class='flag-5'>CACHE</b>_WR

    什么是CPU緩存?它有哪些作用?

    CPU緩存(Cache Memory)是計算機系統中一個至關重要的組成部分,它位于CPU與內存之間,作為兩者之間的臨時存儲器。CPU緩存的主要作用是減少
    的頭像 發表于 08-22 14:54 ?3272次閱讀

    Cortex R52內核Cache的具體操作(2)

    本節內容主要講述CortexR52內核Cache的具體操作包括使緩存無效(invalidate)操作,清除(clean)緩存。有的時候客戶可能需要對cache做一些清理,比如invalidate
    的頭像 發表于 07-15 15:44 ?1450次閱讀
    Cortex R52內核<b class='flag-5'>Cache</b>的具體操作(2)

    Cortex R52內核Cache的相關概念(1)

    在開始閱讀本系列文章之前,請先參閱《有關CR52 MPU配置說明》。因為這篇文章講述了,cache配置所涉及到的寄存器的設置和MPU的一些基本概念。如果讀者都已經理解了上述內容,可以跳過。本章內容主要講述cache屬性的具體含意、注意事項、以及在RZ/T2M的性能測試。
    的頭像 發表于 07-15 10:37 ?1636次閱讀
    Cortex R52內核<b class='flag-5'>Cache</b>的相關概念(1)

    CortexR52內核Cache的具體操作

    本節內容主要講述CortexR52內核Cache的具體操作包括使緩存無效(invalidate)操作,清除(clean)緩存。有的時候客戶可能需要對cache做一些清理,比如invalidate
    的頭像 發表于 07-15 10:32 ?1322次閱讀
    CortexR52內核<b class='flag-5'>Cache</b>的具體操作

    為什么HAL庫在操作Flash erase的時候,需要把I-Cache和D-Cache關閉呢?

    請問為什么HAL庫在操作Flash erase的時候,需要把I-Cache和D-Cache關閉呢? 這有什么原因呢? 有人可以解答嗎?
    發表于 04-07 09:08

    請問STM32MP13X的MMU和Cache如何使能?

    STM32MP13X的MMU和Cache如何使能?修改了hal_conf里的DATA_CACHE_ENABLE的宏console里還是顯示沒開,在設置里的Define symbols把NO_CACHE_USE刪了好像還是不行。。
    發表于 03-12 06:46

    先楫 HPM片上 Cache使用指南

    賈工先楫資深FAE工程師12年產品研發經驗,具有變頻器、伺服等工業產品開發經驗,也負責過激光投影顯示系統開發、AI應用開發、PYQT、Linux驅動開發等工作。概述高速緩存(Cache)主要
    的頭像 發表于 01-26 10:00 ?885次閱讀
    先楫 HPM片上 <b class='flag-5'>Cache</b>使用指南

    先楫HPM片上Cache使用指南經驗分享

    高速緩存(Cache)主要是為了解決CPU運算速度與內存(Memory)讀寫速度不匹配的矛盾而存在, 是CPU與存儲設備之間的臨時存貯器,容量小,但是交換速度比內存快。內置高速緩存通常對CPU
    的頭像 發表于 01-22 16:07 ?1334次閱讀
    先楫HPM片上<b class='flag-5'>Cache</b>使用指南經驗分享
    主站蜘蛛池模板: 好湿好滑好硬好爽好深视频| 欧美整片华人play| 久九九精品免费视频| 免费伦理片网站| 少妇两个奶头喷出奶水了怎么办| 亚洲国产综合另类视频| 69日本人xxxx16—18| 国产69精品麻豆久久久久| 灰原哀被啪漫画禁漫| 欧美精品九九99久久在观看| 午夜片神马影院福利| 87影院午夜福利| 国产交换丝雨巅峰| 刘梓晨啪啪啪| 午夜伦伦电影理论片费看| 3a丝袜论坛| 国产人妻777人伦精品HD| 美女逼逼毛茸茸| 我就去色色| 国产人妻人伦精品1国产| 好大太快了快插穿子宫了| 免费人成网站永久| 午夜免费无码福利视频麻豆| 91精品国产免费入口| 国产成人久久AV免费看澳门| 久久久久久免费高清电影| 少女free大陆| 2020国产成人精品免费视频| 国产极品美女视频福利| 蜜柚在线观看免费高清官网视频 | 欧美最猛性xxxxx亚洲精品| 亚洲精品国产A久久久久久| japanese幼儿videos| 精品水蜜桃久久久久久久| 色欲AV久久综合人妻蜜桃| 87.6在线收听| 久九九精品免费视频| 小草高清视频免费直播| 办公室的秘密2中文字幕| 久久视频这里只精品99热在线 | 日韩视频在线观看|