Time
最佳使用者時間與實時比率是有效並行化的指標嗎?
在某些 unix shell 中,有一個
time
命令可以列印執行給定命令所需的時間。輸出看起來像實際 1m0.000s
使用者 10m0.000s
系統 0m0.000s
如果我編寫一個在多核上使用並行化的程序,使用者時間可以是實時的倍數。
我的問題是,我是否可以得出結論,如果使用者時間非常接近實時乘以使用的執行緒數,那麼程序是否以最佳方式並行化?也就是說,例如,沒有執行緒必須為其他執行緒等待很長時間。
就一個簡單的字:沒有。
最浪費精力的是核心空間和使用者空間的切換,這樣的切換是最浪費的地方。為了到達需要執行實際操作的位置,已經完成了(很多)工作。需要的開關越少,操作的效率就越高。
有些操作完全在核心空間中完成(並且沒有(安全的)方法可以繞過它)。在這種情況下,大部分時間都花在核心空間中,這是執行它們的最有效方式。
由於核心沒有實現它的服務/功能,因此必須在使用者空間中執行其他操作。在這樣的操作中,在使用者空間中使用的時間越多,操作的效率就越高。
但是有人可能已經在使用者空間中使用一些效率不高的算法實現了一個高效的核心服務。這將增加使用者時間,但結果會降低效率。與核心空間中的相同服務相比。
而其他一些開發人員可能會呼叫核心一次讀取一個字節(並且必須為每個字節切換),而不是一次讀取一個兆的等效呼叫(如果有一個塊的等效函式而不是一個字節)。
而且,最終,一定會執行一些核心和使用者操作的混合。例如,要讀取磁碟塊,核心應該提供該函式,並且它應該是“一勞永逸”,直到記憶體塊(緩衝區)被磁碟塊讀取的結果填充。要訪問程序記憶體(如程序數組),不需要核心呼叫。
沒有簡單的方法來衡量時間效率。