openmpiとは?初心者のためのやさしい解説と使い方ガイド共起語・同意語・対義語も併せて解説!

  • このエントリーをはてなブックマークに追加
openmpiとは?初心者のためのやさしい解説と使い方ガイド共起語・同意語・対義語も併せて解説!
この記事を書いた人

高岡智則

年齢:33歳 性別:男性 職業:Webディレクター(兼ライティング・SNS運用担当) 居住地:東京都杉並区・永福町の1LDKマンション 出身地:神奈川県川崎市 身長:176cm 体系:細身〜普通(最近ちょっとお腹が気になる) 血液型:A型 誕生日:1992年11月20日 最終学歴:明治大学・情報コミュニケーション学部卒 通勤:京王井の頭線で渋谷まで(通勤20分) 家族構成:一人暮らし、実家には両親と2歳下の妹 恋愛事情:独身。彼女は2年いない(本人は「忙しいだけ」と言い張る)


はじめに

openmpi という名前を聞くと難しそうに思えるかもしれませんが、基本を知れば誰でも分散処理の世界へ入ることができます。本稿では openmpi の意味や使い方の全体像を中学生にもわかるように丁寧に解説します。openmpi は複数の計算機をつなぎ 一つの大きな計算機のように動かすためのソフトウェアです。ここでいう計算機とはパソコンやサーバーを指し それらをネットワークで結ぶことで同時に計算を行います。openmpi はそのネットワーク通信を仲介して 各プロセスと呼ばれる小さな計算単位どうしが情報を交換できるようにします。

openmpiとは何か

openmpi とは分散処理の標準である MPI の実装の一つです。MPI は Message Passing Interface の略で 複数の計算機を組み合わせて大きな計算を行うときに プロセス同士がデータをやり取りするための約束事を定義します。openmpi はこの約束事を守りつつ 実際の通信をネットワーク経由で実現します。openmpi は Linux やmacOS だけでなく Windows の環境でも利用できることが多く、さまざまなネットワークバックエンドを選べるのが特徴です。

なぜ openmpi を使うのか

大規模な数値計算や科学計算では 一台のパソコンだけでは足りないことがあります。そのようなとき openmpi を使うと 複数の計算機を協力させて 1つの大きな問題を解くことができます。計算の速度を上げることができるだけでなく、研究や技術開発の現場で再現性のある実験環境を作る手助けにもなります。

基本的な仕組み

openmpi では 多くの処理を同時に進めるために プロセスと呼ばれる小さな計算の集まりを作ります。全てのプロセスは MPI_COMM_WORLD という共通の世界を共有します。これを使うことで プロセス同士が互いのアドレスを知り データを送信したり受け取ったりします。実際の動作は ネットワーク経由で行われ、mpirunmpicc などの道具を使って実行します。

実際のインストールと準備

代表的な Linux での手順は次の通りです。apt や yum で Open MPI のパッケージを入れ 連携していくことで コンパイルと実行がスムーズになります。例として Debian 系の環境では以下のようなコマンドを使います。

1 行目はコンパイラの用意と MPI ライブラリの取得です。sudo apt-get update sudo apt-get install -y openmpi-bin openmpi-common libopenmpi-dev

2 行目は MPI プログラムをコンパイルします。mpicc -o hello hello.c

3 行目は 実行です。<span>mpirun -np 4 ./hello

簡単な Hello MPI の例を想定した流れ

次の説明は テキストベースの想像ですが 実際には C 言語等で書かれた MPI プログラムを コンパイルして実行します。簡単な Hello World の例 では 各プロセスが自分の ID を表示し 最後に どのプロセスが何番目かを出力します。

手順としては ① hello.c の作成 ② mpicc でコンパイル ③ mpirun で実行 の3つです。実行環境によっては ホストファイルを用意して どのノードを使うか指示する必要があります。

よくある質問と注意点

・MPI のバージョンによって 挙動が微妙に異なることがあります。現在の環境と Open MPI のバージョン を合わせることが大切です。

