Re: [閒聊]關於intel hyper threading的解說?

看板PC_Shopping作者時間9年前 (2015/03/31 23:14), 9年前編輯推噓4(4055)
留言59則, 12人參與, 最新討論串1/1
有錯請指證 流水線作業 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

03/31 23:39, , 1F
1.3倍是什麼情境下
03/31 23:39, 1F

03/31 23:43, , 2F
長期使用平均
03/31 23:43, 2F

03/31 23:45, , 3F
假設兩顆CPU 1C2T 18C36T 是不是前者比例高一些呢?
03/31 23:45, 3F

03/31 23:46, , 4F
我這樣問也不太對
03/31 23:46, 4F

03/31 23:47, , 5F
沒資料不過應該是 18c閒置應該就很多了
03/31 23:47, 5F
想了一下 不負責任的推測 http://i.imgur.com/KhixFaw.png

03/31 23:48, , 6F
INTEL把核心數會做越多
03/31 23:48, 6F

03/31 23:49, , 7F
不過守在中階桌機的就可憐了
03/31 23:49, 7F

03/31 23:53, , 8F
1.3倍的來源 http://ppt.cc/nR2- 第13頁
03/31 23:53, 8F
感謝提供 ※ 編輯: jonothan (223.142.56.222), 04/01/2015 00:16:07

04/01 01:16, , 9F
1.3倍應該是上限吧
04/01 01:16, 9F

04/01 01:19, , 10F
你看第一張圖就知道應該不是上限
04/01 01:19, 10F

04/01 02:01, , 11F
"現實"中能"長時間平均"提供130%效能
04/01 02:01, 11F

04/01 02:01, , 12F
你確定?
04/01 02:01, 12F

04/01 05:33, , 13F
跟古早 Pentium 4 出 HT 時聽過的差不多 當時聽到
04/01 05:33, 13F

04/01 05:33, , 14F
的數據是125%
04/01 05:33, 14F

04/01 07:09, , 15F
管線不用HT也可以做的 多核多執行單元提升的效能
04/01 07:09, 15F

04/01 07:09, , 16F
不等於HT能提升的效能 Intel自已說的1.3倍一定不準
04/01 07:09, 16F

04/01 07:10, , 17F
Intel說hasewell比上一代提升多少%?
04/01 07:10, 17F

04/01 07:15, , 18F
遊戲效能是一定沒有的 http://goo.gl/jQ2gdX
04/01 07:15, 18F

04/01 07:15, , 19F
舉別的例子超過30%也是有可能的
04/01 07:15, 19F

04/01 08:26, , 20F
但許多 Banchmark 測出來的結果也確實是1.3倍左右
04/01 08:26, 20F

04/01 10:50, , 21F
前面教pipeline 後面HT?
04/01 10:50, 21F

04/01 12:45, , 22F
在最極端的情況下我想1.3倍是有的
04/01 12:45, 22F

04/01 12:47, , 23F
看廠商自己的文件不準 之前INTEL還有不良造假紀錄
04/01 12:47, 23F

04/01 12:49, , 24F
我個人只感覺到1.05倍的提升 也就是我完全感覺不到
04/01 12:49, 24F

04/01 12:49, , 25F
有什麼提升
04/01 12:49, 25F

04/01 12:50, , 26F
那些遊戲是1.3倍 原聞其詳 我說其它應用有可能超過
04/01 12:50, 26F

04/01 13:36, , 27F
本來就說越重度使用 效果越發揮不出來
04/01 13:36, 27F

04/01 13:41, , 28F
而Pipeline和Simultaneous Multithreading 本來就
04/01 13:41, 28F

04/01 13:42, , 29F
都是資源運用效率提升的方式 不過一個是各級之間的
04/01 13:42, 29F

04/01 13:43, , 30F
一個是同一級
04/01 13:43, 30F

04/01 13:44, , 31F
HT只是Simultaneous Multithreading的intel版本
04/01 13:44, 31F

04/01 15:58, , 32F
HT和pipeline是同時存在的 是不是要合在一起說明
04/01 15:58, 32F

04/01 15:59, , 33F
1個thread在非常忙錄的狀況下 管線就吃光了
04/01 15:59, 33F

04/01 16:01, , 34F
1次丟8個threads 管線下去ht要怎麼榨出效能才是重點
04/01 16:01, 34F

04/01 16:02, , 35F
Linx 0.65跑下去I7 和i5是差不多的 HT可能是沒用的
04/01 16:02, 35F

04/01 16:03, , 36F
現在中HT是有0%還有-%的 j大的推測是看不出來的
04/01 16:03, 36F

04/01 16:05, , 37F
老實說那個圖我也看不太懂 核心數是程式用到的
04/01 16:05, 37F

04/01 16:06, , 38F
還是邏輯核心數 至少高負載不可能都>1
04/01 16:06, 38F

04/01 19:39, , 39F
J大有推測?不是講事實嗎?
04/01 19:39, 39F

04/01 19:58, , 40F
跳針跳針… j大說的很清楚了
04/01 19:58, 40F

04/01 20:00, , 41F
在下舉個例子 有錯麻煩糾正一下
04/01 20:00, 41F

04/01 20:01, , 42F
4C4T 把每個C想成一門大砲 每個大砲配一個瞄準控制T
04/01 20:01, 42F

04/01 20:02, , 43F
這樣把目標(工作)輸入給T 然後C去發射(做)
04/01 20:02, 43F

04/01 20:04, , 44F
我如果在每個大砲多裝一個瞄準器(T) 這樣我在第一
04/01 20:04, 44F

04/01 20:04, , 45F
個目標鎖定發射的過程中
04/01 20:04, 45F

04/01 20:04, , 46F
另外一個瞄準器(T)就可以先瞄準下一個目標
04/01 20:04, 46F

04/01 20:05, , 47F
當然不可能讓一門大砲發揮兩門的效果 但是長期下來
04/01 20:05, 47F

04/01 20:05, , 48F
效率增加了
04/01 20:05, 48F

04/01 20:06, , 49F
本來就沒有那個core對那個t thread還會輸入給thread
04/01 20:06, 49F

04/01 20:14, , 50F
不是軟體輸入給T嗎 為什麼他自己會輸入給自己?
04/01 20:14, 50F

04/01 20:20, , 51F
就說了只是減少中間的延遲…我還沒想通時也這樣0.0
04/01 20:20, 51F

04/01 20:34, , 52F
執行後就是1個thread 我如果2個都打同1core呢
04/01 20:34, 52F

04/01 20:36, , 53F
1開始就是每個t有4個c可以選 不是1對1
04/01 20:36, 53F

04/01 20:51, , 54F
因為會有 跳躍預測錯誤、延遲 資料來不及回傳
04/01 20:51, 54F

04/01 20:53, , 55F
還有各種資料處理意外 如overflow 分頁檔不在記憶體
04/01 20:53, 55F

04/01 20:53, , 56F
都會造成流水線作業中斷
04/01 20:53, 56F

04/01 20:54, , 57F
如果用另一個不相關的指令填進去 就萬事大吉了
04/01 20:54, 57F

04/01 23:04, , 58F
一直玩一直玩...
04/01 23:04, 58F

04/02 07:11, , 59F
那要剛好那個指令準備好了 越多threads越難排
04/02 07:11, 59F
文章代碼(AID): #1L6hdpvu (PC_Shopping)