2012-04-16 13 views
1

私は、OpenMPプログラミングでは、共有変数へのデータ書き込みでデータ競合状態を防ぐために特定の儀式が必要であることを理解しています。しかし、可変シナリオから完全に読んでレース状態が起こる可能性はありますか?データの読み込み形式openMP共有メモリ

答えて

0

メモリ位置の同時読み取りは安全ですが、データ構造からの一般的な読み取りは、読み取りによって内部状態が更新される場合、競合を招く可能性があります。 2つの例は、(読み取り時に自己調整を行う)スプレイ・ツリーと、読み取りの内部統計を保持するデータ構造です。

0

完全に読んでいるシナリオでは、競合状態を持つことは不可能です。レース条件は、書き込みがある場合にのみ発生します。これは、読み取る内容が確定していないためです(読み込んだ古い値または新しく書き込まれた値である可能性があります)。

+0

ありがとうございました。つまり、スレッド間で巨大なC++のベクトルコンテナ(いくつかのGIG)を共有すると、スレッドから読み込むのは安全でしょうか?プログラムの効率はどうですか? – Sourena

+0

ここでのボトルネックは、RAMからCPUキャッシュへのメモリ転送、さらにはハードドライブからRAMへのCPUキャッシュへのメモリ転送です。データを使って何をしようとしていますか、それを読んでいますか? –

+0

これは脳MRI画像の解析を含み、私はRAM> 12Gigが必須であることを知っています。はいパイプラインの一部は、std:vectorのラッパーであるコンテナを読み取ることになります。また、パイプラインでは別のベクターを操作する必要がありますが(R/W acess)、これは別のコンテナです。これにキャッシュフレンドリーなアプローチは何ですか? – Sourena

関連する問題