多核心與同步

以多個執行緒計算陣列所有元素的總和時,為了效能,適合的方法為下列何者?

  1. A所有執行緒針對每個元素,取得鎖後加到一個共用變數
  2. B所有執行緒針對每個元素,不經同步就加到一個共用變數
  3. C各執行緒以區域變數加總自己負責的部分,最後再將這些結果各加一次
查看答案與解析

正確答案:C. 各執行緒以區域變數加總自己負責的部分,最後再將這些結果各加一次

若針對每個元素更新共用變數,鎖或原子指令的等待,加上快取列的來回移動,會變得非常慢。各執行緒以暫存器或區域變數求出部分和,最後只用執行緒數量的加法算出整體的和,共用的寫入就會非常少。這種方法稱為歸約(reduction),也已內建於OpenMP等平行化機制中。

  • A. 鎖的等待與通訊會使平行化的效果幾乎消失。
  • B. 會有資料競爭,總和不會正確。
  • C. 正確。這是稱為歸約的方法。
練習這個領域 前往領域頁面

多核心與同步的其他題目

  1. 關於讀寫鎖(reader-writer lock)的特徵,下列何者正確?
  2. 關於計數型號誌(counting semaphore)的用法,下列何者最適當?
  3. 關於快取一致性與記憶體一致性模型的差異,下列說明何者正確?
  4. 關於硬體交易式記憶體(hardware transactional memory)的概念,下列何者正確?
  5. 以條件變數(condition variable)「等到佇列不為空」時,被喚醒後之所以用while敘述而非if敘述重新確認條件,其理由下列何者正確?

這個領域的比較