プログラムの複数の場所で独立して並列処理を導入できる可能性があります。
例えば、一般的な構造の 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();
}メインループの反復が表示と更新を行うことに変わりはありませんが、それぞれの操作は以前よりも高速に実行されます。
プログラムの構成に応じて、複数の並列サイトを同じループで実装するか、異なるループで実装するかを決定する必要があります。
2 つの並列サイトが完全に分離しているか、オーバーラップする関数がありそれらが依存関係ツールで問題として報告されない場合、それらの並列処理は異なるループで個別に並列化することを検討できます。
同じ呼ぶ出しツリー上でオーバーラップする複数の並列サイト (同じユーティリティー関数を呼び出す複数のサイトなど) を考える場合、すべての並列サイトを同時に並列化するかしないかを考えます。
それぞれの依存関係の原因を調査して解決する必要があります。同じ呼び出しツリー上でオーバーラップする複数の並列サイトがある場合 (同じユーティリティー関数を呼び出す複数のサイトなど)、ヘルプトピックの「複数の並列サイトによって使用されるコードの問題を解決する」を参照してください。