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