--- title: 'NVIDIA HPC SDKコンパイラ' taxonomy: category: - docs external_links: process: true no_follow: true target: _blank mode: active published: true --- [toc] ## 利用環境{#enviroment} ### 利用できるバージョン・システム{#version} バージョン | モジュールファイル名 | システムA |システムB/C | システムG | クラウドシステム | 備考 --- | --- | --- | --- | --- | --- | --- 23.9 (default) | nvhpc/23.9 | - | - | + | - | 2024年4月導入 23.5 | nvhpc/23.5 | - | - | + | - | 2023年8月導入 22.9 | nvhpc/22.9 | - | - | + | - | 2023年1月導入 \+ : すべてのユーザが利用可能 \- : 利用不可 システムGでは、システムにログインした時点で、NVIDIA HPC SDKコンパイラがデフォルトで設定されています。システムB、C、クラウドではNVIDIA HPC SDKコンパイラは使えません。 ログイン時に自動で環境設定を行いたい場合は、ログインシェルの起動ファイルに必要なmoduleコマンドを記述してください。詳細は [環境設定](/config) をご覧ください。 moduleコマンドの詳細は [Modules](/config/modules) をご覧ください。 #### cudaについて{#cuda} バージョン | モジュールファイル名 | システムA | システムB/C | システムG | クラウドシステム | 備考 --- | --- | --- | --- | --- | --- | --- 12.2.2 (dafault) | cuda/12.2.2 | - | - | + | - | 2024年4月導入 12.1.1 | cuda/12.1.1 | - | - | + | - | 2023年8月導入 11.7.1 | cuda/11.7.1 | - | - | + | - | 2023年1月導入 9.2 | cuda/9.2 | - | - | + | - | 2023年1月導入 \+ : すべてのユーザが利用可能 \- : 利用不可 NVIDIA HPC SDKコンパイラのモジュールファイルをダウンロードするだけでcudaもロードされます。 cudaのデフォルトバージョンは11.7ですが、バージョンを切り替えたい場合は、PrgEnvNvidia がロードされている状態で、以下のようにmoduleコマンドを実行してください。 ```nohighlight $ module load cuda/9.2 ``` ## コンパイル方法{#usage} ### コマンド{#command} | 言語 | コマンド | 実行形式 | - | - | - | Fortran | nvfortran | nvfortran [オプション] ファイル名 | C | nvc | nvc [オプション] ファイル名 | C++ | nvc++ | nvc++ [オプション] ファイル名 ### オプション{#option} - 主要オプション(並列化、最適化など) | オプション名 | 説明 | --- | --- | -o FILENAME | オブジェクトファイルの名前を指定します。 | -mcmodel=medium | 2Gbyteを超えるメモリを使用できるようになります。 | -mp | OpenMP指示子を有効にしてコンパイルします。 | -Mconcur | 自動並列化を行います。 | -O0/-O1/-O2/-O3/-O4 | 最適化のレベルを指定します | -fast | 一般的な最適化機能を有効にします。 | -Mipa=fast | 手続き間の解析処理を最適化します。**(注意事項) ** 現在のバージョンでは使用できなくなりました。 - メッセージ出力とデバッグのオプション |オプション名 |説明| |-|-| |-Mlist |リスティングファイルを作成します。| |-Minform=inform |すべてのエラーメッセージを表示します。| |-Minfo[=OPTION]|標準エラー出力に情報を表示します。<br>表示する情報はオプションで指定します。| |-Mneginfo[=OPTION]|実施されなかった最適化についての情報を表示します。| - Fortran言語固有オプション |オプション名 |説明| |-|-| |-Mfixed |プログラムが固定形式で記述されていることを指示します。| |-Mfree |プログラムが自由形式で記述されていることを指示します。| |-Mstandard | ANSI規格準拠でない構文を警告します。| |-Mdclchk |暗黙の型宣言を警告します。| |-C | プログラム実行時に、配列の領域外参照を検出します。| - GPU関連のオプション | オプション名 | 説明 | | --- | --- | | -gpu | GPUに関する設定を指定します。-acc、-cuda、-mp、-stdparオプションと併せて使用します。<br>(例)-gpu=cc80 -acc<br>※ccは[compute capability](https://developer.nvidia.com/cuda-gpus)を意味します。システムGに搭載のGPUはA100ですので、ccを指定する場合は、cc80としてください。| | -acc | OpenACCを有効にします。 | | -cuda | CUDAを有効にします。 | | -Minfo=accel | GPU関連のコンパイル情報を出力します。 | ## コンパイル例{#sample} ### 逐次プログラム{#serial} ```nohighlight $ nvfortran test.f90 # Fortranの例 $ nvc test.c # C言語の例 $ nvc++ test.cpp # C++の例 $ tssrun ./a.out # 実行 ``` ### 自動並列化の利用{#auto_parallel} ```nohighlight $ nvfortran -Mconcur test.f90 $ tssrun --rsc p=1:t=4:c=4 ./a.out # 並列数4を指定して実行 ``` ### OpenMPの利用{#openmp} OpenMPは、プログラムの並列化のためのオープン規格です。 ソースコードに#pragma omp(C/C++)もしくは!$ompで始まる指示を書き込み、所定のオプションをつけてコンパイルするだけで、コンパイラに自動で並列化を行わせることができます。 OpenMPへの指示を書き込んだソースコードをコンパイルするには、-mpオプションをつけます。 ```nohighlight $ nvc -mp test.c ``` コンパイルしたプログラムを実行する時、--rscオプションでtとcに並列数を指定すると、その並列数でプログラムが実行されます。 ```nohighlight $ tssrun --rsc p=1:t=8:c=8 ./a.out # 並列数8を指定して実行 ``` ### OpenACCの利用{#openacc} OpenACCは、プログラムの並列化のためのオープン規格です。 ソースコードに#pragma acc(C/C++)もしくは!$accで始まる指示を書き込み、所定のオプションをつけてコンパイルするだけで、GPU上で動作する実行コードを生成します。 OpenACCへの指示を書き込んだソースコードをコンパイルするには、-accオプションをつけます。 ```nohighlight $ nvfortran -acc test.f90 ``` ## 利用可能なライブラリ{#library} ### MPIライブラリ{#mpi_library} OpenMPIライブラリが利用できます。MPIプログラムのコンパイル、リンク、実行方法については、 [OpenMPIライブラリ](/compilers/openmpi) をご覧ください。 ## マニュアル{#manual} ### Version 22.9 - [NVIDIA HPC Compilers User's Guide](https://docs.nvidia.com/hpc-sdk/archive/22.9/compilers/hpc-compilers-user-guide/index.html) - [NVIDIA HPC Compilers Reference Guide](https://docs.nvidia.com/hpc-sdk/archive/22.9/compilers/hpc-compilers-ref-guide/index.html)