RISC-Vウェブサイトに出ていたこの記事。
Vengineerさんにも言及いただいた。
@dev_msyksphinz
— 無限ゲームのなか (@Vengineer) 2017年4月15日
Tool checks computer architectures, reveals flaws in emerging design
April 12, 2017https://t.co/sMVySElt8j
読みました?
5th RISC-V Workshopにも出ていた、RISC-Vのメモリコンシステンシモデルについてツールを用いてチェックしたというPrinceton大学の研究チームの記事だ。
発表資料はこちら。
(結構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に問題があるということなのかな?メモリコンシステンシモデルについてまだ詳しくないので、良く分かっていない。
スレッド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
と読めていない。