シュメム

SHMEM(Cray Researchの「共有メモリ」ライブラリ[1]に由来)は、低遅延の分散メモリスーパーコンピュータに片側RDMA並列処理インタフェースを提供する並列プログラミングライブラリのファミリです。SHMEMの頭字語はその後リバースエンジニアリングされ、「対称階層型メモリ」を意味するようになりました。 [2]その後、分散メモリ並列コンピュータクラスタに拡張され、並列プログラミングインタフェースとして、またはパーティション化されたグローバルアドレス空間(PGAS)システムおよび言語を構築するための低レベルインタフェースとして使用されています。[3]最初のSHMEMライブラリである「Libsma」は、CRAY T3Dのプロセッサ間通信ハードウェアにアクセスするための一連の薄いインタフェースとして、1993年にCray ResearchのRichard Smithによって作成されました。SHMEMは、Cray Research、SGI、Cray Inc.、Quadrics、HP、GSHMEM、IBM、QLogic、Mellanox、ヒューストン大学およびフロリダ大学によって実装されています。オープンソースのOpenSHMEMもあります。[4]

SHMEMは、低遅延(サブマイクロ秒)の片方向通信の基盤を築きました。[5] CRAY T3Eで使用された後、[6]その特徴である個々のワード通信の効率性を維持するために必要なマイクロ秒に近い遅延を実現できるマシンがほとんどなかったため、SHMEMの人気は衰えました。普及したサブマイクロ秒インターコネクトの登場により、SHMEMはエクサスケールコンピューティングにおける超高効率でポータブルな並列通信方式の必要性に応えるために利用されるようになりました。[7]

SHMEM を用いて記述されたプログラムは、高性能ネットワークで接続された複数のコンピュータ上で起動でき、SHMEM ライブラリによってサポートされます。各コンピュータはプログラムのコピー(SPMD)を実行します。各コピーは PE(処理要素)と呼ばれます。PE は、データの読み取り("shmem_get" 操作)や書き込み("shmem_put" 操作)などのリモートメモリアクセス操作を SHMEM ライブラリに要求できます。ピアツーピア操作は一方的なため、アクションを完了するためにリモートスレッドからの積極的な協力は必要ありません(ただし、"shmem_wait" を使用してローカルメモリの変更をポーリングすることはできます)。操作は、バイトやワードなどの短いデータ型、または配列などの長いデータ型(均等ストライドまたはインデックス付き(配列の一部の要素のみが送信される))に対して実行できます。短いデータ型の場合、SHMEM はリモートメモリであってもアトミック操作(CAS、フェッチと追加、アトミックインクリメントなど)を実行できます。また、2つの異なる同期方法があります。[4]タスク制御同期(バリアとロック)と、メモリフェンシングと順序付けを強制する関数です。SHMEMには、リダクション、ブロードキャスト、コレクトなど、すべてのPEによって開始される集合的な操作がいくつかあります。

各PEのメモリの一部は「対称」セグメント(または共有メモリ領域)として宣言され、その他のメモリはプライベートです。リモートPEからの片方向操作では、「共有」メモリのみがアクセス可能です。プログラマーは、静的メモリ構造またはshmalloc/shfreeルーチンを使用して、PEをまたがる対称アドレスを持つオブジェクトを作成できます。

典型的なSHMEM関数

  • start_pes(N)N個の処理要素(PE)を開始する
  • _my_pe() — SHMEMに現在のスレッドのPE識別子を返すように要求する
  • shmem_barrier_all() — すべてのPEがバリアに到達するまで待機し、その後、さらに先へ進むことができるようにします。
  • shmem_put(target, source, length, pe) — ローカルアドレス「source」から、長さ「length」のデータを、ID「pe」のPE上のリモートアドレス「target」に書き込みます。
  • shmem_get(target, source, length, pe) — ID "pe"のPE上のリモートアドレス "source"から長さ "length"のデータを読み取り、ローカルアドレス "target"に値を保存して保存する[8]

