私は大規模なデータ処理のためにopenMPを実験しており、比較的新しいものです。私の入力データセットは巨大なので、それを複数のサブセットに分割し、各スレッドがデータのサブセットを処理しています。サブセット内の各データ項目は、スレッドによって処理されます。いずれかのデータ項目での操作中にスレッドの1つが失敗した場合、他のスレッドを終了して失敗を返したいと思います。共有変数を使用することはオプションですが、同じことを行うためのより良い方法はありますか?
質問する
3153 次
1 に答える
2
スレッドの1つが入力をチョークした場合、どうしますか?プログラムを突然停止しますか?または、並列実行を停止して、プログラムのシリアル部分を整理しますか?
OpenMPは実際にはどちらの種類の操作用にも設計されていないため、ほとんどの初心者が行うように苦労するのではなく、OpenMPに苦労することになります。確かに、あなたが提案するように、共有変数を使用し、独自のロジックを記述してプログラムを停止するか、スレッドの1つに障害が発生した場合に並列領域の最後にジャンプすることができます。ただし、これらの操作にはOpenMP固有のメカニズムはありません。
task
OpenMP3.0の新機能を調査することをお勧めします。これらを使用すると、成功または失敗のいずれかを返すスレッドにタスクがディスパッチされ、失敗を処理する他のタスクを持つシステムを確実に実装できます。
最後に、悪い入力によってプログラムがクラッシュすることはないはずだと主張する人もいるかもしれませんが、それは別のトピックです。
于 2010-10-12T12:30:03.580 に答える