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

Opencl 双GPU(多GPU)中的内存使用情况,opencl,gpgpu,hpc,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

我使用两个配置相同的GPU,使用OpenCL进行HPC GPGPU计算。其中一张卡连接用于显示,两个名为compiz和x server的程序始终使用大约200-300 MB的内存。

我的问题是,当使用这些GPU进行计算时,我只能使用GPU中用于显示目的的部分总内存,而第二个GPU我可以使用整个全局内存。

在我的例子中,我使用了两个Nvidia Quadro 410,它有192个cuda内核,512 MB内存,但503 MB可用。在显示GPU的情况下,我只能使用128MB进行计算,其他我可以使用503MB进行计算。

根据第32页

内存对象的最大大小 ect分配 以字节为单位。最小值为最大值 (1/4 th 属于 CL\ U设备\全局\成员\大小 , 128*1024*1024)


这是否也适用于系统中的所有GPU?

继续阅读,您将看到

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;将是极限。

从那一点继续阅读,您将看到

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;将是限制。

OpenCL将自动交换数据或将其存储在GPU中,因此您实际上并不局限于GPU全局内存,您可以使用更多内存,只要您不同时使用所有内存。您可以“明显”不创建不适合GPU内存的大对象。这就是这个限制的原因

当前每个对象的最大限制由@huseyin指出

CL\U设备的最大内存分配大小(CL\U ulong) 内存对象分配的最大大小(字节)。最小值为最大值 (CL_设备全球成员尺寸的1/4,128*1024*1024)

如果您仔细阅读,它是最大分配大小的最小值。(措辞复杂!)。 可能nVIDIA在显示GPU上将其设置为1/4,在非显示GPU上将其设置为整个内存大小。但nVIDIA在这两种情况下都遵循规范


您应该查询它,并在API报告的限制范围内进行操作。您不能更改它,也不应该猜测它。

OpenCL将自动交换数据或将其存储到GPU,因此您实际上并不局限于GPU全局内存,您可以使用更多内存,只要您不同时使用所有内存。您可以“明显”不创建不适合GPU内存的大对象。这就是这个限制的原因

当前每个对象的最大限制由@huseyin指出

CL\U设备的最大内存分配大小(CL\U ulong) 内存对象分配的最大大小(字节)。最小值为最大值 (CL_设备全球成员尺寸的1/4,128*1024*1024)

如果您仔细阅读,它是最大分配大小的最小值。(措辞复杂!)。 可能nVIDIA在显示GPU上将其设置为1/4,在非显示GPU上将其设置为整个内存大小。但nVIDIA在这两种情况下都遵循规范


您应该查询它,并在API报告的限制范围内进行操作。您不能更改它,也不应该猜测它。

好的,这解决了我的主GPU的内存使用问题。关于我想用于计算目的的辅助GPU(未连接到显示器),我如何能够利用整个全局内存大小?您确定bios设置中没有来自系统RAM的共享内存吗?是的,我确定。我在第二个GPU上运行了矩阵乘法程序,并与nvidia smi和nvidia x服务器进行了交叉检查。两者都显示了内存利用率。当我给出的值超过其全局内存时,正如预期的那样,我从资源中取出了CL_。可能nvidia更改了驱动程序,因此它在内部被视为2GB,但在500 MB后溢出?你看,我使用入门级Quadro 410卡作为我的主GPU和辅助GPU。正如您所提到的,在我的主GPU中,我可以使用最大128 MB的内存,如果超过此值,就会出现“内存不足”错误,而在我的辅助GPU中,我可以使用500 MB的内存,这恰好是我的全局内存
另外,我还与另一个工作站连接了Quadro 410作为显示GPU,并连接了Zotac GTX 960用于计算。即使在这里,我也注意到了同样的问题。好的,这解决了我的主GPU的内存使用问题。关于我想用于计算目的的辅助GPU(未连接到显示器),我如何能够利用整个全局内存大小?您确定bios设置中没有来自系统RAM的共享内存吗?是的,我确定。我在第二个GPU上运行了矩阵乘法程序,并与nvidia smi和nvidia x服务器进行了交叉检查。两者都显示了内存利用率。当我给出的值超过其全局内存时,正如预期的那样,我从资源中取出了CL_。可能nvidia更改了驱动程序,因此它在内部被视为2GB,但在500 MB后溢出?你看,我使用入门级Quadro 410卡作为我的主GPU和辅助GPU。正如您所提到的,在我的主GPU中,我可以使用最大128 MB的内存,如果超过此值,就会出现“内存不足”错误,而在我的辅助GPU中,我可以使用500 MB的内存,这恰好是我的全局内存
另外,我还与另一个工作站连接了Quadro 410作为显示GPU,并连接了Zotac GTX 960用于计算。即使在这里,我也注意到了同样的问题。当你说“非显示GPU上的所有内存大小”
我已经在OpenCL上工作了很长一段时间了,你怎么能确认/证明呢。我找不到任何文件来解释为什么我可以从我的辅助GPU使用完整的全局内存。这取决于驱动程序的实现,其他制造商可能会采取不同的做法,甚至是其他版本的nVIDIA驱动程序。规范只定义了最大值应该具有的最小值,并且定义为每个设备。因此,驱动程序可以根据需要在不同的设备上使用不同的值