・開発機と本番機で ネットワーク設定が異なると 動作しないことがあります。ファイアウォールの設定や SSH の鍵の設定を整える必要があります。

表: よく使うコマンド

コマンド説明
mpiccMPI プログラムを C でコンパイルするためのコンパイラ
mpirun -np NN プロセスで実行する
mpic++C++ 用の MPI コンパイラ
ompi_infoOpen MPI の情報を表示

最後に openmpi は 科学計算や大規模データ処理の現場で 多くの人に使われている 信頼性の高い実装です。正しい手順で学習を進めれば 初心者でも段階的にスキルを積み上げられます


openmpiの同意語

Open MPI
オープンソースのMPI実装のひとつ。複数のプラットフォームに対応し、プロセス間通信を提供するMPI規格の実装です。
OpenMPI
Open MPIプロジェクトが提供する、オープンソースのMPI実装。高性能な並列通信機能を提供します。
Open MPIプロジェクト
Open MPIを開発・提供する組織・プロジェクト名。MPIライブラリをオープンソースとして公開しているソフトウェア群です。
Open MPIソフトウェア
Open MPIを指す別称。MPIの機能を提供するソフトウェアパッケージです。
Open MPIライブラリ
MPI機能を提供するライブラリとしてのOpen MPI。プロセス間通信や同期機能を提供します。
オープンソースMPI実装
MPIの仕様をオープンソースとして実装しているソフトウェアの総称。Open MPIはその代表例です。
オープンMPI
Open MPIの日本語表記の一つ。オープンソースのMPI実装ソフトウェア。
Open MPIの実装
MPI規格を満たすソフトウェアの中で、Open MPIが該当します。並列計算向けの通信ライブラリです。
Open MPIプロジェクトのMPI実装
Open MPIプロジェクトが提供するMPI規格の実装。
MPI実装のオープンソース版
オープンソースライセンスの下で提供されるMPI実装の一例。Open MPIが該当します。

openmpiの対義語・反対語

クローズドソースMPI
ソースコードが公開されていない、閉じたライセンス下で提供されるMPI実装。外部の検証が難しく、サポートはベンダー依存となることが多い。
商用MPI
ライセンスが商用で、オープンソースではないMPI実装。使用条件が制約され、ソース公開が限定されることが多い。
プロプライエタリMPI
特定企業が知的財産として所有するMPI実装。利用はライセンス契約を結ぶ必要があり、ソース公開がされていないことが多い。
独自MPI
組織内で独自に開発したMPI実装。公開されていない場合が多く、特定環境向けの最適化が進んでいることがある。
非公開MPI
一般には公開されていないMPI実装。公開されていないため、検証や比較が難しいことがある。
閉鎖的MPI
開発プロセスやドキュメントなどが閉ざされ、オープンな協力・参加が難しいMPIの状態・実装。
専有MPI
特定ベンダーが権利を有し、他者が自由に利用・改変できないMPI実装。ライセンスに従って使用する必要がある。

openmpiの共起語

