アノテーションの一般特性

使用法

アノテーションは、最小限のコードの追加で 1 つ以上の関数を呼び出します。スータビリティーや依存関係ツールを実行すると、呼び出しはデータ収集中にインストルメントされます。

ほとんどのアノテーションは、開始 - 終了シーケンスで実行されるペアで使用する必要があります (単一のタスクを持つサイトの並列サイト・アノテーションなど)。

アノテーションの不一致は、データ収集中にエラーとして示されます。

例えば、C/C++ コードが ANNOTATE_SITE_BEGIN(); を実行し、対応する ANNOTATE_SITE_END(); がない場合、エラー: 「スータビリティーまたは依存関係ツールを実行した際に、サイトの終了が見つかりません」という意味のメッセージが表示されます。

動的にペアになるアノテーションを使用することもできます。そのため、アノテーションを追加した領域には複数の出口がある可能性があります。例えば、複数のタスクを持つ並列サイトを考えてみます。

// ループから分岐するためタスク終了アノテーションを繰り返すことを示します 
ANNOTATE_SITE_BEGIN(for_site1); 
     ANNOTATE_TASK_BEGIN(for_taskA); 
     for () { 
          if() 
               ANNOTATE_TASK_END(); 
               break; 
               ANNOTATE_TASK_END(); // 到達しない! } 
               ANNOTATE_TASK_BEGIN(for_taskB); 
               ...
               ANNOTATE_TASK_END(); 
ANNOTATE_SITE_END();

C/C++ では、中かっこの開閉 ({}) を持たない単一文のみを実行するループの後にアノテーションを追加する場合、中かっこの開閉を加えることで元の文とアノテーションを追加した文の両方を実行することができます。

プログラムのソースの観点からは、アノテーション・マクロが実行可能な単一文として拡張されます (null 拡張が使用された場合は何もしません)。そのため、次の例のように単一文を安全に実行する必要がある場所で、アノテーションの使用が可能になります。

  
   ...     
    if (!initialized)
         
        ANNOTATE_RECORD_ALLOCATION(my_buffer, my_buffer_size);
   
   ...

ソースコードにアノテーションを配置するガイドライン

ソースコードにアノテーションを配置するインテル® Advisor のガイドラインは、デバッガーのブレークポイントの制限に類似します。次の規則が含まれます。

以下は、行ごとに単一のアノテーションを記述する正しい例です。

    ANNOTATE_TASK_BEGIN(foo); 
         call xyz(); 
    ANNOTATE_TASK_END();

これらのガイドラインに従わないと、[Dependencies Report (依存関係レポート)] ウィンドウで予期しないアノテーションの不一致が報告されたり (以下のトラブルシューティングのトピックを参照)、[スータビリティー・レポート] ウィンドウでアノテーションに関連したエラーが報告されます。

セマンティクス

タスク間の相互作用を収集するためスータビリティーまたは依存関係ツールを実行すると、ツールがシリアル実行を行う間にアノテーションの実行とほかの操作との関係が追跡され、解析結果が対応するレポートに表示されます。

依存関係ツールの実行で注目すべき主な問題は、注意が必要なデータの相互作用です。しかし、プログラムのアノテーションの使用に関するセマンティクス上のエラーが報告されることもあります。

関連情報