user/pages/08.compilers/03.nvidia/docs.ja.md
452be89a
 ---
 title: 'NVIDIA HPC SDKコンパイラ'
 taxonomy:
     category:
         - docs
 external_links:
     process: true
     no_follow: true
     target: _blank
     mode: active
 published: true
 ---
 
 [toc]
 
 
 ## 利用環境{#enviroment}
 
 
 ### 利用できるバージョン・システム{#version}
 
495abba5
 バージョン | モジュールファイル名 | システムA |システムB/C | システムG | クラウドシステム | 備考
 --- | --- | --- | --- | --- | --- | ---
1c0a127b
 23.9 (default) | nvhpc/23.9 | - | - | + | - | 2024年4月導入
495abba5
 23.5 | nvhpc/23.5 | - | - | + | - | 2023年8月導入
1c0a127b
 22.9 | nvhpc/22.9 | - | - | + | - | 2023年1月導入
452be89a
 
 \+ : すべてのユーザが利用可能  
 \- : 利用不可
 
 システムGでは、システムにログインした時点で、NVIDIA HPC SDKコンパイラがデフォルトで設定されています。システムB、C、クラウドではNVIDIA HPC SDKコンパイラは使えません。
 
 ログイン時に自動で環境設定を行いたい場合は、ログインシェルの起動ファイルに必要なmoduleコマンドを記述してください。詳細は [環境設定](/config) をご覧ください。
 moduleコマンドの詳細は [Modules](/config/modules) をご覧ください。
 
 #### cudaについて{#cuda}
 
495abba5
 バージョン | モジュールファイル名 | システムA | システムB/C | システムG | クラウドシステム | 備考
 --- | --- | --- | --- | --- | --- | ---
1c0a127b
 12.2.2 (dafault) | cuda/12.2.2 | - | - | + | - | 2024年4月導入
495abba5
 12.1.1 | cuda/12.1.1 | - | - | + | - | 2023年8月導入
1c0a127b
 11.7.1 | cuda/11.7.1 | - | - | + | - | 2023年1月導入
495abba5
 9.2 | cuda/9.2  | - | - | + | - | 2023年1月導入
452be89a
 
 \+ : すべてのユーザが利用可能  
 \- : 利用不可
 
 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)