NVIDIA 的 CUDA 架構,基本上應該算是現階段最成功的 GPGPU 環境之一。他在新一代、專門用來做大量平行計算的環境裡面,算是推出最早的,所以相對起來、發展的也算是最完整的;而後來雖然 Khronos 有推出跨硬體平台的開放標準 OpenCL(Intel、AMD、NVIDIA 都有支援),但是就 Heresy 所知,還是有許多開發人員是偏好 CUDA 的。
而 AMD 在 GPGPU 這一塊…個人是覺得發展的始終有點悲劇吧?Heresy 有紀錄的部分,他最早是推出自家的「Stream SDK」,而之後就徹底捨棄自己的語言、完全轉投向 OpenCL、Stream SDK 也改名為「AMD APP SDK」了。
儘管 AMD 也試著在靠 OpenCL、以及後來所推出、基於 AMD APU 的「Heterogeneous System Architecture」(異質系統架構、官網)來做平行計算的發展方向(AMD 稱之為「Heterogeneous Computing」、異質計算),但是實際上…就個人所知,成效似乎不算是很好。
而在今年的 SC 大會,看來 AMD 是放狠招了!AMD 提出了「Boltzmann Initiative」、希望可以讓自家的產品更有用;其第一階段的成果,包括了「Heterogeneous Compute Compiler」(HCC),以及「Heterogeneous-compute Interface for Portability」(HIP)~
其官方公告是《AMD Launches ‘Boltzmann Initiative’ to Dramatically Reduce Barriers to GPU Computing on AMD FirePro™ Graphics》;另外在 AnandTech 上也有相對完整的資料《AMD @ SC15: Boltzmann Initiative Announced – C and CUDA Compilers for AMD GPUs》。
上圖就是取自 AnandTech 的投影片畫面。可以看到這邊列了三點:
- 這是一個伺服器基礎的異質系統架構技術
- HCC 這個編譯器可以使用 C 11/14、C11、OpenMP
- HIP Runtime 加上 HCC 可以讓 CUDA 的程式在這個環境運作
HCC 基本上是一個「Headless Linux」(沒有螢幕、鍵盤等使用者介面的環境)以及基於 HSA Runtime 的 GPU 環境;這個環境主要是針對高速計算(High Performance Computing、HPC)的族群而設計的,期望能讓他們的 FirePro 產品線(官網)在這個領域能有一席之地。
上圖就是取自 AnandTech 的投影片畫面,可以看到,這個環境的特點,其中一個就是提供一個 CPU 和 GPU 的統一記憶體架構。(AMD 本來在 APU 上就有了,但是獨立繪圖晶片上似乎沒有;而這點 NVIDIA 在 CUDA 6 開始已經有提供了。)
另一方面,HCC 這個號稱異質計算專用的編譯器,基本上是基於 Clang/LLVM 來開發的,它支援 C11、C 11、C 14、OpenMP 4.0 等標準語法,而且不管是 CPU 或 GPU 的程式,都可以在同一個環境下編譯。另外,他也支援 C 17 的 Parallel STL!所以在撰寫上的彈性,算是相當高的~(不需要像 OpenCL 一樣,需要另外編譯 kernel)
不過,Heresy 個人覺得 AMD 這次真的比較兇狠的,是他們提供了「Heterogeneous-compute Interface for Portability」(HIP)這個工具,把使用 NVIDIA CUDA 開發的程式碼、轉換成 AMD 自己的 HIP 程式碼、進而可以透過 HCC 編譯器編譯成可以在 AMD 的處理器上面運作的程式!
也就是說,雖然 AMD 的顯示卡還是不能執行 CUDA 的程式,但是如果是使用 CUDA 的開發者,就可以透過 AMD HIP 這個工具,把自己的程式另外編譯成 AMD 的版本、讓他可以在 AMD 的 GPU 上運作了!
透過這個機制,AMD 或許可以把一些 NVIDIA CUDA 的開發者,拉到 AMD 的開發環境來吧?不過,接下來的問題,應該就是這樣的機械轉換效能會多好、再來就是要看 NVIDIA 會不會反制了?
附註: