3

皆さん、

テキスト マイニング/自然言語アプリケーションをシングルコアから Map-Reduce スタイル システムに移植する作業を行っています。ステップの 1 つは、次のような while ループを含みます。

Queue<Element>;

while (!queue.empty()) {
    Element e = queue.next();
    Set<Element> result = calculateResultSet(e);

    if (!result.empty()) {
        queue.addAll(result);
    }
}

各反復は、前の反復の結果 (種類) に依存します。このループが実行しなければならない反復回数を決定する方法はありません。

このようなシリアル アルゴリズムを並列化する方法はありますか? 独自の入力を提供できるフィードバックメカニズムを考えようとしていますが、それを並列化するにはどうすればよいでしょうか?

ヘルプ/コメントをありがとう

4

2 に答える 2

2

calculateResultSetたぶん、セット全体で動作するいくつかの異なる機能に分割することができます。このようにして、すべての関数にセット全体を与え、各関数に個別の操作を実行させることができます。すべての関数が完了したら、すべての結果を別の関数にフィードして、最終的な出力を作成できます。これにより、データをさまざまなノードに送信し、操作を実行し、最終的に分散アーキテクチャを使用して結果を収集することができます。

共有の概念を調べることもできます。古典的な例は、xnがxn-1とxn-2に依存しているフィボナッチ数列です。OpenMPを使用した並列化バージョンの例を次に示します。http://myxman.org/dp/node/182

于 2012-05-15T14:57:32.163 に答える
1

Mstoeckliの提案は良いものです。または、データが非常に大きい場合は、データセットを分割してセットのさまざまな部分に対してループを実行し、所定の反復回数で(または何らかの停止基準の後に)データを再結合することが可能です。 。

少し実験する必要があります。いくつかの問題は、多くの近似を行っても問題がない傾向があり、他の問題はまったく問題がない場合があります。

于 2012-05-31T22:37:54.067 に答える