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

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

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

深入剖析多線程計(jì)算平臺的性能模型

Linux閱碼場 ? 來源:GPU and Computing ? 作者:GPUComputing ? 2021-06-28 16:33 ? 次閱讀

在以前的文章里,筆者談到單核CPU無論在PC端還是服務(wù)器上基本上已經(jīng)退出歷史舞臺,目前主流的計(jì)算平臺是使用多核(multiple cores)的CPU以及眾核(many cores)的GPU。另外處理器與內(nèi)存訪問速度差距也不斷增大,為克服訪存瓶頸主要采用兩種方法。

其中多核CPU與單核CPU都是利用Cache來掩蓋訪問系統(tǒng)內(nèi)存的延遲,以減輕訪存帶寬的壓力,其芯片的較大面積也都貢獻(xiàn)給Cache。在另一端,GPU通過同時(shí)運(yùn)行很多簡單的線程,不使用或者只利用相對較小的Cache。

而主要通過線程間的并行(Thread Level Parallelism, TLP)來隱藏內(nèi)存訪問延遲,當(dāng)一部分線程因?yàn)樵L存停滯的時(shí)候,另一部分線程會接著執(zhí)行,使得處理單元不會空閑下來。

目前的異構(gòu)計(jì)算平臺同時(shí)采用這兩種截然不同的架構(gòu),使得性能預(yù)測和優(yōu)化都不太容易,面對一個(gè)給定的計(jì)算負(fù)載,我們應(yīng)該如何分發(fā)能夠達(dá)到性能最佳?對芯片架構(gòu)師而言,在面積受限的芯片上,怎樣合理部署處理單元、Register File和Cache等等也是讓人撓頭的事情。

希望能夠?yàn)槔斫鈨?yōu)化性能提供參考,論文作者定義了一個(gè)統(tǒng)一仿真模型可以容納延展這兩種不同特點(diǎn)的架構(gòu)設(shè)計(jì)。這個(gè)模型對應(yīng)一個(gè)想象的混合計(jì)算平臺,該平臺由很多簡單的處理單元以及較大的共享緩存構(gòu)成,通過靈活配置一系列參數(shù),包括處理單元個(gè)數(shù)、緩存大小以及緩存和內(nèi)存的訪問延遲等等,可以觀察不同參數(shù)變化對計(jì)算性能的影響。

為保持模型簡單,論文假設(shè)所有線程相互不共享數(shù)據(jù)且系統(tǒng)內(nèi)存帶寬足夠大。如下圖所示,作者發(fā)現(xiàn),當(dāng)線程數(shù)量較少的時(shí)候,隨著線程數(shù)量增加,性能開始提升,而當(dāng)線程數(shù)量到達(dá)轉(zhuǎn)折點(diǎn),Cache不能夠容納所有線程的工作集的時(shí)候,性能反而下降。

之后,隨著線程數(shù)量越來越多,由于有足夠的線程來掩蓋Cache訪問不命中帶來內(nèi)存訪問延遲,性能又接著上升,直達(dá)到平臺可獲得的最大性能。我們可以認(rèn)為MC Region對應(yīng)多核CPU的情形,而MT Region自然對應(yīng)有超多線程的GPU,MC Region和MT Region之間的性能波谷區(qū)域在我們的架構(gòu)設(shè)計(jì)和程序優(yōu)化中都是要努力避免的。

以下我們具體推導(dǎo)下參數(shù)曲線對應(yīng)的公式,下表列出計(jì)算模型涉及的參數(shù),左邊是平臺相關(guān)的,右邊跟運(yùn)算任務(wù)有關(guān)。

公式(1)為考慮Cache命中率的線程平均訪問內(nèi)存所需要的時(shí)鐘數(shù)。

6876e088-d77a-11eb-9e57-12bb97331649.png

這就是說,線程每運(yùn)行1/rm條指令,就會因?yàn)樵L存停滯tavg時(shí)鐘,如果沒有別的線程替換進(jìn)來,對應(yīng)的處理單元就會處于空閑狀態(tài),要讓該處理單元充分利用,額外需要的線程數(shù)為tavg/(CPIexe/rm)。所以要讓整個(gè)計(jì)算平臺滿負(fù)荷運(yùn)轉(zhuǎn),總共需要的線程數(shù)量為

NPE * (1 +tavg/(CPIexe/rm))。給定有n個(gè)線程的計(jì)算任務(wù),計(jì)算平臺的利用率η可以計(jì)算如公式(2)。

68821840-d77a-11eb-9e57-12bb97331649.png

在η=1的情況下,再添加多余的線程于性能無補(bǔ)。根據(jù)利用率η我們可以得到計(jì)算平臺的預(yù)期性能為NPE * (f/CPIexe)*η OPS(Operations Per Second,每秒鐘運(yùn)算數(shù))。通過該公式,我們可以觀察以下各種參數(shù)調(diào)節(jié)對性能曲線的影響。

值得注意的是以上計(jì)算中我們沒有考慮內(nèi)存帶寬受限的情況,如果把它納入考慮,對特定性能Performance,我們可以按公式(3)計(jì)算所要求帶寬。

6945c92a-d77a-11eb-9e57-12bb97331649.png

所以在內(nèi)存帶寬也是約束條件的情況下,性能計(jì)算修正為公式(4)。

69687290-d77a-11eb-9e57-12bb97331649.png

而下圖也反映了內(nèi)存帶寬對性能曲線的影響。值得提醒的是性能曲線水平頂表示計(jì)算任務(wù)在該平臺上已經(jīng)觸到了內(nèi)存帶寬墻(off-chip bandwidth wall),在這種情況下繼續(xù)增加線程有可能會惡化Cache命中率,使得帶寬問題更加嚴(yán)重反而有損性能,這也是為什么之前我們提到過的GPU顯存帶寬要遠(yuǎn)大于CPU系統(tǒng)內(nèi)存帶寬。

主要參考資料

Many-core vs many-thread machines: Stay away from the valley

The Interplay of Caches and Threads in Chip-MultiProcessors

編輯:jq

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

    關(guān)注

    68

    文章

    10873

    瀏覽量

    212020
  • PC
    PC
    +關(guān)注

    關(guān)注

    9

    文章

    2086

    瀏覽量

    154284
  • 內(nèi)存
    +關(guān)注

    關(guān)注

    8

    文章

    3030

    瀏覽量

    74104
  • TLP
    TLP
    +關(guān)注

    關(guān)注

    0

    文章

    32

    瀏覽量

    15638

原文標(biāo)題:多線程計(jì)算平臺的性能模型

