看板 Grad-ProbAsk 關於我們 聯絡資訊
https://i.imgur.com/UxAZ0uA.jpg
這題來回加都沒法不等於10 還是迴圈展開後 可以reorder指令順序導致最後一行X先做 謝謝感激不盡 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 223.137.174.4 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Grad-ProbAsk/M.1568462876.A.4A3.html
DLHZ: after "both" 09/14 20:50
b10007034: x+=1可以拆解為三個動作,1 read reg. 2 add 3 write 09/14 22:18
b10007034: reg. 09/14 22:18
b10007034: 如果這個x+=1沒有處理同步的話,那這兩個thread都進行 09/14 22:18
b10007034: 時就會有race condition 09/14 22:18
b10007034: 考慮以下instructions 09/14 22:18
b10007034: th1 read x(0) 09/14 22:18
b10007034: th2 read x(0) 09/14 22:18
b10007034: th1 add result=1 09/14 22:18
b10007034: th2 add result=2 09/14 22:18
b10007034: th1 write x(1) 09/14 22:18
b10007034: th2 write x(1) 09/14 22:18
b10007034: 本來應該為2,可是因為都讀到0,所以最後結果為1 09/14 22:18
ok8752665: 兩個reault都是1吧 09/14 22:24
ok8752665: result 09/14 22:24
b10007034: 依照剛剛的邏輯就會到5 09/14 22:38
b10007034: 從instruction的角度有點像是sequential 需要reorder 09/14 22:38
b10007034: 或是forwarding解決data hazard 09/14 22:38
b10007034: 但這邊是parallel,要用同步解決 09/14 22:38
DLHZ: 說明一下 題目只提到load/write有atomic 如果都照順序當然沒 09/14 23:23
DLHZ: 問題 結果就是10 如果有一次某個程式load x時另一個還沒寫回 09/14 23:23
DLHZ: 去就會造成該加一的x得到跟另一個程式一樣的結果 如果五次都 09/14 23:23
DLHZ: 遇到同樣的情況最多就少五 所以x的可能性就是5~10 09/14 23:23
AndrewTsai46: 了解了 感謝大家 09/16 09:57