FPGA開発日記

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

RISC-VのCMO(Cache Management Operation) 仕様について概観する

RISC-VのPrivileged仕様Version 1.12 ではCMO命令群(Cache Management Operation)についての仕様が検討されている。 これについて調査してみよう。

仕様書は以下に置いてある。誰でもダウンロードできる。

github.com

キャッシュ操作命令については以下の3種類に大きく分けることができる。

  • 管理(management)命令 (Zicbom) : キャッシュされたデータに対する操作を行う。
  • ゼロ(zeros)命令 (Zicboz) : メモリ位置に対してゼロ埋めを行う。
  • プリフェッチ命令 (Zicbop) : プリフェッチを行う。

管理(management)命令

ちなみに、以下のClean, Flush, Inval操作の定義は以下のようになっている。

  • Invalidate, 無効化:は、キャッシュブロックのコピーの割り当てを解除する。
  • Clean:キャッシュブロックのコピーのデータがストアオペレーションによって変更されている場合に、他のキャッシュまたはメモリへの書き込み転送を行うものである
  • Flush:Cleanの後にInvalidateをアトミックに実行する

CBO.CLEAN 命令

オペランドで与えられるアドレスに対してそれが含まれるキャッシュブロックを消去する。

f:id:msyksphinz:20211114225905p:plain

CBO.FLUSH 命令

オペランドで与えられるアドレスに対してそれが含まれるキャッシュブロックをフラッシュする。

f:id:msyksphinz:20211114225827p:plain

CBO.INVAL 命令

オペランドで与えられるアドレスに対してそれが含まれるキャッシュブロックを無効化する。

f:id:msyksphinz:20211114225042p:plain

CBO.ZERO` 命令

オペランドで与えられるアドレスに対してそれが含まれるキャッシュブロックにゼロを埋める。

f:id:msyksphinz:20211114225158p:plain

PREFETCH.I 命令

命令フェッチ向けに、オペランドに含まれるアドレスをキャッシュするためのヒントをハードウェアに与える。

f:id:msyksphinz:20211114225504p:plain

PREFETCH.R 命令

データリード向けに、オペランドに含まれるアドレスをキャッシュするためのヒントをハードウェアに与える。

f:id:msyksphinz:20211114225537p:plain

PREFETCH.W 命令

データライト向けに、オペランドに含まれるアドレスをキャッシュするためのヒントをハードウェアに与える。

f:id:msyksphinz:20211114225656p:plain