当我运行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的第三个参数的定义是“设备列表”,所以我认为“&设备”是正确的。这样对吗?如果我错了,“设备列表”的确切含义是什么?
答案 0 :(得分:0)
您是否尝试过使用valgrind运行程序(http://valgrind.org/docs/manual/quick-start.html)?如果您还将包含调试信息(使用-g标志在g ++或gcc中),它将显示生成分段错误的实际代码行。 在valgrind下运行程序非常简单: valgrind myprog [arg1] [arg2]