0
私は、OpenMPに新たなんだと に時間を費やすことなく、並列用インナー行う方法を私はこのような状況に直面しています:のための内部のために - 作成スレッド
私は内側のループ並列にしたいint someArray[ARRAY_SIZE];
//outer loop
for(int i = 0; i < 100; ++i) {
//inner loop
for(int j = 0; i < ARRAY_SIZE; ++i) {
//calculaations in someArray (every cell can be calculated separately)
}
//some code that needs to be run by only one thread - for example sorting someArray
}
、私が試みたアイデア(以下のコード)は効果的ではありません(単一のスレッドは複数のスレッドより高速に処理できます)。私は、ここで多くの時間をウエストの上に複数のスレッドを作成すると思う。
私の悪いソリューション:
int someArray[ARRAY_SIZE];
//outer loop
for(int i = 0; i < 100; ++i) {
#pragma omp parallel num_threads(THREADS_NUMBER) shared(someArray)
{
//inner loop
#pragma omp for
for(int j = 0; i < ARRAY_SIZE; ++i) {
//calculaations in someArray (every cell can be calculated separately)
}
}
//some code that needs to be run by only one thread - for example sorting someArray
}
あなたは、このタスクを最適化する方法任意のアイデアを持っていますか?
しかし、サイクルの終わりに配列の並べ替えがあるので(スケーリングされたリソース)、外側のループは1つのスレッド内にある必要があります。 ARRAY_SIZEは約66億です。だから私が望むのは、内部ループ(独立したセルが独立して再計算される)だけを並列化することです。 –
私はバリアを入れてから偽のマスター - > if(0 = thread_number) でもその不正なステートメントを試みました。 –
私は何かを達成しようとしていますか?あなたのサンプルを精巧にして、パフォーマンスの問題を見せてもらえますか? – GaspardP