1

並列化する必要があるプログラムがあります。大量のデータが含まれる場合があります。これらのデータは ID で識別でき、同じ ID を持つデータがさらに存在する可能性があります。私のプログラムの各スレッドは、特定の ID を持つすべてのデータを回復して処理します。

私の質問は、並列プログラムの場合、データの ID でソートされたマルチマップまたはベクトルを使用するのが最善の解決策ですか?

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

4

3 に答える 3

2

データ型を抽象化し、一般的なソリューションを実装します。次に、2つのデータ型を置き換えて、どちらがパフォーマンスが優れているかを確認します。

于 2012-11-13T23:53:01.360 に答える
0

データのサイズによって異なります。たとえば、データがA B CありD、サイズが 2、10、20、30 で、4 つのスレッドで実行されている場合、負荷分散の問題が発生します。スレッド A は、残りのスレッドよりも少ない作業を行います。残念ながら、データを並べ替えても役に立ちません。

データを (たとえば) スタックに格納し、ID とは関係なく、スレッドがスタックから作業を実行できるようにする方がよい場合があります。ただし、スタックを同期する必要があります。

各 ID データに含まれるサイズが事前にわかっている場合は、それらをデータ ID で構成されるブロックにグループ化できます。このブロックはほぼ同じサイズになります。

次に、ブロックと、それらのブロックを計算するスレッドの ID に<K,V>なるVマップを作成できます。K

于 2012-11-14T00:01:10.120 に答える
0

unordered_map は良い解決策かもしれません。ハッシュとして実装されるため、同じ ID は同じバケットになります。
また、ハッシュ テーブルは、データを個別に処理できるバケットにグループ化するメカニズムを提供するため、大規模なデータ セットを処理する場合に適しています。

于 2012-11-14T00:12:37.910 に答える