7

MPIは、メッセージで低エントロピーデータを送信するために使用されることがあります。したがって、メッセージを送信する前に圧縮を試みると便利な場合があります。MPIは非常に高速なネットワーク(10 Gbit / s以上)で動作することは知っていますが、多くのMPIプログラムは、0.1Gまたは1Gbit / sイーサネットなどの安価なネットワークと安価な(低速、低二等分)ネットワークスイッチで使用されます。非常に高速なSnappy(wikipedia)圧縮アルゴリズムがあります。

圧縮速度は250MB/ s、解凍速度は500 MB/sです。

そのため、圧縮可能なデータや低速のネットワークでは、ある程度の速度が向上します。

MPIメッセージを圧縮できるMPIライブラリはありますか(MPIのレイヤーで。PPPのようなIPパケットの圧縮ではありません)。

MPIメッセージも構造化されているため、doubleの配列内の指数部分の圧縮などの特別な方法があります。

PS:同等の速度のLZ4圧縮方式もあります

4

3 に答える 3

8

そこに何もないと断言するつもりはありませんが、一般的に使用されているものはありません。

それが一般的でない理由はいくつかあります。

MPIは、十分に圧縮するのが難しい(ただし不可能ではない)多くの浮動小数点データを送信するためによく使用され、しばらくすると比較的高いエントロピーを持つことがよくあります。

さらに、MPIユーザーは多くの場合、帯域幅と同じくらい遅延に関心があり、メッセージパッシングクリティカルパスに圧縮/解凍ステップを追加することは、それらのユーザーにとって魅力的ではありません。

最後に、一部の操作(リダクションコレクティブやスキャッターギャザーなど)は、圧縮を使用して効率的に実装するのが非常に困難です。

ただし、ポイントツーポイント通信のユースケースはこれから恩恵を受ける可能性があるように思われるため、自分でそれを行うことができなかった理由はありません。サイズNのメッセージを送信しようとしていて、受信者がそれを予期していた場合、次のようになります。

  • 送信者は圧縮ルーチンを呼び出し、バッファと新しい長さMを受信します。
  • M> = Nの場合、最初のバイトが0である元のデータを、N+1バイトとしてレシーバーに送信します。
  • それ以外の場合は、1+圧縮データの初期バイトを送信します
  • 受信機は長さN+1バッファにデータを受信します
  • 最初のバイトが1の場合、MPI_Get_countを呼び出して受信したデータの量を判別し、解凍ルーチンを呼び出します
  • それ以外の場合は、非圧縮データを使用します

圧縮ルーチンについて多くのガイダンスを提供することはできませんが、人々が以前にこれを試したことがあるように見えます(例:http: //citeseerx.ist.psu.edu/viewdoc/summary?doi = 10.1.1.91.7936) 。

于 2012-06-01T12:38:36.797 に答える
4

それ以外のことを言われてうれしいですが、MPI のユーザーの多くは、データを圧縮するトランスポート層を持つことに関心があるとは思いません。

なぜ一体ではないのですか?

1) 可能な限り通信を行わないようにプログラムを設計しているため、相互接続を介して最小限の通信しか送信していないと考えています。

2) より大きなメッセージの大部分は浮動小数点数の配列で構成されており、ある程度まで圧縮するのは比較的困難です (したがって、時間的に比較的コストがかかります)。

于 2012-06-01T12:28:39.787 に答える
2

エジンバラ大学で進行中のプロジェクトがあります: http://link.springer.com/chapter/10.1007%2F978-3-642-32820-6_72?LI=true

于 2013-04-01T11:29:47.067 に答える