日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Microarchitecture: HyperThreading(超线程)

發(fā)布時間:2024/3/13 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Microarchitecture: HyperThreading(超线程) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

線程并行

當(dāng)代的軟件趨向于運行在多線程模式,或者是并行處理。網(wǎng)絡(luò)包傳輸和web服務(wù)可以運行以多線程的方式運行以達(dá)到更高的性能。甚至是桌面應(yīng)用也開始增加并行性。Intel架構(gòu)師已經(jīng)開始嘗試?yán)肨LP( thread-level parallelism) 線程并行性,用來在較少的晶體管和功耗下就能達(dá)到更高的性能。

高端和終端的服務(wù)器市場,多核已經(jīng)被廣泛的使用,已獲得更高的性能。通過增加處理器,應(yīng)用可以通過在更多的處理器上運行更多的線程已達(dá)到更高的性能。這些線程可能屬于同一個應(yīng)用,也可以屬于不同的應(yīng)用。多核系統(tǒng)已經(jīng)被使用多年,高端程序員已經(jīng)可以熟練的利用多核來達(dá)到更高的性能。

近幾年,大家討論了一些提高TLP的技術(shù),也提出了產(chǎn)品。比如CMP(chip multiprocessing),兩個處理器被放到了一個die上。這兩個處理器都各自擁有完全的組件和架構(gòu)資源。處理器之間可以共享更大的片上cache。 CMP和傳統(tǒng)的多核系統(tǒng)基本無關(guān),你可以在傳統(tǒng)的多核系統(tǒng)上使用CMP芯片。然而,CMP chip 將會比單核chip面積上大的多,因此造價更高。并且這也沒有解決die的面積和功耗問題。

另一種方法就是通過線程切換,允許單核去執(zhí)行多線程。通過時間片切換,實現(xiàn)多線程切換。然而這將導(dǎo)致多余的執(zhí)行,但是可以有效地減少訪問memory導(dǎo)致的latency。如果多線程基于event切換,那么當(dāng)多線程遇到cache miss的情況時,可以有效地減少latency。這個方法對于大量cache miss 和執(zhí)行類似任務(wù)的線程很有效。但是時間片或者是基于event切換都沒有實現(xiàn)提高資源的利用效率,比如分支預(yù)測失敗和指令依賴。

最終,可以用過單核,不切換的方式實現(xiàn)多線程。線程可以同時執(zhí)行,以更高效的利用資源。這個方法可以最大資源的利用效率。在單位晶體管和功耗時,實現(xiàn)了性能的最大化。

Hyper-Threading 技術(shù)為intel 架構(gòu)提出了多線程的方法。這篇文章我們將要討論在Xeon 處理器家族中,Hyper-Threading技術(shù)的首次應(yīng)用。

Hyper-Threading技術(shù)架構(gòu)

Hyper-Threading 在單個物理處理器上實現(xiàn)了多個邏輯處理器。我們?yōu)槊恳粋€邏輯處理器都做了一份architecture 狀態(tài)的拷貝,邏輯處理器之間共享物理執(zhí)行資源。從軟件到架構(gòu)的角度,這意味著操作系統(tǒng)或者是用戶的程序可以像在多核處理器上調(diào)度多線程一樣,在單核上調(diào)度多線程。從微架構(gòu)的角度,這意味著邏輯處理器將會在共享的執(zhí)行資源上執(zhí)行不同線程的指令。

圖2展示了多核系統(tǒng)上,兩個沒有采用hyper-threading技術(shù)的物理核心。圖3展示了采用了hyper-threading技術(shù)的多核系統(tǒng)。通過在每個物理核心上實現(xiàn)兩份邏輯核心狀態(tài)的備份,系統(tǒng)就看起來有四個邏輯核心。

Hyper-Threading 技術(shù)首次實現(xiàn)在Xeon家族的雙處理器和多處理器服務(wù)器上。通過有效地利用更多的處理器資源,Xeon 處理器產(chǎn)品可以有效地提高性能。Hyper-Threading技術(shù)增加了小于5%的芯片面積和功耗,但是提供了更多的性能。

