smu*_*kes 5 memory nvidia opencl
看起来200万个花车应该没什么大不了的,只有8MB的1GB GPU内存.我能够有时分配那么多,有时甚至比没有麻烦.当我执行clEnqueueReadBuffer时,我得到了CL_OUT_OF_RESOURCES,这看起来很奇怪.我能够嗅出问题真正开始的地方吗?在clEnqueueReadBuffer中,OpenCL不应该像这样失败吗?应该是我分配数据的时候吗?有没有办法获得更多的细节而不仅仅是错误代码?如果我能看到当OpenCL声明CL_OUT_OF_RESOURCES时分配了多少VRAM,那将会很酷.
我遇到了同样的问题(花了我一整天的时间来解决).我相信有同样问题的人会偶然发现这个问题,这就是我发布这个老问题的原因.
您可能没有检查内核的最大工作组大小.
这是你如何做到的:
size_t kernel_work_group_size;
clGetKernelWorkGroupInfo(kernel, device, CL_KERNEL_WORK_GROUP_SIZE, sizeof(size_t), &kernel_work_group_size, NULL);
Run Code Online (Sandbox Code Playgroud)
我的设备(2x NVIDIA GTX 460和Intel i7 CPU)支持最大工作组大小为1024,但是当我通过Path Tracing内核时,上面的代码返回大约500.当我使用1024的工作组大小时,它显然失败并给了我CL_OUT_OF_RESOURCES错误.
内核变得越复杂,它的最大工作组大小就越小(或者至少是我所经历过的).
编辑:
我刚刚意识到你说"clEnqueueReadBuffer"而不是"clEnqueueNDRangeKernel"......
我的回答与clEnqueueNDRangeKernel有关.
抱歉这个错误.
我希望这对其他人仍然有用.