NVIDIA HPC SDKのインストールと実行


概要

NVIDIA HPC SDK(以下,HPC SDK)のEarly Access Programに応募したところ,無事承認されたので,試してみました.

現状,HPC SDKのリソースにアクセスしてよいのは,Early Access Programに登録している人だけです.
そのため,ドキュメントをどの程度参照してよいのか判らず,情報がぼかし気になっています.

NVIDIA HPC SDKのEarly Access Request

The NVIDIA HPC SDKのページにRequest Early Accessボタンがあるので,それをクリックしてページを移動し,さらにJoin Nowボタンをクリックし,出てきたフォームに必要事項を記入してHPC SDKのEarly Accessをリクエストします.
どのくらいで承認されるのかは判りませんが,しばらくすると,承認された事が書かれた非常に簡素なメールが来ます.

NVIDIA HPC SDKのダウンロード

Early Access Requestが承認されると,Member areaへ行くことができるようになります.
Member areaでHPC SDKがダウンロードできます.

現状で対応しているアーキテクチャは

  • Linux x86_64
  • Linux OpenPOWER
  • Linux Arm

のみで,Windows向けの提供は,もう少し後になるようです.

インストール方法は,この記事執筆時点(2020年6月9日)ではローカルインストールしか用意されておらず,どのアーキテクチャを選んでも,4 GBほどの圧縮ファイルをダウンロードすることになります.

また,ダウンロードページには,HPC SDKの依存ファイルが書いてあります.

  • プロファイラを使う場合はJava Runtime 1.6以降
  • CUDA 10.1以降のドライバ

HPC SDKには,CUDA 10.1, 10.2, 11.0が同梱されているので,わざわざCUDAを別途ダウンロードしてインストールする必要はないと思われます.すでにCUDA環境を整えている場合は,インストール時に環境変数を設定することで,CUDAをインストールしないようにできます.

NVIDIA HPC SDKのインストール

インストール

ダウンロードした圧縮ファイルを解凍し,インストール用のシェルスクリプトを実行すると,対話的にインストールが進んでいきます.このとき,環境変数を設定すると,silent installできるようになるようです.環境変数については,Installation Guideで確認できます.

インストールは以下の手順で進んでいきます.

  1. エンドユーザライセンスの確認
  2. インストール方法の選択(ローカルインストール1かネットワークインストールか)2
  3. インストールディレクトリの選択(標準は/opt/nvidia/hpcsdk3
  4. 2020ディレクトリへのシンボリックリンクの作成・更新
  5. Open MPIのインストール
  6. Open MPIのNVIDIA GPUサポートの有効化

パスの設定

どのようにパスを設定するかはInstallation Guideに書いてあるので,それに沿って設定するだけです.

パスを設定するのは,HPC SDKのコンパイラのbinman,Open MPIをインストールしていれば,それのbinmanの,計4カ所です.

HPC SDKをデフォルトディレクトリ(/opt/nvidia/hpcsdk)にインストールしたとすると,それ以下のLinux_x86_64/20.5/compilers/binおよびLinux_x86_64/20.5/compilers/manにパスを通します.

Open MPIは/opt/nvidia/hpcsdk下の/Linux_x86_64/2020/mpi/openmpi-3.1.5/にインストールされるので,openmpi-3.1.5/直下のbinディレクトリにパスを通します.また,Installation Guideでは,openmpi-3.1.5/直下のmanにもパスを通すように書かれていますが,manのディレクトリは,openmpi-3.1.5/share/manなので,私はopenmpi-3.1.5/share/manの方にパスを通しました.

結局,私の環境では下記4カ所にパスを通しました.

  • /opt/nvidia/hpcsdk/Linux_x86_64/20.5/compilers/bin
  • /opt/nvidia/hpcsdk/Linux_x86_64/20.5/compilers/man
  • /opt/nvidia/hpcsdk/Linux_x86_64/2020/mpi/openmpi-3.1.5/bin
  • /opt/nvidia/hpcsdk/Linux_x86_64/2020/mpi/openmpi-3.1.5/share/man

コンパイラの呼出し

インストールができたので,いよいよFortranコンパイラ界に登場した新入りを呼び出してみます.HPC SDKに同梱されているFortranコンパイラの実行ファイル名は,nvfortranです.

nvfortranのバージョンを表示してみたところ,無事に呼び出されました.

$ nvfortran --version

nvfortran 20.5-0 LLVM 64-bit target on x86-64 Linux -tp skylake
NVIDIA Compilers and Tools
Copyright (c) 2020, NVIDIA CORPORATION.  All rights reserved.

次に,hello worldをコンパイルして実行してみます.

hello.f90
program main
    implicit none

    print *, "Hello NVIDIA HPC SDK"

end program main
$ nvfortran hello.f90
$ vim hello.f90
$ ./a.out
 Hello NVIDIA HPC SDK
$

無事コンパイルして,実行できました.

(2020年6月11日追記)
ヘルプを表示する場合は,-helpオプションを付けて実行してください.

$ nvfortran -help

まとめ

NVIDA HPC SDKにEarly Accessできるようになったので,早速インストールして実行してみました.
Installation Guideにはちらほらと不整合がみられますが,致命的ではないと思います.

Fortranコンパイラは多くありますが,コンパイラ間の可搬性が非常に低いので,nvfortranがどのような挙動で,どのFortran規格まで実装されているか,確認してまとめたいと思います.
前身がPGI Fortranなので,かなり頑張らないといけない印象ですが,最後に使ったバージョン(18.7)から進化していることを期待します.
簡単に試したところ,block構文は使えるようになっていました.バンザイ.


  1. Single system installと書かれています. 

  2. ネットワークインストールは試していません.4 GBもダウンロードさせておいて何を言うかとう感じですが,今後ネットワークインストールにも対応してくれるのでしょう. 

  3. Installation Guideには,/opt/nvidia/hpc_sdkが標準ディレクトリだと書かれていて,その後の設定も/opt/nvidia/hpc_sdkが用いられています.