FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

The RISC-V メモリコンシステンシモデル

RISC-Vウェブサイトに出ていたこの記事。

Vengineerさんにも言及いただいた。

riscv.org

5th RISC-V Workshopにも出ていた、RISC-Vのメモリコンシステンシモデルについてツールを用いてチェックしたというPrinceton大学の研究チームの記事だ。

発表資料はこちら。

https://content.riscv.org/wp-content/uploads/2016/12/Tue1200-web-RISC-V-Mem-Consistency-Trippel-Princeton.pdf

(結構Google翻訳にも頼ってしまったが、)要約すると、

  • RISC-Vのメモリコンシステンシモデルでは、C++11に必要なメモリアクセスオーダリングに違反する動作を行う可能性がある。
  • Rocketコアのようなシンプルなものでは影響を受けない。
  • RISC-V ISAの仕様を強化し、このエラーを回避する。新しいRISC-V仕様を2017年中に完成させる。

資料を読んでいたのだが、Store Atomicityとして、以下の3つが存在し、

Multiple-copy atomic: - All cores see store simultaneously - Read-Own-Write-Early-multiple-copy atomic: - Storing core can read its own store before other cores - Stores made visible to all remote cores simultaneously - Non-multiple-copy atomic: - Storing core can read its own store before other cores - Store is made visible to some remote cores before others

このうちNon-multiple-copy Atomicに問題があるということなのかな?メモリコンシステンシモデルについてまだ詳しくないので、良く分かっていない。

f:id:msyksphinz:20170425011331p:plain

スレッドT0とT1のストアが、スレッドT2とT3に到着する場合に異なる順序で到達する場合に発生するということか。 この例だとまだ良く分からないが、T0とT2がコア0、T1とT3がコア1に割り当てられており、それぞれL1キャッシュを共有している。

コア0(つまりT0とT2)はコア1のキャッシュの変更が見えるまでに時間がかかっており、ld xの結果はr0=0と読めているがld yの結果はr1=0と読めていない。 一方、コア1(つまりT1とT3)はコア0のキャッシュの変更が見えるまでに時間がかかっており、ld yの結果はr2=1と読めているが、ld xの結果はr3=0と読めていない。