多核心與同步
將迴圈的各次迭代分配給多個執行緒時,若每次迭代的運算量差異很大,適合的分配方式為下列何者?
- A一開始依迭代的次數平均分配,之後不再調整的靜態分配
- B將所有迭代交給一個執行緒
- C把工作分成小區塊,由有空的執行緒去領取下一個區塊的動態分配
查看答案與解析
正確答案:C. 把工作分成小區塊,由有空的執行緒去領取下一個區塊的動態分配
靜態分配雖然負擔較少,但若每次迭代的重量不同,只有負責較重部分的執行緒會落後,其他執行緒則得等待。動態分配則是從共用計數器等處領取下一份工作,先完成的執行緒會負責更多,因此負載會變得平均。不過區塊太小的話,領取的負擔會增加,所以需要調整大小。
- A. 即使次數相同,運算量不同的話,偏差仍會殘留。
- B. 這樣就不算平行化了。
- C. 正確。可以自動平衡工作的偏差。