Top > Programming > OpenCL > OpenCLSharp > Tutorial > 3_GetSpecifiedPlatformAndDevice
Last-modified: Sat, 07 Sep 2013 07:31:31 JST
Counter:2476 Today:1 Yesterday:0 Online:5
このエントリーをはてなブックマークに追加

特定の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();
        }