對HPC領域來說,Intel Xeon Phi 真能幹掉GPU 么?
目前大家的吐槽多集中於Knight Corner, 針對下一代Knight Landing大家有什麼看法?美國能源部超算中心的Cori第二期工程將部署Knight Landing, 描述中有這麼一段:
Knights Landing is a self-hosted architecture, not a co-processor, not
an accelerator. "Self-hosted" means that it is a standalone bootable
processor (running host OS)這對於目前的PCI速度問題會有改善嗎?
我是從今年四月開始在Xeon Phi上編程的,具體的項目一個是跟別人合作了一篇在Xeon Phi上優化SpMV演算法的論文,另一個是參加了有人提到的那個天河2號上的Xeon Phi加速的比賽(順便提一句,我們實際上就是那個最後一名的隊伍……成績不好主要是因為想要offload很大一塊的代碼但是時間有限有些bug沒有調試成功)
暫且不論Xeon Phi能不能幹掉GPU(因為這個問題涉及到不只是硬體架構層面,代碼庫的構建和用戶社群也相當重要),只從Xeon Phi和GPU的區別出發的話有以下兩個特點:
1. Xeon Phi的運算單元沒有GPU多,但是性能卻很強:
Xeon Phi目前應該有60+核,每個核有一個非常強的VPU,向量長度上可以支持512bits的向量計算,速度上我沒有數據;而且在每個核上也可以多線程(聲稱是可以達到4個,不過根據運算性質的不同有時候2個效果最好);單就這一點來看,對於需要大量SIMD運算的應用來說,Xeon Phi是相當合適的。而且大多數的高性能科學計算程序基本上都用到了大量的SIMD運算。因此Xeon Phi在科學計算領域的前景還是相當明朗的。
2. Xeon Phi上編程門檻相對於GPU來說要低很多:
在這裡先不談優化,如果不依賴外部庫的話,在GPU和Xeon Phi上優化一段代碼的複雜程度都不低;單就移植難度來說,GPU基本上要重寫大部分的代碼,但是如果要把一段寫好的C或者Fortran程序部署到Xeon Phi上運行的話,只需要在icc編譯的時候加上-mmic就行了。編譯的過程中可以自動向量化,而且會生成相當詳細的向量化結果的報告。如果要用多線程,可以直接通過OpenMP來做。要我說,Xeon Phi實際上就是GPU和CPU之間tradeoff的產物,只能說與GPU相比,二者各有所長:Xeon Phi更適合那些向量運算多的科學計算程序,而且門檻更低;GPU也有其獨特之處。因此我覺得Xeon Phi與GPU在未來應該形成二者之間勢均力敵,但是誰都不能完全打敗誰的局面雖然號稱都是x86指令級,但是這完全是混淆視聽。這種大規模並行處理器的編程模型和普通CPU的編程模型本身就是不一樣的,至於底層是x86指令還是其他指令跟你程序員半毛錢關係都沒有。所以就不要指望現有的parallel_for的code可以直接被Xeon Phi顯著加速了。寫CUDA的時候需要考慮的所有問題在Xeon Phi上都一樣要考慮。
無論用什麼硬體,在代碼里都會體現出cpu和協處理器的邊界:兩邊運行的是不一樣的代碼,針對不同的架構特性會需要不同的演算法和系統設計,需要精心優化數據傳遞等等。
所以既然大家都是一樣的東西,要比就比效率/功耗和性價比了。此外對於開發者而言,成熟的工具鏈也是非常重要的。暫時看不出Xeon Phi有什麼優勢。用過一段時間Xeon Phi卡,現在在接觸CUDA,就初代MIC卡的體驗來說,要幹掉GPU不樂觀。
先給Phi卡說一點好話。讓代碼在MIC卡上跑起來簡直太簡單了,一個
#pragma offload target(mic)
就可以把一段代碼分載到MIC卡上執行,連核函數都不用寫,同樣一段代碼在CPU上也能跑。其編程模式很大程度上可以從CPU照搬過來,因為都是直接用OpenMP做並行。MKL也可以直接在MIC卡上用。所以要把代碼從CPU上搬到MIC上用,實在太簡單了。還有就是ICC做得比較好,有些時候自動向量化很方便,這個對CPU和MIC卡都是如此。下面說說我遇到或者知道的一些初代MIC卡的問題。
1、晶元布局(應該是環形匯流排一塊)有問題。這是聽前輩說的,他們做過實驗測過,但是具體是哪一個地方的問題我不清楚。這裡且列出來僅供參考。我自己做過的一個實驗是,用Intel的教程上的一個很簡單的例子:for (int i = 0; i &< LEN; i++) a[i] = b[i] * c[i];(大概是這個意思,具體是乘法還是加法還是乘加不記得了,但一定是SIMD)當a b c都是float[]時,ICC可以讓這一段代碼跑到理論峰值的90+%,在我們那張31S1P上能夠跑到1.8G的速度。然後我把float換成double,速度馬上掉了起碼80%。2、不容易調優。是的,把代碼弄到MIC上跑起來非常容易,但是即使是原來的代碼是並行的,直接放到MIC上基本也不會有什麼好結果。原因有很多,其中有一個我覺得應該是MIC沒有L3,一旦數據掉出去L2就會開始掉速度。512 bit的向量化和編譯器的牛逼看起來很美,但是不是所有東西都能那麼順利被向量化的。而且MIC卡的操控感覺來得不如CUDA的細(我沒用過Intel的私有技術如TBB,不知道是否會好一些),所以做出來的東西效果也不如GPU的那樣跟預想來得接近。Intel自己也承認實際應用中只有1.7-2.5倍的提速[1](而且Intel這麼說肯定已經是挑那些他們優化得不能更優化的來說了)。
就我所知道的情況,在過往的4屆ASC中,鄙校沒有一次成功把單張MIC卡的性能發揮到跟雙路Xeon持平的水平,今年我們做Gridding的時候才第一次讓MIC卡的性能和雙路Xeon的性能接近相等。【據說】其他學校也沒有試過將單張MIC卡的性能發揮到跟雙路Xeon持平。
再說一個小道消息,不保證準確性,不負責。我們有個師兄去了T大,之前被另一個老師叫去審一份MIC代碼,因為那個老師被忽悠去買了一塊MIC卡來用,找了一個學生來寫相關的代碼,結果速度不如CPU。又叫了另外一個學生去寫CUDA代碼,卻實打實地快了好幾倍。所以那個老師甚至懷疑寫MIC代碼的學生沒有真的寫,而是造假了數據,就把我們師兄找過去審代碼了。[1]http://news.mydrivers.com/1/246/246757.htm參加過兩次ASC,Xeon Phi 使用中的各種苦痛不想多說,拋開API使用的各種坑不談,單說性能, @科學匠人 別說一個核心和Xeon E5比速度,60個加起來,也不過抵得上一個E5……
記得手冊標稱性能是一個Xeon Phi和三個Xeon E系列相當,然而實際使用時面臨各種坑,比如對於計算模型要求苛刻,頻繁的讀寫速度緩慢,卡上內存嚴重不足。就算你這些問題 GPGPU 多多少少也會遇到,但是當一個主板上加入多個 Xeon Phi 卡時就會出現各種bug,導致基本即使主板可以插入三個 Xeon Phi,也只能開啟一個進行工作。官方雖然聲稱加速超過萬倍,不過那是跑了最基礎的矩陣運算,一個在CPU上單線程裸跑三重循環,一個在加速卡上用合適的矩陣尺寸輔以各種並行甚至換了演算法,完全不足以體現現實需求。
現實需求是我想要在MIC上做一個Jacobi迭代的時候一個矩陣根本不能 offload 下去,必須配合複雜的同步策略,來回數據傳遞,單純加速卡甚至比不上E5的速度。
我用的是早期版本的 Xeon Phi 7系列,感覺硬體設計十分奇詭,傻大黑粗頗有蘇聯遺風,各種管線優化基本得上彙編,還基本寫不對。順便一說,60個核心不能同時開啟,會出現內部時鐘無法同步的問題。
當時實驗的程序規模不大,但是調試極為困難,手冊也晦澀模糊,官方資料匱乏,出現問題上論壇提issue也沒人解決,跟蹤調試基本不可能,我和一個搭檔 @曹舒翔 寫的是欲仙欲死啊;雖然在 API 設計上 CUDA 也爛的不相上下,但是好歹N家工具鏈齊備手冊明晰樣例豐富,連蒙帶猜也能把API用對。
多說一點,ASC比賽的時候是以功耗為標準,Xeon Phi用起來簡直就是暖氣+鼓風機,一個Phi卡功耗接近三個Tesla,跑MKL的速度還沒人家一個快。
(不過最後國防科大還是成功用Xeon E5普通CPU堆塔不聲不響的超過了現場所有的各種加速卡組合……看了上面的一堆回答,似乎沒一個講到KNL的。
我們實驗室拿到了一台KNL機,機箱用鉚釘封死了,看不到裡面的情況,只知道裡面是一塊KNL,不帶CPU(看背面的槽口一個節點裡面最多可以插下4塊KNL)。不知道KNL正式上市之後還是不是PCIE板卡的形式(要麼賣整機?)。
這玩意的結構相對KNC來說已經完全是不一樣的東西了,一塊KNL上有36個核組,每個核組2個物理核,每個物理核再帶2個VPU(向量處理單元)。一共72個物理核,144個VPU。
重點是這72個物理核是可以單獨工作跑OS的,所以KNL的定位確實看上去是比較奇怪的,因為不再需要像KNC、GPU那樣要有個上位機一樣的CPU來控制了。不知道Intel做這樣的東西以後是有什麼想法。
性能方面,手冊上說各種參數相對KNC都提升了好多倍。KNL支持4倍超線程(裝了個htop,那畫面太美完全不敢看),除了通用的X86指令外還支持512位的向量指令。
板上有個大容量的MCDRAM(好像是16G?忘了),帶寬比普通的DDR內存高很多,支持直接拿來做內存用或者用作DDR的Cache,所以相對KNC來說,訪存受限的情況應該是能改善很多了。
------
實用方面:
編程移植完全沒有障礙好么,普通X86 CPU下的程序不用改扔上去直接就能跑,看師兄簡單測了幾個程序來看性能是相當不錯的,之後針對KNL的結構再優化下估計效果會更好。
再詳細我也不清楚了,因為不是直接接觸的這個項目。
PAC什麼之類的比賽我們實驗室之前也做過,KNC不好用是事實。
但是就目前我們看到的KNL來說,這玩意還是有潛力的。雖然性能相對P100等等頂級GPU應該差了不少,但是價格和能耗方面KNL的優勢相對還是很大的。
比如在一個集群里裝幾個純KNL的超節點等等,KNL本身就有對NUMA的支持。
個人認為可以........更容易開發,好的與CPU協作,實際應用時可以有更高的效率,Tesla啥的實際計算比峰值性能少不小
干不掉。未來沒有Phi的位置。我認為這種介於GPU和CPU定位的產品註定會出局。
1,並行編程和串列編程就是有本質區別。想用一個#pragma就想並行化是想抹殺並行編程區別與串列編程的一些本質區別,不可能成功。能用向量化指令就能搞定的並行編程都只能算皮毛,不是並行編程的精髓。並行編程所依賴的運行時模型由CUDA/OpenCL較好的建模了。
2,市場路線失敗。誰用Phi?也只有你們這些搞超算的用Phi。GPU現在是有個手機的人都在用也用的起的。只有在大眾市場的普及刺激下,產品才有迭代發展的動力。現在一千塊的手機GPU跑OpenCL 2.0妥妥的。性能接近最強Titan X的GTX1080也是唾手可得。Phi居然還受美國管制。誰用啊,想用也沒有。
那未來是什麼產品格局呢?一個是融合,核顯,APU這種,不要內存倒騰,有優勢;另一個是獨立GPU卡的模式,再一個就是FPGA了。我認為就這三種。最後一個FPGA還要等普及,等價格下來才能接近前兩者。是ASIC的良好過渡,在深度學習加速演進的今天,還是有他的位置的。
就目前的情況,在相當長的一斷時間,還不能。
GPU出現的時間已經有很長一陣子了, 相關的應用已經成熟了許多。MIC可以說是Intel眼紅GPU而出的產品,本身就是追趕者的角色。如果沒有在架構優勢、應用性能、編程模型上的大幅超越,要實現產品市場的追趕,說服應用的開發者投入Xeon Phi的懷抱,幾乎沒什麼可能。
現今的情況是,MIC的優勢並不很明顯(至少Knight Corner是)。MIC所主要宣稱的易編程性,是高度依賴於編譯器的自動向量化和並行化。然而自動優化絕非是一勞永逸的事情,Intel編譯器能自動優化得好的應用,往往用GPU手動來做優化,難度也不會太大,效果也會很不錯(GPU也有OpenACC)。如果都做手動優化,GPU和MIC就各有各的優缺點了。我深有體會的一點是,編程模型中,MIC的SIMD的就比GPU的SIMT機械太多。
性能的優化是無止境的,而且也是有代價的。架構之上, 易編程性和高性能是很難兼得的。易編程往往意味著損失一部分性能。舉個例子,MIC的L2 Cache維護了一致性,能夠提高訪存效率個人認為MIC是一個坑。它出來的時間非常短,應用面先,不像cuda這麼成熟。雖然它很容易進行程序移植,但其很難達到理想效果。真實效果遠不如cuda
根據我之前的實驗,mic並沒有在性能上超過高端cpu,價格和能耗也沒什麼優勢。所謂的代碼直接移植並不能取得太好的加速結果。mic還是要做很多代碼層面的並行優化才能取得好的加速比,門檻並不低。
Phi 應用軟體太少。
GPU的已經規模化了。
但GPU的性能瓶頸卡在與cpu交互上
GPU和PowerPC合作了,應用支持怎麼樣?
個人親身感受,內存訪問是硬傷。knight corner的理論峰值是沒錯的,但這隻適合處理數據的局部性非常好的情況,也就是沒有大量內存訪問的情況。intel自己也強調了,向量化的好處相比內存訪問是廉價的,所以不是所有程序都適合mic的,用intel的分析工具查看一下也能確定程序是否合適mic,若90%以上是不需要跨度大的內存訪問(局部性非常好)的矢量計算,那mic提速沒有懸念。據說knight landing在內存訪問方面改善了很多,但相比cpu還是有很大距離的。
phi的運算很難達到理論峰值,因為很多演算法都是core花很多時間等內存。
就個人了解的情況來看,很多應用在gpu上跑得很歡而且nvidia對用戶應用移植也直接提供技術支持。intel的phi目前的實際應用應該不多,但是它和intel是一家的,協作效率可能會好些,然後用戶的應用程序可以省去一道移植的工序,可以省掉很多麻煩,節省一些時間。究竟誰能幹掉誰,個人覺得,一個人玩,會不會很孤寂?
我認為並不容易,雖然Xeon Phi的理論運算性能比CPU高出不少,但在實際評測時,在比較簡單的並行模擬上都沒有太大的優勢(可參考這個評測報告英特爾MIC(Xeon Phi)與CPU(Xeon E5)性能測試對比)。個人認為,要使Xeon Phi有較好的運算性能還是需要像GPU一樣對源代碼作不少優化。
能,當MIC不再是phi的時候。但是性價比就別想了,如果真的變得很好用的話,或者說容易用得就和CPU編程一樣不用考慮很多,價格肯定會上去,這時&<理論峰值&>/&<單價&>的數值就不會那麼高了。像這種指標處於中間尷尬境地的phi,適合用來燒腦細胞,以及做暖手寶。
好吧,我就想知道一個phi卡上大概60個核,就性能而言這 誒一個核心能和 xeon E5 的一個核心相比么 ??
還是省省吧。兩個卡乾的不是一樣的活。一個處理單精度的比較強。一個處理雙精度的比較強。至於CUDA做雙精度。就呵呵了。在論文Initial results on computational performance of Intel many
integrated core, sandy bridge, and graphical processing unit
architectures: implementation of a 1D c++/OpenMP electrostatic
particle-in-cell code
中
The reason to use single precision with
CUDA is that the atomic add which is used to update the particles works with float only [18]. The
double version as suggested by Nvidia is very slow, and we doubt the corresponding results.
你懂得。
所以我認為這兩種卡是處理兩個領域的問題。
交集雖然有,但是不多。估計以後會有成熟的產品來證明這個。
推薦閱讀:
※如何評價英特爾8代酷睿處理器的國行價格?
※怎麼看待INTEL處理器支持AVX-512指令集?
※英特爾顯卡相比其他顯卡如何?
※為什麼Intel不開發獨立顯卡(GPU)而是選擇開發Xeon Phi這種協處理器?
※Google、Intel、Adobe 等多家公司之間的「互不挖牆角」協議是否違法?