MPI
メッセージパッシングインターフェースの略称。分散計算でプロセス間通信を標準化する仕様で、OpenMPIはこの仕様に準拠した実装の一つです。
MPICH
代表的なMPI実装のひとつ。OpenMPIと競合することがあり、互換性のあるMPIコードは両方で動作することが多いです。
MVAPICH
InfiniBandなどの高帯域ネットワークに最適化されたMPI実装。大規模なHPC環境でよく使われます。
mpirun
MPIプログラムを起動するコマンド。プロセス数やホストの指定などを行い、並列実行を開始します。
mpiexec
mpirunと同等の機能を持つ実行コマンド。環境によって使い分けられることがあります。
hostfile
MPIジョブを実行するノード情報を記述するファイル。ノード名と割り当てプロセス数を指定します。
Slurm
HPCクラスタで広く使われるジョブスケジューラ。MPIジョブをSlurm経由で実行する設定が一般的です。
PBS
Portable Batch Systemの略。ジョブ管理ツールで、MPIジョブの送信・管理に利用されます。
Torque
PBSの実装の一つ。ジョブスケジューリングとMPIの連携を提供します。
gcc
GNU Compiler Collectionの略。C/C++の主要コンパイラで、OpenMPIのビルド時に使われることが多いです。
gfortran
GNU Fortranコンパイラ。Fortranコードのビルドに用いられます。
clang
LLVM系のC/C++/Fortranコンパイラ。OpenMPIのビルドにも使われることがあります。
C
C言語。MPIのCバインディングを使うプログラムを開発する際に用いられます。
Fortran
Fortran言語。MPIのFortranバインディングを使う場合に用いられます。
Python
PythonからMPIを使う場合の開発環境。mpi4pyなどのバインディングと組み合わせて利用します。
mpi4py
Python用のMPIバインディング。OpenMPIと連携してPythonで並列処理を実行できます。
CUDA
NVIDIAのGPUプラットフォーム。CUDA対応MPIでGPU間通信を活用できます。
CUDA-aware MPI
CUDAデバイスのバッファをMPI通信で直接扱える機能。GPUを用いた分散計算の性能を向上させます。
InfiniBand
高帯域・低レイテンシのネットワーク技術。OpenMPIはInfiniBandをバックエンドとして高速通信が可能です。
ibverbs
InfiniBandの低レベルAPI。通信バックエンドの一部としてOpenMPIで使われます。
openib
OpenMPIがInfiniBandを利用する際の通信モジュール名。インターコネクト層の一部。
Shared memory
同一ノード内のプロセス間通信を高速化する共有メモリ機構。OpenMPIではSMモジュールとして使われます。
SM
Shared Memoryの略。OpenMPIの通信モジュールの一つです。
libfabric
高性能通信ライブラリ。OpenMPIはlibfabricを介して通信を実現することがあります。
OpenMP
Open Multi-Processingの略。MPIと組み合わせてハイブリッド型の並列プログラムを作る際に用いられます。
ompi_info
OpenMPIのビルド情報・設定を表示するコマンド。現在の構成を確認できます。
autotools
自動構成ツールの総称。OpenMPIのソースビルド時に使われることがあります。
configure
OpenMPIをビルドする際の設定スクリプト。コンパイラやライブラリの検出を行います。
make
ソースコードをビルドする標準的なツール。OpenMPIのビルドにも使われます。
cmake
ビルド設定ツール。OpenMPIの周辺ソフトの構成に使われることがあります。
environment modules
環境モジュール。複数のソフトウェアバージョンを切り替えやすくする仕組みです。
Lmod
環境モジュールの実装の一つ。OpenMPIのバージョン切替を容易にします。
Homebrew
macOS向けのパッケージマネージャ。OpenMPIのインストールにも使われます。
Ubuntu
Debian系の代表的ディストリビューション。OpenMPIのパッケージがaptで提供されています。
Debian
Debian系OS。OpenMPIのビルド・インストール手順が公開されています。
RHEL
Red Hat系OS。OpenMPIのパッケージがdnf/yumで提供されています。
macOS
MacでのOpenMPIの利用。HomebrewやMacPortsでのインストールが一般的です。

openmpiの関連用語

