在Thrust中读取已分配的内存/向量

4

我正在使用Mathematica将一个简单的变量加载到GPU内存中:

mem = CUDAMemoryLoad[{1, 2, 3}]

并获得以下结果:
CUDAMemory["<135826556>", "Integer32"]

现在,我想将这些数据存储在GPU内存中,并从一个独立的.cu程序(在Mathematica之外)中使用Thrust访问它。
有没有办法实现这个目标?如果可以,请有人解释一下如何操作?
1个回答

4

很遗憾,没有办法做到这一点。CUDA上下文是私有的,标准API没有办法让一个进程访问另一个进程上下文中分配的内存。

在CUDA 4发布周期中,发布了一个名为cudaIpc的新API。它允许在同一台主机上运行具有CUDA上下文的两个进程导出和交换GPU内存分配的句柄。该API仅支持带有统一寻址支持的Linux主机。据我所知,Mathematica目前不支持此功能。


感谢您的回答,talonmies。我知道在C++中可以通过手动设置指针(如chare=(char)0x28fe45)来读取内存位置。由于Thrust使用指针,并且Mathematica给出了内存偏移量(在GPU上),<135826556>,我想也许我可以手动指向它。另外,由于我知道变量类型,我应该能够知道分配在哪个位置结束。这种做法可行吗? - MA81
正如我在答案中已经说过的,不行。驱动程序中有内存保护,使每个上下文都是私有的。每个上下文中的GPU地址也是虚拟的,需要特定于上下文的转换后备缓冲区编程才能将它们映射到实际地址。唯一的方法是通过cudaipc进行,而Mathematica不支持它。 - talonmies

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