2014年6月19日木曜日

OpenCLによるGPGPU入門①_2

OpenCLのプログラムを書くには、
OpenCLによるGPGPU入門①で示したOpenCLプログラミングの流れ、
から分かるように、
1.でプラットフォームを選択し、
2.でデバイスを選択している。

1.のプラットフォームを選択する、とは、即ち、
どこのメーカーの提供しているソフトウェアを使用してハードをコントロールするのか、
という話で、例えばAMDのATI Streamでは、(Intelも含む)CPUとAMDのGPUを操作できる事が、
(OpenCLプログラムを書いて、情報を取得する事で、)分かる。

間違ってIntelのプラットフォームを選択すると、AMDのGPUは制御できないし、
NVIDIAのプラットフォームを選択しても、AMDのGPUは制御できない。

2.のデバイスの選択では、
先程説明したように、AMDなどのプラットフォームでは複数のデバイス(CPUとGPUなど)が認識されるので、
どのデバイスを使用するのか選択する必要がある。
当然GPUを複数挿している場合は、ここで複数のGPUが認識されると思われるので、
必要に応じて選択する。

以下、実装。

それで、いろいろと選択するために、情報を取得するコードを書き、確認する必要が必要がある。
実装は、

『プログラミング』 OpenCLプログラミング clGetPlatformInfo()
http://www.wisterias.org/?p=3708

『プログラミング』 OpenCLプログラミング clGetDeviceInfo()
http://www.wisterias.org/?p=3747

を参考にした。


プラットフォームのIDを取得する。



プラットフォームの情報を取得する。



デバイスのIDを取得する。



デバイスの情報を取得する


これらの関数を何回か回せば、必要な情報を取得できる。
いずれの関数も、始めに必要なバッファの大きさを調べてから実際の情報の取得を行っている。
mallocで確保しているので、関数が成功した場合は、関数の外で関数が情報を渡すために
使用したメモリを解放する必要がある事に注意したい。

(コード全体はプロジェクトをダウンロードして見て欲しい。)

私の環境での実行結果

一応「Device Info」も表示しているが、
実際問題殆ど使わないので(少なくとも私はまだ一度も使っていない。)、省略しても問題ない。



プロジェクトを上げておく。
MD5 | 13ecb55941cdde325b4810fc933484f5 | 9.8 MB | プラットフォームとデバイスIDの取得と表示
http://ux.getuploader.com/ADMIS/download/49/OpenCL_Ver0.00_01.zip

0 件のコメント:

コメントを投稿