双GPU(多GPU)中的内存使用情况

时间:2016-06-02 04:39:00

标签: opencl gpgpu hpc

我使用两个相同配置的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进行计算。

根据The OpenCL Specification

  

内存对象的最大大小   等分配   以字节为单位最小值是max   (1/4   日    的   CL_DEVICE_GLOBAL_MEM_SIZE    ,   128 * 1024 * 1024)

这也不应该对系统中存在的所有GPU有利吗?

2 个答案:

答案 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报告的限制内运行。你不能改变它,你不应该猜它。