2014-01-18 1 views
0

우리는 여러 노드에 대해 일반적인 nbody 알고리즘을 제공하려고합니다. 노드에는 2 개의 GPU와 1 개의 CPU가 있습니다.Openacc를 사용하여 GPU 클러스터에서 nbody 최적화

openacc를 사용하여 GPU에서만 n-body를 계산하려고합니다. openacc에 대한 연구를 한 후에 여러 GPU에 계산을 퍼뜨리는 방법을 확신 할 수 없습니다.

단 하나의 스레드와 openacc로 2 개의 GPU를 사용할 수 있습니까? 그렇지 않은 경우 OpenMP를 사용하여 하나의 노드에서 GPU 두 개를 모두 사용하고 MPI를 통해 다른 노드와 통신 할 수있는 적절한 승인이 무엇입니까?

답변

1

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를 사용할 수 있습니다.

관련 문제