---
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)