シリアルプログラムでは、プログラム実行中の操作の順番は明確です。しかし、コードが複数のタスクによって実行される場合、その操作はほかのタスクの操作の前か、後、または同時に実行される可能性があります。並列タスクが共有メモリーをアクセスまたは変更を行うと、データ共有の問題が生じます。
インテル® Advisor の依存関係ツール
は、データ共有の問題を推測するため、シリアルプログラムを実行して広範囲の解析を行います。[Dependencies Report (依存関係レポート)] ウィンドウと、ここで示すトピックは報告されたデータ共有の問題を理解して解決するのに役立ちます。
それぞれのデータ共有問題に対し次のことが可能です。
ソースを変更して、共有データをプライベート変数にすることで偶然的なデータ共有を解決します。このタイプのデータ共有は、複数のタスクが同じメモリー位置を使用し、それに関して通信を行わない場合に発生します。あるタスクで書き込まれたデータがほかのタスクで必要にならない場合、それぞれのタスクはデータのプライベート・コピーを使用することができます。
独立した更新の同期を実装するには、ロック・アノテーションを追加します。このタイプの共有は、複数のタスクがメモリー位置の最終的な値の決定に関与する場合に発生します。
操作の順番が変更できないことを認識し、並列サイトとそのタスクを変更することを検討してください。元のシーケンス順で共有データにアクセスしなければならない場合は、真の依存関係と呼ばれます。
次のセクションでは、共有問題を理解して解決する方法を説明します。