1

opencl プログラムを実行すると、clBuildProgram で「Segmentation fault」というメッセージが表示されます。このプログラムのコンパイル中にエラー メッセージは表示されませんが、実行すると「セグメンテーション違反」が表示されます。Opencl API を次のようにまとめました。私のコードに間違いはありますか?

clGetPlatformIDs(1, &platform, &num_platforms);
status = clGetDeviceIDs(platform, CL_DEVICE_TYPE_GPU, 1, &device, &num_devices);
cl_context context = clCreateContext(NULL, 1, &device, NULL, NULL, NULL);
queue = clCreateCommandQueue( context, device, 0, NULL);
cl_program program = clCreateProgramWithSource( context,1,&str,NULL, NULL);
cl_int result = clBuildProgram(program, 1, &device, NULL, NULL, NULL);

私も次のように実行しようとしましたが、同じ問題が発生します。

cl_int result = clBuildProgram(program, 0, NULL, NULL, NULL, NULL);

ところで、Linux Ubuntu 10.04 64bit の環境で、GPGPU には NVIDIA GeForce GT 330 を使用しています。

※質問追加のため編集:clBuildProgramの第3引数の定義は「デバイスリスト」なので、「&device」でいいと思います。そうですか?私が間違っている場合、「デバイス リスト」の正確な意味は何ですか?

4

1 に答える 1

0

valgrind (http://valgrind.org/docs/manual/quick-start.html) を使用してプログラムを実行してみましたか? デバッグ情報も含める場合 (-g フラグを使用して g++ または gcc で)、セグメンテーション違反が発生した実際のコード行が表示されます。valgrind の下でプログラムを実行するのはとても簡単です: valgrind myprog [arg1] [arg2]

于 2012-08-21T10:16:22.323 に答える