加入星計劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴散
  • 作品版權(quán)保護
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入
  • 正文
    • 01、前言
    • 02、RC模型
    • 03、RVWMO基本體
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請入駐 產(chǎn)業(yè)圖譜

RISC-V筆記——RVWMO基本體

10/19 10:55
1678
閱讀需 8 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

01、前言

RISC-V使用的內(nèi)存模型是RVWMO(RISC-V Weak Memory Ordering),它是Release Consistency的擴展,因此,RVWMO的基本體類似于RC模型。

02、RC模型

Release consistency(RC)的提出是基于一個觀察:將所有同步操作用FENCE圍在一起是多余的。隨著對同步操作的深入理解,同步操作acquire只需要后面放一個FENCE,同步操作release只需要前面放一個FNECE。因此RC提供了ACQUIRE和RELEASE操作,它們和FENCE類似,但是只在一個方向上對memory進行保序,而不是像FENCE那樣在兩個方向上都進行保序。更一般地說,RC只需要:

ACQUIRE -> Load, Store ??(Load, Store -> ACQUIRE方向不保序)

Load, Store -> RELEASE ???(RELEASE -> Load, Store 方向不保序)

ACQUIRE -> ACQUIRE

ACQUIRE -> RELEASE

RELEASE -> ACQUIRE

RELEASE -> RELEASE

如下圖,注:LDAR代表load具有acquire語義,STLR代表store具有release語義。

03、RVWMO基本體

在RISC-V中,與RC類似,load和store指令可以攜帶其它語義:load指令可以攜帶ACQUIRE語義,store指令可以攜帶RELEASE語義,以及RMW指令可以攜帶ACQUIRE、RELEASE或兩者都具有。有兩種ACQUIRE語義:ACQUIRE-RCpc和ACQUIRE-RCsc。同樣,也有兩種RELEASE語義:RELEASE-RCpc和RELEASE-RCsc?!癛Cpc語義”代表“Acquire-RCpc”或“Release-RCpc”。“RCsc語義”代表“Acquire-RCsc”或“Release-RCsc”。Load(store)可以攜帶任何一種ACQUIRE(RELEASE)語義,而RMW只能攜帶RCsc語義。這些語義有如下保序:

ACQUIRE -> Load,Store ??(ACQUIRE代表ACQUIRE-RCsc和ACQUIRE-RCpc)

Load,Store -> RELEASE (RELEASE 代表RELEASE-RCsc和RELEASE-RCpc)

RELEASE-RCsc -> ACQUIRE-RCsc? (注意RELEASE-RCpc -> ACQUIRE-RCpc不成立)

從上述保序公式可以看出:

帶有RELEASE-RCpc的older store指令的寫數(shù)據(jù)可以直接被forward給帶有ACQUIRE-RCpc的同地址younger load指令。

如果它們兩個是不同地址,那么在younger load指令會先于older store指令出現(xiàn)在global memory order上。

上述這兩點是RCsc不允許的,RCsc具有更強的保序行為。為什么RCsc和RCpc有這兩點區(qū)別,看它們的全稱就知道了。

“RCpc”代表release consistency with processor-consistent synchronization operations。

“RCsc”代表release consistency with sequentially consistent synchronization operations。

RCpc語義有processor-consistent特性。Processor consistency(PC)表示一個Core的store操作按順序達(dá)到其它Core,但不一定同時達(dá)到其它Core。TSO模型是PC的特殊情況,其中每個Core都可以立即看到自己的Store操作,但是當(dāng)任何其它Core看到Store操作時,所有其它Core都可以看到它,這個屬性稱為write atomicity。

RCsc語義有sequentially consistent特性。Sequential consistency (SC)模型中,memory order保留了每個core的program order。也就是SC模型為同一個線程的兩個指令間的所有四種load和store組合(Load -> Load, Load -> Store, Store -> Store, and Store -> Load)保留了順序。

因此RCpc和RCsc在行為上還是有些區(qū)別,RCsc語義可以讓RVWMO模型像SC(Sequential Consistency)模型行為一樣,RCpc語義可以讓RVWMO像TSO(Total Store Order)內(nèi)存模型行為一樣,這極大方便了其它CPU內(nèi)存模型的代碼移植到RISC-V CPU上運行。比如要遷移MIPS R10000的代碼到RISC-V CPU上,可以使用RCsc的load和store指令。要遷移Intel/AMD的代碼到RSIC-V CPU上,可以使用RCpc的load和store指令。

如下圖,注:LDAR代表load具有acquire-RCsc語義,STLR代表store具有release-RCsc語義。LDAPA代表load具有acquire-RCpc語義。

相關(guān)推薦

電子產(chǎn)業(yè)圖譜

分享Arm architecture, AMBA, 芯片驗證, 腳本, EDA, Linux等知識。

微信公眾號