[閒聊] 對岸超硬核解釋AMD與intel架構差異

作者: c52chungyuny (PiPiDa)   2019-07-04 22:27:12
https://www.zhihu.com/question/303489757/answer/543505194
沒有高分低能的硬體,只有選錯了跑分和對應場景的關係的人
首先我用AIDA64的性能基準來說明一下
https://i.imgur.com/00eKLIV.jpg
你能看出誰高分低能嗎?你會發現CPU QUEEN/zlib是同規格下AMD與Intel接近,AES/Hash
是AMD明顯絕對優勢,VP8是多核沒什麼優勢/超執行緒負加成+Intel高主頻處理器有優勢
,julia/mandel/ray trace FP32/64是Intel絕對優勢,Sinjulia是AMD有較大優勢,CPU
PhotoWorxx是Intel優勢且超執行緒有負加成,至少從AIDA64這些項目來看,你不能說誰
高分低能,那這些差異是為什麼呢?
https://i.imgur.com/7sKbn5S.jpg
這樣一看很多人似乎理解了,Intel有優勢的項目全是AVX/AVX512項目,AMD最大優勢Hash
,AMD處理器都支援Hash加速指令,且擁有更大的加密解密執行單元,而FPU中Sinjulia是
AMD的優勢項目,而恰好80bit擴展精度的浮點計算無法使用SIMD指令進行優化,他使用了
更老的X87浮點指令和執行單元來執行
那有人要問了,這難道是指令集的問題導致了差異?其實指令集只是彙編語句的抽象概念
,只是告訴處理器該怎樣執行這些計算的一個顯式的概念,對應的背後是具體使用了何種
單元執行這些指令,處理器如何更快的將這些指令發射到對應的流水線來執行的問題。比
如Ryzen都支援AVX2指令,但觀察9700K/9900K相對2700X,同樣是8核規格,在AVX專案上
2700X都被拉開極大差距,這便主要是執行單元的巨大差異造成的
AMD架構
https://i.imgur.com/YQkBMhS.jpg
intel架構
https://i.imgur.com/ED62ZoD.jpg
Zen與Skylake系列的後端執行單元來看,AMD的埠多達10個,除去兩個AGU,實際執行計算
的埠有8個,Skylake則只有4個,其中VEC是執行SIMD指令的單元,它將負責AVX/SSE的指
令執行,AMD則是整數浮點分離,整數4個埠,浮點4個埠,咋一看AMD沒有任何劣勢啊,
Intel在執行浮點加法乘法將使用Port0/1的FMA單元提供的乘加計算,該單元在乘法加法
混合時如果有FMA指令則同時雙發乘加融合計算,即執行浮點加法時雙發射,浮點乘法時
雙發射,乘法加法同時混合使用FMA單元的FMA計算,也是雙發射(等效4發射),AMD的浮
點計算則沒有專用FMA單元,所以執行浮點加法是雙發射,乘法是雙發射,乘加融合是兩
個Mul+兩個Add一起上,相當於四發射,咋一看還是沒差別啊?但AMD不幸的是每個單元只
能執行128Bit SIMD的計算,Intel則是256/512Bit(Skylake-X)的SIMD計算,這樣同樣
是雙發射,Intel是2X256,AMD是2X128,自然也就被遠遠甩開,
而整數計算Intel的SIMD int加法依舊是VEC的單元來做,他是3個ALU來做int型的邏輯和
int加法計算,所以最高吞吐3X256,int乘法則屬於FMA單元的事情,他能實現2X256的吞
吐,AMD的int型邏輯計算由4個ALU執行實現4X128吞吐,int加法由其中兩個ALU執行,實
現2X128,乘法由其中一個ALU執行實現1X128,最後一個ALU執行除法,包括Intel都是一
個除法器,當然除法器Intel的移位元規模很高,實現了radix 1024,這也使得其在老式
圓周率計算super Pi中領先AMD相當多,總結如下
對比圖:
https://i.imgur.com/NVye51q.jpg
當然之前AMD沒能力做,一堆A粉想盡辦法掩飾,比如AVX沒用(沒用你還明明用著128bit
SSE指令集的寬度來支援AVX2),比如AMD考慮市場上支持AVX的少節約成本(這時不談擠
牙膏了,不給你是為了節約成本),然而Zen2就要把這個執行單元升級為256Bit了,顯然
之前的規模和工藝,AMD自身能力的不足,難以在14nm就像Intel一樣設計一個這麼大的計
算單元還跑出高頻(Intel),體現了雙方的差距
但是,AMD不是也有優勢項目嗎?比如Sinjulia,比如AES Hash跑分就很牛逼啊,CPU
queen也不差啊,而且如果執行128bit的SIMD,你Intel不也是2X128的水準?這樣不就差
不多了?
這就是另一個問題,比如CPU QUEEN是一個棋盤皇后(10皇后)問題,他指的是在10X10的
棋盤上擺放10個皇后且不能相互攻擊(皇后是橫豎加對角都能攻擊的),這個問題被認為
是分支處理的典型問題,這在日常中不是不常見,然而這裡有一個巨大的問題,那就是
AIDA64的棋盤皇后問題做了多執行緒的處理,而且由於基本不具備向量化並行優化空間,
這幾乎對AMDIntel來說就是個誰核多執行緒多誰厲害的項目,然而日常中這並不是一個簡
單的事情,更多時候一些分支的處理往往都還是單執行緒的,這讓超多核的處理器實際上
就出現了AIDA64跑分高但日常用不到的問題,同理,aida64上的AVX512專案,也面臨日常
用不到的境地,但好歹AVX512可以在密集計算領域發揮作用,密集計算的需求在如今越發
旺盛,CPU強化這方面性能顯然是對抗GPU的一個重要手段,在日常中可能就不能轉化為你
能看見的能了
Sinjulia代表的X87浮點更是如MMX一樣,基本是歷史垃圾堆裡的了,屬於基本只有古董軟
體才有,但是古董軟體也壓根很難支援你這麼多核,這也是AMD很多時候跑分高的原因,
使用老版本的跑分軟體,在標量執行單元和流水線設計如今趨同的今天,基本的ILP優化
水準都差不多的,能同頻差出10%已經很多了,所以AMD多兩個核跑分想低都難,但是實際
應用中這些老版本的跑分軟體對應的使用場景也很難有足夠多的執行緒調用,這也讓AMD
的多核性能不太容易在日常使用中發揮出來,好不容易有足夠多的執行緒支援的軟體,你
發現他居然支持了AVX,雖然AVX的利用率也沒有支援AVX的跑分軟體那麼高,但是這麼一
來一回,Intel本身同頻性能和主頻也高,依舊也就保持了優勢
而既沒有FMA指令支援的SSE程式,使用128bit SIMD和寄存器的程式,AMD自然是與Intel
五五開,如果你的使用環境的確是這樣,那AMD也不是低能,但是還是要考慮多執行緒的
支持程度,否則如果即使Intel核更少,但是你的程式連4核都利用不上,那在如今主流處
理器都已經4核以上的時候,大家都只跑4個核,那主頻更高更有優勢
當然伺服器講求多實例的吞吐能力,比如單個實例單個任務無法利用足夠多的執行緒,但
可以同時執行多個實例來充分利用這些執行緒,這樣也就發揮了多核的作用,但是問題在
於家用用戶很難有足夠多的併發專案來填滿超多核心處理器,往往普通使用者處理的是單
個實例或較少實例的負載,而且核心多使用多個實例來填滿硬體執行緒,還會面臨極高的
記憶體速率和容量需求
https://i.imgur.com/yNIrmxb.jpg
使用SPEC2006浮點Rate專案+新編譯器環境下(VS2017+ICC19)對9900X/9940X/7820X/金
牌6144進行了對比(SPEC2006在編譯器使用Qxcore AVX512的收益有限,所以我做
9900/9940的時候直接使用QxCORE-AVX2)
7820X 16執行緒,我設定了16個實例(Rate 16)來執行,安裝48GB記憶體,每個實例分
到3GB記憶體
9900X 20執行緒,我設定了20個實例(Rate 20)來執行,安裝64GB記憶體,每個實例分
到3.2GB記憶體
9900X 28執行緒,我設定了28個實例(Rate 28)來執行,安裝64GB記憶體,每個實例分
到2.3GB記憶體
雙路金牌6144共32執行緒,設定32個實例(Rate 32)來執行,安裝192GB記憶體,每個實
例分到6GB記憶體,同時每個實例分到的L3是6144最多(6144一共49.5MB L3),其次是
9900X(19.25MB L3),然後是9940X 19.25MB L3但是28個實例。7820X是11MB L3 16實例
,這些處理器的多核頻率都比較接近
實際上可以發現很多專案9940X的記憶體瓶頸極大,儘管他比9900X多了40%的核心,頻率
也相近,但是有不少memory bound專案已經被9900X追上,而6144憑藉超大的緩存和記憶
體容量,基本放飛自我,只有少數記憶體瓶頸小的專案被9940X追上,這說明在講求多實
例的吞吐測試中,儘管有能力填滿所有核心與執行緒了,但此時記憶體性能也成為一個重
要指標,他會明顯影響性能的表現
至於AES和Hash,日常主要用於簽名,身份驗證,包括網頁,下載檔案的校驗,如果要執
行密集的AES/Hash計算,可能比較為人熟知的應用就是挖礦了,比如比特幣是SHA,門羅
幣是AES,而且最重要的是Hash雖然intel沒給主流處理器支援SHA(儘管SHA指令集極其加
速單元是Intel擴展的,被用於目前的淩動處理器),但是實際上可以通過AVX512 int單
元來執行HASH,實際上sisoftware給出的成績便是AES計算成了cache/memory bound,
Hash使用AVX512配合高記憶體頻寬配置,實際上Intel完全不輸AMD
https://i.imgur.com/Zk3TAOp.jpg
我直接拿我跑的9940X(全默認)與sisoftware的2990WX進行了對比,實際上跑分完全不
輸,不僅是加密解密不輸,其實像諸如多媒體(SIMD),科學計算等項目14核9940X依舊
超過了2990WX,,說AMD高分可以停停了
實際上只要還在2018年繼續更新的跑分軟體,都顯示AMD的優勢越來越小,因為
AVX/AVX512的支持越來越普遍,就連AMD最愛的CPUZ跑分,都在近日支持了AVX/AVX512,
還有3Dmark的新場景,就連刺客信條奧德賽還搞出了不支持AVX不能進遊戲的問題
https://i.imgur.com/YRQKCO2.jpg
在都是預設頻率的成績下,2700X拿9700K來打都是浪費,當然SSE的分數還是很高的,比
7820X還高,可能這也是有人認為AMD高分的原因
而AMD市場宣傳最愛的R15,的確也是高分
https://i.imgur.com/z8bweVB.jpg
可問題是,我拿出R20跑了一下R15裡面的渲染場景,僅僅只是重新導入了這個項目,其他
沒有任何修改,
https://i.imgur.com/AjXK4O2.jpg
7820X 9秒完成,而使用R15足足掐著碼錶要20多秒,請問R15有什麼資格代表C4D的性能指
標?
C4D更是支持了embree外掛程式,而embree外掛程式最新的支持AVX512,未來C4D的新版隨
之支持也是理所應當的,而3DsMax,Conroa都有使用embree外掛程式用於光線追蹤和特效
處理的部分,這也是為什麼很多人發現AMD跑R15很厲害,R15出的時候本身壓根沒有任何
AVX支持,使用的embree外掛程式也是古董級的,但是跑實際自己用的新版本甚至8核不比
8700K快的問題
https://i.imgur.com/3t5bJgw.jpg
上圖則是blender最新的編譯測試版運行一個光線較多的渲染的一個性能分析器結果,可
以發現AVX FMA的使用已經成為了主要SIMD部分,256bit向量佔據了更高的比例,再拿什
麼avx用不到來說已經毫無意義,更不要說Intel已經在研究X265使用AVX512的問題了
https://i.imgur.com/XcWmz7a.jpg
最後便是很多人說的優化問題,首先Intel的軟體發展中心有數不清的優化參考文件,而
AMD的寥寥無幾也很難找到,似乎AMD認為反正我和Intel都是X86處理器,你優化好Intel
我就能跑的態度,Intel針對新處理器的parallel Studio XE套件,涵蓋計算需要的MKL
IPP DAAL ICC編譯器等工具,能無縫安裝進入VS,AS,eclipse,Xcode等多個平臺的IDE
,反觀AMD,出個AOCC,厲害就厲害在只能在Linux上用,而且參考資料少
https://i.imgur.com/spn8VPE.jpg
而且Intel儘管被嘲諷icelake看不到在哪,但是AIDA64的更新頁面一打開,你會發現ICL
將會提供用於使用256bit向量加速的AES指令集VAES已經被AIDA64性能測試進行優化了,
cascadelake的優化也存在了,而已經被AMD發佈的Zen2,看不到優化跡象,甚至
sisoftware也提供了對ICL VAES的支援,
https://i.imgur.com/bxtISdb.jpg
你以為是跑分軟體故意優化Intel不優化AMD?打開ICC編譯器的屬性選項,你會發現未來
架構的處理器都在優化範圍內,AMD推出AOCC For ryzen甚至要等到zen上市以後
https://i.imgur.com/14BhGIu.jpg
對比之下,AMD屬於活該優化不好,當然日常中的低能,無非就是AMD遊戲性能不好,這主
要是遊戲對記憶體延遲的要求,對主頻的要求高,至於多執行緒優化?你可以這麼理解,
等什麼時候遊戲能支持足夠多執行緒的平行計算了,AVX512可能也在遊戲裡跑了,到時低
能不低能和跑分有什麼關係?
作者: electronicyi (電子益)   2019-07-04 22:49:00
第一張圖解析度640*116 是要我看個狗屎爛蛋
作者: qweertyui891 (摸魚廚師)   2019-07-04 22:51:00
AVX512再強 價格烙賽也是沒人要買說的地表最強遊戲CPU 9900k支援512一樣,並沒有
作者: zweihander99 (zweihander)   2019-07-05 00:28:00
都還沒開賣就找文章來唱雖,是不是很慌啊

Links booklink

Contact Us: admin [ a t ] ucptt.com