私のアプリケーションは、それぞれ 8 バイトの何百万もの入力レコードを受け取り、それぞれを 2 つ以上の出力ビンにハッシュします。つまり、各入力キー K は少数のペア (B1,K)、(B2,K)、... を作成します。キーごとの出力ビンの数は、キーが処理されるまでわかりません。通常は 2 ですが、場合によっては 10 以上になることもあります。
各ビンのすべてのキーは後で一緒に処理されるため、これらの出力ペアはすべて最終的に 1 つの配列に格納する必要があります。これを効率的に行うには?
アトミック インクリメントを使用して、グローバル配列からペアを繰り返し予約すると、恐ろしく遅く聞こえます。別の明白な方法は、ビンごとのある種のストレージへのポインターの配列としてハッシュテーブルを初期化することです。それは遅く見えます。
ブロック共有配列の入力レコードごとに 2 ペアを事前に予約し、必要に応じてより多くのスペースを取得し (つまり、STL ベクトル予約操作の再実装)、各ブロックの最後のスレッドで共有ブロックをコピーすることを考えています。配列をグローバルメモリに。
しかし、私はそれを実装することを楽しみにしていません。ヘルプ?ありがとう。