Я получаю начал с OpenCL в VS с помощью этого учебника:функции OpenCL найдено устаревший Visual Studio
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
Если я удалю часть очереди команд, остальное бежит без проблем. Как я могу сделать эту работу?
Yep , теперь нет проблем. Благодаря! – PEC
У вас нет * есть * для использования функции. Вы получите предупреждение, потому что в будущем мы не будем добавлять новые функции к таким функциям, но это совершенно верно для использования и будет поддерживаться во время работы в обозримом будущем. Вместо того, чтобы сообщать VC++ игнорировать предупреждения об отказе, вы можете безопасно отключить их в заголовках OpenCL напрямую, используя флаги CL_USE_DEPRECATED_OPENCL_1_0_APIS (1_1, 1_2 ...). – Lee
@ Lee Спасибо, я забыл про эти удобные макросы. Я обновил свой ответ соответственно. – jprice