memory - CL_OUT_OF_RESOURCES 用于 1GB VRAM 的 200 万个 float ?

标签 memory opencl nvidia

看起来 200 万个浮点数应该没什么大不了的,只有 8MB 的 1GB GPU RAM。我有时可以分配那么多,有时甚至更多,没有任何问题。当我执行 clEnqueueReadBuffer 时,我得到 CL_OUT_OF_RESOURCES,这看起来很奇怪。我能找出问题真正开始的地方吗? OpenCL 不应该在 clEnqueueReadBuffer 上像这样失败,对吗?应该是我分配数据的时候吧?除了错误代码之外,还有什么方法可以获得更多详细信息?如果我能看到 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);

我的设备(2 个 NVIDIA GTX 460 和 Intel i7 CPU)支持的最大工作组大小为 1024,但是当我通过路径跟踪内核时,上面的代码返回大约 500。
当我使用 1024 的工作组大小时,它显然失败并给了我 CL_OUT_OF_RESOURCES 错误。

你的内核变得越复杂,它的最大工作组大小就会变得越小(或者至少我经历过)。

编辑:
我刚刚意识到你说的是“clEnqueueReadBuffer”而不是“clEnqueueNDRangeKernel”......
我的回答与 clEnqueueNDRangeKernel 有关。
抱歉我的错误。
我希望这对其他人仍然有用。

关于memory - CL_OUT_OF_RESOURCES 用于 1GB VRAM 的 200 万个 float ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3988645/

相关文章:

python - cpython 2.7 中的内存泄漏

c# - 出于分析目的写入和读取大文件

performance - 排序算法的内存速度权衡

c++ - 使用调试信息编译 OpenCL 内核?

cuda - 相当于cuBLAS的cudaGetErrorString吗?

c - 带有 CUDA 和 cudaMallocPitch 的二维数组

c++ - 速度和内存的比较

cuda - Mathematica 中 NVIDIA K20 GPU 上的内核数

python - 为什么不在我的 GPU 上运行 OpenCL (Ubuntu)

matrix - CUDA 添加矩阵的行