[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還有很多架構上的議題,多半跟資料同步有關,
這方面我不是很熟,可以的話就請其他板友補完
謝謝收看