【发布时间】:2013-12-05 19:09:02
【问题描述】:
对于设备信息参数CL_DEVICE_MAX_MEM_ALLOC_SIZE,OpenCL标准(2.0,早期版本类似)有这样的说法:
内存对象分配的最大大小 字节。最小值为最大值 (分钟(1024*1024*1024, 1/4 CL_DEVICE_GLOBAL_MEM_SIZE), 128*1024*1024) 用于不属于 输入 CL_DEVICE_TYPE_CUSTOM。
事实证明,AMD 和 Intel CPU OpenCL 实现都只提供了四分之一的可用内存(我的机器上大约 2 GiB,8 GiB,其他机器上类似)一次分配。我看不出有什么好的技术理由。我知道 AMD GPU 有类似的限制,由 GPU_MAX_ALLOC_PERCENT 环境变量控制,但即使在那里,我也不太明白仅提供所有内存进行分配的困难在哪里。
总结:限制一次分配的内存量的技术原因是什么?毕竟,我可以大口大口地malloc() CPU 上的所有内存。是否存在一些我不理解的性能问题?
【问题讨论】:
-
也许该区域被分成“碎片变量区域”、“连续分配区域”和“intel hd graphics/amd overdrive 驱动程序工作区域”等部分,因此只有一部分可供完全使用。也许吧。
-
我从未见过 GPU 的技术原因。这只是区分游戏和专业 GPU 的一种方式。 CUDA 对 Nvidia GeForce GPU 有类似的限制,但在 Tesla 卡上取消了限制。至于 CPU,我不知道。
-
NVIDIA's response to this 是“该值是故意的。限制是基于我们对规范的理解,包括参与 OpenCL 论坛标准委员会以及我们对合规性测试结果的经验。除此之外的详细理由可能不会出现。”
标签: opencl