最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

自編教材分享:第七章—指令級并行(二)

2023-10-23 15:07 作者:先進編譯實驗室  | 我要投稿


指令級并行

程序的執(zhí)行由一系列指令操作組成,為了節(jié)省程序的執(zhí)行時間,發(fā)射單元可以一次發(fā)射多條指令,這就是指令的多發(fā)射并行。多發(fā)射處理器支持指令級并行,每個周期可以發(fā)射多條指令,一般為2-4條,這樣可以使處理器每個時鐘周期的指令數(shù)倍增,從而提高處理器的執(zhí)行速度。多發(fā)射處理器的每個發(fā)射部件上同樣可以進行指令流水,如下圖。

指令多發(fā)射的方法有超標量(Superscalar)和超長指令字(Very Long Instruction Word,VLIW)兩種,它們的不同之處在于并行發(fā)射指令的指定時間不一樣。

超長指令字在編譯階段由編譯器指定并行發(fā)射的指令,而超標量在執(zhí)行階段由處理器指定并行發(fā)射的指令,因此超標量的硬件復(fù)雜性更高,而超長指令字硬件復(fù)雜性較低。超標量通常會配合亂序執(zhí)行來提高并行性,下面介紹亂序執(zhí)行是如何提升超標量處理器性能的。

采用超標量技術(shù)的典型代表為X86處理器,采用超長指令字的典型代表為ARM和德州儀器TI。

超標量

如果程序中的所有指令都按照既定的順序執(zhí)行,那么一旦相鄰多條指令不能并行執(zhí)行,處理器的多發(fā)射部件就處于閑置狀態(tài),造成硬件資源的浪費。采用亂序執(zhí)行可以很好的解決該問題,亂序執(zhí)行就是程序不按照既定的指令順序執(zhí)行,在指令間不存在相關(guān)性的前提下通過調(diào)整指令的執(zhí)行順序以提升程序指令的并行性,是提高指令級并行的一種重要方式。

以下面指令段為例說明亂序發(fā)射:

add ?R3, R2, R1 ??#指令1

mul ?R1, R0, R4 ??#指令2

mul ?R6, R5, R7 ??#指令3

如果按照順序發(fā)射,指令2與指令1之間存在有R1引入的數(shù)據(jù)相關(guān)性,因此指令1與指令2不能并行。指令2和指令3同時使用乘法部件,此處假設(shè)該處理器上僅有一套乘法部件,因此指令2和指令3因為乘法部件資源數(shù)量的限制也不能并行。使用超標量結(jié)構(gòu)是需要代價的,處理器內(nèi)部將使用一定的資源用于將串行的指令序列轉(zhuǎn)換成可以并行的指令序列,這會增加處理器的功耗和面積,而超長指令字則不需消耗過多的處理器資源。

亂序執(zhí)行調(diào)整執(zhí)行順序后代碼段為:

add ?R3, R2, R1 ??#指令1

mul ?R6, R5, R7 ??#指令3

mul ?R1, R0, R4 ??#指令2

超長指令字

超長指令字處理器的每一條超長指令裝有多條常規(guī)的指令,并于同一時刻被發(fā)射出去。超長指令字結(jié)構(gòu)廣泛應(yīng)用于(Reduced Instruction Set Computer,RISC)精簡指令集的處理器上,典型代表為(Digital Signal Process,DSP)數(shù)字信號處理器。以德州儀器TI的C6000系列數(shù)字信號處理器為例。圖中處理器有8個功能部件,理論上每個時鐘周期處理器可以同時并行執(zhí)行8條指令,這8條指令被看成是一個包。

超長指令字處理器通常利用編譯器指定并行的指令,也可以由優(yōu)化人員在匯編中指定并行的指令,如下面的匯編代碼所示。指令2、指令3、指令4前面的“‖”,表示這條指令和上條指令在同一個周期執(zhí)行,如果沒有“‖”,則表示這條指令在下一個周期執(zhí)行。超長指令字的并行指令執(zhí)行由編譯器來完成,因此編譯器的優(yōu)化能力直接影響到程序在超長指令字處理器上的性能。為了在超長指令字機器上獲得更好的程序性能,優(yōu)化人員可以通過修改匯編代碼,指定每個多發(fā)射的超長指令。

