女人荫蒂被添全过程13种图片,亚洲+欧美+在线,欧洲精品无码一区二区三区 ,在厨房拨开内裤进入毛片

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀(guān)看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

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

程序喵大人 ? 來(lái)源:程序喵大人 ? 作者:程序喵大人 ? 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;
}

兩段代碼的目的相同,都是為了計(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想要訪(fǎng)問(wèn)主存中的元素時(shí),會(huì)先查看Cache中是否存在,如果存在(稱(chēng)為Cache Hit),直接從Cache中獲取,如果不存在(稱(chēng)為Cache Miss),才會(huì)從主存中獲取。Cache的處理速度比主存快得多。

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

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

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

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

兩端代碼的核心邏輯都是對(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è)線(xiàn)程,兩個(gè)線(xiàn)程大概率會(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ě)單線(xiàn)程程序,最好保證訪(fǎng)問(wèn)的數(shù)據(jù)能夠相鄰,在一個(gè)Cache line上,可以盡可能的命中Cache。

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

審核編輯:郭婷

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀(guān)點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 存儲(chǔ)器
    +關(guān)注

    關(guān)注

    38

    文章

    7643

    瀏覽量

    166904
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    11064

    瀏覽量

    216554

原文標(biāo)題:CPU Cache偽共享問(wèn)題

文章出處:【微信號(hào):程序喵大人,微信公眾號(hào):程序喵大人】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    如何在NXP MCU上啟用D-Cache

    Data Cache,我已經(jīng)能夠減少其他 MCU 的推理時(shí)間。我想知道如何在 NXP MCU 上啟用 D-Cache。任何其他性能提升策略也受到歡迎。
    發(fā)表于 03-27 07:48

    腦電跡系列之腦電跡處理與技術(shù)剖析

    在上一篇系列文章中了解到,腦電信號(hào)反映大腦神經(jīng)元活動(dòng),在神經(jīng)科學(xué)研究、臨床診斷、腦機(jī)接口等領(lǐng)域應(yīng)用廣泛。但腦電信號(hào)幅值微弱極易受跡干擾。這些跡降低信號(hào)信噪比,增加數(shù)據(jù)變異性,導(dǎo)致實(shí)驗(yàn)結(jié)果偏差
    的頭像 發(fā)表于 03-04 20:24 ?857次閱讀
    腦電<b class='flag-5'>偽</b>跡系列之腦電<b class='flag-5'>偽</b>跡處理與技術(shù)剖析

    腦電跡全解析:類(lèi)型、成因與影響

    在腦電信號(hào)研究領(lǐng)域,腦電跡是影響數(shù)據(jù)準(zhǔn)確性的關(guān)鍵因素。深入了解腦電跡,對(duì)獲取可靠腦電數(shù)據(jù)、推動(dòng)腦科學(xué)研究意義重大。腦電跡的產(chǎn)生根源腦電信號(hào)由大腦神經(jīng)元電活動(dòng)產(chǎn)生,極其微弱,通常處于幾十微伏的低
    的頭像 發(fā)表于 02-25 22:26 ?1791次閱讀
    腦電<b class='flag-5'>偽</b>跡全解析:類(lèi)型、成因與影響

    真雙極和準(zhǔn)雙極,差動(dòng)跟差動(dòng)使用的性能有差別嗎?

    最近需要用到差動(dòng)輸入的adc,找了很多型號(hào),發(fā)現(xiàn)有真雙極和準(zhǔn)雙極,差動(dòng)輸入方式的還分差動(dòng)跟差動(dòng)。網(wǎng)上找不到相關(guān)介紹,一般我們用單極adc要測(cè)量雙極信號(hào)需要將信號(hào)抬高1/2vcc,我的理解是準(zhǔn)雙極的原理和抬高輸入信號(hào)的原理一樣。不知道真雙極和準(zhǔn)雙極,差動(dòng)跟差動(dòng)使用的性
    發(fā)表于 02-08 07:52

    hyper-v共享,Hyper-V 共享:Hyper-V的資源共享設(shè)置

    的解決方案。今天就為大家介紹Hyper-V共享:Hyper-V的資源共享設(shè)置。 ? ?在Hyper-V虛擬化環(huán)境中,資源共享是實(shí)現(xiàn)高效管理和靈活部署的關(guān)鍵功能之一。Hyper-V提供了多種資源
    的頭像 發(fā)表于 02-07 10:26 ?948次閱讀
    hyper-v<b class='flag-5'>共享</b>,Hyper-V <b class='flag-5'>共享</b>:Hyper-V的資源<b class='flag-5'>共享</b>設(shè)置

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

    緩存(Cache)是一種高速存儲(chǔ)器,用于臨時(shí)存儲(chǔ)數(shù)據(jù),以便快速訪(fǎng)問(wèn)。在計(jì)算機(jī)系統(tǒng)中,緩存的作用是減少處理器訪(fǎng)問(wèn)主存儲(chǔ)器(如隨機(jī)存取存儲(chǔ)器RAM)所需的時(shí)間。 緩存(Cache)概述 緩存是一種位于
    的頭像 發(fā)表于 12-18 09:28 ?1.1w次閱讀

    請(qǐng)問(wèn)什么叫差分結(jié)構(gòu)?什么叫真差分信號(hào)?

    請(qǐng)問(wèn)什么叫差分結(jié)構(gòu)?什么叫真差分信號(hào)?
    發(fā)表于 12-16 07:33

    OPA1642做一個(gè)差分和差分輸出轉(zhuǎn)換的電路,在差分的情況下遇到的問(wèn)題求解

    我在做一個(gè)差分和差分輸出轉(zhuǎn)換的電路,但是在差分的情況下遇到下面的問(wèn)題,用理想運(yùn)放仿真負(fù)端就不會(huì)出現(xiàn)類(lèi)似方波的情況,但是用OPA1642就有這個(gè)問(wèn)題,方波的峰峰值大概5V,請(qǐng)幫忙看看是否是前端電阻匹配的不合適,兩個(gè)輸入信號(hào)是相位相差180度,峰值為5V的正弦波,謝謝
    發(fā)表于 11-07 06:07

    Cache和內(nèi)存有什么區(qū)別

    Cache(高速緩存)和內(nèi)存(Memory,通常指主存儲(chǔ)器或RAM)是計(jì)算機(jī)存儲(chǔ)系統(tǒng)中兩個(gè)重要的組成部分,它們?cè)谟?jì)算機(jī)的性能和數(shù)據(jù)處理中扮演著不同的角色。以下是對(duì)Cache和內(nèi)存之間區(qū)別的詳細(xì)解析。
    的頭像 發(fā)表于 09-26 15:28 ?3892次閱讀

    德國(guó)進(jìn)口蔡司工業(yè)CT去散射影技術(shù)

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

    解析Arm Neoverse N2 PMU事件L2D_CACHE_WR

    有客戶(hù)希望我們幫忙分析 Eigen gemm 基準(zhǔn)測(cè)試的一些執(zhí)行情況。具體來(lái)說(shuō)是為什么 L1D_CACHE_WR 的值會(huì)低于 L2D_CACHE_WR,這種情況令人費(fèi)解。
    的頭像 發(fā)表于 09-03 11:42 ?1784次閱讀
    解析Arm Neoverse N2 PMU事件L2D_<b class='flag-5'>CACHE</b>_WR

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

    CPU緩存(Cache Memory)是計(jì)算機(jī)系統(tǒng)中一個(gè)至關(guān)重要的組成部分,它位于CPU與內(nèi)存之間,作為兩者之間的臨時(shí)存儲(chǔ)器。CPU緩存的主要作用是減少
    的頭像 發(fā)表于 08-22 14:54 ?5931次閱讀

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

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

    Cortex R52內(nèi)核Cache的相關(guān)概念(1)

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

    CortexR52內(nèi)核Cache的具體操作

    本節(jié)內(nèi)容主要講述CortexR52內(nèi)核Cache的具體操作包括使緩存無(wú)效(invalidate)操作,清除(clean)緩存。有的時(shí)候客戶(hù)可能需要對(duì)cache做一些清理,比如invalidate
    的頭像 發(fā)表于 07-15 10:32 ?1909次閱讀
    CortexR52內(nèi)核<b class='flag-5'>Cache</b>的具體操作
    主站蜘蛛池模板: 南川市| 满洲里市| 县级市| 庄浪县| 乐都县| 莆田市| 千阳县| 上林县| 赤峰市| 垫江县| 商南县| 遂昌县| 吉水县| 新沂市| 海淀区| 宣武区| 黄陵县| 西平县| 门源| 墨竹工卡县| 西华县| 宝兴县| 马关县| 徐州市| 潮州市| 弥渡县| 定州市| 巴南区| 石城县| 家居| 韶山市| 青州市| 安泽县| 康马县| 绿春县| 额济纳旗| 建平县| 横山县| 江永县| 渭南市| 乌拉特后旗|