//--- プラットフォームIDの取得 ---// cl_platform_id cpPlatform = NULL;//プラットフォームID ciErrNum = oclGetPlatformID(&cpPlatform); if (ciErrNum != CL_SUCCESS) { std::cerr << "Can't Get PlatformID\n"; return -1; }▲デフォルトのプラットフォームIDは「0 (=GL_CUCCESS)」。
//--- デバイスの取得 ---// cl_uint ciDeviceCount = 0; //デバイス数 cl_device_id *cdDevices = NULL;//デバイスID //デバイス数取得 → デバイスID取得 ciErrNum = clGetDeviceIDs(cpPlatform, CL_DEVICE_TYPE_GPU, 0, NULL, &ciDeviceCount); //データ格納用メモリ確保 cdDevices = new cl_device_id[ciDeviceCount]; ciErrNum = clGetDeviceIDs(cpPlatform, CL_DEVICE_TYPE_GPU, ciDeviceCount, cdDevices, NULL); if (ciErrNum != CL_SUCCESS) { std::cerr << "Error @ Getting device Infomation\n"; return -1; } … … //不要になったら破棄 delete [] cdDevices;
cl_context cxGPUContext;//OpenCLコンテキスト用 … … cl_int ciErrNum = CL_SUCCESS; //エラーチェック用 //--- デバイス関係 ---// cl_uint ciDeviceCount = 0; //デバイス数 cl_device_id *cdDevices = NULL;//デバイスID … … //コンテキストの作成 cxGPUContext = clCreateContext(0, ciDeviceCount, cdDevices, NULL, NULL, &ciErrNum); if (ciErrNum != CL_SUCCESS) { std::cerr << "Can't Create OpenCL Context\n"; return -1; }
cl_context clCreateContext( cl_context_properties *properties, //プロパテティ → 「NULL」 でいい cl_uint num_devices, //デバイス数 const cl_device_id *devices, //デバイスID void *pfn_notify ( //コールバック関数が必要な時に使用 → とりあえず「NULL」でいい const char *errinfo, const void *private_info, size_t cb, void *user_data), void *user_data, //pfn_notifyに与えるデータ → 「NULL」でいい cl_int *errcode_ret //→エラーコードを拾う時に使う。「NULL」も可能 )
cl_context cxGPUContext;//OpenCLコンテキスト用 cl_command_queue commandQueue;//コマンドキュー … … cl_int ciErrNum = CL_SUCCESS; //エラーチェック用 cl_device_id *cdDevices = NULL;//デバイスID … コンテキストの作成、デバイスIDの取得など … //コマンドキューの作成 commandQueue = clCreateCommandQueue(cxGPUContext, (*cdDevices), 0, &ciErrNum); if (ciErrNum != CL_SUCCESS) { std::cerr << " Error in clCreateCommandQueue call !!!\n"; return -1; }
cl_command_queue clCreateCommandQueue(cl_context context,//コンテキスト cl_device_id device,//デバイスID cl_command_queue_properties properties, //コマンドキューのプロパティ(今回は0にして無効化) cl_int *errcode_ret)//エラーコードを拾う時に使用(NULL可)