我们正在尝试为多个节点提供通用的nbody算法。 一个节点有2个GPU和1个CPU。
我们只想在使用openacc的GPU上计算n体。在对openacc进行一些研究后,我不确定如何将计算扩展到多个GPU。
是否可以使用仅有一个线程和openacc的2个GPU? 如果没有,那么使用openMP在一个节点上使用两个GPU是一个合适的approch 并通过MPI与其他节点通信?
答案 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在节点之间进行通信,这是典型的。