如何評價CUDA、OpenCL、OpenMP、OpenACC等主流並行運算框架?


CUDA:我當然是茲詞的

OpenCL:你乾爹全有親兒子,誰管你

OpenMP:CPU多線程而已,和GPU無關,不具可比性

OpenACC:用WP的人都比用它的人多,談何主流


前三個沒啥好說的,OpenACC哪裡主流了?。。至今沒寫過,你們誰贊助我一套PGI編譯器啊。。什麼,開源實現?gcc有個半成品,早著呢。。


CUDA: 好用也挺成熟了,畢竟那麼多年了。但是只支持 NV 的 GPU 這個有點麻煩。

OpenCL: 一般,也比較成熟了。這個支持的就多多了,不光是 NV GPU/Xeon Phi可以用,Intel的核芯顯卡甚至Altera的FPGA都能用。也有不少開源項目在用了。

OpenMP: 沒啥好比較的。OpenMP是給你處理線程並行的,不能處理 offload.

OpenACC: Cray, Nvidia 和 PGI 想來挑戰 Intel 和 IBM 的?後來又加上了個 AMD,然並卵。Intel Cilk Plus 都比它好用多了而且 Intel Compiler 還有原生支持。


OpenCL沒啥大發展的,作為一個不打算深掘或者只是做應用為主的工程師或者團隊,肯定要先看一個平台的官方支持力度或者發展社區的。

CUDA牛逼多了這方面

不要在GPGPU這裡扯什麼跨平台,你做一個項目要多久?你也得看看你做的項目一個做多久嘛,用在哪一塊嘛

對於老闆當然希望用跨平台的東西來省工資了。

但關你毛事啊。。。。。。

你能用好一個平台幾年時間做好一個項目,你下半輩子就OK了。。。。對吧。。。

人生短短几十年,要注意開發效率和學習曲線的呢

我不是OpenCL黑啊,CUDA肯定是優先要上手的。。。。

OpenMP我就不說了,同樣有毛病,還不少。。。。。。

CUDA本身的迭代和發展快多了。。。。


這個學期在學習高性能計算的課程中接觸到這些,所以不是很懂,只能發個淺見,主要還是談各個庫的優點(我才不會說,因為我不太懂,所以還不知道什麼缺點),如有錯誤,歡迎指正。

  • CUDA: 貌似上面的前輩們都已經總結了優缺點了,再敘述一遍吧。N家的多線程計算平台和API,支持GPU。
    • 關鍵詞: 既有平台又是API
    • 語言支持: C/C++, Fortran
    • 優點:版本更行快,社區活躍, 支持GPU
    • 缺點:只支持N卡
  • OpenCL: 不是很了解,搬運下wiki的內容吧。看這wiki的內容,感覺不明覺厲啊。異構平台,支持CPU,GPU, DSPs, FPGAs 等。在多進程方面使用 task-based 和 data-based parallelism。
    • 關鍵詞: 平台 + API
    • 語言支持: C/C++
    • 優點: 跨好多平台啊
    • 缺點:版本更新慢
  • OpenMP: 這是directive-based parallelism。在寫完一般的代碼後,轉成多線程需要改動的地方不是很大,但只能支持shared memory(共享存儲?),是一個管理線程級別的庫。
    • 關鍵詞: API
    • 語言支持: C/C++, Fortran
    • 優點:移植改動少,支持普遍(普通的gcc都支持)
    • 缺點:只支持shared memory
  • OpenACC: 支持CPU/GPU工作,從名字Accelerator就可以推斷出,主要用於CPU代碼向GPU的移植(?有待考證,我在課程中主要是這麼用的。。。),更新方面其實也不快,需要注意編程技巧,否則代碼會變慢。
    • 關鍵詞: API
    • 語言支持: C/C++, Fortran
    • 優點: 移植簡單
    • 缺點: 編譯器啊,支持PGI,看計劃有支持GCC,但還不知道什麼時候才能發布
  • OpenMPI: 消息傳遞介面庫。支持分散式存儲,適合大規模集群伺服器。另外,需要手動管理數據的分布和消息的傳遞,需要重新修改代碼。
    • 關鍵詞: API
    • 語言支持: C/C++
    • 優點: 支持共享存儲和分散式存儲
    • 缺點: 模型複雜,需要重構代碼。


CUDA版本更新很快,用起來很方便很多(相比GLSL),但僅限N卡。OpenCL跨平台,社區貌似不太活躍,更新不如CUDA。OpenMP不太了解。話說OpenCL和OpenMP這些個在工業界應用多嗎?我所了解的貌似都是學術界在用。CUDA貌似還是有比較不錯的雲平台的,比如阿里雲,EC2。


CUDA 是NVIDA的GPU編程框架,速度可以,coding時需要考慮GPU和CPU之間的內存拷貝耗時

OPENCL 就是一個GPU通用編程的框架,聽說寫起來對coder不夠友好。

OPENMP 我也用過, 優點是寫法簡單,但是缺點就是太太太耗CPU了, 還不如自己寫多線程省CPU。

OPENACC 這玩意沒聽過。。


推薦閱讀:

如何看待通信和計算機的發展前景對比?
我想配一台5000左右的台式機。主要玩玩NBA 2K17系列,LOL 的電腦希望大神來個可靠配置?
如果沒有周鴻禕,中國的殺毒軟體市場會是怎樣一番格局?
編程新手先學 C 語言還是 Pascal?
如何寫代碼才能讓代碼透出一種滄桑感?

TAG:編程 | 計算機 | GPU通用計算 | CUDA | GPU |