0

分散コンピューティングの設定で、unordered_set を多くのノードに送信したいと考えています。私は、C++ でのシリアライゼーションを認識してboost::serializationいます。シリアル化に関する私の不満はunordered_set、シリアル化されたデータを受け取った後、すべてのノードでデータ構造を再構築するコストに直面していることです。

私の考えは、固定サイズの連続したメモリを割り当て、割り当て後に開始メモリ アドレスを返す unordered_set のカスタム アロケータを作成することです。次に、 のバイト表現を取得してネットワークunordered_set経由で送信し、受信ノードにこのメモリのチャンクがunordered_set.

それはうまくいくでしょうか?私の問題に取り組む別のアイデアはありますか?または、そのようなアロケーターを作成するなど、関連するポインターはありますか? フィードバックをお待ちしております。

ありがとうございました!

4

1 に答える 1

5

これはおそらくいくつかの理由から悪い考えです:

  1. 多くの場合、あるマシンから次のマシンへのハッシュの実装は異なるため、ハッシュテーブルは受信側のマシンでは有効ではなくなります。
  2. ハッシュ テーブルの実装には、多くの場合、ポインターが含まれます。あるマシンから別のマシンにポインタをコピーするだけではいけません。それらは絶対アドレスです (ほとんどのプラットフォームで)。
  3. 送信マシンと受信マシンのバイト オーダーが異なる可能性があります (たとえば、送信マシンが x86 で受信マシンが POWER (XBox など) であるとします)。この場合、得られる結果は完全に意味不明なものになります。

キーと値のペアのリストを送信するだけです。それらを受信側で構築されたハッシュ テーブルに挿入します。

また、回線経由で何かを送信する場合、多くの場合、処理能力のコストは帯域幅のコストに比べて小さいことに注意してください。ハッシュ テーブルはスペース効率が悪く、O(1) に近いパフォーマンスを維持するには、空のバケットがたくさん必要です。その結果、ネットワーク上でハッシュ テーブルをそのまま送信する方法を実装できたとしても、全体的なパフォーマンスが低下する可能性があります。

于 2013-02-18T19:30:02.280 に答える