Open MPI
MPI実装のひとつで、複数のノードをまたいだ並列計算を可能にするライブラリ。OSSとして広く使われ、複数の通信バックエンドや機能拡張を柔軟に組み合わせられます。
MPI
Message Passing Interfaceの略。分散メモリ環境でプロセス間通信を行う標準的なAPIです。
MPICH
別のMPI実装で、MPI標準を実装するプロジェクト。Open MPIと並ぶ主要なMPI実装の一つです。
MPI-3
MPIの第三世代標準仕様。新機能や改善点を含む更新版です。
MPI_Init
MPI環境を初期化してMPIを使える状態にする関数です。
MPI_Finalize
MPI環境を終了し、リソースを解放する関数です。
MPI_Init_thread
複数スレッドを使うMPIアプリケーションの初期化。要求するスレッドサポートレベルを指定します。
MPI_Query_thread
現在のスレッドサポートレベルを問い合わせる関数です。
MPI_THREAD_SINGLE
アプリケーションが1つのスレッドのみでMPIを呼び出す設定レベル。
MPI_THREAD_FUNNELED
外部スレッドはMPIを呼び出さず、MPI呼び出しは主スレッドだけが行います。
MPI_THREAD_SERIALIZED
複数スレッドがMPI呼び出しを連続して行えるが同時には実行されません。
MPI_THREAD_MULTIPLE
複数スレッドが同時にMPI呼び出しを安全に行えるレベル。
MPI_Comm_size
指定したコミュニケータ内のプロセス数を取得します。
MPI_Comm_rank
現在のプロセスの順位(ランク)を取得します。
MPI_COMM_WORLD
全プロセスを含むデフォルトのコミュニケータ。
MPI_Comm_dup
既存のコミュニケータを複製して新しいコミュニケータを作成します。
MPI_Comm_split
同じグループの中でサブコミュニケータを作成します。
Communicator
プロセス間通信を行う論理的な集合。MPIの基本単位です。
Rank
コミュニケータ内で各プロセスが持つ識別子。0から始まる整数です。
Process
MPIで動作する1つの実行単位です。
MPI_Send
ポイントツーポイント通信でデータを送信します。
MPI_Recv
ポイントツーポイント通信でデータを受信します。
MPI_Isend
非ブロッキング送信。送信を開始して処理を続けられます。
MPI_Irecv
非ブロッキング受信。受信を開始して処理を続けられます。
MPI_Wait
非ブロッキング通信の完了を待つための関数です。
MPI_Barrier
全プロセスが同期する障害物のような通信操作です。
MPI_Bcast
1つのプロセスがデータを全プロセスへ配布します。
MPI_Scatter
データを各プロセスへ等分配します。
MPI_Gather
各プロセスからデータを集約して1つのプロセスへ集めます。
MPI_Reduce
各プロセスのデータを畳み込み、1つの結果を得ます。
MPI_Allreduce
全プロセスに集計結果を配布します。
MPI_Allgather
各プロセスのデータを全プロセスへ配布します。
MPI_Alltoall
各プロセスが他の全プロセスへデータを送受信します。
MPI_Status
通信操作の状態情報を返す構造体です。
MPI_Request
非ブロッキング通信の進行状況を表す識別子です。
MPI_Datatype
データの型情報を表します。基本型と派生型を扱います。
Derived datatype
複雑なデータ構造をMPIで送るための派生データ型
MPI_Type_vector
派生データ型を作るための典型的な例
MPI_Wtime
経過時間を取得するためのタイマー関数です。
Cartesian topology
格子状のトポロジーを作成して、近接ノードの通信を効率化します。
MPI_Cart_create
格子状トポロジーを作成する関数。
MPI_Graph_create
グラフ状トポロジーを作成します。
One-sided communication (RMA)
1発の操作でリモートのメモリへ読み書きできる通信モデルです。
MPI_Win_create
RMA用のウィンドウを作成します。
MPI_Put
リモートのウィンドウへデータを書き込みます。
MPI_Get
リモートのウィンドウからデータを取得します。
MPI_Win_free
RMAウィンドウを解放します。
hwloc
ハードウェアの物理的トポロジーを把握するためのライブラリ。Open MPIの最適化に使われます。
BTL / PML / SM / TCP
Open MPIの通信層構造の略称。SMは共有メモリ、TCPはTCP/IP、BTLはデータ転送モジュール、PMLは通信プロトコル層です。
MCA parameters
Open MPIのモジュール構成を制御する設定項目です。
ompi/mpirun / orterun
MPIプログラムを起動するコマンド。Open MPIで実行を管理します。
hostfile / machinefile
実行ノードを指定するファイル。各ノードの割り当てを定義します。
binding and mapping
プロセスのCPU割り当てとノード間の配置を制御します。
--bind-to-core
コア単位でプロセスを固定します。
--bind-to-socket
ソケット単位でプロセスを固定します。
-map-by
プロセスの割り当て方を指定します。
-map-by ppr
1ノードあたりのプロセス数などの割り付け指示。
Hybrid MPI+OpenMP
MPIとOpenMPを組み合わせて並列化する設計手法。
Slurm integration
Slurmなどのジョブスケジューラと連携してMPIジョブを実行します。
BLCR / Checkpoint/restart
障害発生時に状態を保存して再開するチェックポイント機能。BLCRが実装例です。
ompi-checkpoint
Open MPIのチェックポイント作成コマンドの一部です。
mpi4py
PythonからMPIを使うためのbindingです。/ PythonでMPIプログラムを作成できます。
UCX
高速通信バックエンドの一つ。Open MPIでUCXをバックエンドとして選択できます。
PMPI
MPIのプロファイリングインターフェース。自前のプロファイラを組み込みやすくするための低レベルAPIです。
MPI_Errhandler
エラーハンドリングの仕組みを設定します。
MPI_ABORT
エラー時にMPIアプリケーションを強制終了します。
mpi.h
C言語でMPIを利用する際のヘッダファイルです。
mpi.f08
Fortran向けMPIインターフェースのモジュール。
latency / bandwidth
通信の速度特性を表す基本的な指標。遅延と帯域幅の最適化がパフォーマンスに直結します。
MPI-2 features
MPI-2で追加された機能群。RMA、I/O、アトミック操作などを含みます。

