GPU和MIC是目前兩個流行的異構計算平台,二者在市場上的地位類似。如果當下有一個fortran程式,是該選擇移植到GPU上還是MIC上呢?
個人推薦:GPU要優于MIC。
首先,我們來看下GPU和MIC的單機linpack結果:

LINPACK.png (50.54 KB, 下載下傳次數: 0)
linpack of GPU and MIC
2016-12-19 15:35 上傳
該測試的GPU為K40m,MIC為31S1P(天河2号專用卡)
從這個測試結果上看,MIC的linpack測試性能似乎略勝于GPU。
其次,從編譯器的軟體環境來看,CUDA FORTRAN的編譯器為PGI,MIC的編譯器為intel fortran,兩款編譯器對于fortran語言标準的支援有細微差别,
從移植的角度來說,如果原來的程式是用的intel的,移植選擇intel的編譯器可能要少些麻煩。除此以外,intel的編譯器是免費的,PGI是收費的,而且
費用還不低,如果單買PGI的fortran,需要5000rmb,同時購買PGI C和fortran,估計價格約為1萬rmb。幸運的是,PGI推出了社群版本,可以免費試用1年。
從支援的庫來看,MIC支援intel的MKL,而在GPU上的fortran庫隻有CULA,且CULA目前停止更新。當然可以通過fortran調用C的方式來調用其他的C
版本的庫,前提是PGI最好連C版本一起買了。
從使用的難易程度來看,MIC的接口很容易,形似openMP,fortran使用GPU的方式有兩種,一種CUDA FORTRAN,一種OPENACC。如果希望能深層次的
優化的話,CUDA FORTRAN更好一些。代價就是,增加了移植的難度。
從debug的角度來說,CUDA有支援的圖形化界面nvvp和指令行nvprof,而對于MIC來說,debug則顯得不友善,因為接口封裝的比較完美,底層不易觸及。
最後,我闡述下個人使用GPU和MIC的感受,對于GPU來說,固然有編寫代碼和優化的難題,但是,其效果是明顯和可預期的,隻要并行度高的程式總能
有加速比。而MIC表面上使用簡單,但真到用起來了也是“誰用誰知道”,簡單概況有兩大坑:第一,接口的坑。明明一個很簡單的類似openmp的接口語句,
就是給你報錯,報的莫名其妙,而且debug起來也是頭疼不已。第二,性能的坑。linpack測試的結果很喜人,實際用起來就不咋地,有時候不一定加速,甚至
減速也是有可能的。
總之,GPU目前來說更成熟更穩定,MIC的發展要晚于GPU,缺陷較多。希望對疑惑于選擇GPU還是MIC的同學們有些幫助。
原文釋出時間為: 2016-12-19 16:07:45
原文由:LGZ 釋出,版權歸屬于原作者
本文來自雲栖社群合作夥伴NVIDIA,了解相關資訊可以關注NVIDIA官方網站