?

?

每一個邏輯處理器都維持一份完整的架構(gòu)狀態(tài)。架構(gòu)狀態(tài)包括寄存器(通用寄存器,控制寄存器和中斷控制寄存器以及狀態(tài)寄存器)。從軟件的角度看,一旦架構(gòu)狀態(tài)有多份,那么處理器可以虛擬的看成兩個處理器。存儲架構(gòu)狀態(tài)的寄存器的晶體管的數(shù)量是非常小的。邏輯處理器之間基本上共享了所有的資源,比如cache,執(zhí)行單元,分支預(yù)測,控制邏輯以及總線。

每個邏輯處理器都擁有自己的中斷控制器,因此中斷可以發(fā)送給指定的邏輯處理器,并且準(zhǔn)確的被相應(yīng)的處理器處理。

Hyper-threading 技術(shù)在Intel Xeon 產(chǎn)品中的首次應(yīng)用

在Xeon產(chǎn)品中實現(xiàn)Hyper-Threading技術(shù)時,預(yù)先設(shè)定了幾個目標(biāo)。其中一個是在實現(xiàn)Hyper-Threading的同時最小化die的面積。因為邏輯處理器共享了主要的微架構(gòu)資源,僅僅有少部分結(jié)構(gòu)被復(fù)制,因此實現(xiàn)該技術(shù)的面積占用了全die面積不到5%。

第二個目標(biāo)是當(dāng)一個邏輯處理器阻塞時,另一個邏輯處理器可以繼續(xù)工作。一個邏輯處理器可能會因為cache miss,處理branch預(yù)測失敗和等待依賴的指令執(zhí)行完畢而暫時的阻塞一段時間。獨立的前向工作流應(yīng)當(dāng)保證在兩個線程同時執(zhí)行時,沒有邏輯處理器可以占用全部的資源。這是通過劃分或者限制每個thread可以擁有的資源數(shù)量實現(xiàn)的。

第三個目標(biāo)是單線程軟件在hyper-threading處理器上運行時應(yīng)當(dāng)擁有和普通處理器一樣的速度。這意味著,如果單線程運行在處理器上,那么它將擁有全部的資源。從更高的角度看,微架構(gòu)的pipeline如figute4所示,其中緩沖隊列將pipeline分割。Queue要么被對半分,要么被復(fù)制,以保證每個線程都可以獨立的前行。

?

接下來的章節(jié)我們將會梳理pipeline,討論一下主要的功能,并且闡述資源的共享與復(fù)制。

Frond End 前端

流水線的前端負(fù)責(zé)將指令傳輸給后續(xù)的pipe 階段。如圖5-a所示,指令最初從Execution Trace Cache(TC)或者L1 指令cache中獲得。圖5-b表明只有TC miss的時候,cpu才從L2 Cache中取指,譯碼。靠近TC的是微指令ROM(Microcode ROM),存儲為較長,較復(fù)雜的IA-32指令存儲譯碼過的微碼。

?

Execution Trace Cache (TC)

TC存儲譯碼過的指令,也稱作微指令。大多數(shù)程序中的指令都是從TC中取出并執(zhí)行的。獨立的兩組指令PC用于追蹤各自的線程的執(zhí)行。兩個邏輯處理器可以每周期仲裁一次,以獲得TC的所有權(quán)。如果兩個邏輯處理器在同一時刻擁有權(quán)限,那么將會仲裁給一個,在下個周期仲裁給另一個。比如,如果兩個邏輯處理器都請求trace cache的權(quán)限,第一個周期為一個邏輯處理器取指令,那么下一個周期則為另一個處理器作用。如果一個邏輯處理器阻塞了,不能夠使用TC,那么另一個邏輯處理器將可以每個周期都全帶寬的訪問TC。

TC Entry被線程信息所標(biāo)記,并且可以按照需要動態(tài)的分配。TC結(jié)構(gòu)為8路組相連,使用LRU替換算法。共享的特性可以使一個邏輯處理器在需要的情況下,擁有比另一個更多的Entry。

Microcode ROM

