多核心與同步

關於多執行緒程式中發生的偽共享(false sharing),下列說明何者正確?

  1. A不同的執行緒雖然改寫不同的變數,但因為這些變數位於同一條快取列,使快取列在核心之間來回移動而變慢
  2. B兩個執行緒未經同步就改寫同一個變數,導致值被破壞
  3. C執行緒彼此等待對方的鎖而停住
查看答案與解析

正確答案:A. 不同的執行緒雖然改寫不同的變數,但因為這些變數位於同一條快取列,使快取列在核心之間來回移動而變慢

一致性是以快取列(一般為64位元組)為單位管理的。即使核心0只是改寫變數a、核心1只是改寫變數b,若a與b位於同一條快取列,每次寫入都會使對方的副本失效,快取列就會在兩個核心之間來回移動。明明結果正確,效能卻大幅下降,這就是偽共享。這是在每個執行緒各自的彙總用陣列等情況中容易發生的問題。

  • A. 正確。這是明明沒有共享資料,卻共享了快取列的現象。
  • B. 那是資料競爭。
  • C. 那是死結(deadlock)。
練習這個領域 前往領域頁面

多核心與同步的其他題目

  1. 像「long cnt[8];」這樣排列每個執行緒的計數器陣列,發生了偽共享。下列何者是最適當的對策?
  2. 關於資料競爭(data race),下列說明何者正確?
  3. 以兩個執行緒同時執行上方的程式碼時,counter的最終值有時會小於200000。其原因下列何者正確?
  4. 關於原子指令(不可分割指令),下列說明何者正確?
  5. 關於原子指令CAS(比較並交換,compare-and-swap)的動作,下列何者正確?

這個領域的比較