インテル® Advisor のアノテーション によって並列処理の可能性をマークする前に、並列処理を追加する場所を選択する必要があります。ここでは、候補となるコード領域とそれらの実行を調査し、候補となる場所を選択する際に考慮すべき一連の要因について説明します。
シリアルプログラムの操作は、明確な順番で最初から最後まで連続して実行されます。一方、並列プログラムは、プログラムの一部分であるタスクが独立して異なるコアで実行されます。タスクは独立した関数やループの反復に実装することができます。
以下を特定するインテル® Advisor のアノテーションを追加して候補となるコード領域をマークします。
並列サイト: 1 つ以上の並列タスクを含むコード領域。並列サイトの実行は、そのサイトに含まれるタスクの実行時間を制限します。並列サイトの実行は開始地点に到達すると始まりますが、開始されたすべてのタスクの実行が完了した後にのみ終了します。並列フレームワークにおいて、これはコードのすべてのタスクが完了するジョイン位置に相当します。
並列タスク: タスクコード領域は、並列サイト内の別のタスクと囲まれた並列サイト自身と同時に独立して実行されます。また、それぞれのタスクはコード実行の複数のインスタンスを持つことができます。次の表に示すように、タスクのアノテーションには 2 つの形式があります。
並列サイトのコードの特性 |
並列サイトとタスクのアノテーション |
コメントと制限 |
|---|---|---|
単一タスクのみを必要とするループ。簡単な構造のループでは、タスクにループ本体全体が含まれていない限り、単一の反復タスク・アノテーションから始めます。 コード例: nqueens_Advisor C/C++ サンプルと nqueens Fortran および C# サンプル |
3 つのアノテーションを追加してマーク:
|
スータビリティー・ツールのパフォーマンス予測に応じて、複数のタスクの使用も検討します。この場合、単一の反復タスク・アノテーションを削除して、それぞれのタスクの開始と終了アノテーションを追加します (次の行を参照)。 ループ構造が複雑な場合、次の行のタスク・アノテーションを使用して、タスクの開始と終了領域をマークする必要があるかもしれません。 |
複雑なループ、複数のタスクを可能にするコード、またはループでないコード コード例: stats C++ サンプル |
4 つのアノテーションを追加してマーク:
|
並列処理を追加する候補の場所を選択し、[サーベイレポート] ウィンドウでデータを確認します。このデータを使用して、コードエディターで並列サイトとタスクの候補をマークするアノテーションを追加します。そして、選択したターゲットの実行形式でこれらのアノテーションが実行されることを確認します。
サイトとタスク・アノテーションは、インテル® Advisor のスータビリティーと依存関係ツールが、シリアルプログラムの実行から並列動作を予測できるようにします。これらのツールは、並列処理を追加する最適な場所の特定に役立つデータを提供するため、シリアルプログラムを実行して広範囲な解析を行います。
インテル® Advisor の並列設計機能の利点を活用するには、可能性のあるさまざまな並列コード領域を調査するため、サイトとタスク・アノテーションとその位置を変更し、アプリケーションのターゲットを再ビルドして、スータビリティーと依存関係ツールを再実行します。
次の図は、C/C++ の nqueens_Advisor サンプルコードのタスク (青色)とその並列サイト (オレンジ色) を示しています。

シリアルプログラムを並列プログラムに変換する前に、次のことをする必要があります。
プログラムが時間を費やしている場所を理解します。
ワークを並列実行するタスクに分割する方法を決定します。