SHMEM実装のリスト

  • クレイリサーチ:クレイT3DクレイT3E、クレイリサーチPVPスーパーコンピュータ用のオリジナルSHMEM [9]
  • SGI: InfiniBand ネットワーク アダプタを搭載したNUMAlinkおよび Altix ビルドのシステム向け SGI-SHMEM
  • Cray Inc.: Unicos MP (X1E スーパーコンピュータ) 用 MP-SHMEM
  • Cray Inc.: Unicos LC (Cray XT3、XT4、XT5) 用 LC-SHMEM
  • Quadrics: QsNetインターコネクト[9]を備えたLinuxクラスター用のQ-SHMEM [10]
  • サイクロプス-64 SHMEM
  • HP SHMEM [9]
  • IBM SHMEM [9]
  • GPSHMEM [9]
  • NVSHMEM は OpenSHMEM API に基づいており、ホスト開始通信とデバイス開始通信の両方を含む GPU をサポートします。

OpenSHMEM実装

OpenSHMEM は、SGI と Open Source Software Solutions, Inc. による標準的な取り組みです。

  • ヒューストン大学:OpenSHMEMを参照[4] [9]
  • メラノックススケーラブルSHMEM [9]
  • Portals-SHMEM ( Portals インターフェースの上部)
  • フロリダ大学:ゲイターSHMEM [9]
  • Open MPIにはOpenSHMEMの実装が含まれている[11]
  • Adapteva Epiphanyコプロセッサ[12]
  • Sandia OpenSHMEM(SOS)は複数のネットワークAPIをサポートしています[13]
  • OpenSHMEM over MPI (OSHMPI)バージョン1はMPI片側通信に基づいており、OpenSHMEM 1.2仕様をサポートしています[14]
  • OpenSHMEM over MPI (OSHMPI)バージョン2はMPI片側通信に基づいており、OpenSHMEM 1.4仕様[15]をサポートしています。
  • MVAPICH2-XにはOpenSHMEM実装が含まれています
  • shmem4pyは、C実装のラッパーとして、OpenSHMEM 1.5仕様機能のPythonサポートを提供します。[16]

デメリット

最初の数年間、SHMEMは特別なネットワークを備えた一部のCray Researchマシン(後​​にSGIでも追加) [1]でのみアクセス可能で、ライブラリの普及が制限され、ベンダーロックインとなっていました(たとえば、Cray ResearchはMPIプログラムを部分的に書き直してMPIとshmem呼び出しの両方を組み合わせることを推奨しましたが、これによりプログラムは他のクリアMPI環境に移植できなくなりました)。

SHMEMは標準として定義されていなかったため[9] [1]、他のベンダーによって互換性のないSHMEMライブラリの亜種がいくつか作成されました。ライブラリはそれぞれ異なるインクルードファイル名を持ち、PEの起動や現在のPE IDの取得のための管理関数名も異なっていました[9]。また、一部の関数は変更されたり、サポートされなくなったりしていました。

SHMEM ライブラリのバリアントは、クラスターにRDMAに最適化されたイーサネットしかない場合でも、任意の MPI ライブラリ上で実行できますが、パフォーマンスは通常、他の拡張ネットワーク プロトコルよりも低下します。

共有領域のメモリはシステムのmallocではなく、特別な関数( shmalloc / shfree )を使って割り当てる必要があります[9]

SHMEMの多くの欠点は、エクサスケール開発の推進により、一般的なサブマイクロ秒インターコネクト上でOpenSHMEMを使用することで克服されました。[7]

参照

