多核心與同步
在Linux的NUMA系統中常用的首次接觸(first touch)策略(將頁面放在第一次寫入該頁面的執行緒所在節點的記憶體),下列關於需要注意之處的說明何者正確?
- A首次接觸會把頁面放在隨機的節點
- B在呼叫malloc的時間點,所有頁面的放置位置就已決定
- C只用一個執行緒將大型陣列初始化為0的話,整個陣列會全部放在同一個節點,其他節點的執行緒就得使用遠處的記憶體
查看答案與解析
正確答案:C. 只用一個執行緒將大型陣列初始化為0的話,整個陣列會全部放在同一個節點,其他節點的執行緒就得使用遠處的記憶體
僅以malloc配置並不會分配實體頁面,而是在第一次寫入時發生的分頁錯誤(page fault)中,將頁面放在該執行緒所在節點的記憶體。因此,若以一個執行緒進行初始化,整個陣列都會集中在那個節點,在平行運算時,各執行緒負責的部分大多會落在遠處的記憶體。若初始化也以與運算相同的分工平行進行,各部分就會被放在負責它的執行緒附近。
- A. 不是隨機,而是由最先接觸的執行緒決定。
- B. 不是在malloc的時間點,而是在第一次寫入的時間點決定。
- C. 正確。初始化也應交由之後使用的執行緒分擔,這是基本做法。