當(dāng)遇到了復(fù)雜的指令時,TC發(fā)送一個微指令指針給Microcode ROM。Microcode ROM將會控制取微碼,然后將控制權(quán)返回給YC。兩個邏輯處理器擁有各自獨立的微指令指針。

邏輯處理器也共享Microcode ROM。訪問Microcode ROM的權(quán)限在兩個邏輯處理器之間切換。

ITLB 和 分支預(yù)測

如果TC miss,將會從L2 Cache中取指,解碼為微碼后,存入TC中。ITLB接收到來自TC對指令的請求,ITLB將下一條指令的地址(PC)翻譯為物理地址。請求被發(fā)送給L2 Cache,并得到來自L2 Cache的響應(yīng)。這些指令將會存放在streaming buffer,直到他們被譯碼。

在hyper-threading中,ITLB被復(fù)制了兩份。每個邏輯處理器有它自己的的ITLB,而且都有自己得一套指令指針,以追蹤程序的PC。取指邏輯負(fù)責(zé)向L2 Cache發(fā)送請求,它會基于先來先處理的準(zhǔn)則,對取值邏輯進(jìn)行仲裁。一般會為兩個邏輯處理器至少處理一個請求。因此,兩個邏輯處理器可以同時有pending的取指。

每個邏輯處理器都有一套64-byte的stream buffer,為指令解碼階段緩存指令。ITLB和streaming buffer都是較小的結(jié)構(gòu),因此這個結(jié)構(gòu)的復(fù)制對die的面積占用較小。

分支預(yù)測結(jié)構(gòu)可以是復(fù)制的或者共享的。用于預(yù)測返回指令地址的Return stack buffer也被復(fù)制了,因為這是一個非常小的部件,并且call/return pair的預(yù)測根據(jù)獨立的線程進(jìn)行預(yù)測會更加準(zhǔn)確。BHB(分支歷史緩存)用于在global history array中為每個邏輯處理器查找全局歷史。然而,因為global history array很大,因此這是一個共享結(jié)構(gòu),其內(nèi)部項會被邏輯處理器ID號打上tag。

IA-32 指令譯碼

IA-32 指令是譯碼起來是非常笨重的,因為指令是變長的,并且有不同的選擇。譯碼將會花費大量的邏輯和臨時狀態(tài)。幸運的是,TC 會命中大部分的uop,因此我們只需要在TC miss的時候譯碼。

譯碼邏輯從stream buffer中取出指令,將其譯碼為uop。當(dāng)兩個線程同時譯碼時,stream buffer會在線程之間切換,因此線程會共享譯碼邏輯。譯碼邏輯需要為兩個線程保存中間狀態(tài),即使它只為一個邏輯寄存器譯碼。總體上說,在切換到另一個邏輯處理器之前,會有另一個邏輯處理器的幾條指令被譯碼。我們會基于die的大小以及復(fù)雜性來確定邏輯處理器切換的顆粒度。當(dāng)然,如果只有一個邏輯處理器需要譯碼,那么它會占據(jù)全部的譯碼帶寬。譯碼指令將會被寫入TC,并forward到uop隊列中。

Uop隊列

