特定のOpenCLプラットフォームやデバイスを取得する
About
「OpenCLプラットフォームの情報を取得する」から続く内容です。「OpenCLプラットフォームの情報を取得する」では、実行環境に存在する全てのOpenCLプラットフォームとそのデバイスを取得する方法を紹介しています。しかしながら多くの場合には、特定の1つのプラットフォームとデバイスがあればOpenCLによる処理を実行することができます。ここでは1つのプラットフォームとそのデバイスを取得するサンプルを紹介します。
実行環境下に複数のOpenCLプラットフォームが存在するとき、その何れか1つを選択するような仕組みが、現実的には必要になると思われます。デバイスの選択についても同じことが言えますが、プラットフォームやデバイスの最適な選択は、より専門的で高度な知識が必要になるハズです。
- &ref(): File not found: "OpenCLSharp_GetPlatformAndDevice.zip" at page "Programming/OpenCL/OpenCLSharp/Tutorial/3_GetSpecifiedPlatformAndDevice";
- VisualStudio 2012
- OpenCL 1.2
How to
clGetPlatformIDs や clGetDeviceIDs は、取得するOpenCLプラットフォームないしデバイスの数を限定することができます。ここでは実行環境下で初めに見つかった1つのプラットフォームとそのデバイスを取得しています。
static void Main(string[] args) { try { int errcode; //プラットフォームの取得 //1つだけ取得する IntPtr[] platforms = new IntPtr[1]; uint platformCount; errcode = clGetPlatformIDs(1, platforms, out platformCount); if (errcode != CL_SUCCESS) throw new Exception("Error at clGetPlatformIDs : " + errcode); Console.WriteLine(platformCount); //デバイスの取得 IntPtr[] devices = new IntPtr[1]; uint deviceCount; errcode = clGetDeviceIDs (platforms[0], CL_DEVICE_TYPE_DEFAULT, 1, devices, out deviceCount); if (errcode != CL_SUCCESS) throw new Exception("Error at clGetDeviceIDs : " + errcode); Console.WriteLine(deviceCount); } catch (Exception e) { Console.WriteLine(e.ToString()); } Console.ReadLine(); }