依存関係ツールが、複数の並列サイトで使用される 1 つ以上の共通関数の問題を報告した場合、その問題を調査して対処を検討する必要があります。一般に、プライベート化によるパフォーマンスへの影響は同期よりも小さく、同期によるパフォーマンスへの影響は並列化しない場合よりも小さくなります。一般的なアプローチは以下のとおりです。
両方のサイトで、依存関係を引き起こすデータのプライベート化が可能であるか評価します。例えば、原因が偶発的共有であればプライベート化を適用できます。タスクごとに変数のプライベート・コピーを持つことで、最良のパフォーマンスが得られます。
プライベート化で問題を解決できない場合、同期 (ロックやミューテックス) の利用を検討してください。例えば、依存関係の問題が、真の依存関係を持つ独立した更新で発生する場合、同期が必要になります。
サイトに並列処理を容易に追加できないこともあります。その場合、並列サイトやタスク・アノテーションを変更してスータビリティーと依存関係を再度チェックすることで、パフォーマンスを低下させる並列サイト、パフォーマンス・ゲインがわずかな並列サイト、そして複雑なデータ共有問題がある並列サイトを検出できるかもしれません。この場合、サイトとタスク・アノテーションを削除して、この領域は並列化できないことをコメントで記しておくと良いでしょう。
複数の並列サイトから呼び出される共通関数の依存関係の問題を解決できない場合、次に示すようなアプローチで関数のクローン化を検討してください。つまり、1 つの並列サイトはクローン化された関数を呼び出し、別の並列サイトは元の関数を呼び出します。そうすることで、元の関数とクローン化した関数で依存関係の問題を解決するため異なる実装が可能になります。例えば、このアプローチにより、元の関数構成ではできなかったデータのプライベート化を、元の関数またはクローン化した関数のどちらかで実装できます。
どのようなプログラムであっても、並列サイト内のコードやアノテーションを変更した後は、依存関係とスータビリティー・ツールで再度プログラムを実行し解析すべきです。