Multithreading 具有多(CPU)线程的多GPU编程

Multithreading 具有多(CPU)线程的多GPU编程,multithreading,cuda,Multithreading,Cuda,我有一个令人尴尬的平行应用程序。是否可以启动多个CPU线程,以便一个线程管理GPU?如果可能,我应该在CPU端使用什么线程库?OpenMP?Pthreads?这是可能的,但由于Cuda 4.0已发布,因此没有必要。Cuda API现在是线程安全的,因此您可以使用单个主机线程异步管理多个设备 如果您真的想使用多个主机线程,几乎任何主机库都可以。我在linux和OS X上成功地使用了pthreads、boost::thread和Apple的grand central dispatch with Cu

我有一个令人尴尬的平行应用程序。是否可以启动多个CPU线程,以便一个线程管理GPU?如果可能,我应该在CPU端使用什么线程库?OpenMP?Pthreads?

这是可能的,但由于Cuda 4.0已发布,因此没有必要。Cuda API现在是线程安全的,因此您可以使用单个主机线程异步管理多个设备


如果您真的想使用多个主机线程,几乎任何主机库都可以。我在linux和OS X上成功地使用了pthreads、boost::thread和Apple的grand central dispatch with Cuda。因此,是否可以使用ith thread管理ith Cuda设备,以便ith CPU thread将ith块数据发送到ith设备?是的,不需要任何特殊要求。唯一需要注意的是确保每个线程都有一个唯一的GPU。为此,要么让主线程枚举所有设备,并为每个线程分配和广播设备ID,或者使用TCC/Linux驱动程序中的计算独占设置,让驱动程序自动为每个线程分配一个设备。您可以在TCC中详细说明计算独占设置吗?您可以使用
nvidia smi
中的
-c
选项将GPU设置为计算独占模式,尽管我似乎记得那是默认的。有/曾经有一份TCC驱动程序白皮书,它解释了关于驱动程序及其设置的一切。如果每个主机线程没有获得唯一的GPU,会发生什么?它是否会导致崩溃/未定义的行为?