申し訳ありませんが、タイトルが不明な場合は大変です。私はこれをどのように言葉にするのか分かりません。OpenMP反復の並列領域のループ
私は次の操作を行うことができますどのような方法があります場合、私は思ったんだけど:
#pragma omp parallel
{
for (int i = 0; i < iterations; i++) {
#pragma omp for
for (int j = 0; j < N; j++)
// Do something
}
}
このようなループのために民間の指定子を省略したものを無視して、私は私の外側の外にスレッドをフォークすることができますどのような方法があります私はちょうど内側のループを並列化することができるようにループ?私の理解から(私が間違っている場合は私を修正してください)、すべてのスレッドは外側のループを実行します。私は内部ループの動作については不明ですが、for
はそれに遭遇する各スレッドにチャンクを配布すると思います。
私がしたいことは、外ループでiterations
回をフォーク/ジョインする必要はありません。これは正しい戦略ですか?
外部ループが並列化されるべきでない場合はどうなりますか?それは、誰かが私がより良いのOpenMPを使用する際に利用するための戦略を理解することができるように、大規模なアプリケーションは、OpenMPを使用して並列化の例に私を指すようにした場合、それは素晴らしいことだ...
#pragma omp parallel
{
for (int i = 0; i < iterations; i++) {
for(int k = 0; k < innerIterations; k++) {
#pragma omp for
for (int j = 0; j < N; j++)
// Do something
// Do something else
}
}
}
です。私は何かを見つけることができないようです。
説明:ループの順序付けを変更したり、ブロック、キャッシング、および一般的なパフォーマンスの考慮事項を含まないソリューションを探しています。私は、これが指定されたループ構造上でOpenMPでどのように行われるのかを理解したいと思います。 // Do something
には依存関係がある場合もあれば、依存関係が存在しない場合もあります。
多分、あなたがしたいことの例を挙げることができます。私はコードに記入することを意味する//何かを行う –
@raxman、それは役に立たないでしょう。これは、特定のアプリケーションの解決策ではなく、そのような問題に対する一般的な解決策の要求であることを意味します。 – Pochi
あなたは先に進み、ある答えをupvote/acceptすることができます。人々が何か努力をして、すべてのことに対して非常に最小限のアップフォースを得たように見えます。 –