複数の並列サイト

プログラムの複数の場所で独立して並列処理を導入できる可能性があります。

例えば、一般的な構造の C/C++ プログラムを考えてみます。

initialize(data);
while (!done) {
    display_on_screen(data);
    update(data);
}

表示と更新操作を個別に並列化できる可能性があります。

display_on_screen(data) { 
     ANNOTATE_SITE_BEGIN(site_display); 
     for (each block of data) { 
          ANNOTATE_ITERATION_TASK(task_display); 
          データブロックの表示; 
     } 
     ANNOTATE_SITE_END(); 
} 
update(data) { 
     ANNOTATE_SITE_BEGIN(site_update); 
     for (each block of data) { 
          ANNOTATE_ITERATION_TASK(task_update); 
          データブロックの更新; 
     } 
     ANNOTATE_SITE_END(); 
}

メインループの反復が表示と更新を行うことに変わりはありませんが、それぞれの操作は以前よりも高速に実行されます。

プログラムの構成に応じて、複数の並列サイトを同じループで実装するか、異なるループで実装するかを決定する必要があります。

それぞれの依存関係の原因を調査して解決する必要があります。同じ呼び出しツリー上でオーバーラップする複数の並列サイトがある場合 (同じユーティリティー関数を呼び出す複数のサイトなど)、ヘルプトピックの「複数の並列サイトによって使用されるコードの問題を解決する」を参照してください。

関連情報