TSUBAME3.0計算サービスのWebページはこちら

TSUBAME2.5からTSUBAME3.0へのデータ移行方法の資料はこちら

OpenACC利用の手引き

OpenACC 利用の手引き

 

1. TSUBAME 2.0での OpenACCの利用

2. CAPS社 HMPP による OpenACCの利用方法

2.1 OpenACCに対応した HMPP コンパイラへのパスの指定方法

2.2 HMPP コンパイラでのコンパイル

3. PGIコンパイラ による OpenACCの利用方法

3.1 OpenACCに対応した PGI コンパイラへのパスの指定方法

3.2 PGI コンパイラでのコンパイル

4. TSUBAME 2.0でのジョブの投入方法
 

 

1. TSUBAME 2.0での OpenACCの利用

OpenACCにより、CUDAやOpenCLなど新しいプログラミング言語を学ぶことなく、OpenMPのように簡単に指示文(ディレクティブ)を挿入するだけで、GPUを利用した高速計算が可能となります。OpenACCは、NVIDIA社、CAPS社、PGI社、Cray社の共同で策定され、CAPS社、PGI社、CRAY社からコンパイラがリリースされております。現在、TSUBAME 2.0ではCAPS社およびPGI社のOpenACC対応コンパイラを利用することができます。

2. CAPS社 HMPP による OpenACCの利用方法

TSUBAME 2.0でのCAPS社の提供する HMPP を用いた OpenACCの利用方法について説明します。

※ CAPS OpenACCの詳しい説明は、【第12回GPUコンピューティング講習会(OpenACC)】の資料を参考にして下さい。
OpenACC講習資料(943KB)

 

 

2.1 OpenACCに対応した HMPP コンパイラへのパスの指定方法

sourceコマンドにより、HMPP OpenACCコンパイラへのパスを通すことができます。

> source /usr/apps/free/nosupport/HMPP/3.1/bin/hmpp-env.sh

 

 

2.2 HMPP コンパイラでのコンパイル

HMPP コンパイラを用いてコンパイルを行うためには、ホストコンパイラのコンパイルコマンド(例:gcc, g++)の記述の前に、HMPP コンパイラのコマンド(hmpp)を指定する必要があります。以下は、サンプルファイル(sample_openacc.c)に対してコンパイルを実行する例です。

> hmpp gcc -w -O3 -o run sample_openacc.c

 

 

3. PGIコンパイラ による OpenACCの利用方法

TSUBAME 2.0でのPGIコンパイラ を用いた OpenACCの利用方法について説明します。

 

 

3.1 OpenACCに対応した PGI コンパイラへのパスの指定方法

sourceコマンドにより、PGIコンパイラへのパスを通すことができます。

> source /usr/apps/isv/pgi/pgiset12.4.sh

 

 

3.2 PGI コンパイラでのコンパイル

PGI コンパイラを用いて OpenACC を有効にしコンパイルするためには、コンパイラオプションに “-acc” を追加する必要があります。以下は、サンプルファイル(sample_openacc.c)に対してコンパイルを実行する例です。

> pgcc -acc -Minfo -fast sample_openacc.c

 

 

4. TSUBAME 2.0でのジョブの投入方法

TSUBAME 2.0にて、OpenACCを用いたプログラムを GPU で実行するためには、バッチキューとしてGキューもしくはSキューを指定する必要があります。以下は、Gキューを指定したジョブの投入例です。

> t2sub -q G -W group_list=t2gxxxx -l select=1:ncpus=4:gpus=1:mem=4gb ./t2sub_sample.sh

 

OpenACC を用いたサンプル
積和演算のループに対して、ディレクティブ構文 #pragma acc kernels を挿入した例です。

// sample_openacc.c

#include
#include

const int n = 100;

int main(int argc, char *argv[])
{
const float alpha = 2.0;
float x[n];
float y[n];

int i;
for (i=0; i

#pragma acc kernels
{
for (i=0; i y[i] = alpha*x[i] + y[i];
}
}

for (i=0; i

return EXIT_SUCCESS;
}

 

HMPP OpenACC を用いたサンプルコードが
/usr/apps/free/nosupport/HMPP/3.1/doc/OpenACC_Labs/CUDA/C/
にあります。

 

ジョブスクリプト t2sub_sample.sh の例
通常のジョブスクリプトと同じように記述します。

#! /bin/sh

cd ${PBS_O_WORKDIR}
./run

 

以上