Uop來自以下三個來源:

  • Trace cache
  • Microcode ROM
  • 譯碼邏輯
  • Uop會被放置到uop queue中。這個queue將front-end即前端和亂序執(zhí)行執(zhí)行單元解耦。Uop queue根據(jù)邏輯處理器分為兩半。切換使得邏輯處理器可以有獨立的forward邏輯,不會因為另一個邏輯處理器的TC miss或者是執(zhí)行單元的暫停而阻塞。

    亂序執(zhí)行單元

    亂序執(zhí)行單元由分配、寄存器重命名、調(diào)度和執(zhí)行單元組成,如圖6所示。這部分亂序的執(zhí)行指令。一旦他們的輸入準(zhǔn)備好,就立刻執(zhí)行,而不考慮原本的程序中的指令順序。

    ?

    分配

    亂序執(zhí)行單元有緩沖buffer用于執(zhí)行重排序,跟蹤和順序操作。分配器從uop queue中取出uop,然后分配執(zhí)行uop所需要的buffer。緩沖buffer包括 126項重排序buffer, 128個整數(shù)和128個浮點物理寄存器,48個load 和 24個store 項buffer。我們拆分了其中的幾個重要buffer,所以每個邏輯處理器可以最多使用其中的一半數(shù)目。比如,邏輯處理器最多可以使用63個re-order buffer,24個load buffer和12個store buffer。

    如果兩個邏輯處理器在uop queue都有uop要處理,分配器將會每個周期都為邏輯處理器切換。如果邏輯處理器已經(jīng)使用了它所分配的資源的上限,那么分配器將會向這個邏輯處理器發(fā)送一個暫停信號,而后為另一個邏輯處理器分配資源。如果uop queue中只包含一個邏輯處理器的uops,那么分配器將會每個周期都為這個邏輯處理器繼續(xù)分配資源,以優(yōu)化分配帶寬,盡管還需要滿足資源上限條件。

    通過限制關(guān)鍵buffer的資源占用限制,可以公平的對待每個邏輯處理器并且避免死鎖。

    寄存器重命名

    寄存器重命名將IA-32寄存器命名為物理寄存器。這將會使8個通用IA-32整數(shù)寄存器變?yōu)閯討B(tài)可調(diào)節(jié)的128個物理寄存器。重命名邏輯通過寄存器重命名表格(RAT)以追蹤最新的架構(gòu)寄存器。這樣新來的指令就可以明確其操作數(shù)架構(gòu)寄存器對應(yīng)的物理寄存器。

    因為邏輯處理器需要維護(hù)并追蹤自己的完整的架構(gòu)狀態(tài),因此我們?yōu)槊恳粋€邏輯處理器都設(shè)置了一個RAT。重命名過程與上述的分配邏輯并行執(zhí)行。因此分配器和寄存器重命名會同時處理相同的uops。

    一旦uops已經(jīng)完成了分配和寄存器重命名,他們就會被分配到兩組queue中,一組作用域寄存器操作(load and store),另一組負(fù)責(zé)所有的其他操作。這兩組queue分別叫做存儲指令隊列和通用指令隊列。這兩組隊列也被切分,每個邏輯寄存器最多使用一半。

    指令調(diào)度

    指令調(diào)度是亂序執(zhí)行的關(guān)鍵所在。五個uop調(diào)度器用于在不同的執(zhí)行單元之間調(diào)度不同類型的指令。每周期可以最多派發(fā)6條uops。如果uops的輸入操作數(shù)準(zhǔn)備好了,并且執(zhí)行單元已經(jīng)空出,可以使用,那么調(diào)度器將會選擇哪個uops可以開始執(zhí)行。

    存儲指令隊列和通用指令隊列會盡快的將uops發(fā)送到五個調(diào)度隊列。如果需要的話,會每周期為邏輯處理器切換操作。

    每個調(diào)度器都有自己的8項到12項的調(diào)度隊列。調(diào)度器從調(diào)度隊列中選擇uops,發(fā)送給執(zhí)行單元。調(diào)度器不會基于uops究竟屬于哪一個邏輯處理器來選擇uops。也就是說,調(diào)度器無視邏輯處理器。Uops可以僅僅根據(jù)輸入操作數(shù)和執(zhí)行單元而被選擇。舉個例子,調(diào)度器可以同時分配兩個邏輯處理器額各自兩條uops。為了避免死鎖,并且保證公平,我們隊邏輯處理器在調(diào)度隊列中的數(shù)目上限進(jìn)行了設(shè)置。這個上限值取決于調(diào)度隊列的大小。

    執(zhí)行單元

    執(zhí)行單元和存儲層次也不會區(qū)分不同的邏輯處理器。因為源寄存器和目標(biāo)寄存器已經(jīng)在同一個物理寄存器池中被重命名,因此uops僅通過讀取物理寄存器文件可以知道其目標(biāo)寄存器對應(yīng)的物理寄存器。通過比較物理寄存器的編號就可以將操作結(jié)果forward給其他的uops,而不需要明確邏輯寄存器號。在執(zhí)行之后,uops被存放到重排序緩沖中。重排序緩沖將執(zhí)行階段和retire階段解耦。重排序緩沖為每個邏輯處理器各分一半。

    退休單元

    Uop退休邏輯將會按照程序的順序改變架構(gòu)狀態(tài)。退休邏輯會追蹤兩個邏輯處理器中的待退休指令。然后通過在兩個邏輯處理器之間切換,并按照程序的順序提交、改變架構(gòu)狀態(tài)。退休邏輯會為一個邏輯處理器退休uop,然后切換到另一個。如果一個邏輯處理器一直沒有準(zhǔn)備好退休uop,那么退休單元會全力退休另一個邏輯處理器。

    一旦store退休,store的數(shù)據(jù)需要被寫入第一級data cache。選擇邏輯會在邏輯處理器之間切換,以將數(shù)據(jù)存儲到cache中。

    Memory 子系統(tǒng)

    Memory子系統(tǒng)包括DTLB,L1 data cache , L2 data cache 和L3 data Cache(L3 cache只在Xeon處理器中有)。對memory子系統(tǒng)的訪問也不考慮邏輯處理。存儲子系統(tǒng)只是來了請求,就處理。

    DTLB

    DTLB將邏輯地址翻譯為物理地址。它是64路全相連。每一項可以映射4K或者4M page大小。盡管DTLB是兩個邏輯處理器中共享的結(jié)構(gòu),但是每一項都會包含一個處理器ID。每個邏輯處理器都有自己的一個保留寄存器以保證公平性和在DTLB miss時,進(jìn)行forward。

    L1 Data Cache, L2 Cache,L3 Cache

    L1 data cache是4路組相連,每個cacheline 64 byte。它是寫直達(dá)cache,這意味著寫操作也會直接寫入L2 Cache。L1 Cache 是虛擬地址索引,物理地址做tag。

    L2 和 L3 Cache是8路組相連,每個cacheline 128 byte。L2 和L3 cache是物理地址索引。邏輯處理器之間共享cache。

    因為邏輯處理器共享cache,因此可能有潛在的cache沖突,這可能會導(dǎo)致更低的性能。但是也可能會存在共享cache中的數(shù)據(jù)。比如,一個邏輯處理器可能預(yù)取另一個處理器需要的指令或者數(shù)據(jù)。這在服務(wù)器應(yīng)用程序中很常見。在生產(chǎn)者-消費者模型中,一個邏輯處理器可能產(chǎn)生另一個邏輯處理器需要使用的數(shù)據(jù)。在這類case中,可以挖掘潛在的更高的性能。

    BUS

    如果cache miss,那么邏輯處理器將會訪問bus logic。Bus logic包括本地的APIC中斷控制器,也包括片外的系統(tǒng)存儲和I/O 空間。總線邏輯也處理來自外部總線對cacheable 地址的snoop請求和本地APIC輸入的終端。

    從服務(wù)的角度來看,邏輯處理器的請求是根據(jù)先來先處理的原則。Queue和Buffer空間是共享的。我們不會給其中的一個邏輯處理器優(yōu)先權(quán)限。

    我們也會區(qū)分來自不同邏輯處理器的請求。對本地APIC的請求和中斷資源是唯一的,并區(qū)分不同的邏輯處理器。總線邏輯也會基于邏輯處理器來處理barrier fence(屏障操作)和memory order操作。

    對于debug功能,邏輯處理器的ID號被顯示的發(fā)送給處理器的外部總線。其他的總線操作,如cache line evict和預(yù)取操作,會根據(jù)產(chǎn)生transaction的請求來獲取邏輯處理器的ID號。

    單任務(wù)和多任務(wù)模式

    當(dāng)一個軟件線程要執(zhí)行時,為了優(yōu)化性能,提供了兩種模型多任務(wù)模型(multi-task MT)和單任務(wù)模型(ST)。在MT模式中,有兩個工作的邏輯處理器,其中的一些資源被如前所述的方式切分。ST模式分為兩種,single-task 邏輯處理器0(ST0)和single-task 邏輯處理器1(ST1)。在ST-0或者ST-1模式中,只有一個邏輯處理器處于工作狀態(tài)。在MT模式中被切分的資源被單個處理器暢享。IA-32 Intel 架構(gòu)有一個指令叫做HALT,將會停止處理器的執(zhí)行,然后使得處理器進(jìn)入低功耗狀態(tài)。HALT是一條特權(quán)指令,這意味著只有操作系統(tǒng)或者其他的ring-0級別的程序可以執(zhí)行這條指令。用戶級別的程序是不可以執(zhí)行HALT執(zhí)行的。

    如果處理器采用了Hyper-Threading技術(shù),執(zhí)行HALT指令,處理器將會從MT模式切換到ST-0或者ST-1模式。比如,如果邏輯處理器0執(zhí)行HALT,那么只有邏輯處理器1處于工作狀態(tài)。那么物理寄存器將會處于ST-1模式。先前被切分的資源將會被邏輯處理器1全部助戰(zhàn)。如果邏輯處理器1也執(zhí)行了HALT操作,那么物理處理器可以進(jìn)入低功耗狀態(tài)。

    在ST0或者ST1模式中,中斷發(fā)送給已經(jīng)HALT的處理器將會導(dǎo)致處理器進(jìn)入MT模式,操作系統(tǒng)負(fù)責(zé)管理MT模式的切換。

    圖7總結(jié)了上述的討論。在ST0或者ST1模式資源被完全分配給單個邏輯處理器。在MT模式,資源在兩個邏輯處理器間共享。

    操作系統(tǒng)和應(yīng)用程序

    使用了Hyper-Threading 技術(shù)的處理器在操作系統(tǒng)和應(yīng)用程序看來,處理器核心數(shù)翻倍。操作系統(tǒng)將會當(dāng)把邏輯處理器當(dāng)做物理處理器進(jìn)行管理,調(diào)度程序和線程。然而,為了達(dá)到最高的性能,操作系統(tǒng)會實現(xiàn)兩種優(yōu)化。

    第一種是如果僅有一個邏輯處理器active使用HALT指令。使用HALT將會使處理器進(jìn)入ST0或者ST1模式。不使用這個優(yōu)化的操作系統(tǒng)將會在一個邏輯處理器idle,另一個邏輯處理器active的處理器上工作。并且idle的邏輯處理器會持續(xù)的判斷是否有人物要執(zhí)行,這個叫做idle loop。Idle loop將消耗執(zhí)行資源,如果這些執(zhí)行資源釋放,那么性能將會更高。

    另一種優(yōu)化就是將軟件線程調(diào)度到邏輯處理器上。總體上來說,為了更好的性能,操作系統(tǒng)將會在調(diào)度線程到相同的物理處理器之前,調(diào)度線程到不同的物理處理器上。這個優(yōu)化將會使得線程盡可能的執(zhí)行在不同的物理核心上。

    性能提升

    在單核處理器和多核處理器上,Hyper-threading技術(shù)可以提升21%的性能。

    ?

    在網(wǎng)站服務(wù)器的workload中,可以獲得16%到28%的性能提升。

    ?

    筆記:

    Sub System

    IP Block

    Share

    Duplicate

    Partion

    前端

    Trace Cache

    ?

    ?

    Microcode ROM

    ?

    ?

    ITLB

    ?

    ?

    分支預(yù)測

    ?

    ?

    Return stack

    ?

    ?

    譯碼

    ?

    ?

    Uop 隊列

    ?

    ?

    亂序執(zhí)行

    分配

    ?

    ?

    寄存器重命名

    ?

    ?

    指令調(diào)度

    ?

    ?

    執(zhí)行單元

    ?

    ?

    重排序緩沖區(qū)

    ?

    ?

    存儲系統(tǒng)

    DTLB

    ?

    ?

    Cache

    ?

    ?

    歡迎關(guān)注我的公眾號《處理器與AI芯片》
    ?

    總結(jié)

    以上是生活随笔為你收集整理的Microarchitecture: HyperThreading(超线程)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。