昨天我們用Intel I9的10核,每個核2個threads的機器跑了內核的編譯:超
線程SMT究竟可以快多少?
今天,我換一臺機器,采用AMD Ry
zen。?默認情況16核,每個核2個threads,共32個CPUs:
下面編譯內核:
大約需要53秒。記得昨天用Intel I9 10核20線程需要2分鐘30秒左右。再來一遍:這說明make clean, drop_caches后時間也差不多。51秒,53秒左右的正常抖動范圍。
現在我們關閉smt,只保留16個CPU:具體的關閉方法就是:
sudo?sh?-c?'echo?off?>?/sys/devices/system/cpu/smt/control'這樣只剩下16個CPU,下面來編譯:
時間57秒,相對于51、53秒,速度下降不到10%。
這說明超線程SMT對編譯內核這個workload的性能的提升絕對沒有達到100%,甚至都沒有達到10%。
我們現在重新開啟超線程:
?sudo?sh?-c?'echo?on?>?/sys/devices/system/cpu/smt/control看一下哪個CPU和哪個CPU是thread sibling:看起來CPU0和CPU16是一對,CPU1和CPU17是一對,依次類推。
剛才我們關閉SMT是把CPU16-CPU31全關了,只留下每對里面的1個CPU,也就是留下了CPU0-CPU15。
在開啟SMT的時候(假設藍色和紅色是一個CORE里面的兩個CPU):在關閉SMT的時候,等于每對里面只留1個CPU:
現在我們換一種關法,一對對關,只留下8對,也就是8個core:
指令如下:
實現效果如下:
再重新編譯內核:
現在耗時是1分21秒,相對于所有CPU全開,下降了很多,時間增大了59%,當然沒有達到2倍。
再想想昨天的Intel I9,關閉5個完整核耗時是3分10秒,全開10核是2分30秒,Intel一半核工作和所有核同時工作的差距遠不如AMD那么明顯。
所以可以看出,就內核編譯這個workload而言,AMD的16core相對于8core,性能的scale會更加成正比。當然AMD開關
SMT,對內核編譯這個workload而言,影響小于10%,而Intel I9的影響有14%。
很多童鞋昨天留言,說編譯內核有一定的IO bound,另外提到link階段是單
線程,還有的童鞋說是Intel Turbo的影響,這些我們都認為是有一定道理的。但是,我始終堅信,profiling是檢驗猜想的唯一標準,后面有空再寫一篇文章來profiling一些究竟是為什么。
這到底是為什么?牙膏廠的多核scalability究竟是不是騙紙?還是按摩店的部分核沒有Intel部分核的威猛模式?「元芳,你怎么看?」
本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯系該專欄作者,如若文章內容侵犯您的權益,請及時聯系本站刪除。