テスト用に簡単なコードを用意しました。これは、コードの最も重要な部分です。
#pragma omp parallel sections
{
#pragma omp section
{
for (int j=0;j<100000;j++)
for (int i=0;i<1000;i++) a1[i]=1;
}
#pragma omp section
{
for (int j=0;j<100000;j++)
for (int i=0;i<1000;i++) a2[i]=1;
}
}
プログラムを MinGW コンパイラでコンパイルしたところ、期待どおりの結果が得られました。Linux のみのコンピューターを使用するので、Linux でコードをコンパイルしました (同じマシンを使用)。gcc 4.7.2 および intel 12.1.0 コンパイラを使用しました。プログラムの効率が大幅に低下しました。逐次プログラムより遅い ( omp_set_num_threads(1)
)
スレッドでプライベート配列も試しましたが、効果は似ています。
誰かが説明を提案できますか?