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 64 位环境,以及用于 GPGPU 的 NVIDIA GeForce GT 330。

*添加问题的编辑:clBuildProgram 中第三个参数的定义是“设备列表”,所以我认为“&device”是正确的。这样对吗?如果我错了,“设备列表”的确切含义是什么?

4

1 回答 1

0

您是否尝试过使用 valgrind (http://valgrind.org/docs/manual/quick-start.html) 运行程序?如果您还包含调试信息(在 g++ 或 gcc 中使用 -g 标志),它将向您显示产生分段错误的实际代码行。在valgrind下运行程序非常简单:valgrind myprog [arg1] [arg2]

于 2012-08-21T10:16:22.323 回答