私は、2つのコアと4つのスレッドを持つInteli5コアマシンで並列アルゴリズムを開発しています。
nは、計算を実行するマトリックスのサイズを定義します。下の表からわかるように、1スレッドから2スレッドの使用率はほぼ50%減少しますが、2スレッドと4スレッドの間にほとんど違いはありません。数字は経過した秒数を示します
私のコンパイラは、Windowsプラットフォームではmingw-gccです。私の並列化ツールはopenmpです。omp_set_num_threads(numThreads);
並列ルーチンの最初にスレッド数を定義しています。
「実際の」8コアマシンでアルゴリズムをテストする手段がありません。私のi5マシンでは、1スレッドで、タスクマネージャーは合計CPUパワーの25%が使用されていることを示しています。2スレッドでは50%、4スレッドでは予想どおり96〜99%です。
では、その状況の理由は何でしょうか?なぜ計算時間が半分にならないのですか?
並列コードセグメントは以下にあります。
#pragma omp parallel for schedule(guided) shared(L,A) \
private(i)
for (i=k+1;i<row;i++){
double dummy = 0;
for (int nn=0;nn<k;nn++){
dummy += L[i][nn]*L[k][nn];
L[i][k] = (A[i][k] - dummy)/L[k][k];
}
}