瀏覽單個文章
oly
Amateur Member
 

加入日期: Sep 2004
文章: 48
HT/SMT, SMP

[Hyper-Thread]
管線深度與數量越高,CPU的利用效率就越低,
因此雖然用了兩倍數量的電晶體,但是可能只換來兩成的效能提升,
不如將這些電晶體拿去做第二顆 CPU,兩顆使用率高的CPU聽起來不錯,
但是要注意的是,這樣的加速意義已經跟先前不一樣了。

在單一CPU的角度來看,提升效率就等於 一件工作能在更短時間內完成。
但從多CPU角度來看,提升效率等於 一定時間內能完成更多工作。
兩者有什麼不一樣?
這不得不提到作業系統層次的執行緒(thread)與排程(跟CPU指令層次的排程不同),

在多工環境下,每個程式會被OS以一個或多個執行緒看待,進行排程與資源分配,每個執行緒都有需要被執行的指令,而OS則負責管理每個執行緒何時可以使用 CPU。OS 必須知道有多少CPU資源可以使用,以及如何妥善地讓每個執行緒進入CPU完成工作。

這邊必須提到,OS只知道CPU忙或不忙,並沒辦法知道CPU內部真正的使用率,我們從OS看到的CPU使用率僅僅是估計來的。

當OS將工作一筆一筆交給CPU時,CPU只看得到一個個指令,
內部還是會經過自己的排程來讓使用率提高。


雖然CPU的排程單元已經盡力了,不過還是有很多閒置的部分。

要是能夠讓 OS 將其他執行緒的工作也叫過來一起排隊的話
(不同執行緒通常是不相干的,基本上都能平行處理,就算有同步問題也是OS那邊要解決掉,等於是OS已經幫忙排好大半了),
CPU的排程功力相當於翻了兩倍,就能更進一步讓CPU使用率提高。

Intel 的 Hyper-Thread 技術就是利用這個方法,來減少CPU內閒置的單元,
雖然無法讓單一執行緒比較快被完成(其實應該甚至會慢些),
但是卻能減少所有執行緒的總等候時間,讓同一時間內能做的工作更多,
整體來講,效能是有實質提升的。

如果是兩個實體CPU的話,大概就是像這樣

不過多顆實體CPU還有很多架構上的議題,多半跟資料同步有關,
這方面我不是很熟,可以的話就請其他板友補完

謝謝收看
舊 2005-08-22, 05:01 AM #3
回應時引用此文章
oly離線中