iT邦幫忙

2024 iThome 鐵人賽

DAY 9
1
自我挑戰組

上班辦公室,下班讀書室:RISC-V / ARM64 體系結構編程與實踐系列 第 9

[鐵人賽] Day 9 公司讀書會 - RISC-V 第16章 - Memory Barrier Instruction (中)

  • 分享至 

  • xImage
  •  

今日的行程:
辦公室:10:00 - 19:00
讀書室:21:00 - 21:30

正片開始

今日的記錄:
記錄公司禮拜五的讀書會內容

Memory Barrier Instruction

store buffer 和 invalidate queue 引入的問題

以思考題目的第一題來說明:

CPU 0                     CPU 1
----------------------------------------------------
void func0 ()             void func1()
{                         {
    a = 1;                    while (b == 0) continue;
    b = 1;                    assert (a == 1);
}                         }
store buffer

以 MESI protocol 為例,並且初始狀態是:

CPU0 CPU1
cache line: a = 0 Invalid Exclusive
cache line: b = 0 Exclusive Invalid
    CPU 0                             CPU 1
T0  ----------------------------------------------------------------------
    寫 "a = 1" 到 store buffer
    送寫訊號到 bus 上
T1  ----------------------------------------------------------------------
                                      讀 b 的值
                                      送 read 訊號到 bus 上 
T2  ----------------------------------------------------------------------
    執行 "b = 1"
T3  ----------------------------------------------------------------------
    收到 bus 來的 read 訊號
    把 b 的值送到 bus 上
T4  ----------------------------------------------------------------------
                                      收到 b 的值,b == 1
                                      跳出 while
T5  ----------------------------------------------------------------------
                                      讀取 a 的值(從自己的 cache 讀)
                                      a == 0,assert!!
T6  ----------------------------------------------------------------------
                                      收到 bus 來的寫訊號
                                      invalidate a
T7  ----------------------------------------------------------------------
invalidate queue

以 MESI protocol 為例,並且初始狀態是:

CPU0 CPU1
cache line: a = 0 Shared Shared
cache line: b = 0 Exclusive Invalid
    CPU 0                             CPU 1
T0  ----------------------------------------------------------------------
    寫 "a = 1" 到 store buffer
    送寫訊號到 bus 上
T1  ----------------------------------------------------------------------
                                      讀 b 的值
                                      送 read 訊號到 bus 上 
T2  ----------------------------------------------------------------------
                                      收到寫訊號,把 inval. a 加入 inval. queue
                                      回覆 ACK
T3  ----------------------------------------------------------------------
    把 "a = 1" 從 store buffer 寫入 cache
    狀態變成 Modified,a == 1
T4  ----------------------------------------------------------------------
    執行 "b = 1",狀態為 Modified
T5  ----------------------------------------------------------------------
    收到讀訊號,把 b 的值送到 bus 上
T6  ----------------------------------------------------------------------
                                      收到 b 的值,b == 1
                                      跳出 while
T7  ----------------------------------------------------------------------
                                      讀取 a,inval. a 還在 inval. queue
                                      a == 0,assert!!
T8  ----------------------------------------------------------------------  

以上兩例都會使,思考題第一題的程式邏輯,有不預期的狀況發生,所以思考題第一題的答案是會!!
在 Memory model 允許 program order 和 memory order (memory access order) 不一致的話,就有可能會發生上述的問題,所以需要 ISA 提供相應的解決辦法。

總結

  • 今天先記錄引進的問題,明天再來記錄解決方法

上一篇
[鐵人賽] Day 8 公司讀書會 - RISC-V 第16章 - Memory Barrier Instruction (上)
下一篇
[鐵人賽] Day 10 公司讀書會 - RISC-V 第16章 - Memory Barrier Instruction (下)
系列文
上班辦公室,下班讀書室:RISC-V / ARM64 體系結構編程與實踐30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言