1

私は OpenCL プログラミングの初心者です。私の最初のプログラムは私に苦労しています。各プラットフォームのすべてのデバイスのデバイス名とベンダー名を照会したかったのです。私のシステムには 2 つのプラットフォームがあり、1 つ目は AMD プラットフォームで、2 つ目は NVIDIA CUDA プラットフォームです。必要な情報を取得するために、次のコードを作成しました。

 int main(int argc, char **argv) {

    try {
            vector<cl::Platform>platforms;
            cl::Platform::get(&platforms);

            cl_context_properties properties[] = {CL_CONTEXT_PLATFORM, (cl_context_properties)(platforms[0])(), 0}; 
            cl::Context context(CL_DEVICE_TYPE_ALL, properties);

            vector<cl::Device> devices = context.getInfo<CL_CONTEXT_DEVICES>();

            string dName(devices[0].getInfo<CL_DEVICE_NAME>());
            string vendor(devices[0].getInfo<CL_DEVICE_VENDOR>());

            cout<<"\tDevice Name:"<<dName<<endl;
            cout<<"\tDevice Vendor: "<<vendor<<endl;    
    }catch(cl::Error  err) {
            cerr<<err.what()<<" error: "<<printErrorString(err.err())<<endl;

            return 0;
    }

}

でプラットフォーム インデックスを 1 に変更すると、

    cl_context_properties properties[] = {CL_CONTEXT_PLATFORM, (cl_context_properties)(platforms[0])(), 0}; 

私のプログラムは「セグメンテーション違反」でクラッシュします。

本当にありがとうございました。ありがとう!

4

1 に答える 1