GPUをグラフィック処理ではなく汎用計算に利用しようというGPGPUのためには、CUDAかOpenCLを利用するのが一般的です。NVIDIA的には、CUDAはGPGPUの開発環境であり、プログラミング言語としてC for CUDAかOpenCLを選べる、つまりCUDAはOpenCLの上位概念らしいのですが、一般にはCUDAとOpenCLは対立するものとして認識されているような気がします。
CUDAはNVIDIAのGPUにしか対応していないのに対して、OpenCLはNVIDIAのGPUとAMDのGPU、IntelとAMDのCPUにも対応しているので便利です(対応していないGPUやCPUもあります)。
IntelのCPUとHD GraphicsでOpenCLを利用できるようにする、Intel SDK for OpenCL Applicationsの新版(2013)が出たので、ちょっと使ってみます。
OpenCLに対応したデバイスを列挙することで、複数のデバイスに対応しているというOpenCLの特徴を確認してみましょう。規格で定まっているわけではないようですが、複数のOpenCL環境をインストールしているときには、複数のOpenCLプラットフォームがOpenCLのAPIから認識できるようになるようです(後述の参考書p.71)。
実行するためには、以下のいずれかが必要です。
- NVIDIA GPUのためのCUDA
- AMD GPUのためのAccelerated Parallel Processing (APP) SDK
- IntelのCPUおよびHD GraphicsのためのIntel SDK for OpenCL Applications
開発は、WindowsとGNU/Linux、Macのいずれでも可能です。株式会社フィックスターズ『OpenCL入門 1.2対応 マルチコアCPU・GPUのための並列プログラミング』(インプレスジャパン, 改訂新版, 2012)(サポートサイト)などを参考にすると、開発環境を比較的簡単に構築できます。(参考:Visual Studio + Intel SDK for OpenCL)
適当な開発環境を用意したら、以下のプログラムをビルド・実行します(RSSリーダーでは見られないかもしれません)。
OpenCLの実装は複数のプラットフォームを認識できるものになっているので、上のコードでは、プラットフォームを列挙しつつ、各プラットフォームが持つデバイスを列挙しています。
私のデスクトップPCでの実行結果はこんな感じです。プラットフォーム毎にデバイスが1つあるというわかりやすい構成です。
Platform: NVIDIA CUDA CL_PLATFORM_VERSION: OpenCL 1.1 CUDA 4.2.1 Device: GeForce GTX 580 CL_DEVICE_VERSION: OpenCL 1.1 CUDA ------------------------------------------------------------------------------ Platform: Intel(R) OpenCL CL_PLATFORM_VERSION: OpenCL 1.2 Device: Intel(R) Core(TM) i7 CPU 950 @ 3.07GHz CL_DEVICE_VERSION: OpenCL 1.2 (Build 63463) ------------------------------------------------------------------------------
私のノートPCでの実行結果はこんな感じです。2番目のプラットフォームにはデバイスが2つあり、そのうち1つは1番目のプラットフォームのデバイスと同じという、わかりにくい構成になっています。
Platform: AMD Accelerated Parallel Processing CL_PLATFORM_VERSION: OpenCL 1.2 AMD-APP (923.1) Device: Intel(R) Core(TM) i7-3612QM CPU @ 2.10GHz CL_DEVICE_VERSION: OpenCL 1.2 AMD-APP (923.1) ------------------------------------------------------------------------------ Platform: Intel(R) OpenCL CL_PLATFORM_VERSION: OpenCL 1.2 Device: Intel(R) Core(TM) i7-3612QM CPU @ 2.10GHz CL_DEVICE_VERSION: OpenCL 1.2 (Build 63463) Device: Intel(R) HD Graphics 4000 CL_DEVICE_VERSION: OpenCL 1.1 ------------------------------------------------------------------------------
プラットフォームについて得られる情報は、http://www.khronos.org/registry/cl/sdk/1.0/docs/man/xhtml/clGetPlatformInfo.htmlにまとまっています。
デバイスについて得られる情報は、http://www.khronos.org/registry/cl/sdk/1.0/docs/man/xhtml/clGetDeviceInfo.htmlにまとまっています。
Mathematicaなら、すべての情報を以下の2行で得られて便利です(参考:OpenCLInformation)。
Needs["OpenCLLink`"] OpenCLInformation[]