OpenCL 中的全局内存限制

Global memory limit in OpenCL

首先,我只想说我是 OpenCL 的新手,我在计算机科学方面没有很强的背景,因为这不是我所学习的。

所以,我正在编写一个工具,用于计算给定数字地形模型 (DTM) 的地平线。为此,我在它的任务并行方法中使用 OpenCL,因为数据并行化要么不可能,要么我找不到方法。

我有 8 个内核,每个内核计算 360 度地平线(或全景图或任何你想称之为的)的一部分。这背后的数学非常简单。只需从某个方向上的像素追踪一条线,然后寻找高度标高即可。然后,对 360 度方向的所有像素重复此操作。

关键是我成功地做到了,但我发现了一件事。如果我使用较小的 DTM,看起来我得到了正确的结果,但如果我使用非常大的 DTM,那么它甚至不会进入内核。

最大的问题是:发生这种情况有什么原因吗?是否可以向 GPU 发送 3-4 GB 的数据?我是否只是忽略了一些基本的东西,例如没有办法拥有 4GB 的全局数据?我将数据作为指向内核的指针发送,所以不要出错。

谢谢!!

更新:

错误确实是我没有检查所有步骤。我收到了 CL_MEM_OBJECT_ALLOCATION_FAILURE 错误,所以我想我需要以某种方式缩小内存对象的大小。谢谢大家!


首先,您确实需要检查 OpenCL API 调用的结果。如果"它甚至没有进入内核",那么 API 调用之一返回了一些您错过的错误值。

其次,缓冲区大小(以及许多其他值)确实存在限制。 OpenCL 规定了每个值的最小限制,但除此之外,它取决于设备,您需要使用 clGetDeviceInfo.

询问特定设备的最大值