超線(xiàn)程
在2021年,應(yīng)該已經(jīng)沒(méi)有人會(huì)問(wèn)出為什么我購(gòu)買(mǎi)了一顆四核心的i3-10100,卻能在任務(wù)管理器看到八個(gè)框框這種問(wèn)題了,隨著牙膏廠在初代酷睿I系列開(kāi)始重新加入超線(xiàn)程技術(shù),超線(xiàn)程已經(jīng)不知不覺(jué)在消費(fèi)級(jí)市場(chǎng)存在了十多年,并已經(jīng)成為大家見(jiàn)怪不怪的功能。眾所周知八個(gè)框框就是比四個(gè)框框性能高(FX系列除外)。(首先,牙膏廠的超線(xiàn)程(HT,Hyper-Threading)其實(shí)更應(yīng)該叫做同步多線(xiàn)程(SMT,Simultaneous Multi-Threading),至少AMD也是這么叫的,只不過(guò)大家超線(xiàn)程喊習(xí)慣了,包括我)

超線(xiàn)程技術(shù)在2002年就被牙膏廠安排進(jìn)了奔騰4 HT中,據(jù)我所知這是消費(fèi)級(jí)桌面平臺(tái)第一款超線(xiàn)程處理器。只不過(guò)由于當(dāng)時(shí)的超線(xiàn)程技術(shù)不成熟以及缺乏軟件和操作系統(tǒng)的優(yōu)化支持,這顆奔騰4的超線(xiàn)程大部分情況下是負(fù)提升,因此intel之后雪藏了這個(gè)技術(shù),直到2008年推出全新的酷睿i系列,超線(xiàn)程技術(shù)重回消費(fèi)級(jí)市場(chǎng),并且一直沿用至今。如今的第10、11代酷睿已經(jīng)下至i3上到i5全系支持超線(xiàn)程,在2017年奔騰G4560的推出也標(biāo)志著奔騰系列正式支持超線(xiàn)程,似乎只剩下賽揚(yáng)時(shí)至今日依然不支持超線(xiàn)程了(笑)。而隔壁AMD在翻身之后的初代Ryzen開(kāi)始支持超線(xiàn)程,ZEN3則實(shí)現(xiàn)了全系超線(xiàn)程支持。
超線(xiàn)程最明顯的特征,就是能讓任務(wù)管理器看到雙倍于核心數(shù)量的框框(當(dāng)然IBM甚至能1核當(dāng)8核用,這里就不提了)比如四核心的i3-10100在任務(wù)管理器里可以看到八個(gè)核心。系統(tǒng)或者軟件會(huì)認(rèn)為i3-10100這個(gè)處理器就是八個(gè)核心,并且也會(huì)按照最多八個(gè)核心的“事實(shí)”去調(diào)度應(yīng)用程序的運(yùn)行。
超線(xiàn)程技術(shù)的基本原理
這里不得不提到兩個(gè)概念:進(jìn)程與線(xiàn)程。我就不帶大伙復(fù)習(xí)操作系統(tǒng)了,不然這可不是一個(gè)圖文就能講明白的,簡(jiǎn)單來(lái)說(shuō),你們可以把進(jìn)程看做是一個(gè)正在運(yùn)行的程序,而線(xiàn)程是這個(gè)程序執(zhí)行的最小單元。一個(gè)程序有許許多多的功能,那么這些功能可以交給多個(gè)線(xiàn)程分別執(zhí)行,因此一個(gè)進(jìn)程可以包含一個(gè)或者多個(gè)線(xiàn)程。
講一個(gè)常見(jiàn)的例子:高速公路收費(fèi)站,有車(chē)道+收費(fèi)站+收費(fèi)站的工作人員。一輛輛汽車(chē)(指令隊(duì)列)排隊(duì)進(jìn)入收費(fèi)站(前端發(fā)射單元),收費(fèi)站需要核驗(yàn)汽車(chē)信息和收費(fèi)(指令解碼),并指定汽車(chē)去前方哪一條車(chē)道(執(zhí)行單元:ALU運(yùn)算器、FPU運(yùn)算器、Cache……)

