对于设备信息参数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实现只能提供四分之一的可用内存(我的机器上大约2 GiB,其中8 GiB,同样在其他机器上)可以同时分配.我没有看到这方面的良好技术理由.我知道AMD GPU有类似的限制,由GPU_MAX_ALLOC_PERCENT
环境变量控制,但即使在那里,我也不太清楚只需提供所有内存进行分配就有困难.
总结一下:限制一次分配的内存量的技术原因是什么?毕竟,我可以把malloc()
所有的内存都集中在CPU上.是否有一些我不理解的性能问题?