亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

蟲(chóng)蟲(chóng)首頁(yè)| 資源下載| 資源專輯| 精品軟件
登錄| 注冊(cè)

您現(xiàn)在的位置是:首頁(yè) > 技術(shù)閱讀 >  CPU Cache偽共享問(wèn)題

CPU Cache偽共享問(wèn)題

時(shí)間:2024-02-15

先看下這兩段代碼:

代碼段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;}

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

但有些區(qū)別:一個(gè)是按行遍歷元素做計(jì)算,一個(gè)是按列遍歷元素做計(jì)算。

它倆的運(yùn)行速度有什么區(qū)別嗎?

如圖:

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

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

什么是CPU Cache?

可以先看下這個(gè)存儲(chǔ)器相關(guān)的金字塔圖:

從下到上,空間雖然越來(lái)越小,但是處理速度越來(lái)越快,相應(yīng)的,設(shè)備價(jià)格也越來(lái)越貴。

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

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

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

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

所以,如果每次訪問(wèn)數(shù)據(jù)時(shí),都能直接從Cache中獲取,整個(gè)程序的性能肯定會(huì)更高。

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

這里我不多介紹,感興趣的直接移步到我這篇文章:https://mp.weixin.qq.com/s/iKWQZxn6XYKU9KnlBRynfg

但CPU Cache這里還有個(gè)小問(wèn)題,看下這兩段代碼:

代碼段1:

