超簡單的 GPGPU 程式開發標準:OpenACC!

| | 0 Comments| 08:53
Categories:

Heresy 之前已經介紹過好幾種使用 GPU 來進行平行計算的程式(GPGPU)開發標準了∼包括了這方面的領先者 nVIDIA CUDA、跨平台/跨硬體的 OpenCL、微軟的 DirectX 的 DirectCompute、以及將在 VIsualStudio 11 推出的 C AMP…基本上,這些各式各樣新標準的出現,都不斷底降低 GPGPU 這類 data-parallel 程式開發的門檻。

而現在,以 PGI、nVIDIA 為首的幾家公司(CRAY、CAPS…),在今年的 SC11 上,又推出了一個簡化到極致的新標準了!這個新標準的名字,就是 OpenACC(註一)∼他的官方網站是:http://www.openacc-standard.org/

為什麼 Heresy 用「簡化到極致」來描述呢?基本上,在 nVIDIA CUDAOpenCL、DirectCompute 裡,都還需要自己去處理 device 的管理、記憶體資源的管理等等瑣碎的事,也有不少特殊的語法,門檻其實還是算滿高的。而就算是 Heresy 覺得最簡單的 C AMP,雖然在程式寫法上已經非常像是 STL 的 algorithm 的用法,但是也還是要先自己處理好變數的記憶體空間。

而這個新推出的 OpenACC 呢,他則是非常地接近之前介紹過的 OpenMP,在最簡單的狀況下,只需要加上簡單的 compiler directive、就可以把 C / C / Fortran 的迴圈平行化、在 GPU 或 CPU 上執行了!(註二)

右圖應該就是 nVIDIA 投影片裡面的示意圖(圖片來源),看起來非常地像 OpenMP 吧?Heresy 自己是還沒認真看完官方所給的規格書(網頁PDF),不過大概掃過一下的感覺,使用上的邏輯應該和 OpenMP 差不多吧∼(註三)

實際上,稍微看看官方的 Quick Reference Guide(網頁PDF),也可以發現 OpenACC 在語法上,似乎和 OpenMP 非常地接近∼根據官方 FAQ 的說法,OpenACC 就是定義成可以和 OpenMP 互相操作(interoperable)的。

而如果 OpenACC 真的可以像 OpenMP 一樣、非常簡單地就針對迴圈進行平行化的話,那對於一般的程式開發者來說,真的會是一大福音啊!


不過最重要的,現在有哪些編譯器支援 OpanACC 呢?根據官方 FAQ,不多,只有下面四種:

  • PGI Accelerator C/C /Fortran for NVIDIA GPUs
  • Cray CCE compilers for Cray systems
  • CAPS Enterprise HMPP Workbench
  • Other implementations TBD/TBA

由於剛發布,所以滿理所當然的,比較普遍的 MSVC、gcc 都沒有在列表上。那以後這些其他的編譯氣是否會支援呢?現在應該還不明朗,應該還是得之後看這些廠商的意願了∼不過,如果過一段時間後,如果主流邊義器都還是不支援的話,那這個標準應該還是會滿尷尬的吧。 ^^"

而能在那些加速器/裝置上跑呢?目前基本上應該只能透過 CUDA 在 nVIDIA 的 GPU 上執行,想要透過 OpenCL、或在 AMD GPU 上執行,就要等有對應的實作出來了。理論上,只要有人願意實作,應該就可以讓他可以執行了∼所以,就看 AMD 賞不賞光吧∼ :p

不過,不管怎麼說,這東西都還只是剛發表,要到真正普遍、成熟,應該還要一段時間;Heresy 也希望這類簡易版的平行化程式開發方案,能夠更加的普及,讓 GPU 這類的 many-core 的處理器,效能能更簡單地發揮出來∼

之後 Heresy 應該也會認真研究一下這東西,有一些心得的時候,再和大家分享吧。


附註:

  1. 實際上,由於原來被稱為 GPGPU 的技術與應用越來越普遍、而且裝置也不見得都是 GPU 了(像 nVIDIA Tesla 某種程度上就已經算是脫離 GPU 的類型了),所以這邊是把這類用來做額外平行化計算的裝置,統一叫做「加速器」(accelerator)。而 OpenACC 的 ACC,應該就是 accelerator 的字首。

  2. OpenMP 目前並不支援 GPU 這類特別的「加速器」,不過他們也有打算要整合 OpenACC,讓之後新版的 OpenMP 也能支援這類特別裝置上的平行計算。

  3. Geeks3D 的《OpenACC: a new Standard for Parallel Computing》一文內,有給一段簡單的範例程式,裡面加上的 directive 是「#pragma acc region for」;不過 Heresy 跑去翻了一下 Quick Reference Guide 和 Specification,總覺得這個寫法怪怪的,所以就不引用了。

1 thought on “超簡單的 GPGPU 程式開發標準:OpenACC!”

  1. 我们在中国国内大力推广OpenACC.希望能彼此交流一下,这是我们的论坛:bbs.gpuworld.cn,希望能上来看看

Leave a Reply

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *