宋老師的SMT測(cè)試很有意思,但是編譯內(nèi)核涉及的因素太多了,包括訪問文件系統(tǒng)等耗時(shí)受到存儲(chǔ)器性能的影響,難以估算,因此很難評(píng)判SMT對(duì)性能的提升如何。
為了探究SMT對(duì)計(jì)算密集型workload的效果,我自己寫了一個(gè)簡(jiǎn)單的測(cè)試程序。
使用pthread開多個(gè)線程,每個(gè)線程分別計(jì)算斐波那契數(shù)列第N號(hào)元素的值。每個(gè)線程計(jì)算斐波那契數(shù)列時(shí)除線程的元數(shù)據(jù)外只分配兩個(gè)unsigned long變量,由此避免過高的內(nèi)存開銷。
workload的詳細(xì)代碼和測(cè)試腳本在[https://github.com/HongweiQin/smt_test]
毫無疑問,這是一個(gè)計(jì)算密集型負(fù)載,我在自己的筆記本上運(yùn)行,配置如下(省略了一些不重要的項(xiàng)目):
lscpuArchitecture: x86_64: 12CPU(s) list: 0-11per core: 2per socket: 6: 1NUMA node(s): 1Vendor ID: GenuineIntelModel name: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHzL1d cache: 192 KiBL1i cache: 192 KiBL2 cache: 1.5 MiBL3 cache: 12 MiB
可以看到筆記本有一個(gè)Intel i7的處理器,6核12線程。經(jīng)查,CPU0和CPU6共用一個(gè)Core,CPU1和CPU7共用一個(gè)Core,以此類推。
以下的測(cè)試(Test 1-5)中,每個(gè)線程分別計(jì)算斐波那契數(shù)列第40億號(hào)元素的數(shù)值。
Test1:采用默認(rèn)配置,開12線程進(jìn)行測(cè)試。測(cè)試結(jié)果為總耗時(shí)45.003s。
qhw@qhw-laptop:~/develop/smt_test$ time ./smt_test -f 4000000000threads_num=12, fibonacci_max=4000000000, should_set_affinity=0, should_inline=1, alloc_granularity=32real0m45.003suser7m12.953ssys0m0.485s
Test2:把smt關(guān)掉,同樣的測(cè)試方法(12線程)??偤臅r(shí)為25.733s。
qhw@qhw-laptop:~/develop/smt_test$ cat turnoff_smt.shecho "turn off smt"sudo sh -c 'echo off > /sys/devices/system/cpu/smt/control'qhw@qhw-laptop:~/develop/smt_test$ ./turnoff_smt.shturn off smtqhw@qhw-laptop:~/develop/smt_test$ time ./smt_test -f 4000000000threads_num=12, fibonacci_max=4000000000, should_set_affinity=0, should_inline=1, alloc_granularity=32real0m25.733suser2m23.525ssys0m0.116s
對(duì),你沒看錯(cuò)。同樣的workload,如果關(guān)掉smt,總耗時(shí)還變少了。Intel誠(chéng)不欺我!
Test3:再次允許smt,但是將程序限制在三個(gè)物理Core上運(yùn)行,則總耗時(shí)為34.896s。
qhw@qhw-laptop:~/develop/smt_test$ ./turnon_smt.shturn on smtqhw@qhw-laptop:~/develop/smt_test$ time taskset -c 0-2,6-8 ./smt_test -f 4000000000threads_num=12, fibonacci_max=4000000000, should_set_affinity=0, should_inline=1, alloc_granularity=32real0m34.896suser3m17.033ssys0m0.028s
Test3相比于Test1用了更少的Core,反而更快了。
為什么在Test2和3會(huì)出現(xiàn)這樣違反直覺的結(jié)果?
猜想:Cache一致性在作怪!

圖1
測(cè)試程序的main函數(shù)會(huì)分配一個(gè)含有T(T=nr_threads)個(gè)元素的`struct thread_info`類型的數(shù)組,并分別將每個(gè)元素作為參數(shù)傳遞給每個(gè)計(jì)算線程使用。`struct thread_info`定義如下:
struct thread_info {pthread_t thread_id;int thread_num;unsigned long res[2];};
結(jié)構(gòu)體中的res數(shù)組用于計(jì)算斐波那契數(shù)列,因此會(huì)被工作線程頻繁地寫。
注意到,sizeof(struct thread_info)為32,而我的CPU的cacheline大小為64B!這意味著什么?
如果Thread 0在Core 0上運(yùn)行,則它會(huì)頻繁寫tinfo[0],Thread 1在Core 1上運(yùn)行,則它會(huì)頻繁寫tinfo[1]。
這意味著,當(dāng)Thread 0寫tinfo[0]時(shí),它其實(shí)是寫入了Core 0上L1 Cache的Cacheline。同樣的,當(dāng)Thread 1寫tinfo[1]時(shí),它其實(shí)是寫入了Core 1上L1 Cache的Cacheline。此時(shí),由于Core 1上的Cacheline并非最新,因此CPU需要首先將Core 0中的Cacheline寫入多核共享的L3 Cache甚至是內(nèi)存中,然后再將其讀入Core 1的L1 Cache中,最后再將Thread 1的數(shù)據(jù)寫入。此時(shí),由于Cache 0中的數(shù)據(jù)并非最新,Cacheline會(huì)被無效化。由此可見,如果程序一直這樣運(yùn)行下去,這一組數(shù)據(jù)需要在Cache 0和1之間反復(fù)跳躍,占用較多時(shí)間。
這個(gè)猜想同樣可以解釋為什么使用較少的CPU可以加速程序運(yùn)行。原因是當(dāng)使用較少的CPU時(shí),多線程不得不分時(shí)共用CPU,如果Thread 0和Thread 1分時(shí)共用了同一個(gè)CPU,則不需要頻繁將Cache無效化,程序運(yùn)行時(shí)間也就縮短了。
驗(yàn)證猜想:增加內(nèi)存分配粒度!
對(duì)程序進(jìn)行修改后,可以使用`-g alloc_granularity`參數(shù)設(shè)定tinfo結(jié)構(gòu)體的分配粒度。使用4KB為粒度進(jìn)行分配,再次進(jìn)行測(cè)試:
Test4:12線程,開啟SMT,分配粒度為4096??偤臅r(shí)為13.193s,性能相比于Test1的45.003s有了質(zhì)的提升!
qhw@qhw-laptop:~/develop/smt_test$ time ./smt_test -f 4000000000 -g 4096threads_num=12, fibonacci_max=4000000000, should_set_affinity=0, should_inline=1, alloc_granularity=4096real0m13.193suser2m31.091ssys0m0.217s
Test5:在Test4的基礎(chǔ)上限制只能使用3個(gè)物理Core??偤臅r(shí)為24.841s,基本上是Test4的兩倍。這說明在這個(gè)測(cè)試下,多核性能還是線性可擴(kuò)展的。
qhw@qhw-laptop:~/develop/smt_test$ time taskset -c 0-2,6-8 ./smt_test -f 4000000000 -g 4096threads_num=12, fibonacci_max=4000000000, should_set_affinity=0, should_inline=1, alloc_granularity=4096real0m24.841suser2m26.253ssys0m0.032s
超線程SMT究竟可以快多少?
表格和結(jié)論:
| 測(cè)試名 | 硬件配置 | 運(yùn)行時(shí)間(s) |
| Test6 | “真”6核 | 38.562 |
| Test7 | “假”6核 | 58.843 |
| Test8 | “真”3核 | 73.175 |
測(cè)試使用的是6個(gè)工作線程。為了減少誤差,增加一點(diǎn)運(yùn)行時(shí)間,每個(gè)線程計(jì)算斐波那契數(shù)列第200億項(xiàng)的值。
對(duì)比Test6和7,可以看到SMT的提升大概在52.6%左右。
測(cè)試記錄:
Test6:別名“真”6核,使用6個(gè)關(guān)閉了SMT的物理核進(jìn)行計(jì)算??偤臅r(shí)為38.562s。
Test7:別名“假”6核,使用3個(gè)開啟了SMT的物理核進(jìn)行計(jì)算。總耗時(shí)為58.843s。
Test8:別名“真”3核,使用3個(gè)關(guān)閉了SMT的物理核進(jìn)行計(jì)算??偤臅r(shí)為1m13.175s。
qhw@qhw-laptop:~/develop/smt_test$ cat test.shfibonacci=20000000000sudo printf ""./turnoff_smt.shtime ./smt_test -f $fibonacci -g 4096 -t 6./turnon_smt.shtime taskset -c 0-2,6-8 ./smt_test -f $fibonacci -g 4096 -t 6./turnoff_smt.shtime taskset -c 0-2,6-8 ./smt_test -f $fibonacci -g 4096 -t 6./turnon_smt.shqhw@qhw-laptop:~/develop/smt_test$ ./test.shturn off smtthreads_num=6, fibonacci_max=20000000000, should_set_affinity=0, should_inline=1, alloc_granularity=4096real0m38.562suser3m50.786ssys0m0.000sturn on smtthreads_num=6, fibonacci_max=20000000000, should_set_affinity=0, should_inline=1, alloc_granularity=4096real0m58.843suser5m53.018ssys0m0.005sturn off smtthreads_num=6, fibonacci_max=20000000000, should_set_affinity=0, should_inline=1, alloc_granularity=4096real1m13.175suser3m39.486ssys0m0.008sturn on smt
責(zé)任編輯:haq
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。
舉報(bào)投訴
-
smt
+關(guān)注
關(guān)注
45文章
3210瀏覽量
77004 -
多線程
+關(guān)注
關(guān)注
0文章
279瀏覽量
21121
原文標(biāo)題:超線程SMT究竟可以快多少?(斐波那契版)
文章出處:【微信號(hào):LinuxDev,微信公眾號(hào):Linux閱碼場(chǎng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
熱點(diǎn)推薦
SQPI PSRAM為單片機(jī)提供RAM擴(kuò)展方案
在嵌入式開發(fā)中,很多MCU由于引腳數(shù)量有限,無法直接支持并行SRAM或SDRAM的擴(kuò)展接口,這在處理語音、圖像等數(shù)據(jù)密集型或算法密集型任務(wù)時(shí),常常面臨內(nèi)存不足的瓶頸。
成功案例:象帝先計(jì)算技術(shù)與Imagination合作——面向現(xiàn)代圖形與計(jì)算工作負(fù)載的專業(yè)GPU
為專業(yè)計(jì)算設(shè)計(jì)桌面GPU桌面GPU不僅用于游戲,還能加速?gòu)膶I(yè)可視化、高級(jí)模擬到數(shù)據(jù)密集型計(jì)算在內(nèi)的多種現(xiàn)代工作負(fù)載。專業(yè)用戶需要能在多種應(yīng)用場(chǎng)景中穩(wěn)定運(yùn)行的高性能、多功能平臺(tái)。構(gòu)建桌面級(jí)圖形
意法半導(dǎo)體與亞馬遜云計(jì)算服務(wù)深化戰(zhàn)略合作
的先進(jìn)半導(dǎo)體技術(shù)與產(chǎn)品戰(zhàn)略供應(yīng)商,助力AWS為客戶提供新一代高性能計(jì)算實(shí)例、降低運(yùn)營(yíng)成本,并更高效地?cái)U(kuò)展計(jì)算密集型工作負(fù)載。
物聯(lián)網(wǎng)和邊緣計(jì)算助力實(shí)現(xiàn)智慧農(nóng)業(yè)可持續(xù)發(fā)展
傳統(tǒng)農(nóng)業(yè)依賴代代相傳的經(jīng)驗(yàn),而現(xiàn)代農(nóng)業(yè)正在經(jīng)歷一場(chǎng)深刻的變革——“靠數(shù)據(jù)種地”,將農(nóng)業(yè)從“勞動(dòng)密集型”升級(jí)為“智能決策型”。通過實(shí)時(shí)感知土壤水分、作物營(yíng)養(yǎng)狀況和病蟲害跡象,在最恰當(dāng)?shù)臅r(shí)機(jī)進(jìn)行精準(zhǔn)干預(yù),不僅關(guān)乎產(chǎn)量提升,更可實(shí)現(xiàn)可持續(xù)發(fā)展——用最少的水、肥、農(nóng)藥,獲得最優(yōu)質(zhì)
BT-2113B儲(chǔ)能/動(dòng)力電池組半自動(dòng)產(chǎn)線:效率與品質(zhì)的智能化平衡解決方案
提升電池組生產(chǎn)的一致性、可靠性及整體效率,尤其適用于多品種、中等批量的生產(chǎn)場(chǎng)景,是幫助電池制造企業(yè)從勞動(dòng)密集型向技術(shù)密集型轉(zhuǎn)型的關(guān)鍵設(shè)備。
Altera全新推出MAX 10 FPGA封裝新選擇
Altera 全新推出 MAX 10 FPGA 封裝新選擇,采用可變間距球柵陣列 (VPBGA) 技術(shù)并已開始批量出貨,可為空間受限及 I/O 密集型應(yīng)用的設(shè)計(jì)人員帶來關(guān)鍵技術(shù)優(yōu)勢(shì)。
英飛凌推出專為高功率與計(jì)算密集型應(yīng)用而設(shè)計(jì)的400V和440V MOSFET
。新的CoolSiC? MOSFET具有更優(yōu)的熱性能、系統(tǒng)效率和功率密度。其專為滿足高功率與計(jì)算密集型應(yīng)用需求而設(shè)計(jì),涵蓋了AI服務(wù)器電源、光伏逆變器、不
【產(chǎn)品介紹】Altair HPCWorks高性能計(jì)算管理平臺(tái)(HPC平臺(tái))
AltairHPCWorksAltair高性能計(jì)算平臺(tái)最大限度地利用復(fù)雜的計(jì)算資源,并簡(jiǎn)化計(jì)算密集型任務(wù)的工作流程管理,包括人工智能、建模和仿真,以及可視化應(yīng)用。強(qiáng)大的
循環(huán)經(jīng)濟(jì)視角下:海翔科技破解二手半導(dǎo)體設(shè)備高碳困局的實(shí)踐路徑
行業(yè)降低碳排放、實(shí)現(xiàn)綠色可持續(xù)發(fā)展提供參考。 一、引言 隨著循環(huán)經(jīng)濟(jì)理念的深入發(fā)展,各行業(yè)都在積極探索綠色發(fā)展模式。半導(dǎo)體產(chǎn)業(yè)作為技術(shù)密集型產(chǎn)業(yè),設(shè)備更新?lián)Q代頻繁,大量舊設(shè)備處理不當(dāng)不僅造成資源浪費(fèi),還帶來
I/O密集型任務(wù)開發(fā)指導(dǎo)
使用異步并發(fā)可以解決單次I/O任務(wù)阻塞的問題,但是如果遇到I/O密集型任務(wù),同樣會(huì)阻塞線程中其它任務(wù)的執(zhí)行,這時(shí)需要使用多線程并發(fā)能力來進(jìn)行解決。
I/O密集型任務(wù)的性能重點(diǎn)通常不在于CPU的處理
發(fā)表于 06-19 07:19
CPU密集型任務(wù)開發(fā)指導(dǎo)
CPU密集型任務(wù)是指需要占用系統(tǒng)資源處理大量計(jì)算能力的任務(wù),需要長(zhǎng)時(shí)間運(yùn)行,這段時(shí)間會(huì)阻塞線程其它事件的處理,不適宜放在主線程進(jìn)行。例如圖像處理、視頻編碼、數(shù)據(jù)分析等。
基于多線程并發(fā)機(jī)制處理CPU
發(fā)表于 06-19 06:05
半導(dǎo)體芯片制造Fab工廠布局和結(jié)構(gòu)簡(jiǎn)介-江蘇泊蘇系統(tǒng)集成有限公司
在半導(dǎo)體產(chǎn)業(yè)的核心地帶,芯片制造工廠以其高度自動(dòng)化、超凈環(huán)境和復(fù)雜的工藝流程聞名。這些工廠不僅是技術(shù)密集型的象征,更是精密工程與空間設(shè)計(jì)的典范。
上海貝嶺推出全新DDR5 SPD芯片BL5118
隨著計(jì)算密集型任務(wù)的日益增長(zhǎng),DDR4內(nèi)存的性能瓶頸已逐步顯現(xiàn)。DDR5的出現(xiàn)雖解燃眉之急,但真正推動(dòng)內(nèi)存發(fā)揮極致性能的背后“功臣”——正是 DDR5 SPD(Serial Presence Detect)芯片。
借助NVIDIA技術(shù)實(shí)現(xiàn)機(jī)器人裝配和接觸密集型操作
本期 NVIDIA 機(jī)器人研究與開發(fā)摘要 (R2D2) 將探討 NVIDIA 研究中心針對(duì)機(jī)器人裝配任務(wù)的多種接觸密集型操作工作流,以及它們?nèi)绾谓鉀Q傳統(tǒng)固定自動(dòng)化在魯棒性、適應(yīng)性和可擴(kuò)展性等方面的關(guān)鍵挑戰(zhàn)。
探究SMT對(duì)計(jì)算密集型workload的效果
評(píng)論