---
title: OpenMPIライブラリ
published: true
taxonomy:
category:
- docs
external_links:
process: true
title: false
no_follow: true
target: _blank
mode: active
---
[toc]
## 利用環境{#environment}
### 利用できるバージョン・システム{#version}
バージョン | モジュールファイル名 | システムA | システムB/C | システムG | クラウドシステム | 備考
--- | --- | --- | --- | --- | --- | ---
4.1.5 | openmpi/4.1.5_nvhpc-23.9 | - | - | + | - | 2024年4月導入
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月導入
\+ : すべてのユーザが利用可能
\- : 利用不可
<!--
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/)