web-dev-qa-db-ja.com

Visual Studioで非推奨となったOpencl関数

私はこのチュートリアルを使用して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

コマンドキュー部分を削除すると、残りは問題なく実行されます。どうすればこれを機能させることができますか?

18
PEC

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>
37
jprice