多核心與同步

在Linux的NUMA系統中常用的首次接觸(first touch)策略(將頁面放在第一次寫入該頁面的執行緒所在節點的記憶體),下列關於需要注意之處的說明何者正確?

  1. A首次接觸會把頁面放在隨機的節點
  2. B在呼叫malloc的時間點,所有頁面的放置位置就已決定
  3. C只用一個執行緒將大型陣列初始化為0的話,整個陣列會全部放在同一個節點,其他節點的執行緒就得使用遠處的記憶體
查看答案與解析

正確答案:C. 只用一個執行緒將大型陣列初始化為0的話,整個陣列會全部放在同一個節點,其他節點的執行緒就得使用遠處的記憶體

僅以malloc配置並不會分配實體頁面,而是在第一次寫入時發生的分頁錯誤(page fault)中,將頁面放在該執行緒所在節點的記憶體。因此,若以一個執行緒進行初始化,整個陣列都會集中在那個節點,在平行運算時,各執行緒負責的部分大多會落在遠處的記憶體。若初始化也以與運算相同的分工平行進行,各部分就會被放在負責它的執行緒附近。

  • A. 不是隨機,而是由最先接觸的執行緒決定。
  • B. 不是在malloc的時間點,而是在第一次寫入的時間點決定。
  • C. 正確。初始化也應交由之後使用的執行緒分擔,這是基本做法。
練習這個領域 前往領域頁面

多核心與同步的其他題目

  1. 在平行程式中,即使增加核心數量,效能仍未如預期成長,下列何者不屬於其原因?
  2. 將迴圈的各次迭代分配給多個執行緒時,若每次迭代的運算量差異很大,適合的分配方式為下列何者?
  3. 以多個執行緒計算陣列所有元素的總和時,為了效能,適合的方法為下列何者?
  4. 關於讀寫鎖(reader-writer lock)的特徵,下列何者正確?
  5. 關於計數型號誌(counting semaphore)的用法,下列何者最適當?

這個領域的比較