我使用两个相同配置的GPU用于使用OpenCL进行HPC GPGPU计算。其中一个卡用于显示目的,两个程序称为compiz和x server总是使用大约200-300 MB的内存。
我的问题是,当使用这些GPU时对于计算,我只能使用GPU中用于显示目的的部分总内存,而第二GPU我可以使用整个全局内存。
在我的情况下我使用两个Nvidia Quadro 410,其中有192个cuda核心,512 MB作为内存但503 MB可用。在显示GPU的情况下,我只能使用128MB进行计算,而其他我可以使用完整的503 MB进行计算。
内存对象的最大大小 等分配 以字节为单位最小值是max (1/4 日 的 CL_DEVICE_GLOBAL_MEM_SIZE , 128 * 1024 * 1024)
这也不应该对系统中存在的所有GPU有利吗?
答案 0 :(得分:2)
从这一点开始继续阅读,你会看到
Max size of memory object allocation
in bytes. The minimum value is max
(1/4th of
CL_DEVICE_GLOBAL_MEM_SIZE ,
128*1024*1024)
以较大者为准,128MB或1/4;将是极限。
答案 1 :(得分:1)
OpenCL将自动交换数据或GPU,因此您实际上并不局限于GPU全局内存,只要您不使用所有内存,就可以使用更多内存。你可以“明显地”创建不适合GPU内存的大对象。这就是这个限制的起点。
@huseyin
指出每个对象的当前最大限制CL_DEVICE_MAX_MEM_ALLOC_SIZE(cl_ulong) 内存对象分配的最大大小,以字节为单位最小值是max (CL_DEVICE_GLOBAL_MEM_SIZE的1/4,128 * 1024 * 1024)
minimun_max_global_size = max(1/4*global, 128MB)
如果你仔细阅读它,是最大分配大小的最小值。(棘手的措辞!)。 可能nVIDIA将其设置为显示GPU上的1/4,以及非显示GPU上的整个内存大小。但在这两种情况下,nVIDIA都遵循这一规范。
这是您应该查询的内容,并在API报告的限制内运行。你不能改变它,你不应该猜它。