インテル® MPI ライブラリーのマルチEP によりハイブリッド・アプリケーションのパフォーマンスを向上

parallel_v34

1990 年代半ば以降、MPI は分散メモリー型ハイパフォーマンス・コンピューティング (HPC) アプリケーションにおけるメッセージパッシングの業界標準となっています。高並列マルチコア・プロセッサーの出現により、MPI は共有メモリーシステム内のメッセージパッシングにも利用されています。

MPI ライブラリーの呼び出しにはオーバーヘッドが伴うため、マルチコアシステムで実行する純粋な MPI アプリケーションでは必要以上のオーバーヘッドが発生します。この回避策として、(Pthreads や OpenMP* などを使用して) MPI アプリケーションをマルチスレッド化して、ノードごとの MPI ランク数を減らすハイブリッド並列処理が採用されました。

ハイブリッド並列処理をサポートするため、MPI バージョン 2.1 でユーザー指定のスレッド・サポート・レベルでスレッド環境を初期化する MPI_INIT_THREAD 関数が追加されました。次の 4 レベルのスレッドサポートを利用できます。

  • MPI_THREAD_SINGLE
  • MPI_THREAD_FUNNELED
  • MPI_THREAD_SERIALIZED
  • MPI_THREAD_MULTIPLE

最初の 3 つのレベルには制約があり、スレッドが同時に MPI を呼び出すことを許可していません。MPI_THREAD_MULTIPLE サポートレベルには制約がありませんが、スレッド間の内部同期によりパフォーマンスが低下するため、あまり使用されていません。

インテル® MPI ライブラリー 2019 で強化された機能の 1 つは、スケーラブル・エンドポイントとマルチエンドポイント (マルチ EP) です。この機能は、MPI_THREAD_MULTIPLE サポートレベルで一部の機能制限はありますが、ハイブリッド・アプリケーションで優れたパフォーマンスを実現します1。マルチ EP の斬新な点は、MPI ランタイムで追加の同期を必要とせずに複数のスレッドを同時にアクティブにできることです。これにより、1 つの MPI ランクで複数のスレッドを使用してネットワーク帯域幅を飽和させることができ、ノードごとに複数のランクが不要になります。

この記事では、マルチ EP について説明し、インテル® MPI ライブラリーでマルチ EP 機能を使用する方法を紹介し、シンプルなベンチマークと実際のアプリケーションを使用して潜在的なパフォーマンス・ゲインを示します。

複数のエンドポイント

MPI エンドポイントは、MPI 通信の独立した実行をサポートするリソースのセットです2。エンドポイントは、MPI コミュニケーターのランクに対応します。ハイブリッド設定では、エンドポイントに複数のスレッドをアタッチすることが可能で、スレッドは対応するエンドポイントのリソースを使用して通信できます。これにより、通信用の複数のデータストリームが生成され、独立したハードウェア・コンテキストと並列に通信媒体を介して送信できます。その結果、アプリケーション・レイヤーからスレッド、MPI、OFI、およびハードウェア・レイヤーへロックなしでデータを送信できます (図 1)。

インテル® MPI ライブラリー 2019 でマルチ EP を使用する方法

マルチ EP を使用するために必要なコードと環境について考えてみましょう。ここでは、スレッド対応の MPI コードがすでに存在すると仮定します。マルチ EP は標準の MPI 機能ではないため、環境変数を設定して有効にする必要があります。

$ export I_MPI_THREAD_SPLIT=1

関連記事

  • インテル Parallel Universe 34 号日本語版の公開インテル Parallel Universe 34 号日本語版の公開 インテル Parallel Universe マガジンの最新号が公開されました。 注目記事: OpenVINO™ ツールキットと FPGA 掲載記事 インテル® ソフトウェア・ツールにおける浮動小数点結果の再現性 C++ メモリー割り当てライブラリーの比較 LIBXSMM: […]
  • インテル Parallel Universe 26 号日本語版の公開インテル Parallel Universe 26 号日本語版の公開 インテル Parallel Universe マガジンの最新号が公開されました。この号では、インテル® Xeon Phi™ プロセッサー向けのコードの現代化について説明します。また、インテル® Parallel Studio XE 2017 […]
  • インテル® Xeon® プロセッサー・ベースのホストとインテル® Xeon Phi™ コプロセッサー間の MPI 通信の改善インテル® Xeon® プロセッサー・ベースのホストとインテル® Xeon Phi™ コプロセッサー間の MPI 通信の改善 この記事は、インテル® デベロッパー・ゾーンに公開されている「Improving MPI Communication between the Intel® Xeon® Host and Intel® Xeon Phi™」の日本語参考訳です。 MPI シンメトリック・モードは、インテル® Xeon Phi™ […]
  • PyDAAL 超入門: パート 2 数値テーブルの基本操作PyDAAL 超入門: パート 2 数値テーブルの基本操作 この記事は、インテル® デベロッパー・ゾーンに公開されている「Gentle Introduction to PyDAAL: Vol 2 Basic Operations on Numeric Tables」の日本語参考訳です。 この記事の PDF 版はこちらからご利用になれます。 前のパート: パート 1: […]
  • HPL 向けアプリケーション・ノートHPL 向けアプリケーション・ノート この記事は、インテル® ソフトウェア・ネットワークに掲載されている「HPL application note」の日本語参考訳です。 ステップ 1 - 概要 このガイドは、現在 HPL を使用しているユーザーが、より優れたベンチマーク結果を得られるように、インテル® マス・カーネル・ライブラリー (インテル® MKL) の […]