omptest のパフォーマンスデータを収集し、omptest.1.er を開いたことを確認してください。 これらの作業がまだ済んでいない場合には、omptest サンプルのデータ収集を参照して実行してください。
ここでは、critsec_() と reduc_() のパフォーマンスを比較します。CRITICAL SECTIONS 指令と REDUCTION を使用します。 この場合、1 対の do ループに埋めこまれている同じ代入文を並列化戦略で処理します。 その目的は、三次元配列のコンテンツを集計することです。
t = (a(j,i)+b(j,i)+c(j,i))/k sum = sum+t
critsum_() は critical section 並行化戦略を使用するので、critsum_() の包括ユーザー CPU 時間は膨大です。 加算演算は 4 台の CPU すべてに分散されますが、t 値を sum に加算できる CPU は一度に 1 台だけです。 この種のコーディングコンストラクトの場合、これは並行化を有効に活用した戦略とは言えません。
redsum_() の包括ユーザー CPU 時間は、critsum_() よりはるかに低い値です。 これは、redsum_() が reduction 戦略によって合計を評価するためです。 この戦略では、部分合計が各プロセッサに並行して累積され、この部分合計が sum に逐次加算されます。 この戦略は sum に対する逐次アクセスの必要性を最小限に抑えるので、利用可能な CPU を有効に活用できます。