瓦解的多嵌套循環(huán)的向量化的制作方法
【技術(shù)領域】
[0001] 本公開通常涉及計算平臺,更具體地說,本公開涉及循環(huán)瓦解(loop collapsing) 方法、裝置和指令以及循環(huán)向量化方法。
【背景技術(shù)】
[0002] 例如,在高性能計算(HPC)編碼中,例如二到五次的嵌套循環(huán)是非常常見的。循環(huán) 瓦解通過減小分支的數(shù)目并因而減小分支錯誤預測的概率來改善性能。瓦解多嵌套循環(huán)的 傳統(tǒng)方式是創(chuàng)建沒有嵌套的、由在瓦解的循環(huán)的每一次迭代上遞增的新循環(huán)計數(shù)器控制的 循環(huán)。新循環(huán)計數(shù)器總共遞增次,其中t Cj是對ij進行循環(huán)的循環(huán)計 數(shù)。然而,關于單個循環(huán)計數(shù)器的信息需要被保存用于循環(huán)內(nèi)部的計算以及用作訪問多維 陣列的索引。
[0003] 并且,在一些情況下,盡管循環(huán)瓦解可以改善性能,但是當前的編譯器很少能夠有 效地瓦解循環(huán)。阻止瓦解的一些最常見的原因包括:在η維陣列A中的非步長(stride)存 儲器存?。ㄔ谕呓庵螅淮嬖趯ψ泳S陣列B(m維,m<n)的訪問;以及存在對單獨的循環(huán) 計數(shù)器(ij)的計算。
【附圖說明】
[0004] 圖1是根據(jù)本發(fā)明實施例的處理器管線的框圖。
[0005] 圖2A和2B是根據(jù)本發(fā)明實施例的比較標量對向量操作的框圖。
[0006] 圖3A是根據(jù)本發(fā)明一個實施例的多維循環(huán)計數(shù)器向量和相關聯(lián)的掩碼的框圖。
[0007] 圖3B是根據(jù)本發(fā)明實施例與循環(huán)計數(shù)器更新指令相關聯(lián)的值的框圖。
[0008] 圖4是根據(jù)本發(fā)明實施例的方法的流程圖。
[0009] 圖5是根據(jù)本發(fā)明實施例的向量執(zhí)行單元的一部分的框圖。
[0010] 圖5A是根據(jù)本發(fā)明實施例的向量化代碼段的方法的流程圖。
[0011] 圖5B是根據(jù)本發(fā)明另一實施例的方法的流程圖。
[0012] 圖6A是根據(jù)本發(fā)明實施例的示例性AVX指令格式的說明。
[0013] 圖6B是根據(jù)本發(fā)明實施例的在其中來自圖6A的字段組成完整的操作碼字段和基 本操作字段的說明。
[0014] 圖6C是根據(jù)本發(fā)明實施例的在其中來自6A的字段組成寄存器索引字段的說明。
[0015] 圖7A和7B是根據(jù)本發(fā)明實施例說明通用向量友好的指令格式及其指令模板的框 圖。
[0016] 圖8是根據(jù)本發(fā)明實施例說明示例性的特定向量友好的指令格式的框圖。
[0017] 圖9是根據(jù)本發(fā)明一個實施例的寄存器架構(gòu)的框圖。
[0018] 圖IOA是根據(jù)本發(fā)明實施例的說明示例性有序管線和示例性寄存器重命名的亂 序發(fā)射/執(zhí)行管線二者的框圖。
[0019] 圖IOB是根據(jù)本發(fā)明實施例的說明要包括在處理器中的有序架構(gòu)核心和示例性 的寄存器重命名的亂序發(fā)射/執(zhí)行架構(gòu)核心二者的示例性實施例的框圖。
[0020] 圖IlA-B說明了更具體的示例性有序核心架構(gòu)的框圖,該核心將是芯片中若干邏 輯框中的一個(包括相同類型和/或不同類型的其他核心)。
[0021] 圖12是根據(jù)本發(fā)明實施例的可以具有多于一個核心、可以具有集成存儲器控制 器、并且可以具有集成顯卡的處理器的框圖。
[0022] 圖13是根據(jù)本發(fā)明實施例的示例性系統(tǒng)的框圖。
[0023] 圖14是根據(jù)本發(fā)明實施例的更具體的第一示例性系統(tǒng)的框圖。
[0024] 圖15是根據(jù)本發(fā)明實施例的更具體的第二示例性系統(tǒng)的框圖。
[0025] 圖16是根據(jù)本發(fā)明實施例的SoC的框圖。
[0026] 圖17是根據(jù)本發(fā)明實施例對使用軟件指令轉(zhuǎn)換器來將源指令集中的二進制指令 轉(zhuǎn)換成目標指令集中的二進制指令進行比較的框圖。
【具體實施方式】
[0027] 在各個實施例中,可以以向量格式維持用于嵌套循環(huán)的循環(huán)計數(shù)器??梢栽谟汕?套循環(huán)形成的瓦解循環(huán)的每一次迭代結(jié)束的時候相應地修改這些多個循環(huán)計數(shù)器。在不同 的實施例中,可以響應于單個指令來在處理器的硬件中執(zhí)行計算后的循環(huán)計數(shù)器更新。
[0028] 因而,實施例可以將嵌套循環(huán)的循環(huán)計數(shù)器存儲為在向量大小的存儲裝置中存儲 的單個多維循環(huán)計數(shù)器,例如處理器的向量寄存器或者向量大小的存儲器單元??梢越?jīng)由 用于控制多維循環(huán)計數(shù)器的一個或多個指令來控制這一存儲裝置中的值。可以提供這樣 的指令的不同特質(zhì)來以可控制的方式使計數(shù)器遞增和遞減,并且更新處理器的各種狀態(tài)標 志。此外,可以使用計算多維陣列內(nèi)的偏移的指令來執(zhí)行循環(huán)瓦解。這一方案使得能夠瓦 解多嵌套循環(huán)并且使用嵌套循環(huán)的循環(huán)計數(shù)器作為用于訪問多維陣列(包括子維陣列)或 者針對嵌套循環(huán)的循環(huán)計數(shù)器的其他計算的索引。
[0029] 圖1示出了利用半導體芯片上的邏輯電路實現(xiàn)的處理核心100的高級別視圖。處 理核心包括管線101。管線由多個級組成,每一級被設計為執(zhí)行完全執(zhí)行程序代碼指令所需 的多步驟過程中的特定步驟。這些典型地至少包括:1)指令獲取和解碼;2)數(shù)據(jù)獲?。?) 執(zhí)行;4)回寫。執(zhí)行級對由在先前級(例如,在上面的步驟1)中)中獲取和解碼的指令識 別的并且在另一先前級(例如,上面的步驟2))中獲取的數(shù)據(jù)執(zhí)行由相同的指令識別的特 定運算。所運算的數(shù)據(jù)通常從(通用)寄存器存儲空間102中獲取。在完成該運算時創(chuàng)建 的新數(shù)據(jù)也被典型地"回寫"到寄存器存儲空間(例如,在上面的步驟4)處)。
[0030] 與該執(zhí)行級相關聯(lián)的邏輯電路典型地由多個"執(zhí)行單元"或"功能單元" 1〇3_1到 103_N組成,這些"執(zhí)行單元"或"功能單元" 103_1到103_N各自被設計為執(zhí)行其自身唯一 的操作子集(例如,第一功能單元執(zhí)行整型數(shù)學運算,第二功能單元執(zhí)行浮點指令,第三功 能單元執(zhí)行自/至高速緩存/存儲器的加載/存儲操作,等等)。由所有功能單元執(zhí)行的所 有操作的集合與由處理核心100支持的"指令集"相對應。
[0031] 兩種類型的處理器架構(gòu)在計算機科學領域被廣泛認識:"標量"和"矢量"。標量處 理器被設計為執(zhí)行對單個數(shù)據(jù)集執(zhí)行操作的指令,而向量處理器被設計為執(zhí)行對多個數(shù)據(jù) 集執(zhí)行操作的指令。圖2A和2B呈現(xiàn)了展示在標量處理器與向量處理器之間的基本區(qū)別的 比較示例。
[0032] 圖2A示出了標量與(AND)指令的示例,其中,單個操作數(shù)集合A和B被與在一起 以產(chǎn)生單一的(或"標量的")結(jié)果C(即,AB = C)。相較而言,圖2B示出了向量與指令的 示例,其中,兩個操作數(shù)集合,A/B和D/E,被分別并行地與在一起,以同時產(chǎn)生向量結(jié)果C、 F(即,A與B = C且D與E = F)。在術(shù)語方面,"向量"是具有多個"元素"的數(shù)據(jù)單元。例 如,向量V = Q,R,S,T,U具有5個不同的元素:Q、R、S、T和U。示例性的向量V的"大小" 是5(因為其具有5個元素)。
[0033] 圖1還示出了與通用寄存器空間102不同的向量寄存器空間107的存在。具體地 說,通用寄存器空間102被名義上用于存儲標量值。這樣,當執(zhí)行單元中的任意一個執(zhí)行標 量操作時,它們名義上使用從通用寄存器存儲空間102調(diào)用的操作數(shù)(并且將結(jié)果回寫到 通用寄存器存儲空間102)。相較而言,當執(zhí)行單元中的任意一個執(zhí)行向量操作時,它們名 義上使用從向量寄存器空間107調(diào)用的操作數(shù)(并且將結(jié)果回寫到向量寄存器空間107)。 同樣可以分配存儲器的不同區(qū)域用于存儲標量值和向量值。
[0034] 還要注意的是,在到功能單元103_1和103_N的各自輸入處以及來自功能單元 103_1和103_N的各自輸出處存在掩碼邏輯104_1和104_N以及105_1和105_N。在各種 實現(xiàn)中,對于向量操作,僅實際上實現(xiàn)這些層中的一個一雖然這不是嚴格的要求(雖然未 在圖1中描繪,但是,可以想象,僅執(zhí)行標量操作而不執(zhí)行向量操作的執(zhí)行單元無需具有任 何掩碼層)。對于采用掩碼的任何向量指令,輸入掩碼邏輯1〇4_1和104_N* /或輸出掩碼 邏輯105_1和105_N可以用于控制針對該向量指令對哪些元素進行了有效操作。這里,從 掩碼寄存器空間106讀取掩碼向量(例如,與從向量寄存器存儲空間107讀取的輸