NVIDIA HPC SDK利用法
最終更新日:2022年7月15日
NVIDIA HPC SDK (旧 PGIコンパイラ) は、主に GPU利用のためのツールを集めた開発環境です。
インストールされているものの他、個人のホームディレクトリに、
お好きなバージョンをインストールして利用していただくこともできます。
NVIDIA HPC SDK
利用環境
- サブシステムA
バージョン |
九州大学構成員 |
学術研究機関構成員 |
民間利用の方 |
20.11 |
○ |
○ |
○ |
- サブシステムB
バージョン |
九州大学構成員 |
学術研究機関構成員 |
民間利用の方 |
20.11 |
○ |
○ |
○ |
- 基本フロントエンド
バージョン |
九州大学構成員 |
学術研究機関構成員 |
民間利用の方 |
20.11 |
○ |
○ |
○ |
- 大容量フロントエンド
バージョン |
九州大学構成員 |
学術研究機関構成員 |
民間利用の方 |
20.11 |
○ |
○ |
○ |
利用コマンド
プログラム言語の翻訳・リンクのための書式とコマンドの一覧は以下の通りです。
|
言語処理系 |
コマンド |
OpenACC |
CUDA |
非MPI並列 |
Fortran |
nvfortran |
-acc |
-cuda |
C |
nvc |
C++ |
nvc++ |
MPI並列 |
Fortran |
mpifort |
C |
mpicc |
C++ |
mpic++ |
利用方法
環境設定(moduleコマンド)
moduleコマンドによる環境設定はコンパイル時と実行時の両方で行う必要があります。
MPIを用いない場合や、NVIDIA HPC SDKに付属の MPIライブラリを利用する場合
$ module load nvhpc/nvhpc_20.11 |
NVIDIA HPC SDKに付属の MPIライブラリ以外を利用する場合
$ module load nvhpc/nvhpc-nompi_20.11 |
C/C++
C/C++コンパイラにはnvc
/ nvc++
コマンドを用います。
またNVIDIA HPC SDKに付属の MPIライブラリを利用する場合には,mpicc
/ mpic++
コマンドを用います。
(以下のプログラム例では nvc
およびmpicc
のみを記載しますのでC++を使う場合はnvc++
およびmpic++
に読み替えてください。)
例1)OpenACCプログラム
$ nvc -acc -gpu=cc60,cuda11.0,pinned sample.c |
例2)CUDAプログラム
例3)MPI+OpenACC並列プログラム
$ mpicc -acc -gpu=cc60,cuda11.0,pinned sample.c |
Fortran
Fortranコンパイラは nvfortran
コマンドを利用します。
またNVIDIA HPC SDKに付属の MPIライブラリを利用する場合には mpifort
コマンドを利用します。
例1)OpenACCプログラム
$ nvfortran -acc -gpu=cc60,cuda11.0,pinned sample.f90 |
例2) CUDAプログラム
$ nvfortran -cuda sample.cuf |
例3) MPI+OpenACCプログラム
$ mpifort -acc -gpu=cc60,cuda11.0,pinned sample.f90 |
主なコンパイルオプション
コンパイルオプション |
説明 |
-c |
オブジェクトファイルまで作成します |
-o filename |
実行可能ファイル名/オブジェクトファイル名をfilenameに変更します。デフォルトの実行可能ファイル名は a.out |
-On |
最適化を行います [n=0〜3]。n の値が大きくなるに従って、最適化のレベルが上がります。
n=0の場合は最適化を行いません(nを省略した場合は -O2)
|
-gpu=GPUに関する設定 |
使用するGPUに関する設定を指示します。ITOサブシステムBでは以下を指示してください。
- 通常
-gpu=cc60,cuda11.0,pinned
- Unified Memory使用時
-gpu=cc60,cuda11.0,managed
|
-Minfo=コンパイルメッセージの指定 |
コンパイル時に出力するメッセージを指定します。GPUに向けたコード生成の様子を表示するには、以下を指定してください。
-Minfo=accel
|
バッチ処理
以下にNVIDIA HPC SDKで翻訳した実行可能ファイルをバッチ処理により処理するスクリプトの例を示します。
例1)OpenACCプログラム
#!/bin/bash
#PJM -L "rscunit=ito-b"
#PJM -L "rscgrp=ito-g-1"
#PJM -L "vnode=1"
#PJM -L "vnode-core=9"
#PJM -L "elapse=10:00"
#PJM -j
module load nvhpc/nvhpc_20.11
./a.out
|
例2)MPI+OpenACCプログラム(4ノード x 4GPU)
#!/bin/bash
#PJM -L "rscunit=ito-b"
#PJM -L "rscgrp=ito-g-16"
#PJM -L "vnode=4"
#PJM -L "vnode-core=36"
#PJM -L "elapse=10:00"
#PJM -j
module load nvhpc/nvhpc_20.11
mpirun -np 16 --map-by ppr:4:node --bind-to none -mca plm_rsh_agent /bin/pjrsh \
-mca btl_openib_warn_default_gid_prefix 0 -machinefile ${PJM_O_NODEINF}
|
別のバージョンのNVIDIA HPC SDKを自分のホームディレクトリにインストールする手順
- https://developer.nvidia.com/nvidia-hpc-sdk-downloads にアクセス。
- "I accept the license agreement"をクリック
- "Bundled with the newest plus two previous CUDA versions [11.7, 11.0, 10.2]"の "Linux x86_64 Tarball"をクリック
- 表示されたコマンドを一つずつ実行。
(Installation directoryとして、自分のホームディレクトリ内のパスを指定。
CUDAのバージョンとして、ITOで利用可能な最新のCUDAを指定。)
- 利用する際は、以下を実行することで、PATH等の環境変数を設定する。
(「ディレクトリ」には、インストール時の Installation directory を指定し、
「バージョン」には、ディレクトリ/modulefiles/nvhpc/ の下にあるファイル名を指定する。)
module load ディレクトリ/modulefiles/nvhpc/バージョン |