openCL在执行大量数据时返回错误-58

时间:2012-12-30 03:21:26

标签: opencl breadth-first-search

我正在编写一个openCL代码,用于使用BFS查找每个节点到其他节点的最短路径。 (这是我正在做的细节: Shortest paths by BFS, porting a code from CUDA to openCL

以下是我如何拆分数据以传递给clEnqueueNDRangeKernel

size_t global_size, local_size;
local_size=1024;
global_size=ceil(e_count/(float)local_size)*local_size;
cl_event sync1;
err = clEnqueueNDRangeKernel(queue, kernel, 1, NULL, 
    &global_size, &local_size, 0, NULL, &sync1); //wait for this to finish (to synchronize);

err = clWaitForEvents(1,& sync1)

代码适用于edge的数量< = 50000(通过比其等效的cpu版本慢得多)。当我增加边数时,程序刚退出并给出错误-58(在clEnqueueNDRangeKernel之后)

我使用的是NVIDIA Geforce 630M。

我如何弄清楚发生了什么以及如何解决问题?

最好的问候

1 个答案:

答案 0 :(得分:3)

错误-58是CL_INVALID_EVENT(正如您在cl.h中看到的那样),clEnqueueNDRangeKernel不会返回错误,仅由clWaitForEvents返回。所以你可能只检查后一个函数的错误。为了找出实际错误是什么,您应该根据它可以返回的不同状态常量检查返回值clEnqueueNDRangeKernel。实际上,您应该为所有主机OpenCL函数执行此操作,否则将很难确定正在发生的错误类型。

在这种特定情况下,我打赌你有一个与内存有关的错误,例如CL_OUT_OF_RESOURCES(你的内核没有足够的本地或私有内存)。

希望这有帮助。