2016-09-07 10 views
0

ArmV7-Aでのキャッシュに関するもう1つの質問。 この場合、問題のSoCはAllwinner A20、デュアルコアCortex-A7です。非共有属性を持つPoU

私が読んだことから、コアのPoUの定義は、コアの命令キャッシュとデータキャッシュがメモリロケーションの同じコピーを見ることが保証されるポイントです。

問題のSoCに関しては、両方のコアがL2(Unified)キャッシュでPoUを共有しているため、L1に配置されているものがL2に見えることを意味します。そうですか?

メモリ領域の属性をNon-Shareableに変更しても、L2はいずれのコアのL1 の内部を見ることができます。本当?私はそれによって何を意味するのか詳しく説明し

は、私は少し実験を行っている:私は内部のメモリアドレスに書いた

非共有可能、ライトバックコア#0から領域に。その後、キャッシュメンテナンス操作を実行せずに、コア#1から同じメモリアドレスから読み取ろうとしたとき、コア#0から書き込まれた正しい値が読み取られました。

私は、この動作がPoUであることからL2の結果であると推測しました。したがって、コア#0から書き込んだときに、L2は(たとえそれがフラッシュされなくても)コピーを保存します。次に、コア#1から読み込みミスの後、コア#1のL1がメモリ値をL2から取得します。

+0

両方の_data_アクセスがあるため、1つのCPUからの書き込みと別のCPUからの_reading_は、PoUとは何の関係もありません。 – Notlikethat

+0

@Notlikethat他の質問にも感謝します。あなたは詳しく説明できますか? PoUはデータアクセスとは何の関係もありませんか?私はまだ他のCPUが最初のCPUで書いたコンテンツにアクセスできる理由はまだ分かりません。地域設定が非共有、書戻しの場合は –

答えて

1

...どちらのコアもL2(Unified)キャッシュでPoUを共有しているため、L1に置かれたものはL2に見えることを意味します。そうですか?

いいえ1つのCPUのデータアクセスは、同じ共有可能ドメイン内の別のもののデータキャッシュをスヌープすることがありますが、命令アクセスのPoUとは関係ありません。これは単なるコヒーレンシプロトコルです。

メモリ領域の属性をNon-Shareableに変更しても、L2はどちらのコアでもL1の内部を見ることができます。本当?

いいえ、共有不可能なメモリは一貫性があるとは限りません。確かに、あなたはかもしれないおそらくCortex-A7は共有可能でないキャッシュラインをスヌープしているかもしれません。あるいは、あなたのデータがL1Dから自然に追い出されて、他のCPUがL2でそれに当たったかもしれません。頼りにすべきではない。いずれにせよ、複数のCPUが同じ共有不可能な場所にアクセスすることは、実際には全く逆のことです。あなたはそれを共有したくないと故意に言った!

+0

ありがとう! Non-Shareableメモリ領域のReadNoSnoopがCortex-A7で定義されているか、またはCortex-A7に必要かどうかはチェックしていません。私がやっていることは、実際には非共有領域での私の前提をチェックしていることです。私の仮定は、それがCPUだけに排他的でなければならないということでした。あなたの答えは私の疑いのいくつかに答えましたが、私はこの質問をしばらくの間答えていないままにします。 –

+0

共有可能でないロードがそこに見当たらない場合、L2がReadNoSnoopトランザクションをACEインターフェイスに送信すると思いますので、マルチクラスタシステム内のクラスタ間の「偶発的な」一貫性は期待できませんしかし、物事はより密接に結びついており、基本的にSCUの実装の詳細を見ています。 – Notlikethat

+0

ここで私はCortex-A53 TRMで列挙されたエンコーディングを使って、内部メモリアクセスから見たものです:cpu0から書き込んだ後、L1D cpu0のキャッシュラインは 'Modified'です。 cpu1キャッシュラインが「Owned」になり、L1D cpu0が「Shared」になりました。 –

関連する問題