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

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴散
  • 作品版權(quán)保護
  • 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
373
閱讀需 8 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

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í)行,每個執(zhí)行都有自己對應(yīng)的全局內(nèi)存順序。

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

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

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

保留程序順序的完整定義如下(請注意,AMOs是同時load和store的):如果a在程序順序中先于b,內(nèi)存操作a在保留程序順序中先于內(nèi)存操作b(因此也在全局內(nèi)存順序中),且a和b都訪問常規(guī)主存,不是I/O區(qū)域,并且以下任何一種情況(每個小節(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)存一致性模型有弱和強之分。弱內(nèi)存模型允許更多的硬件實現(xiàn)靈活性,并且比強模型提供更好的性能、每瓦性能、功率、可伸縮性和硬件驗證開銷,但代價是更復(fù)雜的編程模型。強模型提供了更簡單的編程模型,但代價是對可以在pipeline和內(nèi)存系統(tǒng)中執(zhí)行的(非投機的)硬件優(yōu)化施加了更多的限制,并且反過來在功耗、面積開銷和驗證負擔方面施加了一些成本。

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

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

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

相關(guān)推薦

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

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

微信公眾號