CLion で OpenMPI プロジェクトを操作する方法
OpenMPI(英語) は、高性能並列コンピューティングをサポートするために設計された標準であるメッセージパッシングインターフェース (MPI)(英語) ライブラリのオープンソース実装です。OpenMPI は、いくつかの MPI プロジェクトのテクノロジーとリソースを組み合わせたものです。
このチュートリアルでは、CLion で OpenMPI プロジェクトをセットアップ、ビルド、実行、デバッグする手順を説明します。この手順は一般的なものであり、ソースに適用できます。手順を説明するために、OpenMPI 関数を含む単純な C++ アプリケーションを使用します。macOS で作業する場合の手順を記載しています。
0. 始める前に: システムに OpenMPI をインストールする
OpenMPI をダウンロード(英語)してビルドします(英語)。エラーが発生した場合は、同じ公式 FAQ ページに記載されているトラブルシューティングのヒントを試してください。
簡単なチェックとして、コマンドラインから
mpicc
を実行します。システムはコマンドを認識するはずです。
1. CLion で新しいプロジェクトを作成する
メインメニューから新しいプロジェクトをクリックします。
を選択するか、ウェルカム画面で左側のペインで、プロジェクトタイプ (この例では C++ 実行ファイル ) を選択します。
プロジェクトの場所を指定し、言語標準を設定します。
作成をクリックします。
CLion はスタブ CMake プロジェクトを生成します。
2. ソースファイルを追加する
ソースファイルをプロジェクトフォルダーにコピーします。
この例では、ファイルは openmpi_test.cpp および openmpi_test.h です。サンプルとして使用する場合、または独自のファイルを使用する場合は、以下のコードをコピーして貼り付けます。
#include <mpi.h> #include <cstdio> void print_processors() { // Initialize the MPI environment MPI_Init(nullptr, nullptr); // Get the number of processes int world_size; MPI_Comm_size(MPI_COMM_WORLD, &world_size); // Get the rank of the process int world_rank; MPI_Comm_rank(MPI_COMM_WORLD, &world_rank); // Get the name of the processor char processor_name[MPI_MAX_PROCESSOR_NAME]; int name_len; MPI_Get_processor_name(processor_name, &name_len); // Print off a hello world message printf("Hello world from processor %s, rank %d out of %d processors\n", processor_name, world_rank, world_size); // Finalize the MPI environment. MPI_Finalize(); }#ifndef OPENMPI_TEST_OPENPMI_HELLO_H #define OPENMPI_TEST_OPENPMI_HELLO_H void print_processors(); #endif //OPENMPI_TEST_OPENPMI_HELLO_H#include "openmpi_test.h" int main() { print_processors(); return 0; }この時点では、新しいファイルはまだ CMake プロジェクト構造に追加されておらず、OpenMPI コードは IDE によって認識されません。
ファイルを CMake に追加します。
単一のファイルを追加するには、通知バーの CMake プロジェクトに追加をクリックします。
複数のファイルを追加するには、プロジェクトツリーでファイルを選択し、コンテキストメニューから CMake プロジェクトに追加を呼び出します。
ターゲットを選択すると、CLion がファイルを自動的に追加します。
3. CMakeLists.txt を調整してプロジェクトをロードする
CMakeLists.txt ファイルを開き、次の変更を加えます。
add_executable
の前に次の行を追加します。find_package(MPI REQUIRED)add_executable
の後に次の行を追加します。target_link_libraries(<your_project_name> PRIVATE MPI::MPI_CXX)CMakeLists.txt コンテンツの例:
cmake_minimum_required(VERSION 3.25) project(openmpi_test) set(CMAKE_CXX_STANDARD 17) # Add MPI Package to Project find_package(MPI REQUIRED) add_executable(openmpi_test main.cpp openmpi_hello.cpp) # Link MPI libraries target_link_libraries(openmpi_test PRIVATE MPI::MPI_CXX)CMakeLists.txt に変更を加えると、CLion にはプロジェクト構造の再ロードを提案するアイコンが表示されます。それをクリックするか、ショートカットを押します。
CMake の再ロードとプロジェクトのビルドは正常に完了するはずです。
エラーがある場合は、CMakeLists.txt と OpenMPI のインストールを再確認してください。
バイナリは cmake-build-debug フォルダー (または、変更した場合は別のビルド場所) で見つけることができます。
4. プログラムを構築する
次のいずれかのオプションを使用します。
メインメニューから
を呼び出します。このアクションの詳細については、「ビルドアクション」を参照してください。
CLion は、CMakeLists.txt で検出されたターゲットごとに、タイプ CMake アプリケーションの構成を自動的に作成します。
設定を使用してターゲットをビルドするには、スイッチャーでターゲットを選択し、ハンマーアイコンをクリックするか、Control+F9 を押します。
5. (オプション) CMake プロファイルを構成する
CMake プロファイル設定では、ビルドオプション、環境変数、ビルドディレクトリ、その他のパラメーターを調整できます。
に移動します。
このダイアログでは、プロファイル設定を編集したり、プロファイルを作成 / 削除したりできます。詳細については、CMake プロファイルを参照してください。
プロジェクトプロファイルは構成スイッチャーにリストされます。CMake 構成を構築する前に、必ず必要なプロファイルを選択してください。
5. アプリケーションの実行
OpenMPI プログラムは、特別なランチャー mpiexec
、mpirun
、または orterun
(OpenMPI でシリアルジョブとパラレルジョブを実行する場合の同義語) で実行する必要があります。必要なプログラム引数を使用してこれらを呼び出すには、CLion のシェルスクリプト構成を使用します。
に移動します。
をクリックし、シェルスクリプトを選択します。
構成設定を調整します。
構成名を編集します。
実行 : で、スクリプトテキストを選択します。
スクリプトテキストで、プログラムを実行するコマンドを指定します。
この例では、
mpiexec -n 4 ./cmake-build-debug/openmpi_test
です。
設定を保存し、スイッチャーで新しく作成した構成を選択し、
をクリックするか、Shift+F10 を押します。
プログラムは正常に起動するはずです。CLion は、ターミナルツールウィンドウに出力を表示します。
6. プロセスにアタッチしてデバッグする
CLion で OpenMPI アプリケーションをデバッグするには、まずアプリケーションを起動してから、実行中の各プロセスにデバッガーをアタッチする必要があります。
目的の行の横にある左側のガターをクリックして、コードにブレークポイントを配置します。
各ブレークポイントの前に次のコードを追加します。
int i = 0; while (!i) sleep(5);sleep(5);
行にブレークポイントを配置します。構成を使用して再構築します。
またはデバッグプロファイルが選択されていることを確認してください。
シェルスクリプト構成を実行します。スイッチャーでそれを選択し、
をクリックするか、Shift+F10 を押します。
Control+Alt+F5 を押すか、メインメニューから
を選択します。開いたダイアログで、接続するプロセスを検索し、... で取り付けますをクリックします。
デバッグツールウィンドウの「変数」ペインで、「
i
」を選択し、「F2」を押します。ゼロ以外の値を設定します。通常どおりデバッグを続行します。
デバッガーを接続すると、さまざまなタイプのブレークポイント、ステップアクション、メモリと逆アセンブリビュー、式の評価など、すべての CLion デバッグ機能を使用できます。
別のプロセスをデバッグするには、手順 6 ~ 9 を繰り返します。
関連ページ:
![](https://resources.jetbrains.com/help/img/idea/2023.2/cl_buildproject.png)
ビルドアクション
プロジェクトのビルド、クリーニング、インストールのアクションは、メインメニューのビルドセクションにまとめられています。以下の表は、ビルドアクションが次のタイプのプロジェクトでどのように機能するかを示しています。CMake プロジェクト、Makefile プロジェクト、カスタムビルドターゲットとカスタム実行 / デバッグ構成を含む Compilation Database プロジェクト。CMake プロジェクトのビルドアクション:プロジェクトのビルド現在のプロジェクト用に設定された各 CMake プロファ...
![](https://resources.jetbrains.com/help/img/idea/2023.2/cl_makefile_config.png)
実行 / デバッグ構成: Makefile アプリケーション
この構成テンプレートを使用して、メークファイルアプリケーションを実行またはデバッグします。共通設定:実行構成を編集するとき(ただし実行構成テンプレートは編集しないとき)、次のオプションを指定できます。名前実行構成の名前を指定して、編集または実行時に他の構成の間ですばやく識別できるようにします。複数のインスタンスを許可するこの実行構成の複数のインスタンスを並行して実行できるようにします。デフォルトでは無効になっており、別のインスタンスがまだ実行されているときにこの構成を開始すると、CLion は...
![](https://resources.jetbrains.com/help/img/idea/2023.2/cl_cmake_settings_keymap.png)
CMake プロファイル
CMake プロジェクトのビルドに必要な設定は CMake プロファイルに組み込まれています。これには、ツールチェーンとビルド型に加え、ジェネレーターや環境変数などの CMake オプションが含まれます。たとえば、異なるコンパイラーを使用したり、異なる設定でターゲットをビルドしたりするために、プロジェクトに複数のプロファイルを構成できます。プロファイル設定にアクセスする次のいずれかを実行して、CMake プロファイル設定を開きます。に移動します。を押してアクションの検索ダイアログを開き、CMake...
![](https://resources.jetbrains.com/help/img/idea/2023.2/cl_exception_breakpoint_setting.png)
ブレークポイント
ブレークポイントは、特定のポイントでプログラムの実行を一時停止する特別なマーカーです。これにより、プログラムの状態と動作を調べることができます。ブレークポイントは、単純な場合(たとえば、コード行に到達したときにプログラムを一時停止する場合)や、より複雑なロジック(追加の条件に対するチェック、ログメッセージの書き込みなど)を伴う場合があります。ブレークポイントは、一度設定すると、一時的なブレークポイントを除き、明示的に削除するまでプロジェクト内に残ります。ブレークポイントの種類:CLion では...
![](https://resources.jetbrains.com/help/img/idea/2023.2/cl_debugtoolwindow_overview.png)
デバッグツールウィンドウ
デバッグセッションを開始すると、デバッグツールウィンドウが開きます。このウィンドウでは、さまざまなデバッガーアクションを実行し、プログラムデータ(フレーム、スレッド、変数など)を分析できます。これは、デバッグツールウィンドウの概要です。ツールウィンドウの使用に関する一般的な手順については、ツールウィンドウを参照してください。セッション:使用可能なデバッグセッションは、デバッグツールウィンドウの上部でタブに分割されています。特定の実行 / デバッグ構成に対してサービスウィンドウを有効にすると、こ...
![](https://resources.jetbrains.com/help/img/idea/2023.2/cl_debugger_stepout_returnvalue.png)
ステップスルー
CLion は、さまざまなデバッグ戦略のための一連のステップアクションを提供します(たとえば、次の行に直接移動する必要があるか、途中で呼び出された関数を入力する必要があるかなど)。ステップアクションは、デバッガーウィンドウのツールバーとメニューにあります。ステップオーバー:現在の行に関数呼び出しが含まれている場合でも、現在の行をステップオーバーして、次の行に移動します。呼び出しはスキップされ、発信者の次の行に直接移動します。ステップオーバーボタンをクリックするか、を押します。スキップされたメ