对于设备信息参数
内存对象分配的最大大小(以字节为单位)。最小值为不是CL_DEVICE_TYPE_CUSTOM类型的设备的max(min(1024*1024*1024,CL_DEVICE_GLOBAL_MEM_SIZE的1/4),128*1024*1024)。
事实证明,AMD和英特尔CPU的OpenCL实现只提供可用内存的四分之一(在我的8GiB机器上约为2GiB,在其他机器上也是如此)来一次性分配。我看不到很好的技术理由。我知道AMD GPU也有类似的限制,由
总之,限制一次性分配内存的数量有什么技术原因?毕竟,我可以在CPU上一次性地使用
CL_DEVICE_MAX_MEM_ALLOC_SIZE
,OpenCL标准(2.0版,早期版本类似)如下所述:内存对象分配的最大大小(以字节为单位)。最小值为不是CL_DEVICE_TYPE_CUSTOM类型的设备的max(min(1024*1024*1024,CL_DEVICE_GLOBAL_MEM_SIZE的1/4),128*1024*1024)。
事实证明,AMD和英特尔CPU的OpenCL实现只提供可用内存的四分之一(在我的8GiB机器上约为2GiB,在其他机器上也是如此)来一次性分配。我看不到很好的技术理由。我知道AMD GPU也有类似的限制,由
GPU_MAX_ALLOC_PERCENT
环境变量控制,但即使在那里,我也不太明白为什么不能将所有内存都提供给分配。总之,限制一次性分配内存的数量有什么技术原因?毕竟,我可以在CPU上一次性地使用
malloc()
分配所有内存。难道还有一些我不理解的性能问题吗?