omptest のパフォーマンスデータを収集し、omptest.1.er を開いたことを確認してください。 これらの作業がまだ済んでいない場合には、omptest サンプルのデータ収集を参照して実行してください。
この演習では、PARALLEL SECTIONS 指令と PARALLEL DO 指令を使用する 2 つのルーチン psec_() と pdo_() のパフォーマンスを比較します。 ルーチンのパフォーマンスは、CPU の個数の関数として比較します。
4 CPU での実行と 2 CPU での実行を比較するには、omptest.2.er を読み込んだもう 1 つのパフォーマンスアナライザインスタンスを起動する必要があります。 端末ウィンドウで次のコマンドを入力します。
% analyzer omptest.2.er &
「検索」ツールを使用してこの関数を見つけます。 コンパイラによって生成される psec_ で始まる関数は、ほかにもあります。
2 CPU の場合、ウォールクロック時間とユーザー CPU 時間との比率、またはウォールクロック時間と合計 LWP との比率は、ほぼ 1 対 2 であり、並列化が比較的有効に行われていることを示します。
4 CPU の場合、psec_() が使用するウォールクロック時間は 2 CPU の場合とほぼ同じですが、ユーザー CPU 時間と合計 LWP 時間の値は両方とも増大します。 psec_() PARALLEL SECTION コンストラクト内の領域は 2 つしかないのでその実行に必要なスレッドは 2 つだけであり、したがって一度に使用されるのは 4 個の CPU の内 2 個だけです。 残りの 2 個のスレッドは、作業待ちのため CPU 時間を消費します。 作業はほかにないため、時間は無駄に消費されることになります。
pdo_() のデータが「概要」タブに表示されます。
pdo_() のユーザー CPU 時間は、psec_() の場合とほぼ同じです。 ウォールクロック時間とユーザー CPU 時間の比率は 2 CPU の場合は約 1 対 2 ですが、4 CPU の場合は約 1 対 4 です。これは、利用できる CPU の数を考慮し、ループを適切にスケジュールすることで、pdo_() の並列化戦略において CPU の数に比例したパフォーマンスを得ることができることを示しています。