为多个GPU编写CUDA程序

时间:2014-05-19 10:56:45

标签: linux windows cuda gpu

我有多个GPU,并希望在它们上执行我的内核。是否有可以动态调度/管理GPU资源的API或软件?利用所有可用GPU的资源用于该程序。 可以定期报告可用资源的实用程序,我的程序将向GPU启动尽可能多的线程。

其次,我使用Windows + Visual Studio进行开发。我已经读过Linux上支持CUDA。我的程序需要做哪些更改?

1 个答案:

答案 0 :(得分:1)

  

我有多个GPU,并希望在它们上执行我的内核。是否有可以动态调度/管理GPU资源的API或软件。

对于你编写的任意内核,没有我知道的API(当然没有CUDA API)"自动"使用多个GPU。今天的多GPU感知程序通常使用这样的策略:

  1. 检测可用的GPU数量
  2. 根据可用的GPU数量将数据集划分为块
  3. 连续将块传输到每个GPU,并在每个GPU上启动计算内核,使用cudaSetDevice()切换GPU。
  4. 大致遵循上述方法的程序是cuda simpleMultiGPU sample code。一旦你制定了2个GPU的方法,那么去4或8个GPU的额外工作就不多了。这当然假设您的工作已经可以分离,并且数据/算法分区工作已经完成"。

    我认为这是许多地方积极研究的领域,因此如果你进行谷歌搜索,你可能会发表this onethis one等论文。您是否感兴趣这些可能取决于您的确切需求。

    CUDA 6提供了 CUDA库的一些新发展,可以执行某些特定操作(例如BLAS,FFT)和#34;自动"使用多个GPU。要进一步调查此问题,请查看相关的CUBLAS XT documentationCUFFT 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

    进行操作