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

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入
  • 正文
    • 1?前言
    • 2?preservedprogram order
    • 3?memory model axiom
    • 4?總結(jié)
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請入駐 產(chǎn)業(yè)圖譜

RISC-V筆記——內(nèi)存模型總結(jié)

10/21 08:50
1796
閱讀需 8 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

1?前言

Memory consistency model定義了使用Shared memory(共享內(nèi)存)執(zhí)行多線程(Multithread)程序所允許的行為規(guī)范。RISC-V使用的內(nèi)存模型是RVWMO(RISC-V Weak Memory Ordering),RVWMO內(nèi)存模型是根據(jù)全局內(nèi)存順序(global memory order)定義的,全局內(nèi)存順序是所有harts產(chǎn)生的內(nèi)存操作的總順序。通常,多線程程序有許多不同的可能執(zhí)行,每個(gè)執(zhí)行都有自己對應(yīng)的全局內(nèi)存順序。

全局內(nèi)存順序是通過內(nèi)存指令生成的基本load和store操作來定義的。內(nèi)存操作的程序順序(program order)反映了生成每個(gè)load和store的指令在該處理器的動(dòng)態(tài)指令流中邏輯布局的順序。例如:一個(gè)簡單的有序處理器執(zhí)行該處理器指令的順序。在分析任何一個(gè)內(nèi)存模型時(shí),要緊緊抓住全局內(nèi)存順序和程序順序去分析。

當(dāng)一個(gè)load的返回值確定時(shí),我們就說它已經(jīng)執(zhí)行了。當(dāng)store在pipeline內(nèi)執(zhí)行時(shí),不是說它執(zhí)行了,只有當(dāng)它的值被傳播到全局可見內(nèi)存時(shí)才執(zhí)行。從這個(gè)意義上說,全局內(nèi)存順序也代表了一致性協(xié)議和/或內(nèi)存系統(tǒng)的其他部分的貢獻(xiàn),將每個(gè)hart發(fā)出的(可能是重新排序的)內(nèi)存訪問交錯(cuò)到所有hart共同的單個(gè)總順序中。

RISC-V的RVWMO模型主要包含了preserved program order(PPO)、load value axiom、atomicity axiom和progress axiom。preserved program order由Overlapping-Address Orderings、Explicit Synchronization、Syntactic Dependencies和Pipeline Dependencies組成的。load value axiom、atomicity axiom和progress axiom三者共同組成了memory model axiom。

2?preservedprogram order

任何給定的程序執(zhí)行的全局內(nèi)存順序都遵循每個(gè)hart的部分(但不是全部)程序順序。全局內(nèi)存順序必須遵守的程序順序的子集稱為保留程序順序(preserved program order)。從概念上講,如果一個(gè)hart的某段程序時(shí)保留程序順序,那么這段程序必須被其它hart以相同的順序觀察到。另一方面,從其它hart角度來看,來自一個(gè)hart的未按保留的程序順序排序的事件可能看起來是重新排序的。

保留程序順序的完整定義如下(請注意,AMOs是同時(shí)load和store的):如果a在程序順序中先于b,內(nèi)存操作a在保留程序順序中先于內(nèi)存操作b(因此也在全局內(nèi)存順序中),且a和b都訪問常規(guī)主存,不是I/O區(qū)域,并且以下任何一種情況(每個(gè)小節(jié))都有效:

2.1 Overlapping-Address Orderings

請看:RISC-V筆記——重疊地址排序

2.2 Explicit Synchronization

請看:RISC-V筆記——RVWMO基本體?和?RISC-V筆記——顯式同步

2.3 Syntactic Dependencies

請看:RISC-V筆記——語法依賴

2.4 Pipeline Dependencies

請看:RISC-V筆記——Pipeline依賴

3?memory model axiom

memory model axiom(內(nèi)存模型公理)是RVWMO的重要組成部分。它由以下三部分組成。

load value axiom

atomicity axiom

progress axiom

這三者的介紹在這篇文章:RISC-V筆記——內(nèi)存模型公理

4?總結(jié)

內(nèi)存一致性模型有弱和強(qiáng)之分。弱內(nèi)存模型允許更多的硬件實(shí)現(xiàn)靈活性,并且比強(qiáng)模型提供更好的性能、每瓦性能、功率、可伸縮性和硬件驗(yàn)證開銷,但代價(jià)是更復(fù)雜的編程模型。強(qiáng)模型提供了更簡單的編程模型,但代價(jià)是對可以在pipeline和內(nèi)存系統(tǒng)中執(zhí)行的(非投機(jī)的)硬件優(yōu)化施加了更多的限制,并且反過來在功耗、面積開銷和驗(yàn)證負(fù)擔(dān)方面施加了一些成本。

RVWMO是一種弱模型,它使架構(gòu)師能夠構(gòu)建簡單有效地實(shí)現(xiàn)、深入嵌入更大的系統(tǒng)并服從復(fù)雜的內(nèi)存系統(tǒng)交互的實(shí)現(xiàn),或者任何其他可能性,并高效地支持編程語言內(nèi)存模型。

為了方便從其他體系結(jié)構(gòu)移植代碼,一些硬件實(shí)現(xiàn)可能會選擇實(shí)現(xiàn)Ztso擴(kuò)展,該擴(kuò)展在默認(rèn)情況下提供更嚴(yán)格的RVTSO排序語義。為RVWMO編寫的代碼自動(dòng)地和固有地與RVTSO兼容,但是假設(shè)RVTSO編寫的代碼不能保證在RVWMO實(shí)現(xiàn)上正確運(yùn)行。事實(shí)上,大多數(shù)RVWMO實(shí)現(xiàn)將(也應(yīng)該)拒絕只運(yùn)行RVTSO的二進(jìn)制文件。因此,每個(gè)實(shí)現(xiàn)都必須選擇是否優(yōu)先考慮與RVTSO代碼的兼容性(例如,為了便于從x86移植)。

在RVTSO下,為RVWMO編寫的代碼中的一些fence或memory排序可能變得多余。RVWMO對ZTSO實(shí)際造成的成本是取值這些fence指令的開銷,例如FENCE R,RW和FENCE RW,W,這些指令在該實(shí)現(xiàn)上變成NoP操作。但是,如果希望與非ZTSO實(shí)現(xiàn)兼容,則這些fences必須保留在代碼中。

相關(guān)推薦

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

分享Arm architecture, AMBA, 芯片驗(yàn)證, 腳本, EDA, Linux等知識。

微信公眾號