Visual Studio 已弃用 Opencl 函数
Opencl function found deprecated by Visual Studio
我正在使用本教程开始在 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
。到目前为止,我还不了解整个设置过程,所以我不知道我是否搞砸了。根据 chronos,该功能似乎并没有被弃用:
https://www.khronos.org/registry/cl/sdk/1.0/docs/man/xhtml/clCreateCommandQueue.html
如果我删除命令队列部分,其余部分运行没有问题。我怎样才能使这项工作?
从 OpenCL 2.0 开始,clCreateCommandQueue
函数已弃用,取而代之的是 clCreateCommandQueueWithProperties
。如果您只针对支持 OpenCL 2.0 的设备(在撰写本文时是一些最新的 Intel 和 AMD 处理器),您可以放心地使用这个新功能。
如果您需要代码在尚不支持 OpenCL 2.0 的设备上 运行,您可以继续使用已弃用的 clCreateCommandQueue
函数,方法是使用 OpenCL headers 提供,例如:
#define CL_USE_DEPRECATED_OPENCL_1_2_APIS
#include <CL/cl.h>
我正在使用本教程开始在 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
。到目前为止,我还不了解整个设置过程,所以我不知道我是否搞砸了。根据 chronos,该功能似乎并没有被弃用:
https://www.khronos.org/registry/cl/sdk/1.0/docs/man/xhtml/clCreateCommandQueue.html
如果我删除命令队列部分,其余部分运行没有问题。我怎样才能使这项工作?
从 OpenCL 2.0 开始,clCreateCommandQueue
函数已弃用,取而代之的是 clCreateCommandQueueWithProperties
。如果您只针对支持 OpenCL 2.0 的设备(在撰写本文时是一些最新的 Intel 和 AMD 处理器),您可以放心地使用这个新功能。
如果您需要代码在尚不支持 OpenCL 2.0 的设备上 运行,您可以继续使用已弃用的 clCreateCommandQueue
函数,方法是使用 OpenCL headers 提供,例如:
#define CL_USE_DEPRECATED_OPENCL_1_2_APIS
#include <CL/cl.h>