當使用超線程(例如花費在自旋鎖或緩存未命中的時間)時,CPU時間是否增加(由time
CLI命令報告),或者是否有可能由於HT的奇特性而使CPU時間膨脹? (例如,真正的核心忙,HT不能踢)CPU時間與超線程相關嗎?
我有四核i7,我正在測試一個OpenMP program trivially-parallelizable部分(圖像調色板重新映射) - 沒有鎖,沒有關鍵部分。所有的線程訪問一些只讀的共享內存(查找表),但只寫入他們自己的內存。
cores real CPU
1: 5.8 5.8
2: 3.7 5.9
3: 3.1 6.1
4: 2.9 6.8
5: 2.8 7.6
6: 2.7 8.2
7: 2.6 9.0
8: 2.5 9.7
我擔心用迅速增加的內核數量超過了CPU時間量1或2
我想,理想情況下CPU的時間不會增加太多(的量相同工作只是分佈在多個核心上)。
這是否意味着有40%的開銷花在並行化程序上?
不要忘記超線程內核不是「真正的」內核。所以預計CPU時間會增加。 – Mysticial 2013-03-12 00:56:50
我會更擔心的是CPU時間**沒有快速增加,表明內核處於空閒狀態。在理想的情況下,CPU時間將是'真實'的核心時間(在HT開始之前,'核心'高達'4')。已經有3個核心,效率下降到65%。參見[Amdahl's law](http://en.wikipedia.org/wiki/Amdahl%27s_law),瞭解程序中非平行部分的數量如何影響其可伸縮性。還要探究問題是否是內存限制。 – 2013-03-12 07:04:27
也可能你編寫了「平行並行」的部分。並行計算錯誤並最終導致性能浪費非常容易,從而導致不理想的擴展。但是,40%聽起來很荒謬 - 我很容易用較少的可擴展算法獲得95%的效率,所以這裏肯定有一些東西在玩。 – Thomas 2013-03-14 06:55:04