私はこのチュートリアルを使用してVSでopenclを始めています:
https://opencl.codeplex.com/wikipage?title=OpenCL%20Tutorials%20-%201
ホストプログラムの設定に問題があります。これはこれまでのコードです:
const char* clewErrorString(cl_int error) {
//stuff
}
int main(int argc, char **argv) {
cl_int errcode_ret;
cl_uint num_entries;
// Platform
cl_platform_id platforms;
cl_uint num_platforms;
num_entries = 1;
cout << "Getting platform id..." << endl;
errcode_ret = clGetPlatformIDs(num_entries, &platforms, &num_platforms);
if (errcode_ret != CL_SUCCESS) {
cout << "Error getting platform id: " << clewErrorString(errcode_ret) << endl;
exit(errcode_ret);
}
cout << "Success!" << endl;
// Device
cl_device_type device_type = CL_DEVICE_TYPE_GPU;
num_entries = 1;
cl_device_id devices;
cl_uint num_devices;
cout << "Getting device id..." << endl;
errcode_ret = clGetDeviceIDs(platforms, device_type, num_entries, &devices, &num_devices);
if (errcode_ret != CL_SUCCESS) {
cout << "Error getting device id: " << clewErrorString(errcode_ret) << endl;
exit(errcode_ret);
}
cout << "Success!" << endl;
// Context
cl_context context;
cout << "Creating context..." << endl;
context = clCreateContext(0, num_devices, &devices, NULL, NULL, &errcode_ret);
if (errcode_ret < 0) {
cout << "Error creating context: " << clewErrorString(errcode_ret) << endl;
exit(errcode_ret);
}
cout << "Success!" << endl;
// Command-queue
cl_command_queue queue;
cout << "Creating command queue..." << endl;
queue = clCreateCommandQueue(context, devices, 0, &errcode_ret);
if (errcode_ret != CL_SUCCESS) {
cout << "Error creating command queue: " << clewErrorString(errcode_ret) << endl;
exit(errcode_ret);
}
cout << "Success!" << endl;
return 0;
}
ただし、これはコンパイルされません:error C4996: 'clCreateCommandQueue': was declared deprecated
コンパイルしようとしたとき。現時点では、全体のセットアッププロセスがわからないので、何かを台無しにしたかどうかはわかりません。クロノスによると、関数は非推奨ではないようです: https://www.khronos.org/registry/cl/sdk/1.0/docs/man/xhtml/clCreateCommandQueue.html
コマンドキュー部分を削除すると、残りは問題なく実行されます。どうすればこれを機能させることができますか?
clCreateCommandQueue
関数はOpenCL 2.0で廃止され、 clCreateCommandQueueWithProperties
に置き換えられました。 OpenCL 2.0(執筆時点では最近のIntelおよびAMDプロセッサーの一部)をサポートするデバイスのみをターゲットにしている場合は、この新しい機能を安全に使用できます。
OpenCL 2.0をまだサポートしていないデバイスでコードを実行する必要がある場合は、OpenCLヘッダーが提供するプリプロセッサマクロを使用して、非推奨のclCreateCommandQueue
関数を引き続き使用できます。
#define CL_USE_DEPRECATED_OPENCL_1_2_APIS
#include <CL/cl.h>