使用openacc在GPU集群上优化nbody

时间:2014-01-18 19:33:14

标签: openacc

我们正在尝试为多个节点提供通用的nbody算法。 一个节点有2个GPU和1个CPU。

我们只想在使用openacc的GPU上计算n体。在对openacc进行一些研究后,我不确定如何将计算扩展到多个GPU。

是否可以使用仅有一个线程和openacc的2个GPU? 如果没有,那么使用openMP在一个节点上使用两个GPU是一个合适的approch 并通过MPI与其他节点通信?

1 个答案:

答案 0 :(得分:2)

OpenACC运行时库提供例程(acc_set_device_num()acc_get_device_num())来选择特定线程将定位哪个加速器设备,但使用单个线程同时使用多个设备并不方便。相反,可以使用OpenMP或MPI。

例如(从here解除)OpenMP的基本框架可能是:

#include <openacc.h>
#include <omp.h>
#pragma omp parallel num_threads(2)
{
  int i = omp_get_threadnum();
  acc_set_device_num( i, acc_device_nvidia );
  #pragma acc data copy...
  {
  }
}

也可以使用MPI完成,和/或您可以使用MPI在节点之间进行通信,这是典型的。