0

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

我们只想在 GPU 上使用 openacc 计算 n-body。在对 openacc 做了一些研究之后,我不确定如何将计算扩展到多个 GPU。

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

4

1 回答 1

2

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

例如(从这里开始)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 在节点之间进行通信,这是典型的。

于 2014-02-05T16:29:51.453 回答