而CPU最小的執(zhí)行粒度就是線(xiàn)程,一般來(lái)講一個(gè)物理核心同一時(shí)刻只能執(zhí)行一個(gè)線(xiàn)程,也就是說(shuō),這個(gè)高速公路只能同時(shí)檢查收費(fèi)一輛車(chē),并且指定一次車(chē)道,而當(dāng)?shù)诙v車(chē)進(jìn)來(lái)時(shí),需要等待第一輛車(chē)跑出這段車(chē)道,再放行第二輛車(chē)。這時(shí)候我們可以注意到,一輛車(chē)只會(huì)占用一個(gè)車(chē)道,而其他車(chē)道都是空著的,也就是說(shuō)車(chē)道資源被大大浪費(fèi)了。
這時(shí)候,領(lǐng)導(dǎo)一拍大腿:收費(fèi)站現(xiàn)在只有一個(gè),那我們?cè)谂赃呍俳ㄒ粋€(gè)!于是收費(fèi)站變成了兩個(gè),當(dāng)?shù)谝粋€(gè)收費(fèi)站放行了車(chē)輛1到車(chē)道1之后,第二個(gè)收費(fèi)站發(fā)現(xiàn)車(chē)輛2需要進(jìn)去車(chē)道3,那么車(chē)1和車(chē)2就能在互不干擾的情況下在車(chē)道同時(shí)跑了。而這大致就是超線(xiàn)程技術(shù)的實(shí)現(xiàn)方法。

好了,你已經(jīng)明白了超線(xiàn)程技術(shù)的基本原理,現(xiàn)在我們來(lái)動(dòng)手設(shè)計(jì)一顆SIMD五級(jí)流水線(xiàn)RISC處理器吧!
通過(guò)超線(xiàn)程技術(shù),處理器可以利用其他指令執(zhí)行時(shí)閑置的執(zhí)行單元丟入其他指令執(zhí)行,盡可能的充分利用一個(gè)物理核心的全部部分。原本CPU在執(zhí)行一個(gè)線(xiàn)程時(shí)用不到的單元是閑置的,通過(guò)超線(xiàn)程技術(shù)可以盡量榨干CPU的每一寸晶體管。英特爾曾經(jīng)說(shuō)超線(xiàn)程技術(shù)只需要增加約5%的核心面積,便可以增加約20%的多線(xiàn)程性能。視操作系統(tǒng)的調(diào)度和應(yīng)用程序的優(yōu)化,這個(gè)性能的提升幅度也不全相同,但終歸不會(huì)再出現(xiàn)早年奔騰4HT那樣開(kāi)啟超線(xiàn)程負(fù)提升的情況了。并且隨著超線(xiàn)程技術(shù)的進(jìn)步和應(yīng)用程序多線(xiàn)程優(yōu)化水平的進(jìn)步,超線(xiàn)程無(wú)論是在游戲還是生產(chǎn)力中都有了很明顯的性能表現(xiàn)提升。
農(nóng)企5600X
以農(nóng)企5600X為例,這是一顆6核心12線(xiàn)程的處理器 我們分別在BIOS中關(guān)閉和開(kāi)啟SMT Mode,并運(yùn)行象棋跑分和cpu-z跑分,結(jié)果如下:

關(guān)閉超線(xiàn)程

打開(kāi)超線(xiàn)程
可以看到超線(xiàn)程開(kāi)啟帶來(lái)的性能提升約在30%左右,已經(jīng)完全可以看做多出來(lái)憑空兩顆物理核心了(10600K VS 9700K)
牙膏廠10100F
至于牙膏廠這邊,我拿10100F試了一下cpu-z
,多線(xiàn)程提升似乎比AMD少那么一點(diǎn)點(diǎn)


當(dāng)然,一個(gè)核心“虛擬”成兩個(gè)核心,也會(huì)對(duì)多核調(diào)度水平有更高的要求。分別放入同一個(gè)物理核心的兩個(gè)虛擬核心和放入兩個(gè)不同物理核心執(zhí)行,其性能差距十分巨大。上面已經(jīng)通過(guò)跑分證明多線(xiàn)程也就帶來(lái)30%左右的提升,并不是一個(gè)核心可以完全當(dāng)作兩個(gè)核心用。以下是通過(guò)任務(wù)管理器限制程序處理器在一顆核心的兩個(gè)線(xiàn)程運(yùn)行和兩個(gè)核心上運(yùn)行得到的跑分,可以看到被限制在同一個(gè)物理核心上,性能只有真正的雙核運(yùn)行的70%的性能。


