1

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

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

4

2 回答 2

4

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

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

于 2013-05-18T17:19:17.420 回答
-1

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

于 2015-06-06T01:03:52.247 回答