struct Point {  std::atomic<int> x;  // char a[128];  std::atomic<int> 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<int> x;  char a[128];  std::atomic<int> 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();}

兩端代碼的核心邏輯都是對(duì)Point結(jié)構(gòu)體中的x和y不停+1。只有一點(diǎn)區(qū)別就是在中間塞了128字節(jié)的數(shù)組。

它們的執(zhí)行速度卻相差很大。

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

為什么?

看過(guò)我上面文章的同學(xué)應(yīng)該就知道,每個(gè)CPU都有自己的L1和L2 Cache,而Cache line的大小一般是64字節(jié),如果x和y之間沒(méi)有128字節(jié)的填充,它倆就會(huì)在同一個(gè)Cache line上。

代碼中開(kāi)了兩個(gè)線程,兩個(gè)線程大概率會(huì)運(yùn)行在不同的CPU上,每個(gè)CPU有自己的Cache。

當(dāng)CPU1操作x時(shí),會(huì)把y裝載到Cache中,其他CPU對(duì)應(yīng)的的Cache line失效。

然后CPU2加載y,會(huì)觸發(fā)Cache Miss,它后面又把x裝載到了自己的Cache中,其他CPU對(duì)應(yīng)的Cache line失效。

然后CPU1操作x時(shí),又觸發(fā)Cache Miss。

它倆就會(huì)是大體這個(gè)流程:

繁的觸發(fā)Cache Miss,導(dǎo)致程序的性能相當(dāng)差。

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

所以我們寫(xiě)代碼時(shí),可以基于此做深一層思考,如果我們寫(xiě)單線程程序,最好保證訪問(wèn)的數(shù)據(jù)能夠相鄰,在一個(gè)Cache line上,可以盡可能的命中Cache。

如果寫(xiě)多線程程序,最好保證訪問(wèn)的數(shù)據(jù)有間隔,讓它們不在一個(gè)Cache line上,減少False Sharing的頻率。

上述內(nèi)容源于前一段的技術(shù)分享,完整PPT在 一個(gè)優(yōu)質(zhì)的C++學(xué)習(xí)圈 里,來(lái)一起鉆研C++吧。

亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美国产在线电影| 国产综合欧美在线看| 99视频一区二区| 一本色道久久精品| 一本久久综合亚洲鲁鲁五月天| 亚洲国产精品va在线看黑人动漫| 国产精品v日韩精品v欧美精品网站| 欧美福利在线| 国产精品v日韩精品| 国产亚洲欧美aaaa| 亚洲精品日韩久久| 亚洲欧美精品一区| 久久综合伊人| 国产精品免费电影| 亚洲精品久久久久久久久久久久久 | 亚洲精品日韩一| 亚洲人成网站精品片在线观看| 亚洲一区二区三区四区五区午夜| 日韩亚洲综合在线| 蜜臀av性久久久久蜜臀aⅴ| 国产精品久久久久影院色老大| 91久久精品国产91久久| 欧美在线亚洲一区| 欧美成在线视频| 在线观看亚洲a| 欧美bbbxxxxx| 亚洲欧洲一区二区三区久久| 久久成人人人人精品欧| 国产欧美精品久久| 亚洲日本无吗高清不卡| 久久久青草青青国产亚洲免观| 国产精品无人区| 久久精品99无色码中文字幕| 国产欧美激情| 久久久精品性| 亚洲欧洲视频在线| 欧美巨乳在线观看| 亚洲视频观看| 国产精品毛片一区二区三区| 亚洲一区二区三区777| 国产精品劲爆视频| 亚洲自拍偷拍视频| 国模精品娜娜一二三区| 亚洲精品国精品久久99热一| 欧美韩日一区二区三区| 亚洲一区二区三区在线看| 国产一级揄自揄精品视频| 久久久久久久一区二区| 亚洲欧洲精品一区二区三区波多野1战4| 欧美国产日韩一区二区| 宅男精品视频| 亚洲第一精品夜夜躁人人爽| 欧美日韩午夜| 久久美女性网| 一区二区三区欧美| 亚洲国产成人在线| 欧美亚男人的天堂| 午夜精品www| 亚洲国产日韩欧美在线99| 国产精品video| 免费短视频成人日韩| 性高湖久久久久久久久| 欧美久久久久久久久| 亚洲精品网站在线播放gif| 国产精品亚洲综合天堂夜夜| 欧美精品激情| 欧美在线免费观看| 国产综合欧美在线看| 欧美寡妇偷汉性猛交| 久久精品视频一| 欧美一区激情| 99视频精品| 国产欧美日韩91| 国产精品久久久久久久久久妞妞| 夜夜狂射影院欧美极品| 在线观看日韩| 韩国av一区二区三区四区| 欧美三级视频| 欧美日韩无遮挡| 久久久精品国产99久久精品芒果| 在线观看欧美黄色| 国产片一区二区| 欧美手机在线| 欧美日韩国产综合一区二区| 久久久999成人| 日韩午夜一区| 最新亚洲一区| 亚洲激情午夜| 国产精品国产三级国产a| 欧美午夜免费电影| 好吊色欧美一区二区三区四区| 国产精品xvideos88| 免费人成网站在线观看欧美高清| 久久久噜噜噜久久中文字幕色伊伊| 亚洲午夜精品一区二区| 亚洲欧美中文另类| 久久不见久久见免费视频1| 欧美一区1区三区3区公司| 久久国产一二区| 欧美福利视频| 国产精品一区免费观看| 国产精品美女视频网站| 美女图片一区二区| 欧美午夜精品理论片a级按摩| 国产精品久久久久9999高清| 久久人人爽国产| 国产精品xxxxx| 国产日韩精品在线观看| 亚洲日本中文| 久久免费的精品国产v∧| 国产欧美一区二区在线观看| 国产日韩在线播放| 亚洲精品小视频在线观看| 亚洲校园激情| 欧美精品二区三区四区免费看视频| 国产欧美精品va在线观看| 欲色影视综合吧| 欧美一区二区三区精品| 国产日韩一区在线| 国产亚洲欧美一区二区| 亚洲视频大全| 欧美午夜欧美| 一本色道久久综合精品竹菊| 久久视频这里只有精品| 欧美精品一区在线| 亚洲乱码国产乱码精品精天堂| 亚洲综合国产| 欧美视频一区二| 亚洲人成网站999久久久综合| 亚洲欧美成人一区二区在线电影 | 亚洲大片在线| 99天天综合性| 欧美日本免费| 日韩香蕉视频| 国产伦精品一区二区三区在线观看| 精品电影一区| 欧美成人69| 一区二区三区免费看| 国产精品欧美久久久久无广告| 中文一区二区| 国产区二精品视| 久久婷婷麻豆| 日韩亚洲欧美高清| 国产精品美女久久久久久免费| 一区二区三区精品久久久| 国产精品一区二区男女羞羞无遮挡| 午夜天堂精品久久久久 | 欧美先锋影音| 麻豆freexxxx性91精品| 亚洲一区二区视频在线| 亚洲免费激情| 亚洲国产精品久久久| 欧美黄色aaaa| 久久婷婷丁香| 欧美一区日本一区韩国一区| 日韩午夜剧场| 亚洲综合另类| 一本色道久久综合亚洲精品小说| 国产亚洲综合在线| 亚洲国产精彩中文乱码av在线播放| 蜜桃久久精品乱码一区二区| 日韩视频永久免费| 一区二区三区不卡视频在线观看 | 免费日韩av片| 亚洲精品在线免费| 一本色道久久88综合日韩精品| 怡红院精品视频| 国模套图日韩精品一区二区| 一本色道久久88精品综合| 亚洲人成人一区二区在线观看| 国产一区二区黄色| 在线免费高清一区二区三区| 国产亚洲欧美一级| 亚洲国产另类久久久精品极度| 欧美性大战久久久久久久蜜臀| 欧美一区二区高清在线观看| 久久精品九九| 欧美精品一二三| 国产日韩亚洲欧美综合| 国产精品成人免费视频| 黑人一区二区| 亚洲欧美日韩在线观看a三区| 久久久国产精彩视频美女艺术照福利 | 欧美日韩国产电影| 欧美日韩精品一区二区在线播放 | 国产麻豆午夜三级精品| 极品日韩久久| 黄色av日韩| 亚洲国产精品毛片| 久久精品一级爱片| 欧美激情亚洲一区| 亚洲高清在线视频| 午夜国产欧美理论在线播放| 久久精品国产亚洲5555| 国产精品入口福利| 亚洲大片精品永久免费| 久久亚洲精品一区| 国产精品美女久久福利网站| 国产精品扒开腿做爽爽爽软件| av成人福利|