以下のコードを実行します(下記参照)。私は2つの独立したスレッドを生成したい、それぞれは並列のforループを実行するだろう。残念ながら、私はエラーが発生します。明らかに、for
はsection
の内部では生成できません。それを解決するには?OpenMP、ループ内のループ
#include <omp.h>
#include "stdio.h"
int main()
{
omp_set_num_threads(10);
#pragma omp parallel
#pragma omp sections
{
#pragma omp section
#pragma omp for
for(int i=0; i<5; i++) {
printf("x %d\n", i);
}
#pragma omp section
#pragma omp for
for(int i=0; i<5; i++) {
printf(". %d\n", i);
}
} // end parallel and end sections
}
とエラー:
main.cpp: In function ‘int main()’:
main.cpp:14:9: warning: work-sharing region may not be closely nested inside of work-sharing, critical, ordered, master or explicit task region [enabled by default]
main.cpp:20:9: warning: work-sharing region may not be closely nested inside of work-sharing, critical, ordered, master or explicit task region [enabled by default]
しかし、おそらくomp_set_num_threads()は5以下になるべきです... –
この場合、あなたは5に設定する必要がありますが、10であれば問題ありません。他の5は何もしません。 – tune2fs
私は同意する、それは何も破壊しない。 –