SC-DRF load/store 在各平台的實作

fcamel
fcamel的程式開發心得
2 min readNov 20, 2016

摘錄《C++ and Beyond 2012: Herb Sutter — atomic<> Weapons》裡面相關的投影片:

軟體開發者希望 load/store 都是 sequential consistent for data-race-free (SC-DRF),這樣寫 multithreading 程式時不用擔心 data race。但是硬體的架構為了效率考量,大多不是如此。若硬要硬體表現得如 SC-DRF 一般,可能得用更強的限制 (超出 SC-DRF 的限制),使得效率大打折扣。

下圖出自同一投影片,粗略的表示各平台的 load/store 和 SC-DRF 差多少:

我的理解是 load/store 在 SC-DRF 下面的話,需要多作其它事才能達到 SC-DRF,因此可能付出過多代價,像是 ARM v7 的情況。另一方面,ARM v8 直接提供指令達到 SC-DRF — 完全符合軟體開發的需求。不過我不懂為啥 x86/x64 的 store 在 SC-DRF 上面,大概是指用 xchg 而非 mov 作 store 的情況吧?

另外 C/C++11 mappings to processors 有記錄 compiler 在各平台產生 load/store 配合各式 memory order 的指令,可以和上圖對照來看。

相關文章

--

--