OpenCL 强制缓冲区保留在 GPU 上

4
有没有一种方法可以强制OpenCL将数据保留在芯片上的全局内存缓冲区中(例如,它永远不会被换出到系统内存)?基本上,我想为自己的需求保留GPU内存的一部分,并且我希望我放在那里的数据无论其他应用程序是否开始饱和GPU的内存,都始终保留在GPU上。谢谢!
1个回答

4

GPU和CPU的内存管理单元没有直接关联,它们不像CPU那样进行页面错误处理。GPU是由设备驱动程序控制的块设备外围设备。

对于OpenCL,当您通过创建cl_mem对象并将其进入GPU进行排队(写入)来分配GPU上的内存时,它将一直保留到您使用clReleaseMemObject显式释放为止。若要重用缓冲区,则需不释放该对象并跟踪其Cl_mem对象。


2
但是,如果我在GPU上创建一个128MB的缓冲区(通过cl_mem),并写入一些数据:如果我立即读取数据,它将是瞬间的,而如果我让它保留几个小时(当然不释放它),同时玩例如GPU内存密集型游戏,然后再次尝试访问我的内存,它将需要大约一秒钟-正好需要从硬盘中读取128MB的时间。如果数据仍然在GPU上,考虑到PCI-E带宽(我评估为大约4.5GB / s双向),那么读取它不应该需要一秒钟的时间吗? - Thomas
我可能也可以接受这个答案,反正对于我想要做的事情来说并不重要。谢谢! - Thomas
好的,我更好地理解了这个问题。这是什么品牌和型号的GPU?OpenCL的版本是多少?我会尝试重现这个问题。 - Tim Child
Hd6950 2GB,Cayman(标准版)。OpenCL 1.1,不确定细节,将在家中检查(4小时后)。如果您需要,我也可以给您OpenCL代码。 - Thomas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接