文章出處:【微信號:LinuxDev,微信公眾號:Linux閱碼場】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    socket 多線程編程實(shí)現(xiàn)方法

    在現(xiàn)代網(wǎng)絡(luò)編程中,多線程技術(shù)被廣泛應(yīng)用于提高服務(wù)器的并發(fā)處理能力。Socket編程是網(wǎng)絡(luò)通信的基礎(chǔ),而將多線程技術(shù)應(yīng)用于Socket編程,可以顯著提升服務(wù)器的性能。 多線程編程的基本概
    的頭像 發(fā)表于 11-12 14:16 ?380次閱讀

    Python中多線程和多進(jìn)程的區(qū)別

    Python作為一種高級編程語言,提供了多種并發(fā)編程的方式,其中多線程與多進(jìn)程是最常見的兩種方式之一。在本文中,我們將探討Python中多線程與多進(jìn)程的概念、區(qū)別以及如何使用線程池與進(jìn)程池來提高并發(fā)執(zhí)行效率。
    的頭像 發(fā)表于 10-23 11:48 ?411次閱讀
    Python中<b class='flag-5'>多線程</b>和多進(jìn)程的區(qū)別

    深入剖析石英 CMOS 振蕩器 PC3225 系列(1 to 200 MHz)的卓越性能

    深入剖析石英 CMOS 振蕩器 PC3225 系列(1 to 200 MHz)的卓越性能
    的頭像 發(fā)表于 08-08 10:14 ?369次閱讀
    <b class='flag-5'>深入</b><b class='flag-5'>剖析</b>石英 CMOS 振蕩器 PC3225 系列(1 to 200 MHz)的卓越<b class='flag-5'>性能</b>

    ESP32會不會有多線程問題,需要加鎖嗎?

    ESP32會不會有多線程問題,需要加鎖嗎
    發(fā)表于 07-19 08:05

    多線程設(shè)計(jì)模式到對 CompletableFuture 的應(yīng)用

    最近在開發(fā) 延保服務(wù) 頻道頁時(shí),為了提高查詢效率,使用到了多線程技術(shù)。為了對多線程方案設(shè)計(jì)有更加充分的了解,在業(yè)余時(shí)間讀完了《圖解 Java 多線程設(shè)計(jì)模式》這本書,覺得收獲良多。本篇文章將介紹其中
    的頭像 發(fā)表于 06-26 14:18 ?370次閱讀
    從<b class='flag-5'>多線程</b>設(shè)計(jì)模式到對 CompletableFuture 的應(yīng)用

    基于FPGA的類腦計(jì)算平臺 —PYNQ 集群的無監(jiān)督圖像識別類腦計(jì)算系統(tǒng)

    計(jì)算的特性,搭建出基于 PYNQ 集群的通用低功耗的大規(guī)模類腦計(jì)算平臺,并通過皮質(zhì)層視覺仿真模型、HPC Benchmark 等進(jìn)行了結(jié)果驗(yàn)證和性能
    發(fā)表于 06-25 18:35

    鴻蒙開發(fā):線程模型

    FA模型下的線程主要有如下三類
    的頭像 發(fā)表于 06-24 17:27 ?436次閱讀
    鴻蒙開發(fā):<b class='flag-5'>線程</b><b class='flag-5'>模型</b>

    摩爾線程與智譜AI完成大模型性能測試與適配

    近日,摩爾線程與智譜AI在人工智能領(lǐng)域開展了一輪深入的合作,共同對GPU大模型進(jìn)行了適配及性能測試。此次測試不僅涵蓋了大模型的推理能力,還涉
    的頭像 發(fā)表于 06-14 16:40 ?1090次閱讀

    bootloader開多線程做引導(dǎo)程序,跳app初始化后直接進(jìn)hardfualt,為什么?

    如標(biāo)題,想做一個(gè)遠(yuǎn)程升級的項(xiàng)目,bootloader引導(dǎo)區(qū)域和app都是開多線程跑的,就是自己寫了個(gè)小的任務(wù)調(diào)度器,沒什么功能主要是想讓程序快速的響應(yīng),延時(shí)不會對其他程序造成堵塞,程序測試
    發(fā)表于 04-18 06:07

    鴻蒙OS開發(fā)實(shí)例:【ArkTS類庫多線程CPU密集型任務(wù)TaskPool】

    CPU密集型任務(wù)是指需要占用系統(tǒng)資源處理大量計(jì)算能力的任務(wù),需要長時(shí)間運(yùn)行,這段時(shí)間會阻塞線程其它事件的處理,不適宜放在主線程進(jìn)行。例如圖像處理、視頻編碼、數(shù)據(jù)分析等。 基于多線程
    的頭像 發(fā)表于 04-01 22:25 ?852次閱讀
    鴻蒙OS開發(fā)實(shí)例:【ArkTS類庫<b class='flag-5'>多線程</b>CPU密集型任務(wù)TaskPool】

    鴻蒙APP開發(fā):【ArkTS類庫多線程】TaskPool和Worker的對比

    TaskPool(任務(wù)池)和Worker的作用是為應(yīng)用程序提供一個(gè)多線程的運(yùn)行環(huán)境,用于處理耗時(shí)的計(jì)算任務(wù)或其他密集型任務(wù)??梢杂行У乇苊膺@些任務(wù)阻塞主線程,從而最大化系統(tǒng)的利用率,降低整體資源消耗,并提高系統(tǒng)的整體
    的頭像 發(fā)表于 03-26 22:09 ?659次閱讀
    鴻蒙APP開發(fā):【ArkTS類庫<b class='flag-5'>多線程</b>】TaskPool和Worker的對比

    鴻蒙原生應(yīng)用開發(fā)-ArkTS語言基礎(chǔ)類庫多線程TaskPool和Worker的對比(一)

    TaskPool(任務(wù)池)和Worker的作用是為應(yīng)用程序提供一個(gè)多線程的運(yùn)行環(huán)境,用于處理耗時(shí)的計(jì)算任務(wù)或其他密集型任務(wù)??梢杂行У乇苊膺@些任務(wù)阻塞主線程,從而最大化系統(tǒng)的利用率,降低整體資源消耗
    發(fā)表于 03-25 14:11

    java實(shí)現(xiàn)多線程的幾種方式

    Java實(shí)現(xiàn)多線程的幾種方式 多線程是指程序中包含了兩個(gè)或以上的線程,每個(gè)線程都可以并行執(zhí)行不同的任務(wù)或操作。Java中的多線程可以提高程序
    的頭像 發(fā)表于 03-14 16:55 ?722次閱讀

    AT socket可以多線程調(diào)用嗎?

    請問AT socket 可以多線程調(diào)用嗎? 有互鎖機(jī)制嗎,還是要自己做互鎖。
    發(fā)表于 03-01 08:22

    什么是多核多線程?多核多線程如何提高程序的運(yùn)行效率?

    線程無法充分利用多核處理器的并行計(jì)算能力。
    的頭像 發(fā)表于 02-20 10:22 ?1384次閱讀