今日、「偽共有」とは何かについて、並列プログラミングのクラスで教授と別の理解を得ました。私の教授が言ったことはほとんど意味をなさないので、すぐに指摘しました。彼女は、「偽の共有」がプログラムの結果に誤りを引き起こすと考えました.
「偽共有」は、異なるメモリアドレスが同じキャッシュラインに割り当てられている場合に発生し、そのいずれかにデータを書き込むと、別のアドレスがキャッシュから追い出されると言いました。プロセッサが 2 つの誤った共有アドレスの間で書き込みを行ったり返したりすると、両方ともキャッシュにとどまることができなくなるため、すべての操作が DRAM のアクセスになります。
それがこれまでの私の意見です。実際、私が言ったことについてもはっきりとはわかりません.誤解がある場合は、それを指摘してください.
そこでいくつか質問があります。キャッシュは、64 バイトにアラインされた 4 ウェイ セット アソシアティブと見なされます。
- 64 バイト以上離れた 2 つのアドレスが「偽共有」である可能性はありますか?
- 単一のスレッド化されたプログラムで「偽の共有」の問題が発生した可能性はありますか?
- 「偽の共有」を再現するための最良のコード例は何ですか?
- 一般的に、プログラマーの「偽共有」を避けるために注意すべきことは何ですか?