タスクとして実行するコード領域を選択します。この領域はタスクの静的範囲です。タスクには静的範囲だけではなく、実行時に静的範囲から呼び出されるコードである動的範囲も含まれます。
タスクの選択に加え、どのタスクと並列実行するかを決定する必要があります。これを行うには、並列サイトを選択します。並列サイトには、タスクと同様にコードブロックである静的範囲と、それらから呼び出されるすべてのコードを含む動的範囲があります。
ループ本体全体がタスクに含まれる単一タスクのループがある場合、1 つの反復タスク・アノテーションを持つ簡単な並列サイトを使用できます。以降では並列サイト内に複数のタスクがある、より複雑なケースについて説明します。
インテル® Advisor のシリアル実行では、次のようにタスクが実行されます。
実行がサイト開始アノテーションに到達すると並列サイトが開始されます。
実行がタスク開始アノテーションに到達するとタスクが生成されます。タスクは、並列サイト自身を含むすでに実行されているその他のタスクと、並列に独立して実行されます。
タスクの実行がタスク終了アノテーションに到達すると、タスクは終了します。インテル® Advisor のタスク終了アノテーションは、タスク終了ラベルを許容または必要としません。そのため、タスクが別のタスク終了アノテーションに到達し、並列パフォーマンスの予測に影響することがあります。
実行が並列サイトのサイト終了アノテーションに到達すると、インテル® Advisor はサイト内で生成されたすべてのタスクが完了するまで実行を中断 (待機) し、その後、並列サイトが終了すると予測します。
C/C++ コードでは、goto、break、continue、return、および throw 文は、タスクまたは並列サイトの静的領域の終わりをバイパスしてはならないことに注意してください。Fortran コードでは、goto と return 文がそれに該当します。これらの操作の前に終了 (end) アノテーションを追加することで、インテル® Advisor ツールがサイトやタスクの終了を正しくモデル化できるようになります。
後でインテル® Advisor のアノテーションを並列フレームワークのコードに置き換えるため、並列フレームワークの要件に注意する必要があります。例えば、並列フレームワークの中には、ループタスクなどタスク外への分岐を許可していないものがあります。可能な場合は常に、並列フレームワーク・コードの要件に合うようにタスクを実装してください。アノテーションは、インテル® Advisor で提案された並列動作を予測して、タスクを実装する最適な場所を特定する際にのみ必要です。
プログラム中の並列サイトとタスクの位置を決定して、ソースにアノテーションを追加します。