Функция Opencl, устаревшая Visual Studio - программирование

Функция Opencl, устаревшая Visual Studio

Я начинаю с opencl в VS, используя этот учебник:

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

Если я удалю часть очереди команд, остальное будет работать без проблем. Как я могу сделать эту работу?

4b9b3361

Ответ 1

Функция clCreateCommandQueue была устарела с OpenCL 2.0 и заменена на clCreateCommandQueueWithProperties. Если вы настроили таргетинг только на устройства, поддерживающие OpenCL 2.0 (некоторые недавние процессоры Intel и AMD на момент написания), вы можете безопасно использовать эту новую функцию.

Если вам нужен ваш код для работы на устройствах, которые еще не поддерживают OpenCL 2.0, вы можете продолжать использовать устаревшую функцию clCreateCommandQueue, используя макросы препроцессора, которые предоставляют заголовки OpenCL, например:

#define CL_USE_DEPRECATED_OPENCL_1_2_APIS
#include <CL/cl.h>