我有多个GPU,并希望在它们上执行我的内核。是否有可以动态调度/管理GPU资源的API或软件?利用所有可用GPU的资源用于该程序。 可以定期报告可用资源的实用程序,我的程序将向GPU启动尽可能多的线程。
其次,我使用Windows + Visual Studio进行开发。我已经读过Linux上支持CUDA。我的程序需要做哪些更改?
答案 0 :(得分:1)
我有多个GPU,并希望在它们上执行我的内核。是否有可以动态调度/管理GPU资源的API或软件。
对于你编写的任意内核,没有我知道的API(当然没有CUDA API)"自动"使用多个GPU。今天的多GPU感知程序通常使用这样的策略:
cudaSetDevice()
切换GPU。大致遵循上述方法的程序是cuda simpleMultiGPU sample code。一旦你制定了2个GPU的方法,那么去4或8个GPU的额外工作就不多了。这当然假设您的工作已经可以分离,并且数据/算法分区工作已经完成"。
我认为这是许多地方积极研究的领域,因此如果你进行谷歌搜索,你可能会发表this one或this one等论文。您是否感兴趣这些可能取决于您的确切需求。
CUDA 6提供了 CUDA库的一些新发展,可以执行某些特定操作(例如BLAS,FFT)和#34;自动"使用多个GPU。要进一步调查此问题,请查看相关的CUBLAS XT documentation和CUFFT XT multi-GPU documentation以及sample code。据我所知,目前这些操作仅限于2个GPU用于自动工作分配。这些允许自动分配特定工作负载(BLAS,FFT),而不是任意内核。
其次,我使用Windows + Visual Studio进行开发。我已经读过Linux上支持CUDA。我的程序需要做哪些更改?
除OGL/DX interop APIs之外,CUDA主要与选择windows或linux作为平台正交。典型的IDE是不同的(windows:nsight Visual Studio edition,Linux:nsight eclipse edition)但是你的代码更改主要包括windows和linux之间的普通移植差异。如果您想开始使用linux,请按照getting started document。
进行操作