而當(dāng)通過(guò)限制程序運(yùn)行在3C6T和6C6T上時(shí),同樣會(huì)得到相似的數(shù)據(jù),我已經(jīng)拿牙膏廠U和農(nóng)企U都試過(guò),在任務(wù)管理器里同一個(gè)物理核心的兩個(gè)邏輯線(xiàn)程是相鄰的,比如CPU0和CPU1是第一顆物理核心的兩個(gè)邏輯線(xiàn)程,CPU2和CPU3是第二顆物理核心的兩個(gè)邏輯線(xiàn)程,以此類(lèi)推。通過(guò)在任務(wù)管理器詳細(xì)信息的進(jìn)程右鍵菜單設(shè)置相關(guān)性,限制進(jìn)程的核心分配并進(jìn)行測(cè)試,可以復(fù)現(xiàn)我的結(jié)論。
當(dāng)然啦,以上測(cè)試只是一時(shí)興起,隨手測(cè)試,沒(méi)有嚴(yán)格控制變量,后臺(tái)還開(kāi)掛個(gè)QQ,任務(wù)管理器的圖表顯示也會(huì)占用一部分處理器資源,所以,大家圖一樂(lè)就好。
簡(jiǎn)單回答一些可能的疑問(wèn)
Q1:這么牛逼的技術(shù),為什么沒(méi)有完全普及呢?
A1:超線(xiàn)程技術(shù)相對(duì)更適合一些流水線(xiàn)冗長(zhǎng)復(fù)雜、執(zhí)行單元眾多的架構(gòu),用于提高晶體管利用率,一些比較簡(jiǎn)單的架構(gòu)就算加入超線(xiàn)程技術(shù),也沒(méi)啥卵用,還不如省下來(lái)空間多做一個(gè)核心。
Q2:為什么手機(jī)處理器沒(méi)有做超線(xiàn)程?
A2:其實(shí)手機(jī)處理器有,以前聯(lián)想出過(guò),搭載的Atom Z2580 2C4T處理器(但是反響似乎一般)。順帶一提ARM也有cortex-A65AE,支持超線(xiàn)程,過(guò)不是做給手機(jī)的。我懷疑是因?yàn)榘撕诵穆?tīng)著比四核心八線(xiàn)程強(qiáng)所以沒(méi)搞。另外相比于超線(xiàn)程,移動(dòng)終端為了閑置續(xù)航和功耗,用的是big.LITTLE大小核解決多任務(wù)并行,多余的任務(wù)直接丟后臺(tái)讓小核跑,比一個(gè)大核心分出來(lái)倆超線(xiàn)程要省電。
Q3:超線(xiàn)程會(huì)不會(huì)損失單核性能?
A3:理論上,會(huì)的,當(dāng)一個(gè)物理核心的一個(gè)線(xiàn)程運(yùn)行時(shí),另一個(gè)線(xiàn)程如果需要執(zhí)行新任務(wù),一旦發(fā)生資源占用沖突,勢(shì)必會(huì)影響速度。在高負(fù)載時(shí)這個(gè)現(xiàn)象尤為明顯,我試了5600X單核象棋4300分,而單核雙線(xiàn)程象棋6000分,相當(dāng)于單線(xiàn)程性能降低到了3000分,當(dāng)然以上只是極端情況,對(duì)比我前面的CPU-Z測(cè)試截圖,低負(fù)載下超線(xiàn)程開(kāi)啟與關(guān)閉對(duì)于單核性能的影響有限,5600X完全可以看做測(cè)試誤差,10100F影響大一點(diǎn)約莫5%,但是相比超線(xiàn)程帶來(lái)的接近30%的性能提升,這點(diǎn)損失不算什么。
本文由網(wǎng)上采集發(fā)布,不代表我們立場(chǎng),轉(zhuǎn)載聯(lián)系作者并注明出處:http://m.zltfw.cn/shbk/38567.html