作者jonothan ()
看板PC_Shopping
標題Re: [閒聊]關於intel hyper threading的解說?
時間Tue Mar 31 23:14:55 2015
有錯請指證 流水線作業
http://i.imgur.com/MaWNiqr.png
假設要洗衣服要經過: 淨泡機、攪拌機、脫水機、烘乾機,一台半小時。 假設要洗四桶衣服,經過四台機器需要(0.5+0.5+0.5+0.5)*4=8個小時。 BUT! 第0.5個小時 將第一桶衣服拿去浸泡 第1.0個小時 第一桶衣服 從浸泡機拿出來 丟進去攪拌機後 第二桶衣服 就丟去浸泡了 第1.5個小時 第一桶衣服 從攪拌機拿出來 丟進去脫水機 第二桶衣服 從浸泡機拿出來 丟進去攪拌機 第三桶衣服 丟去浸泡 . . . 最後總時間只需要3.5個小時! 這就是流水線作業 與電腦相關的,就是各級資源可以盡量避免資源空閒。
http://i.imgur.com/wl4FNJg.png
以這張圖為例分別是: 指令抓取、提取暫存器、運算單元、資料存取、存回暫存器。 而上面是很單純的流水線處理。 而現今的CPU呢?
http://i.imgur.com/9ClQylc.png
看一下架構示意圖。 可以看到運算單元有非常多個,有整數運算,浮點數運算... 等。 但是一個指令進來,可能只使用了一個整數運算單元,而其他單元都是處於閒置狀態。 那如何有效利用 全部的運算單元呢? 就是將指令全部丟進去處理,最後會卡在運算單元這級 如果可以進行運算就進行,如果不 行就先等待,等資源一空閒就進行運算。 處理完的回傳值,會再全部丟到緩衝單元,按順序全部排好,再輸出,這樣就與一個一個 慢慢執行後的輸出一樣了。 那與INTEL的Hyper-Threading有什麼關係?
http://i.imgur.com/V6xEdv2.png
一顆雙核心的處理器,處理兩個程式的時候發現,其中一顆在運作的時候,另一顆剛好空 閒。那我是不是就可以在一顆核心空閒的時候,給他另一個程式進行運算? 所以就有了最右邊的圖。
http://i.imgur.com/Sdc8ORb.png
當然一般來說不會這麼剛好,不過還是可以盡量進行填空,達到增加資源利用效率的效果 ,減少時間。 以這張圖來說,原本需要20個*2的cycle,現在只要25個cycle。
http://i.imgur.com/TIlceLU.png
不過如果原本就全部都填滿了的話,HT就一點作用也沒有了。 根據統計,HT實際使用上約可提供1.3倍的效能,而現在支援多執行緒的程式也越來越多。 從魔獸的4核心,到最近刺客教條等單機大作的8核心。 個人淺見E3、I7的4C8T是可以投資的,因為支援8T的東西只會越來越多。 文章前面的圖面是陳中和教授的上課講義,老師如果不希望使用該圖,我會馬上拿下來。 --
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 223.140.84.109 ※ 文章網址: https://www.ptt.cc/bbs/PC_Shopping/M.1427814899.A.E78.html
→ mayjan : 1.3倍是什麼情境下 03/31 23:39
→ jonothan : 長期使用平均 03/31 23:43
→ mayjan : 假設兩顆CPU 1C2T 18C36T 是不是前者比例高一些呢? 03/31 23:45
→ mayjan : 我這樣問也不太對 03/31 23:46
This entry passed through the Full-Text RSS service - if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers.
留言列表