openmpiのおすすめ参考サイト


インターネット・コンピュータの人気記事

awstatsとは?初心者でもわかる使い方と基本解説共起語・同意語・対義語も併せて解説!
16762viws
bing・とは?初心者のための基本ガイド:検索エンジンの仕組みと使い方共起語・同意語・対義語も併せて解説!
3068viws
差し込み印刷・とは?初心者でもすぐわかる使い方と仕組みガイド共起語・同意語・対義語も併せて解説!
1239viws
着信転送とは?初心者向けガイドで分かる使い方と設定のコツ共起語・同意語・対義語も併せて解説!
1202viws
7zファイル・とは?初心者でもわかる使い方と特徴を解説共起語・同意語・対義語も併せて解説!
1106viws
全角文字とは?初心者向け解説|全角と半角の違いをやさしく学ぶ共起語・同意語・対義語も併せて解説!
1063viws
com端子・とは?初心者にも分かる基礎ガイド|シリアルポートの使い方と歴史を解説共起語・同意語・対義語も併せて解説!
1060viws
充電アダプターとは何かを徹底解説|初心者でも分かる基本と選び方のコツ共起語・同意語・対義語も併せて解説!
1005viws
リマインドメールとは?初心者にもわかる基本ガイドと使い方のコツ共起語・同意語・対義語も併せて解説!
887viws
pinロックとは?初心者が知っておくべき基本と使い方ガイド共起語・同意語・対義語も併せて解説!
885viws
asp・とは?初心者向けに徹底解説する基本と使い方ガイド共起語・同意語・対義語も併せて解説!
833viws
none とは?初心者にもやさしく解説する意味と使い方ガイド共起語・同意語・対義語も併せて解説!
832viws
16進数カラーコード・とは?初心者でもつまずかない基礎と使い方ガイド共起語・同意語・対義語も併せて解説!
831viws
xlsmとは?初心者でも分かるExcelのマクロ付きファイルの基本共起語・同意語・対義語も併せて解説!
785viws
ローカルポート・とは?初心者にも分かる基本と使い方ガイド共起語・同意語・対義語も併せて解説!
759viws
sha256とは?初心者が知るべき暗号ハッシュの基礎と使い道共起語・同意語・対義語も併せて解説!
746viws
csvダウンロードとは?初心者が今すぐ使える基本ガイド共起語・同意語・対義語も併せて解説!
655viws
ワンタイムコード・とは?初心者でも分かる基本と使い方ガイド共起語・同意語・対義語も併せて解説!
624viws
countifとは?初心者でもすぐ使える基本と応用ガイド共起語・同意語・対義語も併せて解説!
624viws
googleドキュメントとは?初心者が今日から使いこなす基本ガイド共起語・同意語・対義語も併せて解説!
558viws

新着記事

インターネット・コンピュータの関連記事