参考文献

  1. ^ abc Cray Research (1999). Cray T3E C and C++ Optimization Guide (PDF) (技術レポート). pp.  45– 83. 004-2178-002. 2014年2月1日時点のオリジナル(PDF)からのアーカイブ。
  2. ^ 並列コンピューティング入門 - 3.11 関連作業 // cse590o コース、ワシントン大学、2002年冬; 154ページ
  3. ^ 「並列プログラミングのための新しいアクセラレーション」(PDF) . Mellanox. 2012. 2014年1月18日閲覧. SHMEMはPGAS実装の低レベルインターフェースとして使用/提案されている。
  4. ^ abc Poole, Stephen (2011). 「OpenSHMEM - 統一RMAモデルに向けて」.並列コンピューティング百科事典. pp.  1379– 1391. doi :10.1007/978-0-387-09766-4_490. ISBN 978-0-387-09765-7
  5. ^ SHMEMアプリケーションのベンチマーク、トレース、シミュレーションのためのツール // CUG 2012、サンディエゴスーパーコンピュータセンターとORNLによる論文
  6. ^ 『Recent Advances in Parallel Virtual Machine and Message Passing ...』、第 11 巻、59 ページ: 「プログラミング パラダイムとしての片側通信は、当初 Cray T3D および T3E 上の SHMEM ライブラリによって普及しました...」
  7. ^ ab "OpenSHMEM 2015". www.csm.ornl.gov . 2017年4月10日閲覧。
  8. ^ SGI TPL. "man shmem_get". 2014年2月1日時点のオリジナルよりアーカイブ。
  9. ^ abcdefghijk Nanjegowda, Ram; Pophale, Swaroop; Curtis, Tony (2012). 「OpenSHMEMチュートリアル」(PDF) . ヒューストン大学(テキサス州)。2014年2月1日時点のオリジナル(PDF)からのアーカイブ。
  10. ^ Shmem プログラミングマニュアル // Quadrics、2000-2001
  11. ^ オープンMPI
  12. ^ James Ross、David Richie. Adapteva Epiphanyコプロセッサ向けOpenSHMEM実装. OpenSHMEMおよび関連技術に関する第3回ワークショップ「OpenSHMEM 2016」の議事録. www.csm.ornl.gov .. シュプリンガー、2016年。
  13. ^ Github 上の Sandia OpenSHMEM (SOS)
  14. ^ Hammond, Jeff R.; Ghosh, Sayan; Chapman, Barbara M. (2014). 「MPI-3片側通信を用いたOpenSHMEMの実装」. Poole, Stephen, Hernandez, Oscar, Shamis, Pavel (編). OpenSHMEMと関連技術:経験、実装、ツール. Lecture Notes in Computer Science. Vol. 8356. Cham: Springer International Publishing. pp.  44– 58. doi :10.1007/978-3-319-05215-1_4. ISBN 978-3-319-05215-1
  15. ^ Si, Min; Fu, Huansong; Hammond, Jeff R.; Balaji, Pavan (2022). 「MPIよりも優れたパフォーマンスを実現するOpenSHMEM:徹底的な分析と最適化」. OpenSHMEMと関連技術. エクサスケールとスマートネットワーク時代のOpenSHMEM. Springer International Publishing. pp.  39– 60. doi :10.1007/978-3-031-04888-3_3.
  16. ^ Rogowski, Marcin; Hammond, Jeff R.; Keyes, David E.; Dalcin, Lisandro (2023). 「shmem4py: Pythonアプリケーションのための高性能片側通信」.先端科学計算プラットフォーム会議議事録. pp.  1– 10. doi : 10.1145/3624062.3624602 .

さらに読む

  • 共有メモリアクセス(SHMEM)ルーチン // Cray Research、1995
  • CRAY T3E で SHMEM を使用する
  • man intro_shmem (SGI TPL) - SHMEMプログラミングモデルの紹介
  • OpenSHMEM: パーティション化されたグローバル アドレス空間での並列プログラミング用の標準化された API の仕様を作成する取り組み。
「https://en.wikipedia.org/w/index.php?title=SHMEM&oldid=1305285934」から取得