add R1, R2, R3 ??#指令1

‖ sub R1, R2, R6 ?#指令2

‖ mul R3, R4, R5 ?#指令3

‖ and R8, R6, R7 ?#指令4

以德州儀器TI的C6000處理器為例進行說明,C6000處理器包含如圖7.7所示的四種類型功能部件,分別標記為S、L、D、M。S部件主要執(zhí)行算術(shù)運算、數(shù)據(jù)打包解包以及比較運算等,L部件主要執(zhí)行算術(shù)運算、打包解包運算等,D部件主要執(zhí)行訪存和邏輯運算,M部件主要執(zhí)行乘法運算和點積運算,每類部件又對應(yīng)兩個通道,理想情況下每個時鐘周期可以將8個部件同時利用起來,實現(xiàn)8條指令并行發(fā)射。

如下面的指令片段,充分利用了上述八個功能部件,可以有效的提升指令執(zhí)行效率。在一個時鐘周期內(nèi)將硬件提供的各種功能部件使用起來,就可以充分發(fā)揮處理器的指令級并行優(yōu)勢。

ADD ?.S1 ?A1, A2, A1

‖ ADD ?.S2 ?A4, A5, A4

‖ MUL ?.M1 ?B1, B2, B1

‖ MUL ?.M2 ?B4, B5, B4

‖ SUB ?.L1 ?A3, A6, A3

‖ SUB ?.L2 ?B3, B6, A3

‖ LDDW .D1T1 *A7++, A9:A8

‖ LDDW .D2T2 *B7++, B9:B8

實際程序中受限于指令間的相關(guān)性以及指令的數(shù)量不足,往往不能充分發(fā)揮處理器提供的指令級并行優(yōu)勢。此時可以利用循環(huán)展開進行優(yōu)化,發(fā)掘程序指令級并行性。以下面這段矩陣乘為例。該程序循環(huán)內(nèi)的指令條數(shù)太少,不足以填充滿C6000處理器的8個功能部件,難以充分發(fā)揮處理器提供的指令級并行的優(yōu)勢。

循環(huán)展開優(yōu)化后,循環(huán)體內(nèi)指令的條數(shù)足夠多,編譯器就可以在這些指令間進行調(diào)度,選擇相對較好的并行指令發(fā)射組合,因此能夠提升程序的性能。以德州儀器TI6678計算平臺上矩陣乘匯編為例。每個連續(xù)帶有“||”的語句的前面都有一條語句沒有“||”的語句,這些語句為一組是并行發(fā)射執(zhí)行的關(guān)系,所以共有三組并行發(fā)射的語句。由此可以看出調(diào)度器優(yōu)化之后指令并行性更好,且優(yōu)化后的指令沒有過多的跳轉(zhuǎn)語句,如BRANCHCC語句。除了編譯器可做優(yōu)化外,優(yōu)化人員還可以在匯編層面進一步指定并行發(fā)射的指令組合。

原始代碼:

指令調(diào)度優(yōu)化后:


自編教材分享:第七章—指令級并行(二)的評論 (共 條)

分享到微博請遵守國家法律
喜德县| 铁岭县| 卓资县| 大港区| 宁强县| 巧家县| 吴堡县| 漳平市| 桐庐县| 马尔康县| 琼结县| 武宣县| 固安县| 永善县| 阿拉善盟| 汝州市| 德令哈市| 安岳县| 雅安市| 通州区| 准格尔旗| 黄冈市| 南宁市| 蓝田县| 类乌齐县| 海原县| 年辖:市辖区| 沁水县| 德江县| 芦溪县| 巍山| 任丘市| 乐昌市| 林周县| 繁峙县| 武安市| 湖州市| 宜兰县| 龙胜| 景宁| 陆河县|