在不同的CUDA上下文中共享GPU缓冲区

时间:2013-05-18 12:40:59

标签: cuda

是否可以在使用相同GPU的不同上下文(CPU线程)之间共享cudaMalloc'ed GPU缓冲区?每个上下文分配一个输入缓冲区,需要由预处理内核填充,该预处理内核将使用整个GPU,然后将输出分配给它们。

此方案非常适合避免与GPU之间的多个数据传输。该应用是一个波束形成器,它将组合多个天线信号并生成多个波束,其中每个波束将由不同的GPU上下文处理。光束的整个处理管道已经到位,我只需要添加波束成形部分。让每个线程生成它自己的光束会复制输入数据,所以我想避免这种情况(同样,一次生成多个光束效率更高)。

2 个答案:

答案 0 :(得分:4)

每个CUDA上下文都有自己的虚拟内存空间,因此您不能在另一个上下文中使用来自一个上下文的指针。

话虽如此,从CUDA 4.0开始,默认情况下每个进程创建一个上下文而不是每个线程。如果您有多个线程使用相同的CUDA上下文运行,则在线程之间共享设备指针应该没有问题。

答案 1 :(得分:-1)

我不认为多个线程可以使用相同的CUDA上下文运行。我做了实验,父cpu线程创建一个上下文然后fork一个子线程。子线程将使用父线程创建的上下文(cuCtxPushCurrent(ctx))启动内核。该程序就在那里。

相关问题