user/pages/08.compilers/07.openmpi/docs.ja.md
452be89a
 ---
 title: OpenMPIライブラリ
 published: true
 taxonomy:
     category:
         - docs
 external_links:
     process: true
     title: false
     no_follow: true
     target: _blank
     mode: active
 ---
 
 [toc]
 
 ## 利用環境{#environment}
 
 ### 利用できるバージョン・システム{#version}
 
495abba5
 バージョン | モジュールファイル名 | システムA | システムB/C | システムG | クラウドシステム | 備考
 --- | --- | --- | --- | --- | --- | ---
1c0a127b
 4.1.5 | openmpi/4.1.5_nvhpc-23.9 | - | - | + | - | 2024年4月導入
495abba5
 4.1.5 | openmpi/4.1.5_nvhpc-23.5 | - | - | + | - | 2023年8月導入
 4.0.5 | openmpi/4.0.5_intel-2022.3 | + | + | - | + | 2023年6月導入
 4.0.5 | openmpi/4.0.5_gnu-8.5.0 | + | + | + | + | 2022年11月導入
 4.0.5 | openmpi/4.0.5_nvhpc-22.9 | - | - | + | - | 2022年11月導入
 4.0.5 | openmpi/4.0.5_nvhpc-22.5 | - | - | + | - | 2022年11月導入
452be89a
 
 \+ : すべてのユーザが利用可能  
 \- : 利用不可
 
 <!--
 OpenMPIは[NVIDIA HPC SDKコンパイラ](/compilers/nvidia)、[GNUコンパイラ](/compilers/gnu)で利用できます。
 -->
 
 <!--
 コンパイラは、
 [Intelコンパイラ](/compilers/intel) 、  [NVIDIA HPC SDKコンパイラ](/compilers/nvidia)  、  [GNUコンパイラ](/compilers/gnu) を利用できます。利用するコンパイラに合わせて、以下のようにmoduleコマンドを実行し、OpenMPIが利用できるように環境を設定します。
 
 ```nohighlight
 (Intelコンパイラを利用する場合)
 $ module switch PrgEnv(現在ロード中の環境) PrgEnvIntel
 $ module load openmpi/4.1.4_intel-17.0
 (PGIコンパイラを利用する場合)
 $ module switch  PrgEnv(現在ロード中の環境) PrgEnvNvidia 
 $ module load openmpi/4.1.4_nvidia-16.10
 (GNUコンパイラを利用する場合)
 $ module switch PrgEnv(現在ロード中の環境) PrgEnvGCC
 $ module load openmpi/4.1.4_gnu-4.8
 ```
 
 moduleコマンドの詳細は [Modules](/config/modules) をご覧ください。
 -->
 ### スレッド並列サポートレベル{#threadsafe}
 
 OpenMPIで提供可能なスレッド並列サポートレベルは、MPI_THREAD_MULTIPLEです。各スレッドから自由にMPI関数を呼び出すことができます。
 
 ## コンパイル・実行方法{#usage}
 
 ### コンパイル{#compile}
 
 **コンパイルコマンド**
 
 言語       |  コマンド     | 実行形式                      
 --------- | -------- | --------------------------
  Fortran |  mpifort  |  mpifort オプション ファイル名
  C |        mpicc |    mpicc オプション ファイル名 
  C++ |      mpic++ |   mpic++ オプション ファイル名
 
 **コンパイル例**
 
 ```nohighlight
 $ mpifort -O3 sample_mpi.f90
 ```
 
 ### 実行{#exec}
 
 コンパイルしたMPIプログラムを実行するためには、 会話型処理では **tssrun** コマンドを、バッチ処理では **srun** コマンドを使用します。会話型実行、バッチ実行ともに、並列数は --rsc オプションの引数 p で指定します。詳細は、 [サンプル](#sample) をご覧ください。
 <!--
 また、OpenMPなどのスレッド並列と組み合わせて実行する場合は、1ノードあたりに起動するプロセス数を --ntasks-per-node オプションで指定します。
 -->
 **実行例(会話型)**
 
 ```nohighlight
 $ tssrun --rsc p=2 ./a.out
 ```
 
 ## サンプル{#sample}
 
 ### 会話型でのMPIプログラム実行{#tss}
 
 会話型実行の詳細については、 [会話型処理](/run/interactive) のページをご覧ください。
 
 * **8並列で実行**
 
 ```nohighlight
 $ tssrun --rsc p=8 ./a.out
 ```
 
 * **スレッド並列と組み合わせて実行(MPI 4並列、OpenMP 8並列)**
 
 ```nohighlight
 $ tssrun --rsc p=4:t=8:c=8 ./a.out
 ```
 
 ### バッチでのMPIプログラム実行{#slurm}
 
 バッチ実行の詳細については、 [バッチ処理](/run/batch) のページをご覧ください。
 
 * **8並列で実行**
 
 ```nohighlight
 $ cat sample.sh
 #!/bin/bash
 #============ SBATCH Directives =======
 #SBATCH -p gr19999b
 #SBATCH -t 1:0:0
 #SBATCH --rsc p=8
 #SBATCH -o %x.%A.out
 
 #============ Shell Script ============
 srun ./a.out
 $ sbatch sample.sh
 ```
 
 * **スレッド並列と組み合わせて実行(MPI 4並列、OpenMP 8並列)**
 
 ```nohighlight
 $ cat sample.sh
 #!/bin/bash
 #============ SBATCH Directives =======
 #SBATCH -p gr19999b
 #SBATCH -t 1:0:0
 #SBATCH --rsc p=4:t=8:c=8:m=8G
 #SBATCH -o %x.%A.out
 
 #============ Shell Script ============
 srun  ./a.out
 $ sbatch sample.sh
 ```
 
 ## マニュアル{#manual}
 
 * [Open MPI v4.0 documentation](https://www.open-mpi.org/doc/v4.0/)
 
 ## リンク{#link}
 
 * [Open MPI: Open Source High Performance Computing](http://www.open-mpi.org/)