作者suyuan (碩源)
看板PC_Shopping
標題Re: [閒聊]關於intel hyper threading的解說?
時間Wed Apr 1 22:39:53 2015
看到推文想要澄清一下 似乎有些人認為,如果兩個 threads 被塞進擁有 HT 功能的 CPU 的同一個 core 這樣速度一定比把這兩個 threads 分散到同一個cpu的不同的 core 還要慢? 這樣舉例來說, Intel I7 4770 (Haswell) 3.4GHz cpu 來說 他有支援 HT , 所以一共有 4 個實體核心, 8 個邏輯核心,每個實體core有2個邏輯核 所以,大家都注重在「執行」速度上,似乎有些人覺得以下兩種情況 A. 有 2 個 threads 被安排在同一個 core 上的 2 個邏輯核心執行 B. 有 2 個 threads 被安排在不同 core 上執行 似乎有些人認為, B 必定比 A 還要快 實際情況是,有些時候 A 會比較快。 進一步的說明是這樣的,同樣以 Intel i7 4770 Haswell CPU 來說明 這個 CPU 有三層快取記憶體的設計,分別稱為 L1 L2 L3 其中 L1 又分成 Data cache, 以及 Instruction cache 眾所皆知,記憶體的速度遠低於 CPU 的執行速度,快取記憶體也是一樣 L1 快取延遲是 4 cycles, 某些時候是 5 cycles L2 快取延遲是 12 cycles L3 快取延遲是 36 cycles RAM 的延遲是 36 cycles + 50幾ns (或者更多,看記憶體的速度而定) 這個 cycles 意思是說,如果資料在快取上, CPU 要空轉多久等這份資料傳過來給我 快取的設計是,每一個 core 有自己的 L1 快取以及 L2 快取 然後 4 個 core 大家一起共享 L3 快取,當然 L3 快取容量最大,但是速度最慢.. 現在來討論上述 A, B 兩種情況,可能會有以下過程 A 的情況,兩個 threads 被塞進同一個 core 的 2 個邏輯核心 如果這兩個 threads 是來自同一支程式,那麼假設他們共享部分的資料以及運算結果 這個資料很可能會存在 L1 快取裡面,或者 L2 快取裡面 那麼,當他需要這個資料的時候,快取命中的話, CPU 最多只要等 12 cycles 就好 B 的情況,兩個 threads 被分散到兩個不同的 core 裡面 由於不同的 core 只有共享 L3 快取,因此有需要用到共享的資料時 一個 core 要去 L3 快取拿資料,要多等待 36 cycles 說到底,其實 CPU 一輩子的運作時間裡面,大部分的時間都花再等待資料.. 如果是上述情況時,其實支援 HT 的 CPU裡面塞兩個threads在同一個 core裡面 執行速度是會比較快的 因此,早期 windows xp 不懂這些,他是公平的把 threads丟進每一個邏輯核心 這種優點就沒有辦法發揮 但是自從 windows vista 以後的系統,就很聰明了 他會把來自同一個程式的不同 threads 放進同一個core的兩個不同邏輯核心 如果情況是 A 情況時,就會有額外的快取命中的好處,速度會顯著的加快 而來自不同的程式的threads 就會放進不同的 core的邏輯核心 反正他們沒有共享什麼資料的話,這樣分別妥善利用系統資源也是很好 儘管上述情況只是簡化的說明,實際系統運作會更複雜 但是想要澄清一點,並不是有些人原本所想像的那個樣子..什麼假核心.. HT技術也不是有些人想像的那樣沒有價值... --
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 198.23.71.118 ※ 文章網址: https://www.ptt.cc/bbs/PC_Shopping/M.1427899196.A.E92.html
→ assemblies : s大說的是有可能的 但是現在快取對效能的影響很小 04/01 22:45
→ assemblies : 同頻下I3>I5的機率有多大 不可能賭一把快取會有 04/01 22:46
→ assemblies : 萬一賭輸了 可能慢很多的時間 快卻只會快一點 04/01 22:47
→ caramel623 : 快取對效能影響很小嗎? 04/01 22:48
→ suyuan : 快取對性能影響超級大.....唉... 04/01 22:50
→ assemblies : 在執行之後當然8個邏輯核心沒有差 我說的是一開始 04/01 22:50
→ assemblies : 在還沒分配之前 有4間廁所8個門 你說邏輯上有8間 04/01 22:51
→ suyuan : 我們這些寫程式的人拼命的最佳化...快取影響超大 04/01 22:51
→ assemblies : 分配的人不用知道只有4間真的 另外4間在那 我看不到 04/01 22:51
→ assemblies : 直接說是假的不是很容易懂 04/01 22:51
→ suyuan : 快取的設計如此重要,被你一句影響很小,這情何以堪 04/01 22:52
→ assemblies : 不知s大寫那種程式的 用那種compiler 04/01 22:53
→ assemblies : 我們聊的是大家在用的應用程式 特定領域 或server 04/01 22:53
→ fireslayer : cache影響超大ZZZ這隨便一個受過訓練的coder都知道 04/01 22:53
→ assemblies : 用途的當然有差 不然XEON那些快取為什麼要那麼大 04/01 22:54
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.