超執行緒的兩個執行緒資源是動態分配的還是固定一半一半的?Xi Yang2017-05-12 12:06:54

如果是動態分配的話,如何避免軟體的兩個執行緒跑在一個物理核心上而另一個物理核心在摸魚?

這主要是由作業系統硬點的。

如果是固定一半一半的話單執行緒軟體是不是隻能用到核心的一半效能?

不會,因為超執行緒並不能真的讓一個核心發揮出兩倍的能力,你只是額外壓榨了它在當前週期裡(原本)沒有用到的計算模組。

實際上,據說在BIOS裡關掉超執行緒,反而會提升單執行緒的處理能力,因為CPU不用糾結怎麼分配一個核上的計算資源給倆執行緒。

超執行緒的兩個執行緒資源是動態分配的還是固定一半一半的?北極2017-05-12 12:19:29

CPU的硬體資源是動態分配的,或者說,看運氣。

超執行緒這東西並不像想象的那麼美好,單核超執行緒,和雙核單執行緒的效能差距是很大的。

在實時性要求較高的作業系統裡,首要的事情就是關閉超執行緒,因為超執行緒會讓執行緒的執行時間變得不確定,據說高效能計算的也會關。

表面上看,是一個核跑著兩個執行緒,實際上兩個執行緒哪個線跑完是不確定的,同樣的程式碼的兩個執行緒,跑在一個核上,可能一個已經跑完了,另一個1/3都還沒過。

作業系統排程的時候,會根據核的繁忙程度來分配執行緒。至於會不會讓某一個核忙死另一個核在摸魚,這種事情很難說,看作業系統的排程器如何設計了。理論上說稍微有點腦子的作業系統都會解決這個問題,比如執行緒按照奇偶數的方式分配核心,先分配1、3、5、7,跑滿了以後才是2、4、6、8,這樣就可以避免摸魚的問題了。

反正我手頭的WIN7能明顯看出來這種現象(CPU為4核 i7-3770,開超執行緒):

超執行緒的兩個執行緒資源是動態分配的還是固定一半一半的?

超執行緒的兩個執行緒資源是動態分配的還是固定一半一半的?

————————————

有人貼了AMD的架構,我放一張haswell的圖:

超執行緒的兩個執行緒資源是動態分配的還是固定一半一半的?

超執行緒的兩個執行緒資源是動態分配的還是固定一半一半的?

可以看到一個核上有不止一個ALU,像x86的LEA指令實際上是有計算的功能的,有單獨的ALU負責執行LEA這種指令,所以在任何時刻,一個核裡的執行單元都是不可能完全佔滿的,佔不滿的情況下,就有能力讓另外一個執行緒執行了,但如果兩個執行緒都需要同樣的執行單元(比如都需要進行浮點計算),那麼有一個執行緒就需要等待,此時執行緒的實際執行時間就是不可控的。

超執行緒的兩個執行緒資源是動態分配的還是固定一半一半的?kknd13942017-05-12 21:54:20

從處理器硬體角度稍微回答一下

SMT處理器內部硬體資源有些是動態分配,有些是靜態分配

參考zen的微架構示意

超執行緒的兩個執行緒資源是動態分配的還是固定一半一半的?

超執行緒的兩個執行緒資源是動態分配的還是固定一半一半的?

可以看出有些資源是完全競爭(也可以說共享),如快取(圖中紅色)

有些是靜態區分(固定分配),如ROB(黃綠色)

剩下的介於兩者之間。

之前的推土機,是另一種風格的MT

超執行緒的兩個執行緒資源是動態分配的還是固定一半一半的?

超執行緒的兩個執行緒資源是動態分配的還是固定一半一半的?

取指,譯碼,浮點,向量單元,指令快取是競爭(共享)的;整數,訪存是獨立的。

所以os為了避免資源衝突,要優先排程程式(任務)到物理核心,再排程到邏輯核心上

早年處理器硬體資源不充分的時候(P4這個渣渣。。),SMT對某些程式確實非常不友好

現在雖然還有一些程式也不喜歡SMT,不過大部分都還好了。

超執行緒的兩個執行緒資源是動態分配的還是固定一半一半的?知乎使用者2017-05-13 06:04:24

瀉藥。。。

你的問題描述裡面有不太相關的兩個部分

如果是動態分配的話,如何避免軟體的兩個執行緒跑在一個物理核心上而另一個物理核心在摸魚?

這個實際上是作業系統的核心排程決定的,處理器並不能決定自己接收什麼樣的任務,跟處理器的SMT也就沒有關係,這個部分

@北極

已經講的挺好的了

如果是固定一半一半的話單執行緒軟體是不是隻能用到核心的一半效能?

這才是關乎到SMT內部的東西,現在排在最下面的

@kknd1394

講的非常對。不知道為啥講得這麼清楚的回答沒人點贊同,我來點第一個好了。

我們最近在做這塊的研究,IBM Power8,Intel Skylake,AMD Zen對SMT結構內的各個共享資源處理是不統一的,Zen上共享的可能在別家的設計裡就是劃分的,或者倒過來,比如Intel上劃分的資源在別家的設計上就是共享的。

我們在探索一個新的技術路線,在SMT結構下做到資源動態分配,這非常困難,但組裡的師兄弟已經有了一些初步成果。實驗資料和所有相關的調研結果,因為要發paper,所以都是不能公開說的,見諒。

超執行緒的兩個執行緒資源是動態分配的還是固定一半一半的?ArchShineZ2017-05-13 11:30:54

正在寫本科畢業論文的Related works,正好來答一發。

1。 SMT資源的動態劃分?

除了現有的答案提到的靜態劃分,和動態競爭,動態分配資源的論文也是有的。例如:

04年Francisco J。 Cazorla提出的DCRA

http://

dl。acm。org/citation。cfm?

id=1038941

06年Seungryul Choi提出的hill climbing

http://

dl。acm。org/citation。cfm?

id=1136507

然而,似乎都沒有被用於工業界的處理器。雖然沒有做過實驗,但是我覺得它們可能加劇smt帶來的效能不確定性。

2。 如何防止將2個任務排程到同一個物理核心上,而另外的核心在摸魚?

Linux下面有taskset,你可以強制將2個任務放到相同或者不同的物理核心(注意Linux下0號邏輯核心和1號邏輯核心不一定是相同的物理核心)。Windows下,我不知道有沒有相關工具。