是否有可能在使用相同GPU的不同上下文(CPU线程)之间共享cudaMalloc'ed GPU缓冲区?每个上下文分配一个输入缓冲区,需要由预处理内核填充,预处理内核将使用整个GPU,然后将输出分发给它们。
这种情况是理想的,以避免多次数据传输到和从gpu。该应用程序是一个波束形成器,它将组合多个天线信号并产生多个波束,其中每个波束将由不同的GPU上下文处理。梁的整个处理管道已经到位,我只需要添加波束形成部分。让每个线程生成它自己的光束会重复输入数据,所以我想避免这种情况(此外,它是更有效地生成多个光束在一次)。
每个CUDA上下文都有自己的虚拟内存空间,因此你不能在另一个上下文中使用一个上下文的指针。
也就是说,在CUDA 4.0中,默认情况下每个进程创建一个上下文,而不是每个线程。如果你有多个线程运行相同的CUDA上下文,在线程之间共享设备指针应该没有问题。
我不认为多个线程可以运行相同的CUDA上下文。我做了实验,父cpu线程创建一个上下文,然后fork子线程。子线程将使用父线程创建的上下文(cuCtxPushCurrent(ctx))启动内核。程序就挂在那里