【发布时间】:2012-08-21 06:26:14
【问题描述】:
当我运行我的 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 和 NVIDIA GeForce GT 330 for GPGPU 的环境。
*编辑添加问题:clBuildProgram 中第三个参数的定义是“设备列表”,所以我认为“&device”是正确的。这样对吗?如果我错了,“设备列表”的确切含义是什么?
【问题讨论】:
-
您是否尝试过在调试器中运行,并查看使用的变量是否正常?
-
还没有,因为对我来说这是第一次进行OpenCL编程,所以我正在寻找可以使用的调试器。你知道有什么好的调试器可以解决这个问题吗?
-
我猜你的内核代码中有一个错误。可以发在这里吗?
-
实际上,我尝试运行的这个 opencl 代码来自我的 opencl 编程研究的网页。您可以在这里找到内核代码(倒数第二个的代码框):gamedev.net/blog/1241/…
-
您可以使用 VS 调试器 (F5) 进行主机代码调试,对于内核和 API 调试,有许多程序,例如 AMD 的 OpenCL/GL 调试器:developer.amd.com/tools/gDEBugger/Pages/default.aspx
标签: c++ segmentation-fault opencl