線程安全問題:兩個線程在同一個核心內執行,是需要嚴格隔離它們的上下文的,線程A不能訪問修改其他線程的資源。 線程隔離是一個非常複雜和繁瑣的過程,如果隔離不徹底,那麼會導致執行錯誤、以及隱私泄漏的問題。 Intel前兩年Skylake爆發的若干安全漏洞,就是因爲線程隔離不到位造成的。
以Skylake爲例子,後端執行端口EU不只一個隨着單核性能的不斷提升,後端執行資源也越來越豐富,這種執行端口閒置的情況就會越來越明顯,造成資源浪費。 這時候,爲了將這些資源物盡其用,同步多線程SMT就應運而生了。 SMT的思路是這樣的,既然一個任務填不滿後端的資源,那麼我們就找不只一個任務來填就好了,不同任務之間的相互依賴和衝突情況很低,放到一起來執行正合適去填滿後端資源。 除了頻率以外,要提升CPU的單核性能,第一個常見手段就是儘可能的縮短每個指令執行的週期,不過在我們假設的這個場景中和SMT關係不大,這裏就不說了。
amdsmt: 文章被以下專欄收錄
SMT2只需要在前端有兩組維護不同任務上下文的單元就可以增加物理核心,以及加入SMT都是提升多任務性能的方式。 amdsmt2025 因爲SMT提供的是虛擬核心,所有虛擬核心共享很大一部分的資源,通常加入SMT技術只需要在前端額外增加一部分資源(畢竟兩個任務是兩個上下文)就可以。 例如Intel曾經就披露過,奔騰4增加HT技術只需要多花費5%的核心面積,就可以增加15-30%的多線程性能,而如果增加物理核心,增加多少性能,就至少要增加多少比例的核心數量,性價比顯然不如SMT。 那麼這時候整個執行時間就變成了6N,比起之前的7N又提升16.7%的速度。
如果你對於硬體世界充滿好奇,想多瞭解這些別的地方看不到的觀點,不妨追蹤我們的最新訊息,填上email看看免費文章不喫虧。 由CDRP與AMD合作解決AMD SMT改進,不需修改文件,某些4核和6核AMD amdsmt Ryzen處理器有改善,但8、12和16核Ryzen處理器沒改善。 當然,我們也不能不排除AMD真的把頭洗下去,但具備調整的彈性,例如同樣核心的EPYC和Threadripper,前者因伺服器需求開SMT4但時脈較低,後者因桌上應用僅SMT2但時脈較高的狀況,這倒是蠻值得各位科科觀察一下的可能性。
amdsmt: 文章被以下專欄收錄
那麼我們還是假設每個任務的執行週期是N,可以看到只要我們按照上述分組執行代碼,那麼整體的執行時間就只取決於最長的一組任務1A,也就是執行時間可以縮短到4N,速度提升到2.5倍。 CDRP為《電馭叛客2077》釋出新修補程式Hotfix 1.05,修復了許多遊戲故事情節與硬體效能的錯誤,CDRP已為《電馭叛客2077》發布了第三個修補程式,發布僅9天時間可完成多少改進? 最初是對Xbox和Playstation主機修補,而PC的修補也可以。 Microsoft amdsmt Hotfix KB 更新後,請重新開機進到BIOS設定畫面並開啟SMT功能,SMT功能將能正常運作。 X86處理器微架構因開發時間漫長,所費不貲,難以針對不同市場開發全新的架構,導致Intel和AMD都必須根據市場需求和公司策略,設法在伺服器、桌機、筆電之間尋求平衡,也必須有所取捨。 貿然倍增執行緒數量,恐怕未蒙其利反倒先受其害,光作業系統能否支援加倍的邏輯處理器,恐怕就是一個大問號了。
- 顯然,如果說要在一個CPU核心裏同時執行上述幾組任務,那麼CPU自然得具備至少4組執行端口,這裏我們也簡化成PA、PB、PC和PD,分別執行上述的1A 1B 1C 1D。
- 程度輕一點的情況下,互相等待一下就好,多犧牲一點單線程性能,還能保證多線程效率。
- 除了頻率以外,要提升CPU的單核性能,第一個常見手段就是儘可能的縮短每個指令執行的週期,不過在我們假設的這個場景中和SMT關係不大,這裏就不說了。
- 由CDRP與AMD合作解決AMD SMT改進,不需修改文件,某些4核和6核AMD Ryzen處理器有改善,但8、12和16核Ryzen處理器沒改善。
- 換言之,包2顆Chiplet的16核心的Ryzen X就是64執行緒,包8顆Chiplet的64核心的EPYC 7742則是駭人聽聞的256執行緒。
圖形驅動程式及最新版本 GeForce驅動程式 Radeon驅動程式 圖形驅動程式及最新版本 GeForce驅動程式 Radeon驅動程式 為了更好的遊戲體驗,請確認各硬體的驅動程式是否最新版本。 那問題來了,假若AMD Zen3真的是SMT4好了,除了工作管理員的邏輯CPU數量更加嚇人外,對AMD有沒有任何好處? 如果追求極致性能且自己確切不需要那麼多多線程性能,自然可以關掉。 反正也用不到那麼多線程,享受不到SMT的好處,還不如索性關了,杜絕一切可能的開銷,也更容易超頻了。 所以其實核心越多的,越適合關閉SMT,至於還在用4核心之類的就別關了。
amdsmt: 文章被以下專欄收錄
Intel的超線程一直都是SMT2,也就是一個物理核心虛擬出兩個核心,也就是邏輯核心。 AMD最新的Zen系列CPU,也同樣加入了SMT2的超線程,現在超線程技術可以說是PC和服務器CPU的標配了。 相信到這裏,大家已經明白,SMT是有利有弊的,SMT不是絕對的好,也不是絕對的壞,只有最合適的SMT配置。 如果一個核心的後端資源空閒並不多,或者通常的多任務場景任務間衝突比較大,那麼SMT就不應該配置或者應該少配置。
雖然說這個任務1理論上是得一個指令接着一個指令的執行,但實際上這些指令並一定只能這麼順序執行,只要兩個指令之間沒有相互依賴和衝突,那麼就可以併發執行(一起執行),從而縮短總的執行時間。 例如在上面這個例子中,我將指令分組成A B C D四組,組內必須順序執行,組間的指令完全沒有依賴(彼此不依賴對方執行後的數據)和衝突(不共享資源,不是一類操作),那麼我們就可以併發執行這些指令。 這個根本的原因其實不完全因為 Windows ,可以說 AMD 也有點關係。
amdsmt: 文章被以下專欄收錄
Multi-Threading 是將執行緒同步處理(多核心或多CPU)後轉化為指令集同步處理(同一個CPU內),SMT是將單一實體處理器從多個硬體執行緒上同時分派指令的技術。 就現階段處理器來看,Intel 的 HT 技術與 SMT 技術非常近似,不過據國外媒體敘述,Windows 10 的調度程式雖然可以將 Intel HT 當作低於主要核心的執行緒,但 Ryzen 的 amdsmt2025 SMT 卻無法如此處理。 當然實際的指令執行情況遠比我給的例子複雜,每種指令的執行週期不一樣,指令執行中間可能會有IO等待,執行暫停等情況,但是萬變不離其宗,SMT的思想就是用不同的任務儘可能填滿後端資源,懂了這個例子再考慮這些因素也不難。 顯然,如果說要在一個CPU核心裏同時執行上述幾組任務,那麼CPU自然得具備至少4組執行端口,這裏我們也簡化成PA、PB、PC和PD,分別執行上述的1A 1B 1C 1D。
程度輕一點的情況下,互相等待一下就好,多犧牲一點單線程性能,還能保證多線程效率。 而差一點的情況就是資源衝突反而導致性能下降,最典型的衝突就是緩存的衝突,一個線程可以用100%的緩存,而超過一個線程使用同一個緩存,可用緩存就不是100%,會導致大量開銷極大的緩存-內存換入換出。 只要有一個線程是非常喫緩存的,那麼加入SMT不但不會提升總的執行效率,反而會降低整體的效率。 SMT非常忌諱不同線程的資源衝突,一但衝突SMT就很容易引入反面效果。 比如在很多雲服務器、HPC服務器上,SMT通常是關閉的,就是因爲資源衝突。
amdsmt: 文章被以下專欄收錄
因爲現在的多核大戰,無論是PC還是手機,多線程性能絕大部分時候都是多餘的,除了跑分和極端應用,很少能用到多核性能,要指望它們做更多的虛擬核心,估計近些年是看不到的。 此篇知識可能不適用於所有同類型/系列的產品,部分畫面選項或操作步驟可能會因為軟體版本的不同而有差異。 很多人經常問,在Windows的任務管理器裏,到底哪個核心是真的,哪個是虛擬的? VT技術屬於Windows官方自帶合法開放加速技術,默認為關閉選項,透過手動打開達到模擬器加速運行。
而實際上這一類技術的(學術/技術)通行名稱是同步多線程(SMT,Simultaneous Multithreading)技術。 SMT技術初衷是通過提升CPU核心後端執行單元的利用率,來提升整體的並行性能。 單執行緒效率對於一般個人電腦更是重中之重,最起碼還有遊戲需求這個不得不關照的重點市場。 多線程維護開銷:我們上面的例子中比較理想的展示了SMT的效果,但也沒展現出SMT的一些代價。 一個物理核心如果引入多個線程,那麼是要協調、隔離多個線程的,這會引入額外的開銷。
amdsmt: 文章被以下專欄收錄
無論你使用A邏輯核心還是B邏輯核心都一樣,無論你綁定哪個邏輯核心,只要不同時用,那麼哪個邏輯核心都約等於是完整佔用的物理核心。 導致功耗增加:SMT整體的思路是略微犧牲單核性能/能耗比,換取大多數情況下的多線程時的單核性能和能耗比,那麼對應的加入SMT後單核的能耗比會有些許倒退。 由於引入SMT會導致核心設計更加複雜,靜態功耗、漏電會更難控制,這對於移動設備是致命的。 這也是爲什麼SMT在PC和服務器上大行其道這麼多年,手機上幾乎看不到的原因。
所以現代的CPU要提升單核性能,都會儘可能的把後端的執行端口數目變多,並且儘可能的在單位時間內讀入更多指令,從而促進指令間的併發。 現代的操作系統在調度上都考慮到了SMT的特性,比如你有8個核心16線程,那麼在多任務要求不是很大的情況下,操作系統會盡量避免讓一個核心同時執行兩個線程。 而當多任務要求很高的時候,操作系統讓一個核心跑多個線程,這時候雖然可能會發生衝突導致效率反向降低,但是更多的時候是增加效率,所以從期望上來說,是沒必要的。 但是,實際的任務裏,指令之間的依賴衝突關係是錯綜複雜的,不可能完美的將指令均勻的分組到每一個端口上。 就比如說我們上面這個例子裏,在併發執行後雖然時間縮短爲了4N個週期,但是實際上只有端口PA是一直在工作的,而PB PC amdsmt2025 PD都會在中途閒下來。 雖然現在超線程(Hyper-Threading)被大家廣泛接受,並把所有一個物理核心上有多個虛擬核心的技術都叫做超線程,但這其實是Intel的一個營銷名稱。
amdsmt: 文章被以下專欄收錄
去年AMD公佈產品時程圖,確認Zen3已完成開發,並將於2020年下半年採用臺積電用上EUV光刻技術的7nm+製程生產,然後網路上就冒出了Zen3將支援「SMT4」的傳言,講的白話一點就是單核心四執行緒,是現有Zen的2倍。 換言之,包2顆Chiplet的16核心的Ryzen X就是64執行緒,包8顆Chiplet的64核心的EPYC 7742則是駭人聽聞的256執行緒。 但其實沒有真假之別,一個核心的兩個邏輯核心情況下,兩個邏輯核心是完全對等的,沒有真假之分。
amdsmt: 文章被以下專欄收錄
在我們這個例子中,兩個任務併發後,只有PB端口空閒了1N個週期。 另外SMT技術虛擬出來的核心不一定是2,例如在IBM的Power,Oracle的SPARC,上就SMT8了,我們可以通過引入更多的SMT虛擬核心,來進一步壓榨利用率,只不過隨着SMT虛擬的核心增多,提升的比率是在下降的。 例如在我們上面這個例子中,在6N個週期內,PB只空出了2個週期,PC PD只空了1個週期,這時候再引入一個SMT核心,提升並不會很大了。 資源衝突:此外,在SMT核心中,因爲多個邏輯核心會共享很多資源,如果兩個線程的性質比較接近,總是在使用類似的資源,那麼它們會遭遇資源衝突。
所以最理想的情況下,如果一個核心有兩個線程,那麼兩個線程的總執行時間會更快,但是如果細分到每一個線程的執行時間,會比分別執行來的慢一些。 Intel的SMT技術是我們認知最廣泛的,早在2002年的Pentium 4上(應該是Pentium 4的E)和Xeon上,Intel就把SMT技術包裝成Hyper amdsmt2025 Threading,並推向市場了。 之後因爲架構切換,在酷睿誕生初期暫停過一段時間,而自從Core i7 960這個劃時代的酷睿後,就一直是Intel中高端CPU的標配了。
比如Intel的Atom線最開始在非亂序核心中是有HT的,後面因爲引入了亂序執行後,後端已經被填的很慢了,引入SMT的開銷會大於其收益,自Silvermont後就沒有SMT了。 比如說在我們桌面環境下,其實SMT2已經差不多夠用了(架構層面&任務層面),再多的SMT只會反向引入開銷。 我們先看最簡單的場景,CPU執行這些任務最直接的辦法就是一個指令一個指令的執行,假設這些指令的執行週期都是N,那麼執行完這些指令,就需要10N個週期。 那麼CPU的速度就只和CPU的頻率相關了,顯然這也不符合我們的認知,不同CPU在相同頻率下的性能顯然不一樣。 Hotfix 1.05還解決所謂memory_pool_budgets.csv修復,無法確認有效,事實上沒問題,該修復程式對分配給遊戲的大量記憶體沒影響,所有關於提高效能的評測都是不正確的。 如果問筆者,「真正的K10」Zen微架構到底有哪個地方最讓人感慨萬千,大概就是AMD落後Intel整整「15年(2002年二月 vs. 2017年三月)」的同時多執行緒(SMT)了。