Home People Research Blog Courses Links Search Download
NCHC

Blog

Blog 最新文章

  1. Visual Studio 的遠端偵錯:Windows
    2021/03/24 14:45
  2. Visual Studio 2019 16.9 支援使用 OpenMP LLVM
    2021/03/03 13:52
  3. Valve 推出完全支援 OpenXR 的 SteamVR 1.16.8
    2021/02/25 09:43

Blog 最新回應

  1. 加入斜體文字...
    2021/02/07 21:06
  2. 加入斜體文字...
    2021/02/07 21:06
  3. 加入斜體文字...
    2021/02/07 21:06

Keyword 關鍵字

開放資料 開放資料 OpenNI2 ASUS Xtion Oculus Rift S HoloLens 2 javascript NiTE2 CUDA Boost OpenCV OpenNI VR Java C++14 資訊地圖 資料視覺化 Docker Python C++17 Oculus Quest 2 OpenMP OpenXR C++11 C++ Valve Index HTC Vive GitLab C++14 Python git iFlyover Pandas PHP Kinect MR Qt Pandas 3d print Vulkan CubeX HTC Vive Focus OpenVR OpenCL Docker HTC Vive Pro OpenGL xml WebGL C++20 Windows MR svn VR 3D立體 Oculus

類別:技術相關 » 技術研究
文章發表|我要回應|RSS訂閱

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

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 CUDA、OpenCL、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,總覺得這個寫法怪怪的,所以就不引用了。
張貼者:heresy於2011/11/18 08:53 上午有1則回應,瀏覽次數:3,209次
gpusolution 於 2012/03/26 10:37 上午 回應:
我们在中国国内大力推广OpenACC.希望能彼此交流一下,这是我们的论坛:
bbs.gpuworld.cn,希望能上来看看

-- TOP --

我要回應
* 身份  訪客 (暱稱:)
 本篇文章作者 (帳號:密碼:)
* 內容      
很高興 悲傷 震驚 疑惑 大笑 發瘋 傷心
* 留言密碼 (請輸入下方圖片中去除前、後位數的數字,共五碼。)
說明 1. * 表示必填欄位。
2. 不支援HTML Tag。
   

-- TOP --

© Visualization and Interactive Media Laboratory of NCHC, 2007 - 2021, All Rights Reserved. Contact E-mail