TWI888110B - 具有多處理管線靜態排程的用於最佳化的多核心和/或多處理器積體電路架構的設計和製造系統和方法 - Google Patents
具有多處理管線靜態排程的用於最佳化的多核心和/或多處理器積體電路架構的設計和製造系統和方法 Download PDFInfo
- Publication number
- TWI888110B TWI888110B TW113115316A TW113115316A TWI888110B TW I888110 B TWI888110 B TW I888110B TW 113115316 A TW113115316 A TW 113115316A TW 113115316 A TW113115316 A TW 113115316A TW I888110 B TWI888110 B TW I888110B
- Authority
- TW
- Taiwan
- Prior art keywords
- processing
- data
- code
- integrated circuit
- matrix
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/45—Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/45—Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
- G06F8/451—Code distribution
- G06F8/452—Loops
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/45—Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
- G06F8/456—Parallelism detection
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Design And Manufacture Of Integrated Circuits (AREA)
- Devices For Executing Special Programs (AREA)
- Multi Processors (AREA)
- Advance Control (AREA)
- Executing Machine-Instructions (AREA)
- Semiconductor Integrated Circuits (AREA)
Abstract
提出了一種具有多處理管線靜態排程的用於最佳化的多核心和/或多處理器積體電路架構的設計和製造系統和方法。多核心和/或多處理器積體電路(2)具有多個處理單元(21)和/或處理管線(53),它們通過執行平行機器碼(32)同時處理針對資料的指令。平行處理多核心和/或多處理器積體電路(2)對平行化的處理程式碼(32)的執行包括延遲時間(26)的發生,其中延遲時間由處理單元(21)在處理完針對資料的處理程式碼(32)的特定指令塊之後將資料傳回與接收所述處理單元(21)執行處理程式碼(32)的連續指令塊所需的資料之間的閒置時間給出。平行管線(53)包括用於執行如下操作的裝置:(i)通過提供從作為EX/MEM暫存器的MEM階段到作為ID/EX階段暫存器的EX階段的資料轉發而進行轉發;(ii)通過使EX-MEM階段暫存器的結果可被平行管線(53)的EX階段存取來提供管線之間的結果交換而進行交換;以及(iii)通過基於分支位址計算條件僅對依賴於一條管線的那些管線進行刷新來提供控制衝突而實現分支管線刷新。
Description
本發明大體涉及積體電路(IC)的設計和製造,並且更具體地涉及一種通過使用由積體電路製程模擬驅動的IC佈局最佳化來最大化製造良率以及晶片效能和處理速度的系統和方法。此外,本發明大體涉及用於多處理器系統(特別是允許多處理的多核心系統和平行計算系統)的積體電路(IC)的設計和製造。在多核心IC中,兩個或更多個處理器或核心協同工作以同時執行多個程式碼和/或處理器指令集,其中,在用於多處理器系統或平行計算系統的IC中,IC包括整合在IC上並連結在一起以使所述多處理或平行處理能夠發生的多個中央處理單元。此外,本發明涉及一種用於在所描述的具體架構和最佳化的多處理器架構系統中執行的針對特定的平行化程式碼最大化製造良率、IC處理效能和處理速度的系統和方法。更具體地,本發明還涉及程式碼平行化和相應IC設計的最佳化的相互最佳化。在多處理器系統的技術領域中,除其他因素外,重要的特徵和分類源自:處理器記憶體存取的處理方式以及系統處理器是單一類型還是系統架構中的多種類型。
近幾年,人們已經觀察到電腦架構發生了根本性變化,這將影響從手機到超級電腦的每種電子裝置的資料處理和操作的各個方面,因為電腦架構中引入了前所未有的大規模平行性,這與傳統的程式碼最佳化和平行化技術方法相衝突。特別是,它為實現真正的最佳化創造了對電腦和處理器特定程式碼平行化的技術要求。儘管計算產業採用的一般(regular)多核心方法(2、4甚至32個核心)的效能緩慢達到穩定水準,但技術正在利用多核心技術(數百甚至數千個核)提高每瓦和每晶片面積的效能。然而,要充分釋放多核心方法的潛力以確保未來持續的計算效能進步將需要電腦架構和程式設計技術的根本性進步,這甚至可以與重新發明計算相提並論。微處理器產業的新技術趨勢對下一代計算系統的設計具有重要影響,尤其是隨著千萬億次運算規模的實現,對於所謂的高效能運算(High Performance Computing;HPC)系統的設計具有重要影響。系統並行性需要切換到幾何增長路徑,這導致重新考慮互連設計、記憶體平衡和輸入輸出(input/outpu;I/O)系統設計,這將對未來HPC應用和演算法的設計(特別是未來應用和演算法的平行化和面向特定架構的適應)產生重大影響。現有應用程式碼所需的再造可能與90年代發生的從向量HPC系統遷移到大規模平行處理器(Massively Parallel Processor;MPP)一樣重大,且一樣具有技術挑戰性。這種全面的程式碼再造耗時近十年,因此現有技術中存在對正在使用的軟體基礎設施進行又一次重大轉變的嚴重擔憂。
技術挑戰和困難之一還來自各種不同的技術領域(如:電路設計、電腦架構、嵌入式硬體/軟體、程式語言、編譯器、HPC的應用數學等),突然面臨著其對新系統的效能最佳化的相互關聯的影響,並且還來自關於可以如何考慮當前對矽級裝置物理學的限制以進一步最佳化CPU設計、系統架構和用於未來及當前系統的程式設計模型的技術目標。如果這些技術挑戰無法通過適當的系統(特別是程式碼最佳化和平行化系統)克服,這甚至會引發這樣的問題:
多核心或多處理器是否真正是對未來IC設計潛在限制的合理回應。本發明允許在電腦架構、系統架構和用於未來計算系統(如:HPC系統)的程式設計模型的背景下解決由這些變化引起的對新最佳化系統的技術需求。
根據摩爾定律,每18個月就有可能在固定成本下將兩倍數量的元件整合到積體電路上,該定律仍然成立(根據最新結果,該定律可能持續到2023年)。然而,自2003年以來,諸如利用指令層級平行(instruction level parallelism;ILP)和時脈頻率縮放等傳統的效能改進來源一直在趨於平緩。特別是,如通過SPEC基準所測,在從1975年到現在的時期內,處理器效能的改進每年以52%提高,自1986年以來一直保持著驚人的一致性(如:參見J.L.Hennessy,D.A.Patterson,“ComputerArchitecture:A Quantitative Approach”,第四版,Morgan Kaufmann,舊金山,2006年)。在此期間,隨著製造幾何形狀根據摩爾定律縮放,電路的有效電容縮小,因此電源電壓可以保持固定,甚至略有下降,以便允許製造商提高時脈速度。這種方法被稱為「固定電場」頻率縮放,該方法在過去十五年中不斷增加了CPU時脈頻率。然而,在矽微影(silicon lithography)的90奈米(nm)規模以下,這種技術開始達到極限,因為來自漏電流的靜態功耗開始超過來自電路切換的動態功耗。功率密度現在已成為新處理元件設計的主要限制,並最終限制未來微處理器的時脈頻率增長。功率限制的直接結果是時脈頻率停滯,這反映在從2002年開始的效能增長率趨於平緩。在隨後的幾年中,各個處理器核的速度比按照前十年的歷史速度繼續發展時慢了近三倍。利用指令層級平行(ILP)和無序指令處理來提高效能的其他方法也已達到極限。在從單一處理器獲取效能提高的其他已知方法已經用盡之後,主流微處理器產業作出的反應是,停止進一步提高時脈頻率並增加晶片上核的數量。評估結果表明,從那時起,每個晶片上的核心數量每18-24個月翻一倍。因此,需要一種新型的平行系統和特定於處理器架構的最佳化程式設計結構,以領先於引發平行性海嘯
的幾何級增長的系統並行性浪潮。時脈頻率的暫停(stall)和業界對雙核的相對直接的反應導致了替代計算方法的出現,例如現場可程式化邏輯閘陣列(Field Programmable Gate Array;FPGA)、圖形處理單元(Graphics Processing Unit;GPU)或類資料流平鋪陣列架構(dataflow-like tiled array architectures)(如:TRIPS)。採用這種更激進的硬體架構方法的主要障礙在於,在該技術領域中,對於如何高效地針對各種應用對這種裝置進行程式設計的瞭解甚至比對由多個CPU核心組成的平行機器的瞭解還要少。
積體電路(IC)的架構和物理實現工具通常用於提高設計效能和設計流程的可預測性,這樣,這些工具就提高了IC設計者的工作效率。IC設計者通常在設計探索期間需要有關各種設計風格和佈局規劃的可行性的早期回饋。快速準確地預測最佳IC物理最佳化和IC設計可以:(1)減少佈局規劃重新設計的周轉(turn-around)時間,(2)減少設計迭代次數,以及(3)消除設計週期早期和後期意外可能出現的情況。因此,期望獲得對設計中最佳IC物理最佳化和IC設計(即,物理合成前和物理合成後)的快速且準確的預測。此外,由於計算資源的限制,大型設計(如:超過五百萬閘)通常無法在平面佈局中進行最佳化。這些設計通常被劃分或分層級設計,以便可以單獨最佳化較小的子設計。劃分過程中的一項關鍵任務是預算,這涉及為子設計正確分配時序限制(timing constraint),以使子設計既不會受到過度限制也不會限制不足。例如,如圖116所示,在最佳化正反器(Flip-Flop)f1-f2之間的路徑時,如果正反器(Flip-Flop)f1與點p1之間的路徑易於最佳化,而點p1與正反器(Flip-Flop)f2之間的路徑難以最佳化,則時序預算員(timing budgeter)通常會為前一路徑分配更嚴格的時序限制,而為後一路徑分配更寬鬆的時序限制。快速準確的IC物理最佳化預測應該能夠量化路徑的「最佳化潛力」,這將有助於更準確的時間預算。然而,這在技術上具有挑戰性,
並且通常必須手動進行後處理。通常,在操作期間,系統會接收到IC設計的網表,其中,網表指定了IC設計內多個單元的佈局。接下來,系統基於多個單元的物理建模估計IC設計中多個單元的電容。然後,系統基於不同的網表、電容和物理建模估計IC設計的IC物理最佳化,其中,IC物理最佳化必然需要在不執行物理最佳化的情況下進行估計。在現有技術中,這種網表通常包括已經使用基於預佈局的邏輯最佳化技術(該技術在執行邏輯最佳化時不考慮邏輯的佈局)進行了最佳化的邏輯。在產生多個單元的建模時,系統為IC設計中的每個邏輯功能產生物理模型。在為每個邏輯功能產生物理建模之後,系統產生邏輯功能的負載延遲結構,該結構返回指定輸出負載下邏輯功能可實現的最小延遲。然後,系統產生邏輯功能的負載電容模型,該模型返回用於實現針對指定輸出負載下的最小延遲的單元的輸入電容。
此外,通過對多個單元和硬巨集(hard macro)進行良好的佈局,可以實現時間延遲最佳化。在現有技術中,時序驅動的佈局將其間具有較大延遲的多個單元放在一起,從而減少延遲。時序驅動的佈局器通常考慮網路(net)和單元的「最佳化潛力」,從而縮短難以最佳化的網路(net),並將難以最佳化的多個單元放在一起。目前,確定IC設計的IC物理最佳化的最佳方法是首先對IC設計進行物理最佳化。不幸的是,物理最佳化有時需要幾天才能完成。如果在執行物理最佳化後發現錯誤或額外的最佳化潛力,則必須在再次執行物理最佳化之前更改設計。這種迭代過程成本高昂。因此,需要一種用於確定可能最佳化的IC設計的裝置和方法,而不會出現上述問題。
在現有技術中,積體電路的設計可以通過硬體描述語言(hardware description language;HDL)來描述。這使得能夠對網表(多個物理電子元件及其連接方式)進行模擬和合成。這種語言抽象了IC設計的佈局,在數位電路設計過程中,暫存器傳輸級(Register Transfer Level;RTL)對硬體暫存器之間的數位訊
號(資料)流動進行建模。流行的HDL是Verilog和超高速積體電路硬體描述語言(VHSIC very high-speed hardware description language;VHDL)。手工(Handcrafted)設計比合成設計更密集且更快。儘管如此,如今,對於大多數特殊應用積體電路(Application-Specific Integrated Circuit;ASIC),例如用於佈局和佈線的過程和工具是基於所用的RTL程式碼成功實現的。高級合成(High-Level synthesis;HLS)是指從數位系統的抽象行為規範中獲取並找到暫存器傳輸級結構的自動化設計過程。這種新方法實現了新形式的HLS並產生最佳化的RTL描述,以便在矽區域(silicon area)、現場可程式化邏輯閘陣列(FPGA)或特殊應用積體電路(ASIC)上進行佈局和佈線。
通過在純矽中包括摻雜劑,通常被束縛的價電子可以自由傳輸。積體電路的基本元件是電晶體,其為簡化的電子開關,可以根據兩個輸入訊號切換輸出。通過不同的摻雜劑(即所謂的p型矽和n型矽),它們可以一起形成二極體,即電子開關。金屬氧化物半導體(Metal Oxide Semiconductor;MOS)是絕緣材料和導電材料的類三明治結構。在互補式金屬氧化物半導體(Complementary Metal Oxide Semiconductor;CMOS)中,存在n型電晶體(nMOS)和p型電晶體(pMOS)。電晶體由導電閘極、絕緣玻璃層和矽晶圓(wafer)形成。nMOS由p型體(p-type body)和連接到閘極的n型半導體區域構成。「輸入」是源極,「輸出」是汲極。體(body)通常接地,與pMOS是相反,pMOS是反過來的(p型源極和汲極以及n型體)。閘極可以控制源極與汲極之間的電流。
使用電晶體,可以建置不同的邏輯閘。邏輯閘可以執行布林函數。使用反及閘(NAND)(4個電晶體)和反相器(2個電晶體)可以建置許多系列的布林函數,因此它們是基礎閘,參見圖117。基礎意味著幾乎每個邏輯運算式都可以由這兩個基礎閘建置(但不會自動給出最佳電子電路,這受到更多因素的影響)。更複雜的組合能夠實現算術運算:使用二進位邏輯進行加法、減法、乘法
和除法。使用複合閘可以產生更複雜的邏輯函數,例如算術運算,如指數函數或對數函數。所有這些都可以通過基本算術運算建置。
單個參數λ表示製程的解析度。它是電晶體的源極與汲極之間最小距離的一半-取決於多晶矽(polysilicon)線寬。通過使用該縮放參數λ,可以將距離特性放入目標晶圓解析度的縮放中。要放置的單個元件稱為單元(cell),其描述閘或記憶元件的元件面積。棒圖(Stick diagram)是近似單元所需面積A silicon 的方法。按照最小標準,可以使面積取決於單元的金屬通道的數量。線路之間是所需的空間,並且可以用於放置電晶體。通過計算單元的垂直和水平通道並將它們乘以8λ,可以近似出指定邏輯閘組合的垂直和水平空間。針對線路也可以這樣做,其中4λ寬度的線路需要與下一條4λ線路具有額外的間距,從而形成佈線通道。對於具有位元寬更寬的訊號的單元(數位/字元的解析度更高),佈線通道所需的面積A silicon 會增加。
對於單元和線路這兩者,存在簡單的近似方法來近似所需的矽面積A silicon ,利用參數λ將其表達為目標解析度的縮放。
除了形成複合閘來計算二進位解的基本布林閘之外,還存在其他的單元類型:
.三態:該類型在兩個輸入之間切換,意味著如果輸入為1,則輸出等於輸入A,而如果輸入為0,則輸出為「浮動」。這可以用於在不同時脈之間切換。
.多工器(Multiplexer;MUX):這種單元類型可以從不同的輸入中進行選擇,並將該輸入訊號選擇到輸出。
.鎖存器:這些是時序電路的類型,其中,時脈訊號可用。如果時脈訊號為1,鎖存器會將輸入訊號連接到輸出,否則它會進行阻止並且可以保持當前狀態。
.正反器(Flip-Flop):通過組合兩個電平敏感(level-sensitive)鎖存器,這種單元類型可以在時脈為1時「讀取」輸入訊號,而在訊號變為0時傳遞到輸出連接。
關於MOS電晶體的電流-電壓(I-V)特性,圖118a到圖118c的方塊圖描述了pMOS開關如何根據附加到閘極V g 的電壓進行工作。
具體來說,如圖118a所示,在p型體與多晶矽閘極之間施加負閘極電壓。正移動的帶正電的電洞被吸引到絕緣體(通過閘極處的負電壓)。如圖118b所示,當正電壓施加到閘極時,自由正電洞(free positive hole)被推離絕緣體。最後,如圖118c所示,當閘極上的正電壓高於臨界電壓Vt時,自由正電洞被推得更遠,而體(body)中的一些自由電子被吸引到絕緣體。圖119示出了示例性方塊圖,其示出了由閘極、源極和汲極組成的具有p型體和n型通道(channel)的nMOS電晶體。來自圖118的圖之一的電子開關的衍生原理可以用於建置nMOS電晶體,參見圖119。如圖119所示,nMOS的相同原理是,對閘極施加正電壓通過推開正電洞並允許汲極到源極之間有電流I而產生「自由」空間。
在閘極與源極和汲極通道(channel)之間,電容效應根據通道(channel)長度L和寬度W而變化:C g =C ox .W.L,其中,C ox 是每單位面積的閘極氧化物電容。因此,從汲極到源極的電流是閘極處電壓V g 的函數。這導致電流具有以下依賴關係:
其中,β=μ.C ox .W/I,正電壓(電源)VDD=V ds =V gs 。這導致如圖120a、圖120b所示的I-V特性。還有許多其他影響,在關於電晶體的I-V特性的簡短概述中略過。這些影響可以被建模並影響圖120a/圖120b中I-V圖表中所示的曲線。但是「儘管奈米級裝置的物理特性很複雜,但從設計者的角度來看,非理想I-V行為的影響相當容易理解」。
由於漏電效應(leaking effect),當電晶體未切換時,也會發生少量電流I static 在電源與地之間流動,這會導致靜態功率損耗:P static =I static ˙V DD
從輸入訊號超過50%到輸出超過50%所需的最大時間稱為傳播延遲時間t pd 。這是計算閘的邏輯網路的時間,即每個計算塊節點(CB)的t compute ,如以下詳細描述的。
關於時序,組合電路僅依賴於輸入來創建由電路的傳播延遲t pd 定義的結果。循序(sequential)設計和同步(synchronous)設計分別依賴於實際輸入和先前輸入,這種電路被稱為具有(多個)狀態。對於線路傳輸延遲對時序的限制而言,其建模和預測是非常複雜的。對於電路來說,時序正確是顯而易見的(並且可能會出現許多問題,例如,佈線擁塞、功率等)。對於佈局和佈線來說,在完全非同步設計中保持時序限制也是個問題。通過對組合邏輯塊(blocks of combinational logic)進行排序,可以同步結果並通過適當的時脈頻率確定時序限制。一般來說,同步設計比非同步設計穩定得多。使用鎖存器或正反器(Flip-Flop),組合邏輯獲得靜態序列,參見圖121。
可以對此類設計中的限制進行建模,並自動得出指定設計的適當時脈。可以使用最先進的合成工具的高精度或通過表格值對單個組合電路的延遲進行建模。
通過將邏輯塊定位在例如現場可程式化邏輯閘陣列(FPGA)上,儘量減少所需互連的總長度,從而完成佈局(placing)。本申請的發明方法在此進
行了進一步的改進。佈線(routing)是NP完全問題,並且現代工具鏈通過從RTL描述開始使用迭代演算法,成功地實現了可行的IC設計-可以通過減少找到近似最佳解所需的迭代步驟來實現新穎的方法。在該技術領域中,FPGA表示一種能夠在製造後被程式設計或被重新程式設計的可配置積體電路。FPGA是稱為可程式設計邏輯裝置(Programmable Logic Device;PLD)的更廣泛的邏輯裝置集的一部分。換句話說,現場可程式化邏輯閘陣列(FPGA)表示可以由使用者程式設計的特定積體電路。FPGA包含多種功能、可配置互連和輸入/輸出介面,以適應使用者規範。FPGA允許使用自訂邏輯結構進行快速原型設計,並且適用於限量生產的產品。現代FPGA非常密集,具有數百萬個閘的複雜性,這實現了模擬非常複雜的硬體,例如平行微處理器、處理器和訊號處理的混合等。FPGA的一個關鍵優勢是它們能夠被重新程式設計,以便通過修改邏輯閘陣列來創建完全不同的硬體。圖122中示出了FPGA的典型結構。此外,特殊應用積體電路(ASIC)不同於現場可程式化邏輯閘陣列(FPGA)。現場可程式化邏輯閘陣列(FPGA)具有指定的塊,能夠創建可程式化設計。此外,ASIC需要大批量才具有成本效益。FPGA由不同的單元類型組成:(1)可配置邏輯塊(Configurable Logic Block;CLB):實現邏輯功能,(ii)可程式化互連:實現單元之間的佈線;以及(iii)可程式化I/O塊:將單元與外部元件/匯流排連接起來。在電路和佈局層面,此應用使用最先進的編譯器和合成工具。存在不同的工具,並且FPGA製造商通常擁有其專有的合成工具。
對於合成工具,一個開源工具鏈是apio,其包括作為用於從Verilog進行RTL(暫存器傳輸級)合成的合成工具箱的Yosys(Yosys Open Synthesis Suite,Yosys開放合成套件)和作為時序驅動的佈局和佈線工具的nextpnr(可攜式FPGA佈局和佈線工具)。Apio是具有靜態預建置包的多平台工具箱以驗證、合成、模擬Verilog設計並將Verilog設計上傳到支持的FPGA板中。Yosys是RTL合
成工具的框架。它目前具有廣泛的Verilog-2005支援,並為各種應用領域提供基本的合成演算法集。此外,nextpnr是供應商中立的、時序驅動的、FOSS FPGA佈局和佈線工具,而Free/Libre和開源軟體(FOSS/FLOSS)為數位硬體設計(FPGA/ASIC)提供生態系統。最後,在數位電路設計的技術領域中,暫存器傳輸級(RTL)是根據硬體暫存器之間的數位訊號(資料)流動以及對這些訊號執行的邏輯操作來建模同步數位電路的設計抽象。RTL是電路表示為電路元件(暫存器和組合單元)和訊號的圖表的第一抽象級別。
晶片設計的一般設計流程可以包括:
1.產品要求(前端)
2.行為/功能規範(前端)
3.行為(RTL)合成(前端)
4.結構規範(後端)
5.物理合成(後端)
6.物理規格(後端)
7.CMOS製造(後端)
互補金屬氧化物半導體(CMOS)是一種使用互補且對稱的成對p型MOSFET和n型MOSFET實現邏輯功能的金屬氧化物半導體場效應電晶體(MOSFET)製程。CMOS技術用於建置積體電路(IC)晶片,包括微處理器、微控制器、記憶體晶片(包括CMOS BIOS)和其他數位邏輯電路。CMOS技術還用於模擬電路,例如,影像感測器(CMOS感測器)、資料轉換器、RF電路(RF CMOS)和用於許多通訊類型的高度整合收發器。
發明的系統和方法可以簡化、分別自動化前端中的步驟,即自動從指定程式碼(產品要求)到正常工作的RTL描述。分段中的資訊可以用於改進佈局佈線,但佈局和佈線是NP難題。該領域的任何改進都可以為迭代最佳化演算
法提供更好的起始值,從而可以近似最佳解。此外,最先進的工具堆疊(tool-stacks)能夠從電路的RTL描述中檢索正常工作的IC設計。新型的發明方法能夠從高階程式語言(編譯和直譯)中進行匯出以完全自動地匯出同步RTL設計。因此,該新型方法可以用作新型的高級合成(High-level synthesis;HLS)方法。RTL描述語言是Verilog和VHDL(超高速積體電路硬體描述語言,也稱為VHSIC硬體描述語言)。與發明的方法相結合,這使得新的限制能夠自動將程式碼從高階語言轉換為可合成的RTL描述,因此通過從任何高階程式語言中推導出設計,大大改進已知的高級合成(HLS)方法。應當注意,標準化為IEEE 1364的Verilog表示用於對電子系統進行建模的硬體描述語言(HDL)。它通常用於暫存器傳輸抽象級別的數位電路的設計和驗證。Verilog還用於模擬電路和混合訊號電路的驗證,以及基因電路(genetic circuits)的設計。此外,VHDL表示硬體描述語言,其能夠在多個抽象級別(從系統級到邏輯閘級)對數位系統的行為和結構進行建模,以用於設計輸入、文檔化和驗證目的。該語言已被電氣電子工程師協會(IEEE)標準化為IEEE Std 1076。為了對模擬和混合訊號系統進行建模,開發了基於VHDL的IEEE標準化HDL,稱為VHDL-AMS(正式名稱為IEEE 1076.1)。
為了從邏輯路徑(從分別實現晶片上指令的物理實現的程式碼)檢測設計中的問題,關鍵路徑是一個關鍵屬性。關鍵路徑可以處於架構級、邏輯級、電路級或佈局級。在發明的系統和方法所提供的伽馬圖中,關鍵圖能夠通過每個圖級別的最大平行計算塊n∥的總和來檢測。
最佳化時序在很大程度上取決於微架構級別。要實現良好的微架構,必須瞭解如何實現演算法以及如何通過閘反映演算法。閘組合的延遲必須與觸發用於同步設計的暫存器的時脈週期相匹配。這定義了演算法的執行速度以及資料儲存和沿線路傳播的速度。程式碼中的平行性是重要屬性,因為它會影響有多少個閘以及哪些閘必須平行可用來計算程式碼中所有需要的指令。此
外,顯然也需要瞭解它們是如何互連的。所有這些資訊都包含在伽馬圖中,這是將發明的系統和方法應用於任何程式碼(以及編譯語言中的程式碼和直譯語言中的程式碼)的結果。
如今,為了在多核心處理器或多處理器系統上平行運行程式,必須覆寫其程式碼以手動或通過工具添加一些OS平行化基元(primitive)(如:POSIX執行緒(即pthreads)),並提供平行執行模型結構。它允許程式控制在時間上重疊的多個不同工作流程。每個工作流程都稱為執行緒,通過呼叫POSIX執行緒API可以實現對這些流程的創建和控制。POSIX執行緒是由標準POSIX.1c(執行緒擴展IEEE Std 1003.1c-1995)定義的API。即使使用如OpenMP或MPI等高級介面,由於以下兩個原因平行化也不是容易的事:(i)如果所得到的程式碼同步不夠,則計算就不是確定性的;以及(ii)如果同步過多,則平行度不夠。然而,執行緒通常使程式具有不確定性,並依賴程式設計風格來限制這種不確定性以實現確定性目標。技術人員可以依賴編譯器自動執行例如迴圈向量化或迴圈平行化,而不是手動平行化程式碼。請注意,迴圈級平行化是HPC應用中的核心方面和技術挑戰之一,因為迴圈部分會帶來大量計算需求。利用平行性的機會通常存在於資料儲存在隨機存取資料結構中的應用。然而,即使是簡單的示例也常常不能被現有技術的編譯器自動平行化。此外,不規則的程式碼結構是第二個問題。下面,詳細討論了本發明系統如何使用即時迴圈平行化結構(just-in-time-loop-parallelization)來平行化迴圈。
這導致了平行化的第三個問題,即資料的記憶體組織。在加總示例中,要加總的陣列被宣告為例如全域變數。因此,當計算是分散式時,它是集中式的。因此,每個執行緒都會從其所在的動態隨機存取記憶體(dynamic random-access memory;DRAM)中得到所需的陣列片段。快取可以提供幫助,但
相鄰核心會因記憶體競爭而變慢,並且快取未命中率會受到陣列分佈的影響。此外,在更新共用資料的程式中,保持快取一致性需要複雜的硬體,這會減慢平均記憶體存取時間。快取和記憶體層級結構以及分支預測器是依賴於局部性原理的硬體功能,該局部性原理本質上是建立在資料(快取)和提取程式碼(預測器)的集中化之上的。當程式碼和資料是分散式時,平行局部性適用於資料。平行局部性原理是消費者應盡可能靠近其生產者。本發明的系統還允許為了平行化程式碼最佳化生產者到消費者的距離,這是量化平行化品質的另一方法。
在現有技術中,存在各種嘗試將資料流程架構以不同的方式應用於平行計算框架和自動平行化系統。資料流程架構是基於資料流程的電腦架構,其與傳統的馮紐曼架構或控制流架構形成直接對比。然而,資料流程架構沒有程式計數器,其中,在概念上,指令的可執行性和執行僅基於指令的輸入參數的可用性來確定,因此指令執行的順序是不可預測的,即,行為是不確定的。因此,需要提供本質上具有確定性的資料流程架構,使自動平行化編譯器能夠通過考慮底層系統架構來管理複雜的技術任務,例如處理器負載平衡、同步和對公共資源的存取。
一般來說,當在多核心或多處理器系統中平行執行處理程式碼時,這可能導致更高的吞吐量。多處理器或多核心系統(為簡單起見,處理器和核在下文中簡稱為處理器)需要將程式碼分解為更小的程式碼塊並高效地管理程式碼的執行。為了使核或處理器平行執行,每個核或處理器的資料必須是獨立的。同一程式碼塊的實例可以同時在若干處理器上執行以提高吞吐量。如果處理器需要來自先前執行或當前正在執行計算的另一個程序的資料,則平行處理效率可能降低,這是由於在處理器單元之間發生交換資料的延遲和/或發生處理器單元的交換資料的延遲。一般來說,當處理器進入程式執行被暫停或未進行並且屬於該程式的指令未從記憶體中提取或執行的狀態時(無論出於何種原
因),這些狀態會導致處理器的閒置狀態,從而影響平行處理效率。在排程處理器時需要考慮資料依賴關係。高效地管理多個處理器和資料依賴關係以實現更高的吞吐量具有挑戰性。期望具有用於高效管理計算量大的應用中的程式碼塊的方法和系統。請注意,延遲問題也存在於單一處理器系統中,其中使用例如面向延遲的處理器架構來最小化該問題,這些單一處理器系統是被設計為以低延遲為循序計算執行緒提供服務的微處理器的微架構。一般來說,這些架構旨在在指定的時間視窗中執行盡可能多的屬於單個循序執行緒的指令,其中從提取階段到退出階段完整地執行單個指令的時間可能從幾個週期到在某些情況下甚至幾百個週期不等。然而,這些技術並不會自動應用於(大規模)平行計算系統的延遲問題。
因此,平行計算系統需要高效的平行編碼或程式設計,其中平行程式設計成為程式設計典範。它一方面包括將電腦程式劃分為可以並行的各個部分的方法,另一方面包括使平行程式碼部分同步的方法。這與傳統的順序(或循序)程式設計和編碼形成對比。程式的平行執行可以在硬體側得到支援;程式語言通常會適應這一點。例如,平行程式設計可以通過讓程式設計師在單獨的程序或執行緒中執行程式部分來明確完成,也可以自動完成,以便因果獨立(可平行)的指令序列並排(即,平行)執行。如果具有多核心處理器的電腦或平行電腦可用作目標平台,則編譯器系統可以自動完成這種平行化。一些現代CPU還可以識別這種獨立性(在程式的機器碼或微程式碼中),並將指令分發到處理器的不同部分,以這種方式使得它們同時執行(無序執行)。然而,一旦各個程序或執行緒相互通訊,從這個意義上講,它們就不再是作為一個整體並行的,因為它們相互影響,只有各個子程序仍然相互並行。如果不能相應地定義各個程序或執行緒的通訊點的執行順序,則會發生衝突,尤其是當兩個程序相互等待(或相互阻塞)時出現的所謂的死結,或者當兩個程序覆寫(overwrite)彼此的結果時出現
的競爭條件。在現有技術中,為了解決該問題,使用同步技術,例如互斥(Mutex)技術。雖然這些技術可以防止競爭條件,但它們不能自動允許以最小的處理器單元延遲進行威脅或程序的最佳化平行處理。
(微)處理器基於積體電路,這使得基於兩個二元值(最簡單的1/0)進行算術和邏輯運算成為可能。為此,對於處理器的計算單元來說,二元值必須是可用的。處理器單元需要獲得兩個二元值來計算運算式a=b運算元c(a=b operand c)的結果。檢索這些操作的資料所需的時間稱為延遲時間。這些延遲時間具有廣泛的層次範圍,包括暫存器、L1快取、記憶體存取、I/O操作或網路傳輸,以及處理器配置(如:CPU與GPU)。由於每個元件都有延遲時間,因此計算的總延遲時間主要是現代計算基礎設施中使資料從一個位置到另一個位置所需的硬體元件的組合。在現代架構中,不同的軟體層(例如作業系統)也有很大的影響。CPU(或GPU)獲得資料的最快位置與最慢位置之間的差異可能很大(在量級>109的範圍內)。圖1示出了現代計算基礎設施中延遲時間的形成。如圖1所示,平行計算機已經被開發為具有不同獨特架構。值得注意的是,平行架構通過通訊架構增強了電腦架構的一般(regular)概念。電腦架構定義了關鍵的抽象(如使用者系統邊界和硬體軟體邊界)和組織結構,而通訊架構定義了基本的通訊和同步操作。它還解決了組織結構。
電腦應用通常基於對應的程式設計模型寫入頂層,即,以高階語言編寫。已知各種平行程式設計模型,例如(i)共用位址空間、(ii)訊息傳遞或(iii)資料平行程式設計,涉及對應的多處理器系統架構。共用記憶體多處理器就是這樣一類平行機器。共用記憶體多處理器系統在多程式設計工作負載上提供更好的吞吐量並支援平行程式。在這種情況下,電腦系統允許處理器和成組的I/O控制器通過某個硬體互連存取記憶體模組集合。通過添加記憶體模組增加記憶體容量,並且通過向I/O控制器添加裝置或添加額外的I/O控制器可以增加I/O容
量。可以通過實現更快的處理器或添加更多處理器來提高處理能力。如圖2所示,資源圍繞中央記憶體匯流排組織。通過匯流排存取機制,任何處理器都可以存取系統中的任何物理位址。由於所有處理器都假定或實際上與所有記憶體位置等距,因此所有處理器在記憶體位置上的存取時間或延遲都是相同的。這稱為對稱多處理器系統。
訊息傳遞架構是另一類平行機器和程式設計模型。它將處理器之間的通訊提供為顯式I/O操作。通訊在I/O級別而不是記憶體系統上進行組合。在訊息傳遞架構中,使用者通訊是通過使用執行較低級別動作(其包括實際的通訊操作)的作業系統或函式庫呼叫來執行的。因此,程式設計模型與物理硬體級別的通訊操作之間存在距離。發送和接收是訊息傳遞系統中最常見的使用者級通訊操作。發送指定區域資料緩衝區(待傳輸)和接收遠端處理器。接收指定發送程序和將放置傳輸資料的區域資料緩衝區。在發送操作中,識別字或標籤附加到訊息,並且接收操作指定匹配規則,如來自特定處理器的特定標籤或來自任何處理器的任何標籤。發送和匹配的接收的組合完成了記憶體到記憶體的複製。每一端都指定其區域資料位址和成對的同步事件。雖然訊息傳遞和共用位址空間傳統上表示兩種不同的程式設計模型,每種模型都有自己的用於共用、同步和通訊的範例,但如今,基本的機器結構已經趨向於共同的組織。
最後,資料平行處理是另一類平行機器和程式設計模型,也稱為處理器陣列、資料平行架構或單指令多資料機器。該程式設計模型的主要特徵是可以對大型一般(regular)資料結構(如:陣列或矩陣)的每個元素平行執行操作。資料平行程式語言通常通過查看成組的程序的區域位址空間(每個處理器一個)來實施,形成顯式全域空間。由於所有處理器都相互通訊,並且所有操作都有全域視圖(global view),因此可以使用共用位址空間或訊息傳遞。然而,僅開發程式設計模型無法提高電腦的效率,僅開發硬體也不能做到這一點。此外,
頂層程式設計模型必然引入由程式設計模型要求給出的邊界條件,例如:模型特定的架構。由於平行程式由一個或多個對資料進行操作的執行緒組成,因此底層平行程式設計模型定義了執行緒需要什麼資料、可以對所需資料執行哪些操作以及操作遵循的順序。因此,由於底層程式設計模型的邊界,多處理器系統的機器碼最佳化存在限制。平行程式必須協調其執行緒的活動,以確保程式之間的依賴關係得到執行。
如圖1所示,平行計算機已經被開發為具有不同的獨特架構,每種架構都會在其計算基礎設施中形成不同的延遲時間。最常見的多處理器系統之一是共用記憶體多處理器系統。本質上,已知共用記憶體多處理器系統具有三種基本架構:(i)統一記憶體存取(Uniform Memory Access;UMA)、(ii)非統一記憶體存取(Non-Uniform Memory Access;NUMA)和(iii)僅快取記憶體架構(Cache-Only Memory Architecture;COMA)。在UMA架構(參見圖3)中,所有處理器統一共用實體記憶體。所有處理器對所有記憶體字元的存取時間均相同。每個處理器可能都有私有快取記憶體。週邊裝置也遵循相同的規則。當所有處理器對所有週邊裝置都有平等的存取權限時,系統稱為對稱多處理器。當只有一個或幾個處理器能夠存取週邊裝置時,系統稱為非對稱多處理器。在NUMA多處理器架構(參見圖4)中,存取時間隨記憶體字元的位置而變化。共用記憶體在物理上分佈在所有處理器之間,稱為區域記憶體。所有區域記憶體的集合形成全域位址空間,所有處理器都可以存取該全域位址空間。最後,COMA多處理器架構(參見圖5)是NUMA多處理器架構的特例。在COMA多處理器架構中,所有分散式主記憶體都轉換為快取記憶體。COMA架構也可以應用於分散式記憶體多電腦。分散式記憶體多電腦系統由多個計算機組成,這些電腦通常表示為節點,並且通過訊息傳遞網路互連。每個節點都充當具有處理器、區域記憶體並且有時具有I/O裝置的自律計算機(autonomous computer)。在這種情況下,所
有區域記憶體都是私有的,只能由區域處理器存取,因此此類機器也稱為無遠端記憶體存取(no-remote-memory-access;NORMA)機器。其他已知的多處理器架構是,例如,多向量電腦和單指令多資料(single instruction multiple data;SIMD)平行電腦、平行隨機存取機(parallel random-access machine;PRAM)和基於超大規模整合(very large-scale integration;VLSI)晶片的平行電腦等,它們都具有不同的多處理器架構和基礎設施特性。總之,由於不同的多處理器架構在其計算基礎設施中形成不同的延遲時間,因此僅開發程式設計模型無法提高電腦的效率,僅開發硬體也無法做到這一點。
如上所述,如果具有多核心處理器的電腦或平行電腦可用作目標平台,則編譯器系統也可以自動執行程式碼平行化。這種自動平行化表示將循序程式碼轉換為多執行緒和/或向量化程式碼,以便例如在共用記憶體多處理器(shared-memory multiprocessor;SMP)機器中同時使用多個處理器。利用現有技術的系統,循序程式的全自動平行化在技術上具有挑戰性,因為它需要複雜的程式分析,還因為最佳方法可能取決於編譯時未知的參數值。編譯器系統自動平行化最關注的程式設計控制結構是迴圈,因為程式的大部分執行時間通常都發生在某種形式的迴圈內。存在有兩種主要方法來對迴圈進行平行化:管線多執行緒和迴圈多執行緒。自動平行化的編譯器結構通常包括解析器、分析器、排程器和程式碼產生器。編譯器系統的解析器涵蓋第一處理階段,其中例如掃描器讀取輸入原始檔案以識別所有靜態和外部用法。檔中的每一行都將根據預定義的模式進行檢查,以分離成符記(token)。這些符記將儲存在檔中,稍後將由語法引擎使用。語法引擎將檢查與預定義的規則匹配的符記樣態,以識別程式碼中的變數、迴圈、控制敘述、函式等。在第二階段,分析器識別可以並行的程式碼片段。分析器使用掃描器-解析器提供的靜態資料資訊。分析器首先檢測所有完全獨立的函式並將它們標記為單獨的任務。然後,分析器找出哪些任務
具有依賴關係。在第三階段,排程器將列出所有任務及其在執行和啟動時間方面的相互依賴關係。排程器將根據要使用的處理器數量或應用的總執行時間產生最佳排程。在第四階段(也是最後階段),排程器產生所有任務的列表和任務將在哪些核心上執行以及執行持續時間的詳細資訊。然後,程式碼產生器會在程式碼中插入特殊結構,排程器將在執行期間讀取這些結構。這些結構將指示排程器將在哪個核上執行特定任務以及開始時間和結束時間。
如果使用迴圈多執行緒平行化編譯器,編譯器會嘗試拆分每個迴圈,使得迴圈的每次迭代都可以在單獨的處理器上並行。在自動平行化期間,編譯器通常會在實際平行化之前進行兩輪自動評估,以確定平行化的以下兩個基本前提條件:(i)在第一輪中,基於依賴關係分析和別名分析,使迴圈平行化是否安全?以及(ii)在第二輪中,基於對程式工作量的估計(建模)和平行系統的容量,使迴圈平行化是否值得?編譯器的第一輪對迴圈執行資料依賴關係分析,以確定迴圈的每次迭代是否可以獨立於其他迭代執行。有時可以處理資料依賴關係,但它可能會以訊息傳遞、共用記憶體同步或某個其他處理器通訊方法的形式觸發額外的成本。第二輪嘗試通過將平行化後程式碼的理論執行時間與程式碼的循序執行時間進行比較來證明平行化工作的合理性。重要的是要理解,程式碼並不總是能從平行執行中獲益。可能與使用多個處理器相關聯的額外成本會逐漸耗盡平行程式碼的潛在加速。
如果使用管線多執行緒平行化編譯器進行自動平行化,編譯器會嘗試將迴圈內的操作序列分解為一系列程式碼塊,使得每個程式碼塊可以在單獨的處理器上並行。
很多平行問題都有這種相對獨立的程式碼塊,特別是使用管道和過濾器(filter)的系統。例如,在直播時,一秒鐘內必須執行許多不同的任務。
管線多執行緒平行化編譯器嘗試將這些操作中的每一個分配給
不同的處理器,這些處理器通常排列成脈動(systolic)陣列,插入適當的程式碼以將一個處理器的輸出轉發到下一個處理器。例如,在現代電腦系統中,重點之一是利用GPU和多核心系統的能力在運行時計算此類獨立程式碼塊(或迴圈的獨立迭代)。然後可以將被存取的記憶體(無論是直接還是間接)標記為迴圈的不同迭代,並進行比較以進行依賴關係檢測。使用該資訊,將迭代分組為多種級別,以便屬於同一級別的迭代彼此獨立,並且可以平行執行。
在現有技術中,存在許多用於自動平行化的編譯器。然而,大多數現代現有技術的用於自動平行化的編譯器依賴於使用Fortran作為高階語言,即僅適用於Fortran程式,因為Fortran對別名的保證比諸如C等語言更強。這種現有技術編譯器的典型示例是(i)典範編譯器、(ii)Polaris編譯器、(iii)Rice Fortran D編譯器、(iv)SUIF編譯器和(v)Vienna Fortran編譯器。現有技術編譯器的自動平行化的其他缺點在於由於以下事實,通常難以實現程式碼的高度最佳化:(a)對於使用間接定址、指標、遞迴或間接函式呼叫的程式碼,依賴關係分析很困難,因為在編譯時很難檢測到此類依賴關係;(b)迴圈通常具有未知的迭代次數;(c)在記憶體分配、I/O和共用變數方面難以協調對全域資源的存取;以及(d)使用輸入相關間接的不規則演算法會干擾編譯時分析和最佳化。
編譯器的一項重要任務是嘗試有效地處理延遲時間。編譯是從人類可讀的所謂高階語言(如:C、python、java等)翻譯為組合語言程式/處理器程式碼,然後該程式碼僅由指定處理器上的可用指令組成。如已經討論的,對資料或計算有大量需求的現代應用必須針對適當的基礎設施,並且會引入許多不同的延遲時間-目前只有部分延遲時間可以通過現有技術編譯器最佳化技術解決。
對於每個複雜程度(硬體元件),解決方案都在不斷開發和演變,從編譯器最佳化技術到用於平行資料結構的多執行緒函式庫以防止競爭條件到程式碼向量化,到具有對應程式語言的GPU系統(如:開放計算語言(Open
Computing Language;OpenCL)到諸如「TensorFlow」等框架以分配程式設計師的計算,到諸如「MapReduce」等大資料演算法,其中,MapReduce是一種程式設計技術並且是用於在叢集上使用平行分散式演算法處理和產生大資料集的關聯實現。在高效能運算領域,已經開發和定義了基於理論的、基於數學的技術以將大矩陣拆分為有限差分或元素方法的特殊網格技術。這包括協議,例如在叢集基礎設施中,訊息傳遞介面(message passing interface;MPI)支援通過基礎設施將資料傳輸到不同的程序。
如以上所討論的,現有技術最佳化技術列表很長。但從系統理論的角度來看,問題或多或少總是相同的:程式碼(任何程式碼)如何才能最有效地與複雜硬體基礎架構中的延遲時間互動?編譯器在使用單個CPU時工作良好。一旦硬體複雜性增加,編譯器就無法真正使程式碼平行化。平行化變成只是CPU近似的,例如:通過引入微程序。CPU、GPU及其叢集的硬體產業主要關注其特定領域,開發人員和研究人員專注於實現技術和框架開發,迄今為止尚未進入更通用(跨產業)方法的領域。此外,作者Ruggiero,Martino;Guerri,Alessio;Bertozzi,Davide;Milano,Michaela;Benini,Luca在他們的小冊子中揭示了:用於在具有通訊感知的流導向的MPSoC平台上映射平行應用的快速準確的技術(A Fast and Accurate Technique for Mapping Parallel Applications on Stream-Oriented MPSoC Platforms with Communication Awareness),國際平行程式設計雜誌,第36卷,第1期,2月8日,將處理資料流程的演算法劃分到不同的處理器核上。作者的模型是簡單的通訊網路,其中處理器核之間具有簡單的附加通訊模型。這不允許得出關於多核心上劃分造成的實際通訊負載的現實結論。
一般來說,已知的處理器製造商專注於其處理器和相關硬體元件,而其他開發人員(如:高效能運算(HPC)研究小組)則專注於數值方法和函式庫的使用。目前,還沒有嘗試從系統理論的角度,通過存取指定原始碼產生的延
遲動態來解決有關編譯器系統最佳化的問題。現有技術中的原始碼僅由一系列敘述組成,這些敘述導致針對指定目標基礎架構的讀寫指示。
現有技術文獻M.Kandemir等人的“Slicing Based Code Parallelization for Minimizing Inter-processor Communication(用於最小化處理器間通訊的基於切片的程式碼平行化)”,2009年國際嵌入式系統編譯器、架構和合成會議(案'09),法國格勒諾布爾,2009年10月11日至16日,第87-96頁,揭露了一種用於自動平行化的系統,旨在通過應用迭代空間切片的概念來最小化分散式記憶體多核心架構中的處理器間通訊,即,該現有技術系統基於迭代方法。所揭露的系統通過迭代確定應用程式碼中其他陣列的分區來分割輸出陣列,即通過迭代確定陣列部分來完成這一點,其中,資訊是從先前被切片的陣列部分迭代獲取的。在程式碼平行化中,切片表示從程式中提取可能對特定感興趣的敘述產生影響的敘述的過程,該特定感興趣的敘述是切片標準(參見例如J.Krinke,順序和並行程式的高級切片(“Advanced slicing of sequential and concurrent programs”),第20屆IEEE軟體維護國際會議,2004年論文集,2004年,第464-468頁)。這些切片技術表現出與依賴於點資料/控制依賴關係的現有技術系統類似的效果(參見例如J.L.Hennessy,D.A.Patterson,電腦架構(“Computer Architecture”),第五版:定量方法,Morgan Kaufmann電腦架構和設計系列,第五版,第150頁)和資料流程分析(參見例如Gary A.Kildall全域程式最佳化的統一方法(“Aunified approach to global program optimization”),第一屆ACM SIGACT-SIGPLAN程式語言原理研討會論文集(POPL'73),美國電腦協會,紐約,1973年,美國,194-206)。使用迭代空間切片,這些系統能夠評估哪些敘述的哪些迭代影響特定陣列A中指定元素集合的值。因此,系統通過依賴於處理器p從陣列A存取的特定資料元素集合迭代地返回例如從巢狀迴圈s中要分配給處理器p的迴圈操作集合。此外,現有技術文獻Fonseca A.等人的自動平行化:在 基於任務的平行運行時上執行循序程式(“Automatic Parallelization: Execution Sequential Programs on a Task-Based Parallel Runtime”),國際平行程式設計雜誌,2016年4月,揭露了另一種用於自動平行化循序程式碼以用於多核心架構中的系統。該系統揭露了使用資料組和記憶體佈局,然後檢查依賴於任務平行性的依賴關係。因此,為了自動地平行化程式,系統必須分析所存取的記憶體以評估程式的各部分之間可能存在的依賴關係。例如,在費波納西數列(Fibonacci sequencing)程式碼的自動平行化示例中,所揭露的系統評估創建新任務的成本高於針對低輸入數執行該方法的成本。然後,該評估將用作自動產生平行化程式碼期間任務位置的主要要求,其中,評估由依賴於一組七個要求的特定函式進行,以找到最佳位置。最後,該函式輸出所謂的硬依賴關係(該硬依賴關係為其後可以引入任務的指令)以及所謂的軟依賴關係,該軟依賴關係給出成組的已定義的任務,當前任務必須等待這些已定義的任務才能執行。當所有任務都產生實體為具有指定位置時,平行化完成,其中,通過等待當前任務的執行並讀取其結果來標記要執行的任務。最後,US2008/0263530A1揭露了一種系統,用於將應用程式碼轉換為最佳化的應用程式碼或適合在包括至少第一和第二級資料記憶體單元的計算架構上執行的執行程式碼。在排程指令時,使用局部性原理,也稱為引用局部性。這與頻繁存取相同值或相關儲存位置的現象有關。需要區分不同類型的引用局部性。在時間局部性中,在某一時間點被引用的資源隨後很快被再次引用。在空間局部性中,如果最近引用了儲存位置附近的儲存位置,則引用該儲存位置的可能性更大。表現出局部性的程式和系統表現出可預測的行為,從而為程式碼設計者提供了通過預取、預計算和快取程式碼和資料以供將來使用來提高效能的機會。對於這種資料評估最佳化,所揭露的系統在佈局局部性之前存取局部性,由此對於被反覆存取的資料,在資料傳輸操作發生時盡可能在時間上將存取集中在一起,並且盡可能在空間上將一個接一個被存取
的資料集中在一起。因此,在第一程序(存取局部性)中,進行了部分修復,從而提供了一系列選項。在第二程序(佈局局部性)中,從預定義範圍中選擇一個選項。可以基於成本函數來選擇一個選項。作為實施例變型,系統還通過關注具有資料平行迴圈的應用程式碼部分來解決平行資料傳輸和儲存探索的問題。轉換結構允許解決不同級別的記憶體單元(例如後臺記憶體、前臺記憶體、暫存器)和功能單元的資料級方面。
總之,儘管存在平行化編譯器,但它們通常聚焦於獨立的平行級別,例如針對超長指令字(Very long instruction word;VLIW)和顯式平行指令計算(Explicitly parallel instruction computing;EPIC)架構的指令層級平行(Instruction-level parallelism;ILP)、資料和向量平行(如:高效能Fortran和MMX/SSE功能編譯器)或執行緒層級平行(Thread-level parallelism;TLP),例如:支援OpenMP API或GPU的PGI加速器編譯器的編譯器。即使是更複雜的以架構為中心的方法(如:IBM的Octopiler),仍然需要手動調整效能;因此,所有軟體發展過程都必須手動適應新的先決條件。演算法需要利用和表達各種多層級平行、更精細和巢狀分層記憶體系統以及軟體管理或使用者管理的資料傳輸。此外,設計應用需要考慮到跨代處理器和概念的可擴展性。對於應用映射的所有步驟(如:在數值模擬中),需要全面的硬體知識才能實現最佳吞吐量。效能、生產力、可攜性和實現的靈活性之間存在複雜的權衡。在本發明的系統和方法中,通過為應用的指定原始碼提供方案、平行算法和平台特定實現的最佳組合來實現硬體感知計算。
此外,不幸的是,現有技術的自動平行化系統和針對多核心系統(尤其是異質平行系統)的程式設計方法目前不適合此類系統的特定需求:高階平行程式設計模型提供了當今複雜應用所需的抽象視圖,但沒有對硬體映射進行精細控制,導致硬體資源利用率低下。嚴格的硬體感知方法從長遠來看能夠實
現這種精細控制,但會將重點放在硬體映射上。基於混合方法的發明系統和方法提供了兩個方面的新技術組合。
如下文進一步討論的那樣,一般(regular)的現有技術的平行程式設計方法可以分為以下三個領域:共用記憶體、訊息傳遞和資料平行方法,並具有相應的標準化程式設計環境,例如:(按所述領域的順序)開放多處理(Open Multi-Processing;OpenMP)用於針對編譯器可利用的任務平行函式庫(Task Parallel Library;TPL)、訊息傳遞介面(MPI)用於解決手動利用的執行緒層級和管線平行性,以及高效能Fortran用於編譯器支援的資料平行性(data parallel;DP)的利用。這些程式設計模型僅支援邊際靈活性,並且通常不支援精細架構映射。在這三個領域中,訊息傳遞提供了對應用架構映射的最高控制級別。不利的一面是,它迫使程式設計師進行詳細的分區和編排。此外,最大的缺點之一是,這些模型中的任一個通常不會表達硬體異質性,因為這超出了它們的重點。OpenMP支援一定的靈活性,允許動態更改要創建的執行緒數。分區全域位址空間(partitioned global address space;PGAS)是程式設計介面,其定義可能的分散式系統上的全域位址空間,重點是引用局部性利用:利用PGAS,共用記憶體空間的各部分可能對特定執行緒具有親和性。該模型的示例是統一平行C語言(Unified Parallel C;UPC)和協同陣列Fortran(Co-array Fortran),以及最近的產業驅動方法,例如:Chapel(Cray)和X10(IBM)。
尤其是異質平台需要在最低硬體級別上以精細的方式將應用程式碼與指定平台進行匹配:現有技術的一個示例是Cell微處理器架構(Cell Broadband Engine Architecture;Cell BE),它迫使程式設計師明確地將程式劃分為要在單向量處理單元(single vector processing unit;SPE)上執行的各個塊(chunks)。必須使用所謂的直接記憶體存取流明確地制定通訊,使各個SPE能夠獲取所需資料並寫回結果資料。與簡單的實現相比,這種計算和通訊的精細匹
配可以帶來數量級的速度提升。然而,這是相當繁瑣、容易出錯且耗時的任務。一般(regular)的同質多核心平台還需要硬體感知程式設計技術來例如通過資料局部性最佳化和適當的預取最小化通訊成本。隨著當前和即將推出的多核心架構的出現,這種情況變得更加普遍,因為這些架構具有不同的快取共用和互連技術方案。
所有討論過的現有技術方法的另一個問題是需要額外的運行時間層和經常以語言為中心的擴展。此外,它們不考慮應用的需要,例如即時要求或計算精度。另一種現有技術方法基於仔細擴展現有的系統層。然而,它本質上是語言無關的和作業系統無關的,並且與現有的平行程式設計模型不相容。此外,成本確實僅出現在被觸發的選項(如:效能測量和針對引導執行的功能分析)中,並且分析成本仍然比通常需要的低約一個數量級。
為了實現真正的硬體最佳化平行化,應用程式碼的所有部分都需要符合多層級平行單元、分層且可能巢狀的記憶體子系統以及計算單元的異質元件。所有方面都需要在實現中明確表達:在現有技術中,只有很少的軟體支援和很少的機制可以幫助自動和最佳化地利用資源,以及隱藏硬體細節而不影響效能。儘管硬體的異質性正在增長,但它仍然缺乏在所使用的演算法和應用中的表達。當前的程式設計技術主要依賴於最小侵入方法,其中識別應用的區域部分以進行加速並將其卸載到特定的計算引擎。為了獲得整體利益,必須考慮通過狹窄瓶頸進行的附加通訊。然而,現有技術解決方案通常是獨立的且不可移植。硬體特定的最佳化技術包括計算的安排(例如:向量化、迴圈展開、重新排序、分支消除)、資料結構的最佳化(陣列存取模式、記憶體對齊、資料合併)以及資料傳輸的最佳化(空間和時間局部性的邊塊(blocking)、快取和快取繞過、原地(in-place)演算法)。這應該包括參數空間,因為參數空間變得日益難以管理。使用已知的現有技術系統,無法繞過自動調整器來搜索實現參數的(帕累托
(Pareto-))最佳設置。對於選定的核心(kernel),自動調整可能會提供結果,但通常代價是缺乏跨平台的可攜性。
現有技術文獻US2008/0263530A1展示了一種用於自動程式碼轉換的系統。具體而言,該系統涉及針對具有預定義架構的計算引擎的自動程式碼轉換的編譯器和預編譯器。該系統將應用程式碼轉換為最佳化的應用程式碼或適合在計算引擎(即數位處理器)上執行的執行程式碼,其中,揭露了至少包括第一和第二級資料記憶體單元的架構。該系統利用記憶體單元層級之間的資料傳輸操作獲得應用程式碼。然後,該系統轉換應用程式碼,應用程式碼的轉換包括將資料傳輸操作從第一級記憶體單元排程到第二級記憶體單元,使得被多次存取的資料的存取整體在時間上比在原始碼中更接近。應用程式碼的轉換還包括,在排程資料傳輸操作之後,決定第二級記憶體單元中資料的佈局以改善資料佈局局部性,使得在時間上更接近地被存取的資料在佈局上也整體比在原始碼中更接近。
已知的是設計數位電路的共同目標是最大化其效能。然而,在現有技術中,重點往往放在電路本身上,而沒有將將程式碼最佳化和平行化與晶片設計最佳化結合起來,或者說至少因此沒有將其結合。因此,儘管在設計過程中反覆分析電路,以(除了其他以外)確定其工作頻率以最大化效能,但重點是電路設計的時序建模,其用於檢查數位電路在指定成組的時序限制的情況下是否能正確運行。然而,這種對電路設計最佳化的單一關注具有一些基本的技術缺點,並且是耗時的過程。例如,這樣的時序限制是時脈週期,它要求訊號在有效時脈邊緣之前穩定,以避免鎖存陳舊資料或在資料記憶元件中引起亞穩態。確定數位電路速度的常用方法是靜態時序分析(Static Timing Analysis;STA)。STA在時序圖上運行,時序圖是數位電路的抽象表示,其中節點表示電路元件的引腳,單向邊表示它們之間的時序依賴關係。已知有兩類STA演算法:
基於路徑的演算法和基於塊的演算法。基於路徑的演算法對電路中的每條路徑進行詳細分析,提供高精度,但最壞情況下的執行時間呈指數級。因此,儘管基於塊的演算法的分析結果較為悲觀,但其計算時間隨電路規模線性增長,因此經常被使用。雖然STA比其他方法(如時序模擬)快得多,但仍然很耗時。因此,設計者和最佳化工具通常選擇通過在設計過程中僅「偶爾」執行STA來犧牲精度,以最小化設計迭代時間。儘管如此,像VPR這樣的佈局工具在最佳化過程中會呼叫數百次STA。然而,這仍然意味著設計決策是使用舊的(且可能現在不正確的)時序資訊做出的。這導致設計者和最佳化演算法(其決策可以從準確的時序資訊中受益)假設不必要的悲觀設計條件,從而導致代價高昂的過度設計。此外,設計規模繼續快速增長,而單執行緒CPU效能的改進卻放緩。此外,由於時序角(timing corner)的增加和時域(clock domain)數量的增加,全面描述設計所需的時序分析數量也在增加。因此,在商用FPGA佈局和佈線工具中,STA通常占總執行時間的25%,但當設計具有多個時脈和時序限制時,STA可能會主導最佳化演算法。此外,現代FPGA具有效能驅動的架構特性,例如:脈衝鎖存器和互連暫存器,這加劇了保持時間問題。這需要額外的最小延遲時序分析來評估,設計工具需要明確最佳化保持時間;需要大量快速呼叫STA。最後,已經提出了各種用於FPGA佈局和佈線的高效能平行算法。隨著這些平行方法加速核最佳化演算法,時序分析成為執行時間中越來越主要的部分-限制了可實現的加速。這些因素都使得開發快速且可擴展的時序建模成為縮短FPGA設計階段的關鍵,而這種建模可以利用現代計算系統可用的平行性,並將大量的技術負擔僅放在IC設計和最佳化上。再次聲明,克服這一技術問題的重點依賴於IC的最佳化和對應的最佳化工具。例如,統計STA(Statistical STA;SSTA)已經取得了進展。SSTA並非確定純量延遲(scalar delays),而是對延遲概率分佈進行建模,以獲得製程變化對延遲的影響。SSTA可以與基於路徑或基於塊的演算法一起應用,並通過分
析或蒙特卡羅方法進行計算。在現有技術中,由於其計算複雜度較低,許多工業設計流程和大多數最佳化工具都使用基於塊的演算法。
與現有技術最佳化方法及其技術問題相比,本發明從IC要處理的程式碼開始。在第一步中,本發明通過自動平行化從初始軟體程式碼中提供最平行化的程式碼,在第二步中,將程式碼的平行化與IC最佳化相結合,以此為基礎提取具有多個平行CPU管線的最精簡形式的平行IC佈局,以使用平行化程式碼的精簡結構處理平行化程式碼,作為藍圖和起點來建置最佳化的晶片佈局,從而在評估CPU,GPU和處理管線時考慮資料傳輸延遲,甚至允許考慮同時進行多角(corner)和多時脈建模。最佳化後的IC可以在各種大型基準電路上使用已知的最佳化工具之一輕鬆進行評估,證明了其有效性和開創性的方法,將IC設計最佳化推向了其可能性的邊界。
本發明提供一種新的自動平行化系統和方法,提供基於現場可程式化邏輯閘陣列(FPGA)和/或特殊應用積體電路(ASIC)的平行化程式碼和平行IC設計、架構和實現方式。特別地,本發明的目的在於在盡可能最高的最佳化後的晶片架構和設計所反映的延遲時間方面提供盡可能最高的平行化和平行處理。例如,為了驗證所提出的系統和方法,可以使用平行基因演算法(genetic algorithm;GA)和平行粒子群最佳化(parallel particle swarm optimization;PSO)演算法。此外,所提出的基於FPGA的平行智慧自動最佳化系統和方法的效能和優勢可以通過將其與流行的已知基於開放多處理(OpenMP)的平行程式設計和基於統一計算架構(Compute Unified Devices Architectured;CUDA)的平行程式設計進行比較來進行測試,最終結果表明,所提出的系統和方法在程式碼自動平行化和最佳化的平行晶片設計佈局的平行實現中具有最高的即時效能。更具體地,所提出的系統和方法使用用於多處理器系統和多電腦系統的新穎編譯器系
統,其以多處理器系統的處理單元的最佳化延遲將程式碼編譯為機器碼,從而高效地管理多個處理器和資料依賴關係以實現更高的吞吐量,並且不存在如上所討論的現有技術系統的缺點。因此,本發明提供另一種系統和技術,該系統和技術可以用於通過自動平行化在多處理器機器中實現最高效能,從而最佳化在機器指令處理級別對低層級平行性(時間和空間)的利用,並將其反映在晶片設計佈局方面。本發明克服現有技術的缺點,克服它們處理平行化部分的局限性,這些平行化部分通常僅限於特定系統,如:迴圈或特定程式碼片段。自動平行化系統應該能夠最佳化識別平行化機會,這是產生多執行緒應用和IC時的關鍵步驟。例如,使用基於FPGA的平行模擬退火(simulate annealing;SA)來解決零工式生產排程問題(job shop scheduling problem;JSSP),可以說明所提出的自動平行化系統和方法在工業應用中具有很高的潛力。
根據本發明,這些目的尤其通過獨立項的特徵來實現。此外,還可以從附屬項和相關描述中得出進一步的有利實施例。
根據本發明,實現了對稱自動編譯器系統及其對應方法的上述目的,該對稱自動編譯器系統用於程式碼的硬體最佳化的自動平行化,以供具有多個處理單元的多核心或多處理器平行處理系統執行,該多個處理單元通過執行程式碼同時處理平行處理系統中的針對資料的指令,具體地,該自動編譯器系統包括用於將以程式語言編寫的程式碼的循序原始碼轉換為平行處理機器碼的裝置,該平行處理機器碼包括能夠由平行處理系統的多個處理單元執行的多個指令或控制多個處理單元的操作,其中,該平行處理系統包括記憶體單元,該記憶體單元至少包括主執行記憶體單元和轉換緩衝單元,該主執行記憶體單元包括用於保持至少部分處理程式碼的資料的多個記憶體組,該轉換緩衝單元包括用於儲存處理程式碼的起始位置和資料段的高速記憶體,該資料段至少包括分支或跳轉指令和/或使用的記憶體引用和資料值,其中,主執行記憶體單元
提供比轉換緩衝單元更慢的存取時間,其中,平行處理系統對處理程式碼的執行包括延遲時間的發生,延遲時間由在處理單元對資料處理完處理程式碼的特定指令塊之後發回資料與接收所述處理單元執行處理程式碼的連續指令塊所需的資料之間的處理單元的閒置時間給出,其中,該編譯器系統包括用於將循序原始碼轉換為具有處理單元可執行的基本指令流的程式碼的解析器模組,基本指令能夠從有限的、特定於處理單元的基本指令集中選擇,並且基本指令僅包括用於複數個處理單元的基本算術和邏輯運算和/或基本控制和儲存操作,其中,該解析器模組包括用於將所述基本指令的程式碼劃分為多個計算塊節點的裝置,每個計算塊節點由單個處理單元可處理的程式碼的不可進一步分解的基本指令序列的最小可能分段組成,基本指令的最小可能分段的特徵在於為由連續的讀寫指令構成的基本指令序列,所述序列不可由連續的讀寫指令之間的較小基本指令序列進一步分解,並且讀寫指令是接收處理單元處理所述基本指令序列所需的資料並在序列進行處理之後傳回資料需要的,其中,該編譯器系統包括用於從由程式碼分割的計算鏈產生矩陣的矩陣建置器,該矩陣包括計算矩陣、傳輸矩陣和任務矩陣,其中,計算矩陣中的每一列包括計算塊節點,該計算塊節點能夠基於傳輸計算塊節點處理所需的資料的讀寫指令的可執行性而同時處理,其中,該傳輸矩陣包含到每個計算塊節點的傳輸和處理屬性,該傳輸和處理屬性至少表示從一個計算塊節點到連續的計算塊節點的資料傳輸屬性,該資料傳輸屬性至少包括被傳輸資料的資料大小以及資料傳輸的來源計算塊節點和目標計算塊節點的標識和/或多個處理單元中的一個處理單元的處理特性,其中,任務由矩陣建置器形成,其中,在計算塊節點各自具有不同的關聯讀取的情況下,任務矩陣的任務通過以下方式形成:將計算矩陣的列的計算塊節點均勻地分為多個對稱處理單元的數量,對於計算矩陣的每列的多個處理單元中的每一個,形成一個任務,並且基於預定義方案將剩餘的計算塊節點分為任務
的至少一部分,並且其中,在計算塊節點至少部分地具有傳輸了相同資料的讀取的情況下,任務是通過在處理單元的數量上均勻地或基本均勻地最小化讀取次數和/或如果超過預定義的偏移值,則通過在每個處理單元上均勻地最小化整合處理時間來形成,以及其中,該編譯器系統包括程式碼產生器,該程式碼產生器用於基於由最佳化的任務矩陣給出的計算鏈為多個處理單元產生具有最佳化的合計延遲時間的平行處理機器碼。此外,該編譯器系統例如可以包括最佳化器模組,該最佳化器模組使用矩陣最佳化技術,通過提供任務矩陣內任務的最佳化結構來最小化整合了所有發生的延遲時間的合計發生延遲時間,其中任務矩陣的每一列由一個或多個任務形成計算鏈,從而創建由多個處理單元之一執行的計算塊節點的有序流(ordered flow)。如果使用矩陣或張量,則借助於最佳化器模組進行的最佳化可以例如基於數值矩陣最佳化技術(或更一般的數值張量最佳化技術)。從技術上講,當前的最佳化問題可以通過使用張量和/或矩陣來確定,並以此方式獲得矩陣/張量場最佳化問題。對於線性最佳化,最佳化器模組例如可以使用矩陣和線性規劃。對於本發明的某些應用,張量的概念可以例如在技術上是有用的。在最佳化中,張量技術能夠解決非線性關係和等式系統,並使用二階導數進行無限制最佳化。張量方法可以用作通用方法,特別適用於雅可比矩陣(Jacobian matrix)在解為奇異或病態的問題。張量方法也可以用於線性最佳化問題。張量的重要特徵在於當它們引起一般(regular)非線性座標變換時,它們的值不會改變,因此,該概念在技術上可以用於表示不依賴於一般(regular)非線性座標變換的結構特性。因此,張量最佳化也可應用於非線性最佳化的框架內。然而,必須注意的是,本發明的技術優勢之一在於,迄今為止已知的所有矩陣都是線性最佳化方法,這與原始碼自動平行化領域的現有最佳化技術不同,現有技術系統主要必須依賴於非線性最佳化。在本文中,最佳化表示找到導致最大或最小函式評估的目標函數的輸入集的問題。例如,對於該技
術挑戰性問題,還可以將從擬合(fit)邏輯回歸模型到訓練人工神經網路的各種機器學習演算法與最佳化器模組一起使用。如果最佳化器模組由實現的機器學習結構實現,則可以將其公式化,這通常可以使用連續函式最佳化來提供,其中,函式的輸入參數是實值數值,例如浮點值。函式的輸出也是輸入值的實值估計。然而,作為實施例變型,也可以使用採用離散變數的最佳化函式,即提供組合最佳化問題。例如,為了在技術上選擇最佳最佳化結構,一種方法可以是基於關於正在被最佳化的目標函數的可用資訊量對可選擇的最佳化結構進行分組,而這些資訊又可以由最佳化演算法使用和控制。明顯的是關於目標函數的可用資訊越多,通過機器學習最佳化該函式就越容易,當然,這取決於可用資訊是否可以有效地用於最佳化的事實。因此,一個選擇標準可以例如通過以下問題與可微分目標函數相關:是否可以為指定的候選解計算函式的一階導數(梯度或斜率)。該標準將可用的機器學習結構劃分為可以利用計算出的梯度資訊的機器學習結構和不利用梯度資訊的機器學習結構,即,使用導數資訊的機器學習結構和不使用導數資訊的機器學習結構。對於可以使用微分目標函數的應用,需要注意,本文的可微分函式表示可以為輸入空間中的任何指定點產生導數的函式。對某個值的函式的導數是該點處函式的變化率或變化量,也稱為斜率。一階導數定義為目標函數在指定點處的斜率或變化率,其中,具有多於一個輸入變數(如:多變數輸入)的函式的導數稱為梯度。因此,梯度可以定義為多變數連續目標函數的導數。多變數目標函數的導數是向量,並且向量中的每個元素都可以稱為偏導數,或者在假設所有其他變數保持不變的情況下指定變數在該點處的變化率。此外,偏導數可以定義為多變數目標函數導數的元素。然後,可以產生目標函數導數的導數,即目標函數變化率的變化率。這被稱為二階導數。因此,二階導數可以定義為目標函數的導數的變化率。對於當前採用多個輸入變數的函式的情況,這是稱為黑塞矩陣(Hessian matrix)的矩陣,其中,黑塞矩陣
定義為具有兩個或更多個輸入變數的函式的二階導數。可以使用已知的微積分對簡單可微函式進行解析最佳化。但是,目標函數可能無法通過解析方法進行求解。如果可以產生目標函數的梯度,則所使用的最佳化會容易得多。一些能夠使用梯度資訊並可以用於本申請的機器學習結構包括:包圍演算法(Bracketing algorithm)、局部下降演算法、一階演算法和二階演算法。
本發明尤其具有以下優點:提供並實現了基於最低可能程式碼結構的大規模最佳化,將高階程式語言程式碼簡化為一些基本指令,這些基本指令由於在CPU/微處理器上運行的機器指令集有限,在其資料輸入和輸出點方面無法進一步簡化。例如,基本指令包括:(i)所應用的數值應用中的算術運算:+、-、*、/->,即,數學運算(如:積分或微分分析)被簡化為這些基本指令,(ii)邏輯運算:AND(與)、OR(或)等,(iii)變數和陣列宣告,(iv)比較運算:相同、較大、較小等,(v)程式碼流:跳轉、呼叫等,(vi)if(條件){codeA}else{codeB},以及(vii)迴圈(條件)。當今現代高階語言(如:Python、C、Java等)與有限的處理器指令資源之間的互動可以通過借助其操作創建「資料點」的讀和寫的「映射」進行分析,並使其可存取。換句話說,通過使用適當的表示(此外,也可以為圖形化表示)映射單個指令的讀寫互動,可以使它們可以用於數值最佳化技術,從而能夠自動平行化原始碼,始終產生可運行的平行程式碼。有幾種方法可以存取這些互動,但沒有一種方法可以將原始碼的讀寫模式映射到程式設計師選擇的變數定義所引入的資料,然後繼續提取所需的順序鏈並引入潛在的通訊模式,從而將程式碼「映射」到廣泛的硬體基礎設施。該方法揭露了一種將原始碼「適配」到所有級別的指定硬體基礎設施(FPGA、CPU、GPU、叢集等)的新穎的方法。
本發明的另一個優點是,所揭露的方法和系統可以解決已知的技術問題,例如:用陣列解決巢狀迴圈,從而以新的視角求解偏微分方程(Partial Differential Equations;PDE)或SOTA編譯器的最佳化步驟中出現的知名的問題。
該方法為程式碼提供了新的視角,並且這種新的範圍基於所有經典計算基礎設施中發生的物理效應,從而產生將計算映射到指定的硬體結構,並得出指定硬體或指定程式碼的理想硬體上的程式碼的並行表示的通用方法。這是基於保留引入的資料節點的所有「讀取」和「寫入」依賴關係並根據這些依賴關係建置指令鏈的結果。通過提取這些指令鏈,提取用於計算目標平台的指令鏈的最小位元大小。由於每個指令鏈都可以表示為組合電路(輸出僅取決於當前輸入),因此這些指令系列表示組合電路塊。同一列中的指令鏈可以平行處理,僅受物理屬性給出的延遲的顯示、分別是二進位計算的相應限制(從施加電壓到穩定結果之間的延遲)。
所得到的計算塊節點及其流程圖以矩陣形式返回合適的基,從而產生獲取適用於不同計算單元(如:CPU、GPU、FPGA、微控制器等)的程式碼的通用方法。該方法對遵循系統理論的原理的ICT軟體和硬體互動具有新的視角。這產生了可以在廣泛的領域帶來新穎解決方案的方法,例如:
(i)自適應硬體-現場可程式化邏輯閘陣列(FPGA)/原子性、一致性、隔離性、耐久性(atomicity,consistency,isolation,and durability;ACID):本發明將程式碼分解為具有指令的鏈,這些鏈顯然表示積體電路中的邏輯元素。由於該方法給出了最佳化計算和通訊的組合的通用形式,因此它可以用於最佳化基於相同「位元模式」/「訊號」的指令組,並帶來新穎的方法,例如:以分別最佳化軟體到FPGA的自動傳輸或縮小從程式碼到晶片佈局規劃的差距。
(ii)機器學習(machine learning;ML)/人工智慧(artificial intelligence;AI):機器學習和人工智慧程式碼需要大量資源,尤其是在訓練階段。例如,該方法可以用於(i)最佳化已知程式碼,(ii)支持程式碼開發,這些程式碼在運行時期間調整其複雜性,因此很難提前進行平行化(因為該方法
總是產生最佳化的程式碼),(iii)支援即將推出的、不基於神經網路(如:基因演算法,參見例如R.Farber的Inside HPC Special Report,AI-HPC is Happening Now的方法。
(iii)HPC(高效能運算)應用:由於該方法可以將程式碼從例如Python轉換為具有MPI支援函式庫的C程式碼,因此它可以彌補例如不同研究領域(HPC到AI開發)中存在的差距。另一個應用可能是自適應網格微調實現方式,用於工程應用的數值模型套裝軟體、天氣預報模型等。或者它可以用於結合具有不同空間和時間解析度的模型(如:計算流體動力學模型和基於代理的模型等)並改進不同領域的現有套裝軟體,例如,建模和分析套裝軟體。
(iv)自動化業務流程:本發明還可以用於流程管理,決定單元是應該執行任務還是應該將其傳送給另一個單元是知名的問題。對於這個問題,本申請的方法提供了一種方案。
(v)雲端、桌面作業系統、虛擬機器、一般部署:使通用方法可用,可以「減少」基本所需操作和可能的並行選項的程式碼,支援軟體與硬體之間的介面中的各種解決方案。這種介面顯然尤其適用於任何形式的作業系統、虛擬化和/或軟體部署,更具體地說,例如用於雲端基礎設施的虛擬化解決方案、作業系統(具有多核心系統)、支援混合不同作業系統的虛擬機器或類似示例。
(vi)異質平台,(i)物聯網和邊緣計算:異質平台在不同領域(如:物聯網項目、自動駕駛、移動和雲端應用組合以及利用混合硬體基礎設施運行的和/或在其上運行的其他形式的應用)佔據主導地位。該方法可以調整程式碼以決定如何在平台上最佳地分配資料、計算和/或資料通訊。此外,它還可以在部署/開發軟體的過程中結合指定計算單元網路的硬體元件
的不同屬性,並最佳化程式碼以實現目標屬性,例如減少軟體系統的某些部分的延遲。
(vii)嵌入式系統:嵌入式系統對例如指定程式碼的功耗或其他特定適配有很高的要求,例如某些微處理器上只有精簡指令集或類似挑戰。該方法可以直接支持這種映射,因為它可以針對指定的物理屬性進行最佳化,從而為任何指定的程式碼提供最有效的程式碼表示。
(viii)自我優化(Self-optimizing)演算法:本發明允許完全自主,這意味著演算法可以在指定平台上自我最佳化,而無需任何手動互動。這使得迄今為止未知的新應用和新領域成為可能。
0:電腦輔助IC設計和製造系統
1:自動平行編譯器系統
11:詞法分析器/解析器
12:分析器
13:排程器
14:計算塊鏈模組
15:矩陣建置器
151:計算矩陣
152:傳輸矩陣
153:任務矩陣
16:最佳化器模組
17:程式碼產生器
2:平行處理系統/多處理器系統
21:處理單元
210:中央處理單元(CPU)
2101:控制單元
2102:處理器(單核心微控制器CPU)
21021:暫存器
21022:組合邏輯
2103:核心/處理器(多核心微控制器CPU)
211:圖形處理單元(GPU)
212:聲音晶片
213:視覺處理單元(VPU)
214:張量處理單元(TPU)
215:神經處理單元(NPU)
216:物理處理單元(PPU)
217:數位訊號處理器(DSP)
218:協同處理單元(SPU)
219:現場可程式化邏輯閘陣列(FPGA)
22:記憶體單元
221:主儲存單元
2211:處理器暫存器
2212:處理器快取
22121:L1快取
22122~2212x:L2~Lx快取
2213:隨機存取記憶體(RAM)單元
222:第二級儲存單元
2221:硬碟驅動器(HDD)
2222:固態硬碟(SSD)
2223:通用序列匯流排(USB)記憶體
2224:快閃記憶體驅動器
2225:光學儲存裝置(CD或DVD驅動器)
2226:軟碟機(FDD)
2227:RAM磁碟
2228:磁帶
223:第三級儲存單元(磁帶備份等)
23:記憶體匯流排
231:位址匯流排
232:資料匯流排
24:記憶體管理單元(MMU)
25:輸入/輸出(I/O)介面
251:記憶體映射I/O(MMIO)或埠映射I/O(PMIO)介面
252:輸入/輸出(I/O)通道(處理器)
3:程式碼
31:循序原始碼
311:高階語言
3111:C/C++
3112:phyton
3113:Java
3114:Fortran
3115:OpenCL(開放計算語言)
3112:平行程式語言
31121:Apache Beam
31122:Apache Flink
31124:Apache Hadoop
31125:Apache Spark
31126:CUDA
31127:OpenCL
31128:OpenHMPP
31129:針對C、C++和Fortran的OpenMP(共用記憶體和附接GPU)
3113:低階語言(機器碼/組合語言)
32:自動平行化目標程式碼
321:低階語言(組合語言)
322:機器語言(電腦的指令集(程式碼直接由中央處理單元執行)
322:基本指令的基本集
3221:算術運算指令
3222:邏輯運算指令
3223:變數和陣列宣告操作
3224:比較運算指令
3225:程式碼流指令/記憶體操作/I/O操作
33:節點
331:資料節點(儲存某些資料值)
3311:針對讀取的輸入資料節點(Datanodein(讀取存取))
3312:針對寫入的輸出資料節點(Datanodeout,寫入存取))
332:操作節點(執行操作)
333:計算塊節點(CB1,CB2,...,CBx)
334:控制流節點
3341:分支節點
3342:隱藏分支節點
3343:迴圈分支節點
335:條件節點
336:伽馬節點(任務)
34:鏈
341:計算鏈(計算塊節點鏈)
342:操作鏈(操作節點鏈)
35:延遲時間Δt(將資料從一個程序傳輸到另一個程序的時間)
351:Δtreadwrite=對資料節點的寫入存取與讀取存取之間的時間
352:Δtcomputation=計算計算快節點中所有操作節點的時間
353:總(合計)延遲時間Δttotal
36:任務
36i:任務i中的計算塊節點的數量
4:網路
41:網路控制器
5:IC佈局系統
51:積體電路佈局元素
511:電晶體
512:電阻器
513:電容器
514:IC佈局元件的互連
515:半導體
52:佈局網表產生器
521:佈局網表
5211:位置變數
5212:IC佈局上佈局元素邊的位置
53:平行管線
531:輸入鎖存器
532:處理電路
533:時脈訊號
5331:時脈脈衝
534:階段
5341:中間結果
5342:最終結果
5343:獲得最終結果需要執行的階段數
535:平行管線數量
54:IC佈局
6:IC製造系統
本發明將通過示例的方式並參考附圖進行更詳細的解釋,其中:圖1示意性地示出不同現代計算基礎設施下延遲時間形成的圖。(微)處理器基於積體電路,允許基於兩個二元值執行算術運算和邏輯運算。為此,二元值必須可供處理器的計算單元使用。處理器單元需要獲得兩個二元值來計算運算式a=b運算元c的結果。檢索這些操作的資料所需的時間稱為延遲時間。這些延遲時間的層次範圍很廣,包括暫存器、L1快取、記憶體存取、I/O操作或網路傳輸,以及處理器配置(如:CPU與GPU)。由於每個單個元件都有延遲時間,因此計算的總延遲時間主要是現代計算基礎設施中將資料從一個位置傳輸到另一個位置所需的硬體元件的組合。
圖2示意性地示出作為一類平行機器的共用記憶體多處理器的方塊圖,該共用記憶體多處理器為共用位址程式設計模型作為頂層平行程式設計提供了基礎。在共用記憶體多處理器架構中,假設在該電腦系統中,允許處理器和成組的I/O控制器通過某種硬體互連存取記憶體模組的集合。通過添加記憶體模組可
以增加記憶體容量,通過向I/O控制器添加裝置或添加額外的I/O控制器可以增加I/O容量。可以通過等待更快的處理器可用或添加更多處理器來增加處理能力。所有資源都圍繞中央記憶體匯流排組織。通過匯流排存取機制,任何處理器都可以存取系統中的任何物理位址。由於所有處理器都被認為或實際上與所有記憶體位置等距,因此所有處理器在記憶體位置上的存取時間或延遲相同。這稱為對稱多處理器。
圖3示意性地示出UMA架構的方塊圖。在UMA架構中,所有處理器統一地共用實體記憶體。所有處理器對所有記憶體字元的存取時間均等。每個處理器可能都有私有快取記憶體。週邊裝置也遵循相同的規則。當所有處理器對所有週邊裝置都有同等的存取時,系統稱為對稱多處理器。當只有一個或幾個處理器可以存取週邊裝置時,系統稱為非對稱多處理器。
圖4示意性地示出了NUMA多處理器架構的方塊圖。在NUMA多處理器架構中,存取時間隨記憶體字元的位置而變化。共用記憶體在物理上分佈在所有處理器中,稱為區域記憶體。所有區域記憶體的集合形成所有處理器都可以存取的全域位址空間。
圖5示意性地示出COMA多處理器架構的方塊圖。COMA多處理器架構是NUMA多處理器架構的特例,其中,所有分散式主記憶體都轉換為快取記憶體。
圖6示意性地示出作為示意性示例的單元「基本塊」(或分別稱為「塊單元」)和「計算塊節點」的不同範圍的方塊圖。本申請中使用的「計算塊節點」與先進(State-Of-The-Art;SOTA)編譯器中使用的塊單元有本質區別。
圖7示意性地示出簡化但更現實的示例的方塊圖,其中,發明的方法利用了這樣的事實:對數指令(FYL2X作為現代CPU上的示例)比浮點加法和/或乘法指令(如:FADD、FMUL)長。發明的方法將敘述‘x:=a+b’和‘y:=a*b’添加到兩個不同的計算塊節點(computation block node;cbn),因為兩者都基於相同的資訊‘a’和
‘b’。由於‘log2(x)’敘述使用資訊‘x’,因此將‘log2(x)’敘述附加到‘x=a+b’。資訊‘y’正在傳輸,因此該資訊可以用於兩個獨立的計算鏈。
圖8示出了如何將圖7中的程式碼拆分為能夠在兩個計算單元上執行的機器碼的示例,這兩個計算單元通過任何形式的IPC進行同步(必須指出,IPC意味著更多的是兩個計算單元之間的通訊,而不是“InterProcessCommunication”)。矩陣指示計算不同的機器指令所需的時脈週期,作為如何獲得計算指令時間值的示例。以這種形式,在圖8中可以看到,單元2可以計算敘述‘log2(x)’的長運行指令,單元1處理迴圈並增加a(“a=a+1”),參見圖7。
圖9示意性地示出發明方法的方塊圖,該方法由計算塊節點的流程圖形成兩個矩陣,本文中稱為「數值矩陣」(請注意,作為變型,「數值」在特定情況下也可能指文本資料,因為IT基礎設施上的所有資料都可以理解為低級別的數值,例如二進位)。一個矩陣包含指令鏈,另一個矩陣包含可能的傳輸屬性(來自和到其他計算塊節點)。因此,從矩陣中提取的程式碼總是形成“計算->通訊”的模式,如以下段落中詳細所示。顯然,如果將程式碼映射到一個單元,則通訊部分將消失(而計算(=指令鏈)將相加),並且本發明方法將簡化為具有「基本塊」的方法,分別可以用SOTA編譯器處理。此外,表示比圖形更具可擴展性的資訊存取形式的矩陣分別示出了控制流圖的良好形成的性質。計算塊節點(cbns)的定義也表明本發明矩陣的通用性質:在一個矩陣中,每行都具有獨立的指令流(計算),而在另一個矩陣中是到其他cbns的所需傳輸(通訊)。因此,這確保了:a)計算計算塊節點中的所有指令不需要進一步的資訊;b)在整個程式碼的同一計算步驟中,所使用的資訊不會在其他任何地方發生變化;以及c)只傳輸不受此時間步中的計算影響的資訊。
圖10示意性地示出計算矩陣和傳輸矩陣的每一行如何一起表示一個單元的指令鏈和通訊項目的組合的方塊圖。單元取決於實現級別(如:裸元件(bare
assembly)、執行緒、程序、計算節點等)。顯然,空的計算單元或未使用的通訊項目(計算和/或傳輸矩陣中的空單元)會消失,以及起始通訊和結束通訊連結在一起,如圖10所示。
圖11示意性地示出本發明系統的一種可能最佳化的方塊圖,該系統為技術計算和處理問題提供了最佳化的理想硬體。這種最佳化最明顯的方法是通過建置來自計算和傳輸矩陣的不同行組合,並且每個組合都是一個可能的新平行/平行程式碼(因為同一單元上的傳輸消失,而計算相加),然後在目標基礎設施上評估其屬性,如圖11所示的簡單示例。
圖12示意性地示出具有兩個或更多個處理單元21(多個處理器)的示例性多處理器系統2的方塊圖,每個處理單元21共用主記憶體22/221/222/223和週邊裝置25,以便同時處理常式(rountine)程式碼3。
圖13示意性地示出根據本發明的示例性實施例的變型的方塊圖,其中原始碼31作為自動平行化編譯器系統1的輸入程式碼,該自動平行化編譯器系統1包括解析器11、計算塊鏈模組14、矩陣建置器15、最佳化器16、程式碼產生器17,自動平行化編譯器系統1產生平行化和最佳化的目標程式碼32作為機器碼或組合程式碼(assembly code),以供具有多個處理單元21的平行處理系統2執行。
圖14示意性地示出與本發明的自動平行化編譯器系統1相比,現有技術系統所熟知的示例性編譯器系統的方塊圖。
圖15示意性地分別示出樹結構和/或計算圖的示例性基本元素的方塊圖。計算被簡化為一種類型的敘述:result=param1 operation param2。數值運算元為+、-、*、/->,從數值角度來看,這些是唯一的。在作為高階語言的原始碼31中,值以variablename=value的形式分配給變數。這是指向「虛擬」位置(在variablename處)以儲存值的連結。原始碼31通常是循序的-這是程式設計師的思維方式。根據本發明,程式碼以不同的方式處理,本發明將程式碼視為
savelocation1=savelocation2 operation savelocation3。基於此,這裡引入基本圖或樹結構元素,該基本圖或樹結構元素例如具有兩個輸入資料節點33/331/3311(datanodein1和datanodein2)、操作節點332和輸出資料節點33/332/3312(datanodeout)。它們通過有向邊連接,如圖15所示。如本文所使用的,節點33是資料結構的基本單元,例如連結的處理器指令序列(計算塊節點333/操作節點332)或樹資料結構,作為資料輸入或資料輸出結構(datanodein/datanodeout)。節點33包含資料,也可以連結到其他節點33。節點33之間的連結通常在圖15的圖表中通過指標(箭頭)給出。
圖16示意性地示出原始碼的基本元素的方塊圖。在詞法分析器和解析器11中,高階語言的操作被簡化為基本圖或樹結構元素。因此,可以使用:(i)算術運算:+、-、*、/,(ii)邏輯運算式,如條件:a==b或a>=b或類似的導致真或假輸出的條件,(iii)變數賦值名稱=值,(iv)流控制操作,如(1)分支運算式,如if(條件){block1},以及(2)迴圈運算式,如loop(條件:增量變數:增量變數的最大值){block1}。這裡與組合程式碼中的基本操作相似,處理器21中的指令集通常具有3個參數。敘述和基本圖元素描述了操作(操作節點332)之後的兩次讀取(datanodein1 3311 and datanodein2 3312)和一次寫入存取(datanodeout 3312)。對變數名的多次賦值會產生此變數的各個版本並產生不同的資料節點331。如圖17所示,每個版本都會建置新的資料節點331。
圖18示意性地示出樹結構或圖中的示例性簡單操作序列332的方塊圖。可以逐條敘述地將程式碼31的序列添加到樹結構或圖。複雜運算式被簡化(由於需要將二進位計算系統上的計算簡化為這種形式)為一系列類型為result=param1 operand param2(結果=param1運算元param2)的運算式。如果操作節點332存取另一個操作節點332正在寫入的資料節點331,則通過有向邊(下一個邊)連接這些操作節點332來開始建置序列。通過該方法,寫入和讀取被映射到所有資料節點
331的樹結構或圖中(參見圖19)。作為簡化以下步驟的規則,僅允許對資料節點331進行1次寫入(這有助於簡化對圖形的後續操作)。否則,將引入新操作332來建模對資料節點331的多次寫入。
圖20示意性地示出△treadwrite35/351如何描述對資料節點331的寫入存取和讀取存取之間的時間的方塊圖。通過這種解釋,延遲時間△treadwrite351可以被視為數字,其表示資料節點331需被轉移到多處理系統2中的另一個程序的時間。△treadwrite351的解釋取決於硬體設置的級別。它是寫入存取3311(I/0程序、網卡等)與讀取存取之間基於技術和物理的時間。△treadwrite351是由硬體基礎設施給出的單位。△treadwrite351可以由不同的△t組成:△ttotal=△t1+△t2+△t3+△tn(如:L1快取存取-記憶體存取)。對於1-依賴關係(從1個依賴datanodein讀取操作節點),分別給出△treadwrite351,並且必須非常短。請注意,如果存在2-依賴關係,則會出現其他問題,這將在下面討論。
圖21示出了示意性地分別示出基本樹結構元素和圖元素的依賴關係的方塊圖。作為變型,如果設置只有一個操作節點332寫入一個資料節點331的規則,則將更加容易。然後存在不同但有限的情況來按順序添加新的操作節點332:(i)0-依賴關係:放置:獨立,(ii)1-依賴關係:放置:在依賴操作節點332之後;(iii)兩個資料節點331(在1中為3311和在2中為3312)的2-依賴關係:-不清楚->△treadwrite351依賴於其先前操作節點332的歷史;此時,為了找到△treadwrite351,必須知道datanodein1 3311和datanodein2 3311的所有先前的△treadwrite351的歷史。△treadwrite351的該歷史必須與△tlatency352進行對比,△tlatency352是通過系統2將資訊或資料點分發到另一個位置所需的時間。
圖22示意性地示出可以如何示例性地考慮資料/資訊的方塊圖,例如,可以將資料從一個程序傳輸到另一個程序,或者在執行緒的情況下,例如,可以防止同時寫入。例如,移動資料可以看作是基本操作(操作K),並且傳輸將持續
△tlatency 35。重要的是要注意,△tlatency 35的解釋在很大程度上取決於硬體系統,並且可以看作是通過系統傳輸資料/資訊的時間。此外,如果系統允許,例如在直接記憶體存取(direct memory access;DMA)網路傳輸的情況下,在此期間可以計算不受傳輸影響的操作節點。或者在多執行緒系統2的情況下(其中,兩個或更多個程序可以存取相同的資料,但競爭條件至關重要),該△tlatency 35可以看作是塊時間,其中,一個程序讀取/寫入對應的資料,而不允許其他程序讀取/寫入。傳輸(參見圖23)可以視為通過系統2將資訊或資料從源傳輸到目標位置。傳輸尚未明確定義模式(如:發送和接收),並且未給出最終程式碼中是否需要傳輸,因此不會消失。這只能在進行對應的平台/硬體基礎設施的最佳化後才能實現。
圖23示意性地示出示例性計算塊節點332/CB1、CB2、...、CBx的方塊圖。計算塊節點333可以按如下方式引入:(i)計算塊節點333由連接的操作節點332組成,(ii)操作節點332組成一個鏈34,(iii)計算塊節點333可以連接到下一個計算塊節點333或控制流節點334,例如,分支節點3341,(iv)△tcomputation 352是計算計算塊節點333中所有操作節點332(表示指令)的時間,(v)具有最小長度:△tlatency 35。在此期間,可以在計算基礎設施中傳輸資料,以及(vii)為了描述通訊,引入傳輸,該傳輸包括:(a)來源:計算塊節點333中的位置(開始,結束),計算塊節點333 id,操作節點id,datanodein1/datanodein2 3311或輸出資料節點3312,(b)目標:計算塊節點333中的位置(開始、結束)、計算塊節點333 id、操作節點332 id、datanodein1/datanodein2 3311或輸出資料節點3312。傳輸必須不能是明確的發送和接收資訊->計算塊節點333可以在塊333的開始和結束時開始發送和/或接收資料資訊(在計算出所有操作節點332之前和之後)->這種模型通常應用於顯式非阻塞發送和接收通訊方法(如:訊息傳遞介面(MPI)),其中,可以獨立於計算進行發送和接收(如:通過直接記憶體存取(DMA)網卡)。但是,通過明確引入具有
發送和接收操作的操作節點(然後擁有自己的△treadwrite351),塊發送和接收以相同的方式工作。如果例如在多執行緒方法中(執行緒共用相同的資料,但時間依賴關係只能由鎖定機制來保證)不允許通訊,則發送和寫入可以被解釋為鎖的設置和釋放,並且必須相應地解釋△tlatency351。
圖24示意性地示出在樹結構或圖中程式流控制元素的示例性處理的方塊圖。條件節點335基於以下實現:(i)if條件或loop條件中的每個條件都會創建新的「級別」,例如,cond:0->cond:1,(ii)每個條件都知道給出的其自身級別與程式的基礎級別(條件0)之間的級別數量(如:通過cond:0->cond:1->cond:2,這意味著計算出2個條件以到達程式碼中的此位置),以及(iii)條件節點335通過有向邊連接到具有相同條件的分支節點334/3341。進一步引入了分支節點3341:(i)每個條件具有至少一個分支節點3341,(ii)每個分支節點3341連接到屬於此分支(if子句部分中的程式碼)的計算塊節點333。條件由操作節點332產生,該操作節點332具有帶有「條件」結果(如:真或假)的(邏輯)運算式。引入條件是一種可以決定以「最早」方式將新操作分配給哪個計算塊節點的方法(計算塊節點必須位於同一條件級別的組中,但可以位於另一個分支節點中)。這裡必須注意的是,分支節點與「基本塊」定義中的分支中的塊不對應。
圖25示意性地示出“if敘述”的示例性處理的方塊圖。if敘述在一種條件(if(condition){codeA})下導致程式碼分支。作為需要在系統中傳輸的邏輯條件運算式的結果->在包含邏輯命令的操作節點332的計算塊節點333之後添加後續的空計算塊節點333->這是將比較結果(即,條件)傳輸到其他程序所需的時間->它可以用於計算其他事物-該計算塊節點333可以標記為分支傳輸類型(CB2)。此後,CB2 333的兩個有向邊被添加到新的分支節點,該節點具有用於分支1中的程式碼的新計算塊節點和所謂的隱藏分支節點(見下文),如果條件不滿足,則將使用該節點(但它不是else子句,然而它也可以是else子句)。條件運算式的結果
必須傳輸到後續分支->傳輸套件(transmission package)被添加到CB1的結尾。只有在解析分支程式碼部分中的所有敘述後才能設置來自分支節點和隱藏分支節點3342的邊,因此在if條件的結束敘述之後(見下文)。
圖26示意性地示出巢狀“if敘述”的示例性處理的方塊圖。由於程式碼中的每個敘述都按照其被讀取的順序添加到圖中,因此只有在達到if敘述->巢狀if敘述的結束標記後,才能完成分支節點3341與後續分支節點3341之間的控制邊連接。可以通過計算最後一個條件級別(使用結束if敘述降低)並遍歷圖到正確的節點33來找到具有正確的分支節點3342的正確的條件節點335。
圖27示意性地示出巢狀“loop敘述”的示例性處理的方塊圖。請注意,根據上面針對if敘述說明的分支,可以通過一些調整來處理loop敘述。只要滿足一個條件,loop敘述就會導致程式碼的分支,在此示例中,通過增加變數直到達到某個值(loop(condition,i,2){codeA})。這與if敘述相同->添加CB4 333以進行具有loopbranch-transmission類型的傳輸。將增量操作節點332添加到運算式中定義的變數。需要將條件運算式的結果傳輸到後續分支->將傳輸套件(transmission package)添加到CB3 333的末尾。只有在達到迴圈敘述的結束敘述(見下文)後,才能設置來自具有傳輸類型的計算塊節點333和迴圈分支節點3343(branch1)之後的分支節點3341(branch2)的邊。
圖28示意性地示出巢狀loop敘述的示例性處理的方塊圖。由於程式碼中的每個敘述都按照其被讀取的順序添加到圖中,因此只有在達到loop敘述->巢狀loop敘述的結束標記後,才能完成loopbranch-transmission類型的計算塊節點333與後續分支節點3341之間的控制邊連接。這可以通過基於最後添加的敘述找到較低的條件級別並找到正確的迴圈分支傳輸節點33來完成。具有比較和增量操作節點332的計算塊節點333以及loopbranch-transmission類型的計算塊節點333需要重新連接到較早迴圈的分支節點3341。以及迴圈後的分支節點連接需要更
新
對於變數賦值,賦值也是操作節點,但是對於a=0和a=b,只有一個資料節點(in1)而不是兩個(in1和in2):(i)a=0(-->變數名=數字):-可以發生0依賴關係和1依賴關係,(ii)a=b:-必須添加複製操作節點,因為明確地將資料從資料節點複製到具有正確版本號的另一個資料節點,-必須是1依賴關係,(iii)變數名的重新定義會導致變數的新版本和新的資料節點331。此外,陣列和指標變數可以以類似的方式處理。
圖29示意性地示出分支和變數版本的示例性處理的方塊圖。由於編譯器以清晰的資料中心視角看待程式碼,因此也不必在條件下對資料進行顯式改變。在圖30中,在條件cond0下在分支0中計算c。在條件cond0->cond1下在分支1中重新定義c。如果CB1中的比較函式為假->程式流到達隱藏分支節點3342 hbranch1->將值從資料節點@位置mmapid:12(c=1+5的資料節點)複製到新位置,就像CB3中的值為真一樣。這很重要,也是存在隱藏分支節點的原因,它不是(僅)else敘述。必須完成上述操作,因為程式設計師為真條件編寫資料流程,而不是為假條件編寫資料流程(預計不會發生任何事情),但在資料依賴關係圖中,這並不正確,因為在解析程式碼期間,分支1中的c=8對變數進行了新版本操作。此外,必須對條件下的每個變數賦值都進行此操作。
圖30示意性地示出分支和傳輸的示例性處理的方塊圖。在這種情況下,當在不同條件->不同的分支節點下發生例如1-依賴關係或2-依賴關係時,意味著表示在此之前必須發生資訊傳輸的分支節點。在條件相同但分支節點不同的2-依賴關係情況下也是如此。但是,還有其他可能性來解決這個問題。這意味著需要到對應的分支節點中的該新的計算塊節點的資料傳輸。因此,也可以以其他方式處理分支節點。
圖31示意性地示出陣列和動態陣列的示例性處理的方塊圖。陣列可以看作是具有相同長度的資料序列中的基本變數名稱和偏移量(如:C中的指標變數和偏移量)。因此,可以通過兩步操作來處理:找到基本變數的位址/位置並獲得偏移量,然後轉到變數定義找到的偏移量(類型/長度,例如,u_int8<->u_int32)。值得注意的是,在這種特殊情況下,該操作實際上不是真正直接的基於CPU的基本指令,因為這些指令是由處理器本身通過首先在L1-Ln快取中進行查找等來執行。
圖32示意性地示出計算塊節點333的示例性拆分和融合情況的方塊圖。在2-依賴關係的情況下,必須存在兩個計算塊333的融合情況。如果兩個操作節點從同一資料節點進行讀取->這將創建兩個計算塊節點333的拆分情況。對於這兩種情況,通過引入新的計算塊節點333(如:融合傳輸或拆分傳輸),可以通過系統發送傳輸資料/資訊來拆分或(重新)連接兩個計算鏈34(計算塊節點鏈)。傳輸資訊被添加到新創建的傳輸類型的計算塊節點。
圖33示意性地示出如何在圖流(graph flow)中縮小傳輸間隙的示例的方塊圖。該步驟僅在原始碼中的所有敘述都添加到圖中之後才會發生。然後,向未通過類型為傳輸的計算塊節點333連接的分支節點添加類型為b2b傳輸的附加計算塊節點333。這是通過系統傳播分支更改所需要的。在後面的步驟中,必須將這些傳輸塊設置為最新的塊編號(計算步驟),以便可以通過系統2傳播分支更改
的資訊。
圖34示意性地示出將時間視角引入樹結構或圖的示例的方塊圖。從連接的操作節點332和流控制計算塊節點333,樹結構或圖可以看作具有△tcomputation352的計算塊333的鏈34。在每個計算塊節點中,操作節點都是分組的,因此△treadwrite351是「最佳的」(在局部性意義上,因此複製資料比計算資料慢)。計算塊節點中的這些順序鏈不應被打亂,因為它們表示程式碼的順序部分。為了平行程式碼,計算塊節點需要通過時間進行平衡,以使兩個傳入的計算塊節點鏈(以及因此的操作鏈)彼此平衡->因此在融合情況下,兩個傳入鏈必須具有相同的運行時。否則,整體計算會暫停必須計算另一鏈的時間。如果在計算塊節點333的所有融合情況下,傳入鏈(CB1和CB2)具有相同的運行時和開始時間點,則實現最並行/最佳化的平行程式碼。在拆分情況下,可以同時啟動不同的鏈,從而創建平行計算。必須注意,一系列“+”和某些條件下的“*”可能會出現在計算塊節點中,並且它們可以再次拆分為平行計算。但是,這在最佳化階段很容易檢測到。每個計算塊節點都需要△tcompute來計算其中的所有操作節點332。現在可以嘗試平衡△tcompute和系統可用△tlatency35,因為每個計算塊節點333都可以被視為最小△tlatency35這麼長,正如前面的步驟中介紹的那樣。通過假設每個計算塊節點333必須至少有△tlatency35這麼長,就可以在系統2中傳輸資料。可以為每個計算塊節點引入有限的塊編號。它們表示操作節點332的順序鏈34的計算塊333的所需序列。這將產生獨特且定義明確的分組圖,其中,每組操作都有唯一的編號,並且能夠根據這些編號進行轉換以將它們帶入矩陣。然後可以使用這些矩陣來(如:使用現實世界時間)最佳化/映射到指定或理想的基礎設施。
關於將塊圖或樹結構分配給運行時編號,可以實現編號,例如作為遞迴函式,逐個分支節點地解析計算塊節點及其邊的圖。在每個分支節點3341中,開始對計算塊節點333進行編號。然後,以遞迴方式遍歷分支節點3341的計算塊節
點鏈341。在分支節點之後,指定分支節點中的計算塊節點,已知最大塊號。這用於下一個分支節點。規則是計算塊節點333步進到計算塊節點333。是否只有一個或沒有前一個計算塊->將塊號設置為實際塊號並增加塊號(用於下一個計算塊節點)。是否有2個在前計算塊節點->這是一種融合情況->如果這是第一次存取該節點->附加到塊號的區域列表。否則,如果這是第二次存取->使用最高塊編號(實際來自函式呼叫或儲存在節點列表中)。是否有1個後續計算塊節點->呼叫計算塊節點的函式(遞迴方法)。是否有2個後續計算塊節點->拆分情況->以遞迴方式呼叫兩個計算塊節點編號函式。如果沒有(因此沒有下一個計算塊節點)->如果有,則返回下一個分支節點並完成實際的遞迴呼叫。通過適當地調整分支節點傳輸中的塊號,呼叫圖基於計算塊節點連接編號為離散時間圖的形式,其中,每個計算塊節點具有有限數,必須在同一時間段內計算。
圖35示意性地示出將圖拆分為單個/「傳輸耦接」呼叫鏈(call chain)的示例的方塊圖。此時,可以將呼叫圖或樹結構拆分為計算塊節點333的單個鏈34,這導致單個操作節點系列,其中每個計算塊節點333具有對應的傳輸資訊。每個計算塊節點都有唯一的編號。所需的傳輸/通訊儲存在計算塊節點中。
圖36和圖37示意性地示出從傳輸到定向通訊的可能過程的示例的方塊圖。通訊的方向可以取決於計算塊節點333的編號,如圖36和圖37的示例所示。必須確保所有傳輸計算塊節點都位於一個分支節點中的最高+1塊編號(以確保具有足夠的時間將程式流的資訊傳播到所有計算單元/過程)。明確地傳輸帶有源和目標資訊的傳輸包,以在正確的計算塊節點中發送命令。接收部分只能在最佳化步驟之後完成。訊號傳輸(如:分支或迴圈傳輸)必須實施到對應分支中所有連接的下一個計算塊節點333。
圖38示意性地示出從圖形到矩陣的過程的示例的方塊圖。此時,圖形由具有計算塊節點333的單鏈34的分支節點組成。每個計算塊節點333都知道必須將
哪些資訊(資料和/或訊號)傳輸到其他哪個計算塊節點333。每個計算塊節點333都具有離散數,其表示在程式運行期間必須對每個塊進行計算的順序。因此,圖形可以解釋為矩陣,其中,每個單元都是計算塊節點,每行是單個單元,每列是離散塊號(順序號),並且每個單元(計算塊節點)都知道必須將哪些資訊發送到其他計算塊節點333(單元項目)。每個單元都知道在其塊號期間必須計算哪些操作(操作節點鏈)以及按什麼循序計算-它們是獨立的並且必須按正確的順序進行->具有清晰的最近寫入和讀取連接。每個操作節點都知道讀取(in1和in2)和寫入(out)所需的正確全域資料。現在可以針對目標硬體基礎設施(CPU、(如:通過MPI)具有顯式網路傳輸的CPU、GPU(記憶體傳輸,然後向量化操作)等)對矩陣進行最佳化(例如在數值上)。
圖39示意性地示出示例性程式路徑和矩陣的方塊圖。z軸維度是通過程式碼的每條路徑的程式碼視角(每個條件變化都會引入通過程式碼的不同路徑)。第三維(或z維)是條件開關,意味著每組傳輸和計算矩陣在1個條件下都是通過程式碼的一條路徑。從這個角度來看,通過程式碼的每條路徑都可以通過兩個矩陣表示,其中行表示獨立鏈,列(x軸和y軸)表示塊號。分支通過切換到對應的z維矩陣集(通過程式碼的路徑)而發展,每個過程節點都需要知道其自身所有可能的鏈34。在本描述中,每個條件變化都由一組計算和傳輸矩陣獲得,但矩陣也可以看作張量,然後例如計算和傳輸張量可以在其行中包含分別對應傳輸的獨立操作,在每列中包含離散計算步驟,在其第三維中包含不同的條件。或者可以把所有內容打包到一個張量中,結合每個塊號、單元和條件等的計算和傳輸等。
關於最佳化,現在適用的自動最佳化技術有很多:合併行以減少平行性,將單個操作鏈移到最早的點(在單元中發送命令就像屏障(barrier)一樣),通過最佳行組合減少通訊等。編譯器系統1可以用於獲得單元項目的運行時的估計結果,或者可以使用丹麥技術大學的Agne Fog等方法來提取CPU和快取互動,或
者使用CPU製造商的表格,或者使用openCL進行編譯等。技術領域有各種各樣的最佳化技術將矩陣映射到目標基礎設施。例如,在一個張量用於計算和一個張量用於傳輸的視角中,可以通過組合每個張量中的相同行來檢索不同的平行程式碼版本,從而為每個塊號產生新的「計算和傳輸」組合。這將導致減少平行/並行單元的數量。通過合併行,可以減少傳輸或對傳輸進行分組(在最終的程式碼通訊中)並將計算相加。如果塊開頭沒有send()或read(),則可以將塊中的操作節點移動到前一個塊。每個單元都知道它所需的資料量(記憶體等)。目標平台上不同的指定△tlatency 35可以用於決定哪個順序部分(計算矩陣中的單元項目)必須在哪個硬體單元處進行計算。基礎設施中的通訊類型可以根據需要實現,從非同步或非阻塞到MPI框架中的顯式阻塞發送和接收命令,通過確保設置和釋放正確的屏障來防止競爭條件,到GPU基礎設施中的批量複製傳輸等。因此,可以通過選擇適當的現有最佳化技術輕鬆選擇最佳化技術,例如通過為每個單元的每個程式碼(計算和傳輸)使用SOTA編譯器。所使用的最佳化技術將引入更廣闊的視角,以獲得比其他技術更「完美平行」的程式碼(在加速與斜率為1的程序數的線性依賴關係平均值上完美)。因此,可以將矩陣進行數值最佳化,以獲得針對目標硬體的新平行和最佳化/平行程式碼。這可以自動完成,因此與其他方法相比,這是很大的進步。由於這是由軟體完成的,因此軟體現在可以平行自己的程式碼,這是新的,並帶來了新的可能性,例如,機器學習(ML)或人工智慧(AI)應用中的自適應模型、計算流體動力學(Computational Fluid Dynamics;CFD)計算中的網格或渦流方法(vortex method)中的粒子源,或結合具有不同空間和時間解析度的不同模型方法(有限體積法(FVM)與基於代理的模型和統計模型)等。
圖40示意性地示出示例程式碼提取的方塊圖。可以通過多種實現方式從矩陣中提取程式碼:直接提取組合程式碼、編寫程式碼檔並通過最先進的編譯器
編譯它們、顯式實現發送和接收方法,例如用於訊息傳遞介面(MPI)。計算矩陣單元具有程式碼=操作形式的敘述,並且必須在“相同”時間間隔內計算每列,並且每行都是單獨的過程。傳輸矩陣單元知道必須與哪些其他單元共用哪些資訊。
圖41示意性地示出針對函式雙遞迴呼叫的計算塊節點(CB)及其操作和對應的資料節點(類似於表1中的標記)的方塊圖。
圖42示意性地示出導致附加傳輸的函式遞迴呼叫的方塊圖。表示到計算塊節點中的位置(計算塊節點的起點或終點)的傳輸。
圖43、圖44和圖45示出了方塊圖,其示意性地示出根據計算塊節點在程式碼中的呼叫位置對計算塊節點進行編號的步驟,從而產生如圖43中示意性表示的虛擬圖(pseudo graph),這轉而產生了如圖44和圖45所示的針對每個路徑號的計算和傳輸矩陣。從將矩陣視為m×n物件的角度來看,針對每個路徑號將創建一組計算和傳輸矩陣,從而產生2個計算和2個傳輸矩陣。路徑(或條件)的切換可以在圖46中看到,其中,指示了‘真/假’訊號。
圖46示出了方塊圖,其示意性地示出將傳輸矩陣中的起始和終止通訊單元組合起來並消除計算矩陣中的空單元(針對每條路徑)並將它們帶回不同的程式碼片段的結果。基於該程式碼片段,可以直接產生程式碼(作為編譯器)或將程式碼傳輸回程式碼,然後使用SOTA編譯器產生機器碼(作為轉譯器),例如使用SOTA編譯器中實現的單元特定最佳化技術,這些技術主要針對一個單元編譯。
圖47示出了方塊圖,其示意性地示出如何使用所介紹的方法來處理解析程式碼中的函式呼叫。解析函式定義後,可以在呼叫函式的位置「複製」/使用產生所得到的計算塊節點(或矩陣項目)。
圖48示出了方塊圖,其示意性地示出本發明方法如何以比輸入程式碼更並行的解決方案映射和/或最佳化程式碼。如圖所示,最佳化程式碼是行之間的組合,圖表中示出了標記為branch2b的分支節點中cbn的組合(參見圖43)並將它們
組合在一起,參見圖48。呼叫函式是在方法中將計算塊節點分別放置在矩陣中的正確位置,以應用對應的傳輸,如圖47所示。考慮到這一點,函式的遞迴呼叫可以通過本發明方法看作是函式參數和結果變數在返回敘述中的傳輸和「讀取」以及「寫入」,參見圖48。
圖49示出了方塊圖,其示意性地示出根據用於計算輸入4(fib(4))的費波那契數的函式呼叫的示例,逐步說明額外的計算塊節點和減少傳輸(因為所有傳輸都在一個計算鏈上)如何產生更最佳化的原始碼。
圖50示意性地示出步驟4的方塊圖,步驟4示出了‘n=4’情況下呼叫的cbn,其中,由於遞迴呼叫可以在程式碼中非常簡單地檢測到,因此很容易不在最終應用中全維度實現遞迴呼叫,如圖49到圖53中經過一些簡化所示出的,其中,該鏈的深度直接取決於fib(n)中的數字n。
圖51示意性地示出步驟5的方塊圖,步驟5示出了將要發生的傳輸(將最後一次「寫入」資料節點的資訊傳輸到發生資料節點的「讀取」的地方,並在對應的計算塊節點中記住該資訊)。
圖52示出了方塊圖,其示意性地示出由於所有計算都在一條鏈上,因此傳輸將消失,如圖52所示。
圖53示出了方塊圖,其示意性地示出當求解每個步驟時,這將導致圖53中形式的程式。
圖54示出了方塊圖,其示意性地示出函式呼叫以及因此遞迴呼叫也可以被解釋為應用本發明方法的陣列操作,因為它將資訊(函式參數param[i])傳輸到函式宣告的分支節點中對應的cbns,然後將返回值傳回a[i]。
圖55和圖56示意性地示出在Python中求解二維(two dimensional;2D)熱傳導方程式(Heat equation)的實現方式的方塊圖。陣列中的每個項目都是資料節點。在本發明的方法中,從陣列索引進行的讀取是具有索引的資料節點和陣列的基
位址的操作節點。陣列操作可以看作具有對應的資料節點的操作節點,參見圖56。
圖57示意性地示出針對具有陣列操作a[i+Δiw]=a[i]的迴圈陣列的示例的對應的計算塊節點的方塊圖。
圖58示意性地示出初始塊(圖55)在圖中詳細表達的方塊圖,如圖58所示。
圖59示出了方塊圖,其示意性地示出通過使用一維(1D)陣列符號並應用該方法的基本規則,推導出模型方法。
圖60示出了方塊圖,其示意性地示出諸如j迴圈中的陣列操作(圖55)等敘述產生5個計算塊節點,表示對陣列的「讀取」操作,然後是計算算術解的計算塊節點,然後是對陣列在位置[k+1][i][j]處進行寫入的計算塊節點。這種表示形式是示意性透視圖以更清楚地示出該方法如何考慮這種陣列操作,從而產生圖60中所示的情況。
圖61示意性地示出方案的方塊圖,該方案可以從以下事實中得出:每個迴圈因此創建具有「讀取」或「寫入」操作節點和對應的傳輸的新計算塊節點。因此,每個迴圈迭代都會引入計算塊節點,並為一個單元(稍後計算操作的單元)形成讀取、計算、寫入步驟鏈。如果這些計算塊節點之間出現「寫入」和「讀取」依賴關係,則會引入傳輸,參見圖62。
圖62示出了方塊圖,其示意性地示出「讀取」和「寫入」操作的索引中的偏移量可以導致包含「讀取」和「寫入」操作節點的計算塊節點之間的傳輸。
圖63示出了方塊圖,其示意性地示出從迴圈中索引指示的陣列的資料節點的「讀取」和「寫入」的依賴關係中得出的結論。
圖64示出了方塊圖,其示意性地示出「讀取」和「寫入」計算塊節點中的「讀取」和「寫入」操作之間的依賴關係,以及利用如圖55所示的3個巢狀迴圈實現方式由具有中心差分法的2D熱傳導方程式(Heat equation)產生的迴圈大小
(在這種情況下為網格大小)。
圖65示出了方塊圖,其示意性地示出對於一個巢狀迴圈,對於每個巢狀迴圈,可以得出規則來處理間隙以及對所提出的模型中的「轉移」的影響。間隙是由於迴圈未遍歷完整陣列/網格/維度而導致的,在迴圈定義中用j0和Bi表示。
圖66示出了方塊圖,其示意性地示出結合通過迴圈遍歷陣列子集而產生的間隙,可以推導出離散化等式的傳輸模式,並且可以為傳輸建置模型,這取決於間隙大小、迴圈的大小(在這種情況下為網格),這些迴圈由本發明方法的計算塊節點表示。該方法還可以應用於每個迴圈的每次迭代,並將對應的元素添加到圖/樹結構,但這可能帶來一些效能問題,無法將該方法應用於大問題(如:大網格)。
圖67示出了方塊圖,其示意性地示出通過nX=5和nY=4的非常小的示例,這導致如圖67所示的成組的計算和傳輸矩陣。在傳輸矩陣中,箭頭“->”表示獲得資訊,“<-”表示將資料發送到其他計算塊節點。
圖68示出了方塊圖,其示意性地示出單元之間發生的傳輸,因為每個單元由傳輸矩陣中的一行表示,而計算則由計算矩陣表示。在該圖示中,計算和傳輸矩陣的項目一起示出。它是計算和傳輸矩陣的組合。
圖69示出了方塊圖,其示意性地示出此時重要的是要注意這並不意味著必須進行發送和接收,它也可以例如由共用記憶體段共用並由屏障或鎖保護,或者因為它由快取共用並而因此由CPU處理而消失-這取決於所使用的傳輸/通訊機制。這可以轉移到模型,分別導致如圖69所示形式的程式碼。由於該方法基於保留「寫入」->「讀取」的所有依賴關係,並且形式為a[i1]=a[i2]的計算是首先利用a[i2]「讀取」資訊,然後利用a[i1]「寫入」資訊,因此引入第一次「讀取」(p0-p1)的操作。
圖70示出了方塊圖,其示意性地示出可以如何使用傳輸來創建時間模型。
灰色是元(meta)值(如:從變數類型定義等中得知),它們也可以用於將矩陣映射/最佳化到指定的硬體基礎設施。該示例中未使用這些值。
圖71示意性地示出完全解析的簡單模型的方塊圖,以說明可能的最佳化步驟。
圖72示意性地示出行為的方塊圖,在具有兩組不同的cpuPower和networkLatency的情況下,對於Δt=計算,結合cbn * cpuPower+number of transfers*networkLatency,可以為nX=2048和nY=1024的網格得出該行為。
圖73示出了方塊圖,其示意性地示出費波那契源(Fibonacci source)也可以使用迴圈來實現。根據2D熱傳導方程式(Heat equation)的示例,這產生圖73中的結果。
圖74示出了方塊圖,其示意性地示出將本發明方法應用於指標消歧的技術問題,可以看出,本發明方法解決了通過將函式參數作為指標傳遞而發生的消歧,因為它將指標作為資訊,並且該消歧將在傳遞消失的步驟中得到解決,如圖74所示。請注意,標籤“Intel P5 Infiniband”和“Intel Haswell L3-cache”一般可以表示配置1和配置2。
圖75示意性地示出LLVM中間語言表示(Intermediate Representation;IR)和計算塊(CB)中指令的相應分組的方塊圖。
圖76示意性地示出計算和傳輸段的形成的方塊圖。
圖77示意性地示出針對nunit=3的計算和傳輸段的時間模型結構的方塊圖。
圖78示意性地示出標記為針對nunit=2的組合(c1)和組合(c2)的2個單元的選項的方塊圖。
圖79示意性地示出針對一個單元nunit=1的運行時的方塊圖。
圖80示意性地示出程式碼分解為矩陣或圖形的表示的方塊圖。
圖81示意性地示出針對fib(3)的伽馬圖的形成的方塊圖。
圖82示意性地示出具有循序和平行時間估計結果的計算圖的方塊圖。
圖83示意性地示出針對TT=1,3,10的三個不同的計算圖的方塊圖。
圖84示出了方塊圖,其示意性地示出使用系統和方法的實施例變型是在自動平行化編譯器的中端,即,在SOTA編譯器中使用方法。
圖85示意性地示出程式碼分解為矩陣或圖形的表示的方塊圖。
圖86示意性地示出CB的組合以及結果向計算單元的分配的方塊圖。
圖87示意性地示出伽馬圖中有區別的計算和傳輸/通訊部分的方塊圖。
圖88示意性地示出基本塊(basic block;BB)和控制流圖(control flow graph;CFD)表示中並且具有本發明的計算塊(CB)的程式碼路徑的方塊圖。
圖89示出了方塊圖,其示意性地示出具有計算塊的圖形,其中一個if條件導致分支。
圖90示意性地示出2個單元和一個if分支的計算和通訊段的方塊圖。
圖91示出了方塊圖,其示意性地示出控制流圖中迴圈結構(loop body)作為讀取、計算和寫入計算塊(CB)。
圖92示意性地示出針對i=0-7的計算塊和傳輸的展開表示的方塊圖。
圖93示意性地示出具有平行CB和顯式迴圈迭代的迴圈部分的方塊圖。
圖94示意性地示出迴圈部分資料分析‘A-已解析’或‘B-結構’(B模型)的方塊圖。從迴圈中的資料分析中獲得伽馬節點是NP完全問題(A-已解析)。利用該方法的引入的實施例變型,可以從迴圈頭/鎖存器和用於存取隨機存取資料結構的敘述中獲得伽馬節點。
圖95示出了方塊圖,其示意性地示出具有CB的通用結構,該通用結構用於具有對隨機存取資料結構(如:陣列)的敘述的n巢狀迴圈。
圖96示出了方塊圖,其示意性地示出具有用於CB中1讀寫依賴關係的伽馬節點的情況1。
圖97示出了方塊圖,其示意性地示出具有K次讀取和1次寫入的情況2,其中,K=2。
圖98示出了方塊圖,其示意性地示出具有K次讀取並指示如何檢索n ∥和K=3的情況2。
圖99示出了方塊圖,其示意性地示出組合平行CB導致n unit=2上減少的傳輸和匯總的計算。
圖100示出了方塊圖,其示意性地示出根據讀取移(shift)位元建置CB組合導致傳輸減少。
圖101示出了方塊圖,其示意性地示出根據讀取移位元建置CB組合產生描述組合數ncomb和傳輸大小T的不同函式。
圖102示意性地示出對於n comb>n comb,const,每個CB的最小傳輸和固定傳輸S T,const的方塊圖。CBi>3和i<blocksize-5之間的傳輸消失。
圖103示出了方塊圖,其示意性地示出在資源有限的情況下,通過添加傳輸來將伽馬節點均勻地分佈在有限的資源上,從而實現伽馬節點的最佳分配。
圖104示意性地示出結構化資料以及未對整個陣列進行迭代時所產生的間隙的方塊圖。
圖105示意性地示出具有CB的伽馬節點以及每nloop次迭代之後的傳輸及其作為伽馬節點的表示的方塊圖。
圖106示意性地示出不同可能的實施例EV1至EV5的方塊圖。圖106中的EV1示出了最基本的實施例變型,其包含本發明系統和方法的所有其他實施例變型的基礎,其通過將總體延遲時間最佳化到最小來提供程式碼的自動平行化。實施例變型EV1基於一些基本假設,這些假設包括但不限於:(i)自動平行化的最佳化不受可用的平行處理器(單核心2103和/或多核心2102)數量的限制,(ii)記憶體存取以及到和來自處理器2102/2103的資料傳輸的延遲時間與在處理器
2102/2103上計算計算塊節點333所需的處理時間相比很小,以及(iii)計算不同的計算塊節點333的時間差能夠忽略不計。後者可以基於對計算塊節點333的極基本結構的創造性選擇來假設。為了最佳化有限的資源(指定最大杆維度(rod dimensionality)),可以通過建置組合來降低行維度。這種最佳化形式與以下假設有關:(i)與傳輸矩陣中的傳輸消失相比,任何傳輸都會引入顯著的延遲時間Δt transfer >>Δt transfer 0。(ii)傳輸之間的差異很小Δt transfer,i Δt transfer,j ,這意味著所有傳輸都具有大致相等的延遲時間。假設(i)和(ii),計算和傳輸矩陣中的最大行維度定義系統的組合複雜度(每個BB若干CB)。根據Wall,DavidW.,“Limits of instruction-level parallelism”,第四屆程式語言和作業系統架構支援國際會議論文集,1991,每個基本塊平均有3到4個ILP機會。(i)和(ii)適用於大多數現代多核心處理器。然而,這些假設可能導致錯過一些最佳化機會,並可能限制組合最佳化步驟,特別是對於迴圈部分和/或如果(iii)單元具有不相似的計算效能和傳輸延遲。
圖106中的EV2示出了實施例變型,其包括通過組合屬於(i)計算矩陣中同一列的計算塊節點333(即,由於可用資料而平行可執行)和/或(ii)同一分支節點334(=計算段)的傳輸矩陣中的同一行中具有空單元的連續計算塊節點333來建置本發明的任務的過程。這允許特定於處理器架構和/或特定於系統架構的最佳化自動平行化,其中,處理器2102/2103的數量、不同的處理器/核心2102/2103和/或處理器單元21的效能、不同的記憶體單元22的大小和回應時間的差異,特別是不同的處理器暫存器2211和/或處理器快取2212和/或RAM單元2213。這些特定於硬體的結構參數可以包括在自動平行化的最佳化中,因此通過建置不同長度的任務36來均衡,例如,任務36的已處理的計算塊節點333的數量36i,其中,任務36的計算塊節點333屬於計算矩陣151的同一列,或者是同一分支節點334的連續計算塊節點333,而沒有對應的傳輸矩陣152中的項目。這種區分在圖
80中在伽馬圖a)和b)中示出。
圖106中的EV3示出了本發明系統1和方法處理迴圈中隨機存取的資料結構的平行化,而無需明確地解決迴圈部分中的資料依賴關係,而是通過分析迴圈頭/跳躍定義來評估受影響的敘述對存取隨機存取的資料結構的讀寫動態和所用迴圈變數的影響。
圖106的EV4(在圖110中更詳細地示出)示出了本發明系統1在最佳化積體電路(IC)或晶片設計中的應用,通過涵蓋設計積體電路或IC所需的邏輯和電路設計來解決IC設計中的電子工程技術問題。
圖106中的EV5示出了用於在量子計算系統中獲得量子閘的本發明系統的實施例變型。在經典計算中,基本儲存裝置元素是位元(bit),並且可以有0或1。0和1在電子層面上表示為兩個不同的電壓(參見R.Portugal的基本量子演算法)。為了獲得經典計算的結果,計算的輸出處的電壓被測量為電壓。在量子計算中,單位是量子位元(bit),在計算結束時也假設為0或1。與位元(bit)相比,量子位元(bit)可以同時為0和1,這意味著在計算過程中共存。量子共存(在測量之前)可以通過正交向量的線性組合來獲得(參見例如R.Portugal的基本量子演算法)。通過測量,量子系統不可避免地受到影響並產生隨機結果,類似於經典位元(bit)。么正矩陣(unitary matrix)的定義是如果它的共軛轉置UT也是它的逆UTU=UUT=UU-1=I,其中I是單位矩陣。為了操縱量子位元(bit)的狀態(將狀態視為測量之前量子位元(bit)的“值”),需要量子閘,其中單量子位元(bit)量子閘可以例如表示為2×2么正矩陣。描述量子閘的任何矩陣都必須是么正的,因為量子閘必須是可逆的並且保留振幅的概率。20世紀70年代,Charles Bennett展示了可以如何將任何經典計算轉換為可逆形式(參見C.Bennett的Logical reversibility of computation(計算的邏輯可逆性))。這可以通過利用額外記憶體儲存中間資料來實現。將f(x)視為表示經典計算,f(x)能夠將n個輸入位(bit)操縱為m個輸出位。
簡化為,通過保留垃圾g(x),每個經典閘都可以轉換為可逆版本。圖113(下圖)示出了從輸入xi到輸出f(x)的經典計算。這種方法能夠從指定的經典計算電路組成可逆形式。這種可逆形式使得檢索具有所需么正性質的量子閘成為可能。這種方法的圖示形式由圖114給出(見下文)。
按照圖111(下圖),利用本發明的系統能夠例如從巢狀迴圈和存取陣列(EV3)的敘述中自動檢索經典組合積體電路的表示(EV4)。該方法的視角是將計算塊中的分解視為提取每個計算步驟的唯一資料位元大小,這是平行計算輸入位所需的最小值。這在圖39中示出並標記為“獨立鏈”。矩陣中的每一行表示在程式中平行計算此步驟所需的資料大小。可以使用該資訊,並且可以使方法能夠從(巢狀)迴圈中匯出量子閘。每個範本的輸入位元大小可以通過Σ(t i +g k ).dr匯出,其中,t i [a,b,c,d,e]描述輸入位(參見圖113),k [0,6]是所需的垃圾記憶體位元,dr是對應的資料大小(如:浮點值為32或64位)。該方法使得能夠提取平行計算塊,對於複雜情況也能夠作為如圖55所示的2D熱傳導方程式(Heat equation)實現的實現方式。EV3能夠在不解決所有資料依賴關係的情況下實現提取平行計算塊,並在迴圈n ∥=n isub .n jsub 中檢索平行計算塊的數量,參見圖64。該資料大小資訊使得能夠檢索作為運行時參數的函式的所需的量子位元(bit)數(n isub 和n jsub 分別是nX和nY=網格(問題大小)的函式)。量子計算的計算基定義為2 n ,其中,n是量子位元(bit)數。由於該方法能夠從平行計算塊中提取平行組合電路(圖111g),因此該方法能夠推導出么正矩陣(量子閘)來計算成組的輸入位,如圖114通過f(x)所示。
圖107示出了更詳細地示意性示出圖106的實施例變型EV2的方塊圖。實施例變型EV2包括從EV1的計算塊節點333建置伽馬圖的過程,其中,計算塊節點333和初始精細度中的伽馬節點由計算矩陣中的單元組成。與一個邊連接的伽馬節點可以在後續步驟中組合為一個伽馬節點,因為它們由一個計算段組成。計
算段是同一分支節點334的一系列CB,在傳輸矩陣中沒有任何傳輸。例如,這允許針對處理器2102/2103的數量、不同處理器/核心2102/2103和/或處理器單元21的效能、不同記憶體單元22的大小和回應時間差異(特別是不同處理器暫存器2211和/或處理器快取2212和/或RAM單元2213)實現特定於處理器架構和/或特定於系統架構的最佳化自動平行化。在伽馬圖的表示中,邊表示傳輸Δt transer 。這實現了新的有界最佳化方法,例如通過用硬體定義的傳輸時間(TT)固定所有傳輸Δt transer 來重新形成伽馬節點。遍歷圖時,如果平行計算子節點並添加傳輸成本TT或者循序運行全部或部分子節點(如:在多執行緒環境中,TT可以看作是上下文切換時間)而無需平行化的成本是有益的,則可以通過組合子節點(可平行運行)來定義父節點。
圖108示出了通過示出本發明系統1在迴圈平行化中的應用更詳細地示意性示出圖106的實施例變型EV3的方塊圖。這可以沿著2D熱傳導方程式(Heat equation)示例來說明,其中,可以根據通過存取迴圈結構(loop body)中的陣列u[i+nX*(j*nY*k)]形成的陣列讀取和寫入敘述獲得的讀寫距離ΔI rw 來匯出伽馬圖。可以從迴圈頭/鎖存器中獲得迴圈變數i、j和k的變化及其對運行時變數的依賴關係。請注意,由於平行化,即,多核心或多處理器程式碼的最佳化產生(特別是任務排程)在大多數程式碼中被視為NP完全問題,因此現有技術中的主流觀點是,最佳化的平行化只能通過應用啟發式方法來實現。利用EV3的方法允許迴圈部分具有包括隨機存取資料結構和迴圈變數的敘述,這是非NP完全解。通常,迴圈部分是程式碼中計算工作量最大的部分。本發明的系統EV3和方法允許獲得針對迴圈部分的簡單的、非NP完全系統。對本發明的運行系統進行的研究證明,從離散化的2D熱傳導方程式(Heat equation)(PDE)原始碼開始,以提供最佳化的可執行訊息傳遞介面(MPI)平行程式碼(發送和接收原理,即必須完全解決資料依賴關係),其中,MPI是可移植的訊息傳遞標準,設計為在平行計算
架構上運行。此外,EV3和方法允許降低在EV1和EV2中通過精確或啟發式方法找到最佳解的複雜性,參見圖109b。
其中,表示目標函數及其可行解的集合 b}。作為示例,根據R.Salman在”Algorithms for the Precedence Constrained Generalized Travelling Salesperson Problem”,瑞典哥德堡查爾姆斯理工大學,2015年中描述的工作,最佳化伽馬圖的問題可以表述為MILP問題,例如所提出的優先限制廣義旅行推銷員問題(Precedence Constrained Generalized Travelling Salesperson Problem;PCGTSP)。通過這樣的等式集,對一個單元的最佳化可以得到最佳化,或者至少可以通過啟發式方法近似。將問題擴展到具有m個單元的平行機器,可以使用最佳化方法,例如由R.Salman揭露的“Optimizing and Approximating Algorithms for the Single and Multiple Agent Precedence Constrained Generalized Traveling Salesman Problem”,瑞典哥德堡查爾姆斯理工大學,2015年,論文III F。Ekstedt等人的“A Hybridized Ant Colony System Approach to the Precedence Constrained Generalized Multiple Traveling Salesman Problem”,2017年。該文獻明確地以引用的方式整體併入本文。特別地,參考第19頁和第20頁(5.3a)-(5.3m),該文獻中揭露的等式組和目標函數可以例如用於產生伽馬圖,以求解所討論的計算和傳輸矩陣的最佳化問題。最後,這直接產生優先限制廣義多旅行推銷員問題(Precedence Constrained Generalized Multiple Traveling Salesman Problem;PCGmTSP)的定義。由於最佳化步驟可以
在編譯時期間完成,因此從應用的角度來看,覆蓋程式碼的一般情況和異質硬體精細度的計算工作量可能(非常)高。
圖109b示出了可以如何將EV2組合到EV3中。每個迴圈部分都可以壓縮並近似為作為EV3中屬性n loop 、n ∥的函式的時間Δt loop ,其可以被表示為迴圈變數的函式:Δt loop =f(n loop ,n ∥ ,n units )。這使得例如能夠基於兩種不同的簡化產生MILP:根據伽馬節點中平行組的數量,定義並最佳化分配給迴圈部分的n units 的量。
所有單元都用於計算迴圈段,其將不同迴圈段之間的程式碼分離出來分別進行最佳化,從而降低了整體的複雜度。
圖110示意性地示出圖106的實施例變型EV4的方塊圖,通過更詳細地示出本發明系統1在積體電路(IC)或晶片設計最佳化中的應用,解決IC設計中的電子工程技術問題,包括設計積體電路或IC所需的邏輯和電路設計。
圖111a至圖111h示意性地示出將其用途應用於IC(積體電路)設計的本發明系統的方塊圖。本發明系統1可以應用於(參見圖106/圖110)設計和最佳化VLSI設計。電路設計是關於佈置電晶體以執行特定邏輯功能。從設計中可以估計延遲和功率。每個電路都可以表示為示意圖或以文本形式表示為網表。簡單地說明一下(參見圖111a),數位邏輯可以分為其輸出僅取決於當前輸入(一系列邏輯閘)的組合電路(布林邏輯)以及其建置塊是暫存器(正反器(Flip-Flop))和鎖存器的循序電路。本發明系統1可以用於確定計算塊節點。計算塊節點轉而可以用於確定數位邏輯,這將通過2D熱傳導方程式(Heat equation)的示例進行說明。圖67示出了該演算法的計算塊節點由5次讀取、1次計算和1次寫入組成(圖111b)。圖111c示出了簡單電路的結果。讀取變為由5個正反器(Flip-Flop)(它們一起形成暫存器,但有效暫存器大小由各個資料的位元長決定)組成的循序電路。假設時
脈的上升緣(時間k)等待所需的保持時間,以確保u[k][i+1][j]、u[k][i-1][j]、u[k][i][j+1]、u[k][i][j-1]和u[k][i][j]的正確值(邏輯0或1)出現在正反器(Flip-Flop)的輸出處。這基本上就是讀取。資料現在可以通過組合電路(計算塊)傳播,該組合電路由所需的加法器、移位器(乘以4)、減法器(反相器和加法器的組合)和乘法器組成的算術運算產生。在計算塊的輸出處,值u[k+1]在建立時間之後出現(相當於寫入操作),建立時間是正反器(Flip-Flop)的輸入在下一個時脈緣之前穩定所需的時間量。右側的暫存器正是下一個時間k+1處的值,這是左側下一次迭代所需要的。由此可見,可以將值直接寫入同一個暫存器中。現在可以對計算矩陣上的每個點進行這個思想實驗。對於矩陣上的兩個點(圖111d),很明顯的是資料現在是交叉寫入的,或者每個矩陣點只需要一個暫存器。計算塊(CB)始終由相同的組合電路組成,儘管在電子實現方式中傳播延遲永遠不會相同。因此,重要的是要密切關注限制系統的操作速度並需要注意時序細節的關鍵路徑。在VLSI設計中,現實世界的設置總是在空間上受到限制。無限的可平行性是不可能的,因此某些(並非全部)計算塊被組合並依序處理。為了使有限數量的暫存器能夠做到這一點,多工器連接在暫存器的輸出與CB的輸入之間。多工器基於選擇訊號從若干輸入中選擇輸出。同時,解多工器連接在CB的輸出與暫存器輸入之間(參見圖111e)以正確地回饋資料,由此設計最佳化過程可能表明解多工器並不總是需要的。理想的平行電路上每個時脈速率所處理的內容,現在在更現實的電路(圖111f/圖111g)中需要若干時脈週期來處理-盡可能多地在多個週期中平行處理,直到完成完整的迭代為止。以圖67中的4×5矩陣為例,這意味著:對於6個平行CB:1個週期來計算k+1,對於3個平行CBS:2個週期(2×3平行),包括由於多工而產生的更高的延遲。VLSI設計者始終必須在面積、吞吐量、延遲、功耗和執行任務的能量之間做出權衡。最佳電路始終位於反曲線的某個位置(參見圖111h)。如果可用面積很大,則可以很好地進行平行化。如果可用面積較少,
系統必須進行多工,這會導致更高的延遲。面積和平行CB數量之間的最佳點位於兩者之間。由於本發明的系統1可以為指定單元提供最佳程式碼,因此它還可以用於為指定區域找到最佳電路,從而說明在實際模組尺寸和關鍵路徑已知時完善迭代設計過程。
圖112示意性地示出CB組合的效果及其對S compute 的影響的方塊圖,S compute 是計算目標平台(如:暫存器)上一系列指令所需的(最佳化=最小化)大小。必須注意的是,由於取決於CB1、CB2和CB3中的指令、目標架構(可用的指令集和資料空間特性,例如,CPU中的暫存器或IC電路中的正反器(Flip-Flop)/輸入訊號)以及用於ILP最佳化和排程的所用方法,因此
圖113示例性地示出從輸入xi到輸出f(x)的經典計算。
圖114示出了將f(x)應用於輸入位,並在計算f(x)的結果期間保留‘垃圾’值能夠取消計算f(x)=可逆形式。
圖115示出了從程式碼中的敘述到組合電路的應用以及所產生的可逆形式。
圖116示出了示例性方塊圖,其示出了兩個正反器(Flip-Flop)之間的時序路徑。
圖117示出了示例性方塊圖,其示出了由電晶體形成的NAND閘和反相器,特別是圖117a-d。
圖117a示出了示例性方塊圖,其示出了2輸入NAND閘原理圖和符號。
圖117c示出了示例性方塊圖,其示出了反相器原理圖和符號。
圖118示例性地示出了方塊圖,其示出了pMOS開關的功能原理,特別是
pMOS開關如何根據附加到閘極的電壓V g來工作,其中,在圖118a中,在p型體與多晶矽閘極之間施加負閘極電壓。正向移動的帶正電的電洞被吸引到絕緣體(通過閘極處的負電壓);其中,在圖118b中,當正電壓附加到閘極時,自由正電洞被推離絕緣體;其中,在圖118c中,當閘極的正電壓高於臨界電壓Vt時,自由正電洞被推得更遠,而體中的某些自由電子被吸引到絕緣體。
圖119示出了示例性方塊圖,其示出了在比觸發值V t 高的閘極V g 下以正電壓工作的nMOS電晶體。nMOS電晶體由閘極、源極和汲極組成,具有p型體和n型通道(channel)。圖118之一的電子開關的衍生原則(derive principle)用於建置nMOS電晶體,參見圖119。
圖120a示出了示例性方塊圖,其示出了理想4/2 λ nMos電晶體的IV特性。
圖120b示出了示例性方塊圖,其示出了理想4/2 λ pMos電晶體的IV特性。
圖121示出了示例性方塊圖,其示出了靜態排序方法。
圖122示出了示例性方塊圖,其示出了FPGA的典型結構。
圖123示出了示例性方塊圖,其示出了三級動態平行管線。循序程序分解為多個子程序,稱為階段或分段。一階段執行特定功能並產生中間結果。它由輸入鎖存器(也稱為暫存器或緩衝區)和處理電路組成。處理電路可以是組合電路或循序電路。
圖124示出了示例性方塊圖,其示出了管線的基本結構。指定階段的處理電路連接到下一階段的輸入鎖存器。時脈訊號連接到每個輸入鎖存器。在每個時脈脈衝處,每個階段將其中間結果傳輸到下一階段的輸入鎖存器。這樣,在輸入資料通過整個管線後產生最終結果,每個時脈脈衝完成一個階段。
圖125示出了示例性方塊圖,其示出了電腦輔助IC設計和製造系統0的實施例的可能實現方式的架構,用於多核心和/或多處理器積體電路2架構或佈局、積體電路2效能和積體電路2製造良率的最佳化產生。
圖126示出了示例性方塊圖,其示出了(a)伽馬圖(b)伽馬圖中的迴圈部分,由從迴圈結構(loop body)分析得出的作為運行時參數params的函式的n_∥和n_loop表示。
圖127示出了示例性方塊圖,其示出了如何從(a)具有基本塊的CFG中的迴圈部分轉換為(b)具有針對迴圈部分的不同階段的不同傳輸的伽馬圖。
圖128示出了示例性方塊圖,其示出了形成具有非同步計算的組合邏輯的計算塊(CB)。
圖129示出了示例性方塊圖,其示出了如何從計算塊到Verilog程式碼再到合成邏輯閘。
圖130示出了示例性方塊圖,其示出了如何通過使用暫存器為平行CB引入同步設計和組合計算來從伽馬圖到RTL程式碼。
圖131示出了示例性方塊圖,其示出了伽馬圖中的有限狀態。
圖132示出了示例性方塊圖,其示出了分別使用裝置或外部RAM包括I/O操作的情況。
圖133示出了示例性方塊圖,其示出了將時脈定義為伽馬圖中每個級別的傳播時間的函式。
圖134示出了示例性方塊圖,其示出了從伽馬圖到RTL定義。
圖135示出了示例性方塊圖,其示出了迴圈部分的伽馬圖中的各個階段以及相關的展開的RTL設計。
圖136示出了示例性方塊圖,其示出了從具有平行CB的伽馬圖(a)到具有減少的資料輸入和資料輸出以及最大平行實例的最佳化IC設計,以計算每次迭代(c)的所有平行CB。
圖137示出了示例性方塊圖,其示出了使用緩衝暫存器計算具有有限最大平行實例n max∥device 的所有平行CB。
圖138示出了示例性方塊圖,其示出了使用主機平台映射和儲存中間結果,其中具有額外的延遲,以通過適當的I/O介面(匯流排)在裝置與主機之間傳輸資料。
圖139示出了示例性方塊圖,其示出了FPGA叢集作為平行實例的更大區域。
圖140示出了示例性方塊圖,其示出了計算塊和對應的實例作為兩個暫存器(正反器(Flip-Flop))之間的一個組合塊。
圖141示出了示例性方塊圖,其示出了從計算塊到邏輯操作的Verilog定義。
圖142示出了來自Verilog程式碼的實例的示例示意圖。
圖143示出了示例性方塊圖,其示出了將平行CB和內部傳輸組合到RTL設計。
圖144示出了4種不同網格所用的單元和邏輯計算時間的示例性方塊圖。
圖145示出了示例性方塊圖,其示出了9×9網格經過10次迭代後的結果以及邊界條件為頂部邊界5℃。
圖146示出了示例性方塊圖,其示出了儲存(和載入)為(a)IC設計(b)管線版本。
圖147示出了示例性方塊圖,其示出了算術(R)運算作為(a)IC設計(b)管線版本。示出了轉發以在下一個週期中使用上一條指令的結果。
圖148示出了示例性方塊圖,其示出了每個階段的暫存器大小。
圖149示出了將平行CB排程到可用管線的示例性方塊圖。
圖150示出了將計算塊排程到平行管線的示例性方塊圖。
圖151示出了平行CB的分佈以及與所需暫存器和計算時間的關聯的示例性方塊圖。
圖152示出了Γ staqe,k =Γ 1之前的Γ staqe,k+1=Γ 2,a 的載入資料的示例性方塊
圖。
圖154示出了示例性方塊圖,其示出了演示程式碼的計算塊。
圖155示出了示例性方塊圖,其示出了標準5階段管線。
圖156示出了示例性方塊圖,其示出了(a)具有RAW依賴關係的指令的計算塊(b)包括轉發的5階段管線。
圖157示出了示例性方塊圖,其示出了使用EX/MEM作為平行管線的ALU的輸入在兩個平行管線之間進行交換。
圖158示出了示例性方塊圖,其示出了通過啟用硬體來刷新兩個或更多個管道(未採用)來實現具有控制冒險支持的平行管線。
圖159示出了示例性方塊圖,其示出了運行時資料映射。
圖160示出了示例性方塊圖,其示出了技術說明中的演示程式碼。
圖161示出了示例性方塊圖,其示出了圖160中編譯程式碼的基本塊。
圖162示出了示例性方塊圖,其示出了具有1個分支、BB1中的一些ILP以及分支br1b中BB3中的更多內容的演示程式碼。
圖163示出了示例性方塊圖,其示出了分支br_main的伽馬圖、暫存器分配和虛擬組合程式碼。
圖164示出了示例性方塊圖,其示出了分支br1bALU1管線的伽馬圖、暫存器分配和虛擬組合程式碼。
圖165示出了示例性方塊圖,其示出了分支br1bALU2管線的伽馬圖、暫存器分配和虛擬組合程式碼。
圖166示出了示例性圖,其示出了程式碼編譯如何產生具有排程計算塊以及最佳化載入和儲存指令的雙管線CPU的虛擬機器碼。圖中示出了移動的載入指令,以補償比ALU上的R指令更長的外部記憶體延遲。
圖167示出了示例性方塊圖,其示出了用於計算兩個向量a和b之間的內積的
程式碼的計算塊。
圖168示出了示例性方塊圖,其示出了在兩個平行管線上排程平行CB。
術語「計算塊節點」的定義對於本申請至關重要,計算塊節點將指令分組並需要與其他計算塊節點進行通訊/傳輸資料。如本文所使用的術語「計算塊節點」與現有技術中使用的類似術語不同,儘管沒有普遍認可的含義。
知名的基本塊(如:參見Proceedings of a symposium on Compiler optimization(編譯器最佳化研討會論文集);1970年7月,第1-19頁https://doi.org/10.1145/800028.808479)是經典控制流圖(CFG)中的核心定義。簡而言之,基本塊將內部沒有跳轉或跳轉目標的敘述分組。因此,對於指定的輸入,基本塊可以不間斷地執行操作直到最後,分別到輸出。這是當今編譯器中的基本概念。基本塊的定義在歷史上也是針對單個計算單元的,並且非常完善。存在針對各種問題的最佳化方法,並且已經展示了它們如何解決不同的技術問題。但是看到程式碼的目標是將敘述拆分為不同的依賴單元(例如通過共用快取、經由匯流排或網路連接等),該定義缺乏精細度,而經典的範圍阻礙了更廣闊的視角。根據程式碼中給出的任何獨特資訊(將資訊視為位元模式)確定塊的範圍,並將該範圍與系統中計算和傳輸資訊的相關時間相結合,為指定程式碼創建了不同但物理性很強的視角。替代範圍使新選項成為可能,並解決了當今SOTA編譯器的一些知名的技術問題(參見以下PDE、費波那契或指針消歧的示例)。
本申請中使用的術語「計算塊節點」基於SOTA編譯器中不同的
且不以這種方式應用的重要單元:指定的敘述組的傳輸和計算時間的相互關係。這些新定義的「計算塊節點」將使用相同資訊的指令分組在一起,這些資訊在完整程式碼的特定時間內不會被任何其他計算塊節點中的任何其他指令(敘述)更改。通過這種方式,通過資訊的範圍(資訊作為不同的位元模式),在本申請中稱「不可進一步拆分的指令鏈」,這些計算塊節點將可以獨立於任何其他敘述處理或計算的指令分組在一起。每個計算塊節點中的這些指令鏈各自具有與單元在指定硬體上處理或計算指令鏈所需的時間相關聯的基於物理的「時間」。由於硬體屬性(以及諸如OS、驅動器等軟體元件)對處理或計算指令所需的時間具有根本性影響,因此「計算塊節點」還將它們與在特定時間內將任何其他資訊(如果在特定程式步驟中需要)傳輸到完整程式碼中的另一個「計算塊節點」所需的時間相關聯。每個「計算塊節點」都知道哪個自身指令的資訊必須交換(傳達/傳輸,分別稱為「接收」或「發送」)到其他「計算塊節點」以及何時自身指令的資訊必須交換(傳達/傳輸,分別稱為「接收」或「發送」)到其他「計算塊節點」。因此,本申請中使用的「計算塊節點」帶來了新的範圍和決策標準,這意味著程式碼平行性的一個核心方面,其涉及:在單元上計算資訊(位元模式)或將此資訊傳輸到另一個單元並進行平行計算。只有在保證在特定程式步驟(或時間)期間程式的任何其他部分中所使用的資訊不會發生變化時,才能做出此決策。此外,建置具有該範圍的塊節點不僅為平行化指定程式碼帶來了優勢,而且該範圍還顯示出針對利用SOTA編譯器最佳化技術無法很好處理的問題的一些優勢。這種問題和不同的解決方情況如,在D.Grune的出版物Modern compiler design中都有很好的記錄。為了展示技術優勢,下面展示了使用新範圍解決這些已知技術問題中的一些問題的一些優勢,例如指標消歧和費波那契數列程式碼的不同效能,以及該方法如何解決迄今為止無法解決的問題,如PDE平行化。
首先,圖6中通過示意性示例示出了不同的範圍。該圖示進行了一些調整,以更容易地展示本發明的系統和方法的作用,例如,敘述‘y>a’不會在同一計算鏈中出現兩次,所得到的「計算」->「通訊」模型將導致迴圈、跳轉或流控制指令的對應放置。儘管如此,該示例說明了計算塊節點所給出的與基本塊相比的不同範圍:事實上,‘a’和‘b’在塊1中不會改變,並且在評估敘述‘y:=a*b’之後已經知道‘y>a’條件的資訊,計算塊節點的替代範圍考慮到了這些屬性。提出的計算塊節點視角以新的方式將敘述分組在一起。這種視角的變化源於將操作分組在一起的方法,其依賴於在程式碼中同一時間步中不會改變的資訊。示例中示出了兩個獨立的計算鏈的演變,它們對於‘y’的資訊都是獨立的。
在圖7的簡化但更現實的示例中,本發明的方法利用了這樣的事實:對數指令(FYL2X作為現代CPU上的示例)需要比浮點加法和/或乘法指令(如:FADD、FMUL)長得多。本發明的方法將敘述‘x:=a+b’和‘y:=a*b’添加到兩個不同的計算塊節點(cbn),因為兩者都基於相同的資訊‘a’和‘b’。由於‘log2(x)’敘述使用資訊‘x’,因此將其附加到‘x=a+b’。資訊‘y’正在傳輸,因此該資訊可以用於兩個獨立的計算鏈。
本發明方法從如上所述的計算塊節點的流程圖中形成兩個在技術上定義的矩陣,在本申請中稱為「計算矩陣」和「傳輸矩陣」。兩者都是數值矩陣。「計算矩陣」包含指令鏈,而「傳輸矩陣」包含可能的傳輸屬性(來自其他計算塊節點的可能的傳輸屬性和到其他計算塊節點的可能的傳輸屬性)。因此,從矩陣中提取的程式碼總是形成“計算->通訊(compute->communicate)”模式,如以下段落中更詳細地描述的。如果將程式碼映射到一個單元,則通訊部分將消失,本發明方法將簡化為利用基本塊的方法,基本塊分別可以用SOTA編譯器進行處理。參見圖7中處於這種形式的示例,可以看出,單元2可以計算敘
述‘log2(y)’的長運行指令,單元1處理迴圈並使得a遞增(‘a=a+1’),參見圖8。要瞭解其如何工作,下一段中將詳細展示矩陣建置器。
「矩陣」這個名稱用於命名具有形式(m x n x p)的結構,其中,m,n,p。由於m、n和p取決於程式碼,因此這可以包括數學物件的不同形式,尤其是涉及如點、向量、矩陣、張量等維度。m是計算塊的最大數量的數字,分別是塊編號,如圖43中的段編號,n是獨立但具有相同段編號的計算塊節點的數量,如圖43中表示為鏈編號。根據程式碼中的最大條件級別(或一系列分支節點,如圖26中所示),p被定義,如圖43中表示為路徑編號。因此可以說,每當使用術語「矩陣/多個矩陣」時,它可以是向量、矩陣或張量或具有形式(m x n x p)的任何其他物件,或以圖或樹的形式表示。因此,在只有一個塊/段號的程式碼中,最佳化也可以例如通過將計算和傳輸矩陣組合成一個結構來使用一個張量完成,或者傳輸和計算矩陣各自可以是張量,或者它們都可以是向量。這些「矩陣」的維度取決於程式碼的形式以及以處理/表示應用該方法的方式的資訊的方式。本文使用的術語「數值矩陣」還可以包括文本形式,例如,傳輸‘1->2’。根據所使用的最佳化/映射技術,矩陣中的文本將被或可以簡化為數值(取決於所使用的字元編碼),以便可以對其進行例如搜索或比較。或者,文本傳輸‘1->2’可以從頭開始用數值表示/編碼,並直接與其他傳輸進行比較,從而省略字元編碼。
由於「數值矩陣」可以用作表示圖/樹狀結構的另一種合適的形式,因此也可以不使用「數值矩陣」,而是以圖/樹的形式進行所有最佳化/映射。無論以何種數學形式或計算形式來表示指令組(此處稱為計算塊節點)及其傳輸動態(此處以例如圖23中提到的「傳輸套件」表示),基於所有基於二進位的電子計算系統中發生的傳輸和計算延遲的物理依賴關係。它基於將指令(任何形式的指令/操作,例如表示電子電路的形式)分組在程式碼(任何形式的程式碼(高階、組合語言等))中,規則是將「讀取」資訊A的指令放置在「寫入」資訊A的指令
所在的同一組(此處稱為計算塊節點)中。這與使用知名的基本塊對指令進行分組有很大不同。如果依賴關係不明確(如圖21所示,在圖形元素中每條指令具有2個「讀取」節點和一個「寫入」節點的情況下),則在兩個計算塊節點(儲存「寫入」指令的一個節點和儲存「讀取」指令的一個節點)之間引入「傳輸」。在這種形式下,程式碼可以表示為計算塊節點的形式,這些節點通過它們所需的傳輸連接起來。此資訊可以包含在圖/樹或陣列或任何合適的結構中。為了在指定的硬體上運行這些指令,SOTA編譯器中知名的方法可以但不是必須用於最佳化對指令進行分組的計算塊節點的鏈,然後為每個單元在所涉及的計算單元上運行(在這種情況下稱為轉譯(transpiling))。
解析程式碼並將所有指令添加到計算塊節點(cbn)後,可以根據每個計算塊節點在流圖(flow graph)中的位置來枚舉每個計算塊節點。這產生類似形式的控制流圖,由cbn之間的邊以及定義的分支節點的連接給出。使用這些定位編號,程式碼流中的唯一位置用於將要計算的內容和要傳輸的內容的資訊放置在兩個矩陣「計算矩陣」和「傳輸矩陣」中,「計算矩陣」用於計算,而「傳輸矩陣」用於傳輸。顯然,可以輕鬆得出元資料(meta-data),例如每個cbn所需的資料大小、cbn之間的傳輸的大小等。
矩陣表示比圖形更具可擴展性的資訊存取形式,分別顯示了控制流圖的良好形成性。它們對於該方法並非絕對必要,並且該步驟也可以直接在圖/樹結構上執行。但是塊節點的定義也表明了本發明矩陣的通用性質:每行都有獨立的指令流(通過傳輸依賴關係)(=計算)和所需的傳輸(=通訊)到其他cbn。保證了:a)不需要進一步的資訊來計算計算塊節點中的所有指令(這類似於基本塊,但獨立性的範圍完全不同),b)在整個程式碼的同一計算步驟中,所使用的資訊不會在其他任何地方發生變化,並且c)只傳輸不受此時間步期間計算影響的
資訊。基於該事實,計算矩陣中的每個單元都具有所有指令,這些指令可以與同一列中其他單元中的所有指令同時獨立計算。在每個單元的傳輸矩陣中,現在已知每個計算步驟(計算矩陣中的對應單元)開始和結束時所需的傳輸。獲取在不同單元上運行的程式碼產生“通訊->計算->通訊->計算”等形式的表示。每行表示計算和通訊屬性鏈,形成一系列計算,這些計算通過與其他行的通訊耦合=計算鏈。與其他行通訊所需的資訊=鏈位於傳輸矩陣中。計算矩陣中的每一行(以及傳輸矩陣中的相同組合)也可以與矩陣中的任何其他行組合(計算兩個組合單元的所有指令並基於傳輸矩陣對兩個單元進行必要的傳輸),以創建指定程式碼的計算<->傳輸行為的新組合。在此步驟中,計算相加,而同一單元上的傳輸(通過組合)消失。這稍後將產生簡單的最佳化形式,以及最佳化/映射步驟肯定會產生可運行程式碼的事實,因為不需要迭代或類似的解決方法。這也是知名的平行化程式碼問題,因為平行程式碼的除錯(debug)非常複雜(如:參見A.Danner等人的“ParaVis:A Library for Visualizing and Debugging Parallel Applications”)。
如本文所定義,計算矩陣的每一行表示一個單元的指令鏈。單元取決於實現級別(例如裸程式集、執行緒、程序、計算節點等)。顯然,空塊(計算矩陣中的空單元)或未使用的通訊項目(傳輸矩陣中相同單元上的空單元或傳輸)會消失,並且起始和結束通訊連結在一起,如圖10所示。如果程式碼在單個單元上運行,則會導致沒有傳輸的情況,並且所有傳輸都將通過重新分配/重命名變數而消失,分別應用SOTA編譯器中知名的最佳化方法來獲得指定單元的最佳化程式碼。
根據實現通訊的方法,可以使用非阻塞或阻塞機制,因為保證在計算塊節點期間不會將任何資訊傳輸到同時用於指令的另一個具有相同編號的cbn。根據級別,可以實現計算和通訊部分,從而將該方法用作編譯器或轉譯器。將程式碼傳輸回“計算->通訊”形式的方法也使得使用最適合應用的語言(如:C、
C++、python)變得容易,並且取決於目標基礎設施,使得使用如下方法變得容易:例如,程序間通訊(IPC)方法(如:佇列/管道、共用記憶體、訊息傳遞介面(MPI)等)、函式庫(如:事件庫、多處理庫等)和可用的SOTA編譯器的使用等。
矩陣的通用、定義明確的性質是將程式碼映射/最佳化到指定硬體或評估指定程式碼的最佳硬體設定的廣泛可能性的獨特基礎(如:參見圖106中的不同實施例變型E1-E5)。因此,該結構保證了可運行的程式碼。每個硬體基礎設施都有自己的效能屬性,與可用的軟體層相結合,現代資訊和通訊技術(Information and Communications Technology;ICT)基礎設施非常複雜。本發明的方法允許將程式碼最佳化到硬體或允許給出理想的硬體。最明顯的是通過建置來自計算和傳輸矩陣的不同行組合,由此重要的是在兩個矩陣中建置相同的組合。每個組合(如:將計算和傳輸矩陣中的第1行和第2行組合)都是指定輸入程式碼的平行/平行程式碼的新版本,然後可以評估其在目標基礎設施上的屬性,參見圖11中的簡單示例。
通過矩陣中行的不同組合(如:將計算和傳輸矩陣中的第1行和第2行組合或第2行和第5行組合),檢索計算<->通訊比率的不同組合。然後可以檢查每個組合,包括指定硬體/軟體基礎設施的其他已知元資料(meta-data)。例如,資料節點()的資料類型可以用於評估硬體屬性,例如,快取長度、可用記憶體或目標平台的其他屬性。這種組合和搜索指定程式碼和指定硬體的最佳計算/通訊比率的形式總是會產生可運行的平行程式碼,因為在最佳化步驟中不需要迭代解決方法或類似方法來找到解,也不會出現具有例如競爭條件、死結等的解,分別可以檢測到死結。
指令的分組基於傳輸通常比在同一「位置」的計算大一個數量級的固有的物理限制,該方法為最易分割的程式碼形式產生最佳解空間的形式,
並產生明確定義的方式和針對找到指定硬體的最佳映射或指定程式碼的理想硬體的獨特方式的搜索空間。這使得該方法非常通用,並解決了將指定程式碼自動適配到目標平台的技術問題。如果該方法用作轉譯器,則可以使用SOTA編譯器將程式碼最佳化到目標硬體/單元。
其他方法不利用程式碼中給出的固有時間屬性和依賴關係,也不產生這種形式的唯一解空間來進行最佳化,採用本申請方法對計算塊節點的定義的形式(通過按不變資訊的範圍分組)-這在許多方面直接解決了技術問題。詳細描述中的示例將更詳細地展示這一點。
計算塊節點與基本塊或切片不同:它們具有不同的範圍。它們,例如通過基於其跳轉/分支連接獨立的程式部分而不遵循基本塊的定義。計算塊節點中的指令鏈具有基本資料依賴關係,這意味著這些鏈中使用的資訊在指定程式碼中的其他任何地方都不會更改也不會在同一時間/程式步中傳輸。
因此,時間和程式中指令的位置與計算塊節點具有依賴關係。計算塊節點由基於相同資訊的指令鏈組成,由此資訊被定義為每種形式的位元模式(例如資料變數、指標位址等)。通過引入傳輸/通訊,其中資訊不僅由程式碼中的時間步使用,而且與指令耦合,在計算塊節點中實現了這兩個基於物理的時間的關聯。該方法以這樣的方式放置計算塊,即在所有時間點上確定哪些資訊可以傳輸到哪裡以及哪些資訊可以平行計算。這給出了不同的視角,尤其是對於最佳化技術。存在廣泛的技術問題,這可以通過這種視角的改變來解決。計算塊節點將資訊(位元模式)在計算框架中的位置與該資訊在程式中的使用時間聯繫起來。這由經典基礎設施中計算的基本物理原理支援。以下具有巢狀迴圈和陣列的示例很好地展示了這種效果:當分佈在平行計算塊節點上時,迴圈定義中的分支可以轉換為根據陣列對資料點的讀寫。
本發明方法將程式碼分割成多個計算段,並且所得到的資訊必須傳輸到這些段。因此,通過定義計算塊節點,本發明方法產生矩陣系統,其中指定指令基於相同資訊進行分組,並且限制條件是在任何指定時間點期間,基礎設施中的其他地方都不需要相同資訊。經分組的指令不能進一步分割,因為不可能對特定指令組進行更快的計算,因為任何形式的傳輸都比在計算塊節點中計算該指定鏈更長。如圖所示,計算和傳輸矩陣的通用性質使得可以將分割程式碼最佳化為針對指定硬體的盡可能並行的解決方案。計算和傳輸的比率取決於目標硬體,並且該方法提供不同的解決方案以針對指定程式碼拆分不同的比率。通過將依賴關係圖轉換為矩陣,可以更有效地利用這些矩陣將拆分程式碼映射/最佳化到目標平台,包括此基礎架構的特定屬性(如:與CPU相比,GPU需要另一種傳輸/計算分佈處理)。但使用矩陣並不是必需的,最佳化/映射可以直接在圖/樹結構上完成。
本文定義的延遲時間是指處理單元21在處理完針對資料的處理程式碼32的特定指令塊之後將資料發送回平行處理系統2與接收同一處理單元21執行處理程式碼32的連續指令塊所需的資料(即,檢索和/或取回資料之後)之間的閒置時間。相反,處理單元的閒置時間在本文可以定義為處理單元在兩個計算塊節點之間不忙碌的時間量,或者,處理單元執行系統的閒置程序的時間量。因此,閒置時間允許測量平行處理系統的處理單元的未使用容量。最大加速、效率和吞吐量是平行處理的理想情況,但在實際情況中無法實現,因為加速由於導致處理單元的閒置時間的各種因素而受到限制。本文使用的處理單元的閒置時間可以歸因於各種原因,尤其包括:(A)連續計算塊節點之間的資料依賴關係(即,不能通過讀/寫操作進一步進行結構拆分的任務):兩個計算塊節點的指令之間可能存在依賴關係。例如,一條指令在前一條指令返回結果之前無
法啟動,因為兩條指令是相互依賴的。資料依賴關係的另一個實例是兩條指令都試圖修改同一資料物件的情況,這也稱為資料危障(data hazards);(B)資源限制:當執行時資源不可用時,則在管線中引起延遲。例如,如果一個公共記憶體用於資料和指令兩者,並且需要同時讀取/寫入和獲取指令,則只能執行其中之一,而另一個必須等待。另一個示例是資源有限,如執行單元,它在需要時可能很忙;(C)程式中的分支指令和中斷:程式不是循序指令的直線流。可能會有分支指令改變程式的正常流程,這會延遲執行並影響效能。同樣,可能會有中斷推遲執行下一條指令,直到中斷得到處理為止。分支和中斷可能會對最小化閒置時間產生負面性影響。
請注意,最小化閒置時間的任務有時也稱為「負載平衡」,其表示在處理單元之間分配工作以便在理想情況下所有處理單元始終保持忙碌的目標。
本文使用的術語「基本操作」或「基本指令」是指不包含更簡單操作的機器操作。它們處於機器語言級別。然而,在特定實施例變型中,它們可以至少包括微程式碼指令或完全由微程式碼指令組成。由於微程式碼是低階機器語言解釋的結果,微程式碼指令直接管理暫存器或電路級別的硬體資源。機器語言解釋機器指令並將機器指令發送到最低硬體層級別,在該最低硬體層級別處,它們被轉換為稱為微程式碼的小微程式。因此,微程式碼是定義微處理器在執行機器語言指令時應如何運行的低級程式碼。通常,一個機器語言指令會轉換為若干微程式碼指令。
如上所述,基本指令的執行(如上所定義的)通常包括連續執行若干操作,包括諸如重置暫存器、重置記憶體儲存、將暫存器中的字元左移或右移一位、在暫存器之間傳輸資料以及比較資料項目和邏輯加法和乘法等操作。
成組的基本操作可以提供用於執行特定指令的結構。基本操作包括邏輯閘的基本邏輯功能,邏輯閘包括AND、OR、XOR、NOT、NAND、NOR和XNOR。可以假設這些基本操作在指定處理單元上花費固定的時間量,並且在不同的處理單元21或平行處理系統2上運行時可能僅改變常數因子。
基於微程式碼指令的概念,諸如現場可程式化邏輯閘陣列(FPGA)和特殊應用積體電路(ASIC)等積體電路的設計涉及若干抽象級別,從高階演算法描述到低階硬體描述。這些描述要麼用硬體描述語言(HDL)編寫,其允許設計者在非常低的級別上定義其電路的功能和行為,要麼越來越多地應用高級合成(HLS)程序來使用高階語言(如:C或C++)描述數位系統的行為。邏輯合成工具類似於硬體的編譯器,將HDL程式碼映射到稱為標準單元的閘庫上,以最小化面積同時滿足一些時序限制。這會產生系統的暫存器傳輸級(RTL)描述,其定義了資料如何在暫存器之間流動以及如何使用算術邏輯單位(ALU)或甚至只是實現布林函數或算術的邏輯閘執行計算。然後將RTL描述合成到閘和正反器(Flip-Flop)上,以產生閘級合成(GLS)網表。網表是最低級別的抽象,表示數位系統的實際硬體實現。
由於計算塊節點將這些基本邏輯運算分組,因此可以從計算塊節點中得出邏輯閘佈局,因為每個計算塊節點都由基本閘(如NOT、AND、OR、XOR、NAND、NOR和XNOR)或更複雜的閘(如:多工器、解碼器、加法器、減法器、移位器、乘法器和除法器)組成。由於計算塊節點已經是一系列基本運算的事實,因此它們也可以看作是布林函數和/或算術的序列。
在下文更詳細描述的第一步驟中,本發明的系統將原始碼轉換為以迴圈、分支和序列構造的基本操作321、...、325的序列或程式碼32。它與平台和編譯器最佳化級別無關,因此可以使用相同的轉換來最佳化任何平台上的執行時間。
本方法基於將用程式語言編寫的原始碼31段分解為基本操作32/321,...,325,即,原始碼31的不同轉換後的部分。基本操作集對於每個處理單元都是有限的,具有若干子集:整數、浮點、邏輯和記憶體操作。這些集合與處理器架構的各部分和記憶體資料路徑相關。本文使用的基本操作可以例如分類為以下各個級別:頂級包含四個操作類:整數(INTEGER)、浮點(FLOATING POINT)、邏輯(LOGIC)和記憶體(MEMORY)。第二級分類可以基於運算元的來源(即,記憶體空間中的位置):區域、全域或過程參數。每個組可以顯示不同的時序行為:區域變數被大量使用且幾乎總是在快取中,而全域和參數運算元必須從任意位址載入,並且可能導致快取未命中。第三級分類是按運算元類型:(1)純量變數,以及(2)一維或多維陣列。當使用單個變數給出指標的值時,指標被視為純量變數;當使用多個變數給出指標的值時,指標被視為陣列。屬於整數和浮點類的運算為:加法(ADD)、乘法(MUL)和除法(DIV)。邏輯類包含:邏輯運算(LOG),即,AND、OR、XOR和NOT);和移位運算(SHIFT):執行按位移動(如:旋轉、移位等)的運算。記憶體類的運算為:單個記憶體分配(ASSIGN)、塊運算(block transaction)(BLOCK)和程序(procedure)呼叫(PROC)。MEMORY BLOCK表示大小為1000的塊的運算,並且只能有陣列運算元。MEMORY PROC表示具有一個引數(argument)和返回值的函式呼叫。引數(argument)可以是區域宣告或由呼叫者函式的參數(parameter)給出的變數和陣列,但不能是全域的。
為了將術語「核」定義為例如本文中使用的「多核心處理器」,還必須給出術語「處理器」(或「微處理器」)的定義。在計算術語中,處理器是讀取和執行程式指令的元件。處理器核是處理器,即電腦的中央處理單元(CPU)內的各個處理單元。處理器的指令是給處理器/核心2102/2103的技術訊號,從而
告知處理器/核心2102/2103要做什麼,例如,從記憶體讀取資料或將資料發送到輸出匯流排。常見的處理器類型是中央處理單元(CPU)。多核心處理器一般被定義為附接兩個或更多個獨立的處理器(稱為核心)的積體電路。請注意,該術語與術語多CPU不同但相關,多CPU指的是具有多個未附接到同一積體電路的CPU。在現有技術中,術語單一處理器一般指每個系統有一個處理器[單一處理器],並且該處理器有一個核心。該術語用於與多處理架構(即,多核心、多CPU或兩者)形成對比。多核心處理器從單一處理器技術中發展而來,成為計算產業的一種通過平行性而不是原始時脈速度實現更高效能的方法。多年來,電腦產業開發了越來越快的單一處理器,但由於電晶體縮微、功率要求和散熱的限制,這種追求即將結束。由於單執行緒核心的時脈頻率已達到穩定水準,晶片製造商已轉向多核心處理器,以使用平行性來增強效能。
由於多核心CPU從根本上依賴平行性來增強效能,因此瞭解平行性的主要類型對於分析效能和理解與自動平行化系統相關聯的技術問題很重要。沒有程式碼平行化的現代多核心處理器是沒有意義的。然而,平行性在技術上是極具挑戰性和複雜性的物件,然而,在本發明的上下文中,瞭解這裡的三種基本類型的平行性就足夠了。指令層級平行性、執行緒層級平行性和資料級平行性都是各種多核心CPU架構所採用的,並且對效能有不同的影響,必須瞭解這些影響才能進行徹底的效能分析。
指令層級平行性(ILP)是第一類型的平行性,其涉及同時執行程式的某些指令,否則這些指令將按順序執行,這可能會對效能產生積極影響,具體取決於應用中的指令組合。在現有技術中,許多CPU利用指令層級平行化技術,例如,管線、超純量執行、預測、亂序執行、動態分支預測或位址推測。但是,僅指定程式的指令集的某些部分可能適合指令層級平行化,如下表2中的
示例所示。
由於順序操作的第1步和第2步彼此獨立,因此採用指令層級平行化的處理器可以同時運行指令1.A.和1.B.,從而將完成操作所需的操作週期減少33%。但是,無論哪種情況,最後一步都必須按順序執行,因為最後一步依賴於前兩個步驟。很明顯,這個示例過於簡化了。然而,對於自動平行化系統來說,關鍵是提取應用中具有可以平行運行的指令的哪些部分。
執行緒層級(或任務層級)平行化(TLP)是第二類型的平行化,涉及同時執行委託給CPU的各個任務執行緒。執行緒層級平行化可以通過各種因素(從特定於硬體、特定於執行緒實現到特定於應用)顯著地影響多執行緒應用的效能,因此對這種類型的平行化有基本的瞭解是很重要的。每個執行緒都維護自己的記憶體堆疊和指令,因此可以將其視為獨立任務,即使實際上執行緒在程式或作業系統中可能並不真正獨立。執行緒層級平行化由具有多執行緒設計的程式和作業系統使用。從概念上可以直觀地看出執行緒層級平行化為什麼可以提高效能。如果執行緒是真正獨立的,那麼與需要所有執行緒的附加執行時間的單執行緒版本相比,將成組的執行緒分散到處理器上的可用核之間會將已用執行時間縮短到任何執行緒的最大執行時間。理想情況下,工作也會在執行緒之間均勻分配,分配和排程執行緒的成本最小。在現實世界中,這種簡單的執行緒層級平行化效能的理想模型因若干技術因素而變得複雜,因此在實際應用中很少見到理想情況。影響效能的因素包括負載平衡、執行獨立性級別、執行緒鎖定機制、排程方法和所需的執行緒記憶體。此外,分散式執行緒之間的資
料級平行化可能影響效能。作業系統和特定應用兩者中的執行緒實作庫也會影響效能。
資料級平行化(DLP)是第三類型的平行化,涉及通過記憶體一致性在執行程序之間共用公共資料,通過減少載入和存取記憶體所需的時間來提高效能。通常,識別利用資料級平行化的應用領域將有助於瞭解多核心處理器的效能特性。
迴圈級平行化(Loop-Level Parallelization;LLP)是第四類型的平行化,其中,如果迴圈的迭代沒有依賴關係,則它們將平行執行。如果所有迴圈迭代都需要相同的執行時間,則可以通過靜態配置來執行分配,其中分配到每個計算單元的迭代次數是固定的。
在多核心CPU的背景下,核心共用的快取記憶體中的資料級平行化會對效能產生重大影響。在這裡,在多個核心上運行的執行程序稱為執行緒。當執行緒從共用記憶體中的同一資料進行讀取時,效能有望提高。這種情況允許多個執行緒使用該資料的一份副本,從而減少複製操作的數量以減少執行時間。當執行緒沒有共同的資料時,每個執行緒都必須維護其資料的副本,並且不會有任何獲益。但是,如果對該記憶體的多個請求超出其頻寬,則增加執行緒可能對效能產生負面影響。在寫入操作期間也可能會發生進一步的效能影響。嘗試同時對同一記憶體位置進行寫入的多個執行緒必須等待以解決衝突。為了解決該問題,需要處理這種情況的方案,例如自旋鎖(spin-lock)。效能影響取決於所採用方案所涉及的懲罰以及此類衝突發生的頻率。一般來說,讓多個執行緒寫入共用記憶體的不同區域在減少觸發這些懲罰的可能性方面是優選的。非統一記憶體架構(NUMA)可以提供幫助,因為它將某個特定核心使用的資料放置在記憶體中物理上更靠近該核的位置。此外,隨著多核心處理器上執行緒數量的增加,頻寬在這裡也是重要因素。有限的快取大小(快取未命中)、有限
的頻寬、快取外延遲和其他方面都會影響效能,儘管資料級平行化可以在某些情況下提高效能。此外,指令層級平行化與資料級平行化之間的相互作用會影響效能。Flynn的分類法提供了分析這些相互作用的技術框架。總之,觀察特定應用中的資料級平行化對於分析其在多核心CPU上的效能非常重要,因為記憶體通常是限制因素。
在電腦技術、程式碼平行化和處理器架構領域,存在大量的系統和方法處理提高程式碼和演算法計算速度和記憶體佔用空間的技術問題,因為更快的演算法可以為更多的計算提供額外的時間,而更少的空間佔用可以進一步增強計算,特別是平行計算。如上所述,電腦計算問題所花費的時間稱為「時間複雜度」,而所佔用的空間稱為「空間複雜度」。執行這些演算法所花費的時間和空間通常以輸入的大小和演算法必須操作的元素數量來衡量。存在與上述兩種相關的另一度量。所謂的「計算複雜度」是根據計算問題的資源使用情況對計算問題進行分類並使這些類別相關的度量。計算問題是分別由電腦及其處理器解決的任務。計算問題是能夠通過資料處理裝置(如:處理器和資料儲存庫)機械地應用處理步驟來解決的技術問題。
如果計算問題的解決需要大量資源,則無論使用何種處理步驟或演算法,該計算問題都被視為本質上是困難的。為了提供度量,除其他外,計算模型用於量化計算複雜性,即,解決某個問題所需的資源量,例如時間和儲存。還使用其他複雜性度量,例如,通訊量(用於「通訊複雜度」)、電路中的閘數(用於「電路複雜度」)和處理器數量(用於平行計算)。
計算複雜度的作用之一是提供衡量電腦或平行化的實際限制的度量。另一方面,如果計算問題被認為易於解決,則意味著可以使用電腦裝置快速解決該問題(此處為自動平行化)。上文使用的術語「快速」是指存在解決該
任務的處理程式碼或演算法,該處理程式碼或演算法在多項式時間內運行,因此完成該任務的時間隨關於演算法輸入的大小的多項式函數而變化(而不是指數時間)。對於一類問題而言,某些演算法可以在多項式時間內提供解,這類問題稱為針對多項式的“P”。因此,平行化問題屬於類別“P”,其中找到解(即,平行化程式碼)的時間在輸入為n(如:n1、n2或n99等,其中,n被提升為冪)的時間和空間多項式中增加。另一方面,對於一類平行化問題,提供解的時間呈指數增長(即,不在多項式時間內),該類問題稱為“NP”(非確定性多項式時間)。與P中的平行化問題不同,NP平行化問題是電腦花費極長的時間和空間來解決的平行化問題;隨著輸入中元素數量的增加,時間呈指數增長。這個指數時間被描述為任何數字的n次方,例如2N。
在本文中,請注意,對於某些問題,尚無已知的快速找到解的方法,但如果提供表明答案是什麼的資訊,則有可能快速驗證答案。在計算複雜度的度量方面,這樣的技術問題稱為NP完全(「非確定性多項式時間完全」),其中,「非確定性」指非確定性圖靈機,「完全」指能夠模擬同一複雜度類別中的所有內容的屬性,「多項式時間」指對於確定性方法檢查單個解或非確定性圖靈機執行整個搜索被認為「快速」的時間量。這意味著,如果(i)對於一個技術問題而言,可以快速(即,在多項式時間內)驗證每個解的正確性並且可以通過嘗試所有可能的解來使用暴力搜索找到解;並且(ii)該計算問題可以用於模擬所有其他可快速驗證其解是否正確的問題,則該計算問題是NP完全的。從這個意義上講,NP完全問題是可快速驗證其解的最難問題。如果系統或演算法能夠快速地找到某個NP完全問題的解,則該系統或演算法能夠快速找到所有其他可輕鬆驗證其解的問題的解。在計算技術中,該問題在這裡稱為「P與NP問題」,其為可以在多項式時間內驗證的問題是否也可在多項式時間內解決。該問題尤其對於程式碼平行化以及用於平行化的系統或方法的強大功能具有深遠的技術
意義。具體而言,如果平行化系統和/或方法能夠提供某個程式碼或程式碼結構的平行化,其中該程式碼或程式碼結構是NP完全問題,則所有其他類似的NP完全程式碼和程式碼結構均可以利用該平行化系統或方法在相同程度上平行化,多項式縮減時間除外。顯然,對於程式碼的平行化,原則上暴力可以始終通過以下方式用於搜索最佳最佳化的平行化:產生所有可能的基本塊或計算塊節點或任務或執行緒的所有可能排列並對其進行測試,這些排列包括平行的指令的所有可能排列。然而,使用暴力搜索,程式碼平行化的複雜度通常會呈指數級增長,其結果是不再能擴展到所應用的電腦裝置的計算能力。一些現有技術解決方案嘗試通過採取不同的選擇或假設的不同的任務或執行緒進行分支定界。但協調任務/執行緒變得更加困難,並且從技術上講,取得和/或驗證最優最佳化的平行程式碼變得具有挑戰性。
在馮紐曼架構中,執行指令的程序涉及若干步驟,如擷取、解碼、執行和儲存。首先,處理器的控制單元從快取(或從記憶體)獲取指令。然後,控制單元解碼指令以確定要執行的操作類型。當操作需要運算元時,控制單元還會確定每個運算元的位址並從快取(或從記憶體)中獲取它們。接下來,對運算元執行操作,最後將結果儲存在指定位置。指令管線通過重疊若干不同指令的處理來提高處理器的效能。通常,這是通過將指令執行過程分為若干階段來實現的。通常,分為3個階段:(i)擷取:從記憶體載入資料;(ii)解碼:資料轉換和解釋;以及執行:處理和終止。為了設計管線,將循序程序分解為若干子程序,稱為階段或分段。階段執行特定功能並產生中間結果。它由輸入鎖存器(也稱為暫存器或緩衝區)和接著的處理電路組成。處理電路可以是組合電路或循序電路。指定階段的處理電路連接到下一階段的輸入鎖存器(參見圖123)。時脈訊號連接到每個輸入鎖存器。在每個時脈脈衝處,每個階段將其中間結果傳輸到下
一階段的輸入鎖存器。這樣,在輸入資料通過整個管線後產生最終結果,每個時脈脈衝完成一個階段。
圖123至125示意性地示出了電腦輔助IC設計和製造系統0的實施例的可能實現方式的架構,用於最佳化產生多核心和/或多處理器積體電路2架構或佈局、積體電路2效能和積體電路2製造良率。多核心和/或多處理器積體電路2具有多個處理單元和/或處理管線21,它們通過執行平行化的處理機器碼32同時處理針對資料的指令。平行處理多核心和/或多處理器積體電路2對平行化的處理程式碼32的執行包括延遲時間26的發生。延遲時間由處理單元21的在處理單元21處理針對資料的處理程式碼32的特定指令塊之後將資料傳回與接收所述處理單元21執行處理程式碼32的連續指令塊所需的資料之間的閒置時間給出。
電腦輔助IC設計和製造系統0包括自動平行化編譯器系統1,其包括用於將以程式語言編寫的程式碼3的循序原始碼31轉換為平行處理機器碼32的裝置,該平行處理機器碼32包括多核心和/或多處理器積體電路2的多個處理單元21可執行的或控制多個處理單元21的操作的多個指令。自動平行化編譯器系統1與IC佈局系統5相結合,以產生具有多個積體電路佈局元素51的平行處理IC佈局54,該多個積體電路佈局元素51至少包括表示記憶體單元22的元素和表示處理單元21和/或處理管線的元素。編譯器系統1包括解析器模組11,其用於將循序原始碼31轉換為具有處理單元21可執行的基本指令流的程式碼32,基本指令能夠從有限的、特定於處理單元的基本指令集中選擇,並且基本指令僅包括用於多個處理單元21的基本算術和邏輯操作321/322和/或基本控制和儲存操作325。
解析器模組11包括用於將所述基本指令的程式碼32劃分為計算塊節點333的裝置,每個計算塊節點333由單個處理單元21可處理的程式碼32的
不可進一步分解的基本指令序列的最小可能分段組成。基本指令的最小可能分段的特徵在於由連續的讀寫指令構成的基本指令序列,所述序列不可通過連續的讀寫指令之間的更小基本指令序列進一步分解,並且讀寫指令需要接收處理單元21處理所述基本指令序列所需的資料並在序列進行處理之後傳回資料。編譯器系統1包括矩陣建置器15,其用於從程式碼32分割的計算鏈34中產生矩陣151、...、153。矩陣151、...、153包括計算矩陣和傳輸矩陣151/152以及任務矩陣153,其中,計算矩陣151內的每一列包括計算塊節點333,這些計算塊節點333基於讀取和寫入指令的可執行性而可同時處理,該讀取和寫入指令傳輸計算塊節點333的處理所需的資料。傳輸矩陣包含到每個計算塊節點333的傳輸和處理屬性,該傳輸和處理屬性至少表示從一個計算塊節點到接續的計算塊節點333的資料傳輸屬性,至少包括被傳輸資料的資料大小以及資料傳輸的來源計算塊節點333和目標計算塊節點333的標識和/或多個處理單元21中的一個處理單元的處理特性。任務矩陣153的任務56由矩陣建置器15形成,其中,對於每個計算塊節點333具有不同的關聯的讀取的情況,任務56通過以下方式形成:將計算矩陣151的列的計算塊節點333均勻地劃分為多個對稱處理單元21的數量,對於計算矩陣151的每列的多個處理單元21中的每一個形成一個任務56,並且基於預定義方案將剩餘的計算塊節點333劃分為所述任務56的至少一部分。如果計算塊節點333至少部分地具有傳輸相同資料的讀取,則任務56通過以下方式形成:在處理單元21的數量上均勻地或基本均勻地最小化讀取次數和/或如果超過預定義的偏移值,則在每個處理單元21上均勻地最小化整合處理時間。編譯器系統1包括最佳化器模組16,其使用矩陣最佳化技術最小化合計發生延遲時間26,該合計發生延遲時間26合併了所有發生的延遲時間261。為了在任務矩陣153內提供任務56的最佳化結構,最佳化器模組16建置來自計算和傳輸矩陣的行的不同組合,來自計算和傳輸矩陣的行的每種不同組合表示可能的機器碼32作為平行處理程式
碼,在平行處理系統2的硬體上提供其屬性。任務矩陣153的每一列由一個或多個任務333形成計算鏈34,從而創建計算塊節點333的有序流以由多個處理單元21中的一個執行,其中,最佳化器模組16最小化合並了所有發生的延遲時間的合計發生延遲時間26。編譯器系統1包括程式碼產生器17,用於基於經最佳化的任務矩陣153給出的計算鏈34,為具有最佳化的合計延遲時間26的多個處理單元21產生平行處理機器碼32。
IC佈局系統5包括網表產生器52,該網表產生器52用於產生由積體電路2的多個積體電路佈局元素51組成的佈局網表521,積體電路佈局元素51包括積體電路2的電子元件,該電子元件至少包括電晶體511、電阻器512、電容器513以及這些元件在一片半導體515上的互連514。佈局網表521包括多個平行管線53,每個管線53包括輸入鎖存器531和處理電路532,其中,每個輸入鎖存器531包括用於緩衝區或暫存器的積體電路佈局元素51,處理電路532包括用於通過基本指令322集處理關聯的輸入鎖存器531的資料的積體電路佈局元素521。處理階段534由多個平行管線53中的一個進行的特定資料處理給出,產生中間結果5341,其中,指定階段534的輸入鎖存器531和處理電路532連接到下一階段534的輸入鎖存器531。時脈訊號533連接到每個輸入鎖存器531,其中,時脈訊號533包括用於產生時脈脈衝5331的積體電路佈局元素521,其中,在每個時脈脈衝5331處,多個平行階段534中的每一個將中間結果5341傳輸到下一階段534的輸入鎖存器531,並且其中,輸入資料通過多個平行管線53,每個時脈脈衝5331完成一個階段534,直到通過完成所有階段534達到最終結果5342為止。所產生的佈局網表521的多個平行管線53的數量535與經最佳化的任務矩陣153給出的計算鏈34的數量相對應,其中,佈局網表521包括由網表產生器52產生並分配給多個佈局元素51的多個位置變數5211,其中,位置變數5211表示多個佈局元素5212的邊或點的位置,並且其中,網表產生器52根據所產生的佈局網表
521的位置變數值5211產生IC佈局54。
圖12和13示意性地示出了編譯器系統1的實施例的可能實現方式的架構,用於最佳化程式碼3的編譯,以供具有多個處理單元21的平行處理系統2執行。必須注意的是在本文中,當一個元素被稱為「連接到」或「耦接到」另一個元素時,它可以直接連接或耦接到該另一個元素,或者可能存在中間元素。相反,當一個元素被稱為「直接連接到」或「直接耦接到」另一個元素時,不存在中間元素。此外,以下詳細描述的某些部分以程式、邏輯塊、處理和電腦記憶體中資料位元操作的其他符號表示的形式呈現。這些描述和表示是資料處理領域的技術人員用來最有效地向本領域的其他技術人員傳達其工作內容的手段。在本申請中,程式、方法、邏輯塊、程序等被認為是產生期望結果的有條理之(self-consistent)步驟或指令序列。本文描述的實施例變型可以在處理器可執行指令的一般背景下討論,該處理器可執行指令駐留在某種形式的非暫態(non-transitory)處理器可讀媒體上,例如,由一個或多個處理器或其他裝置執行的程式碼或程式碼塊。一般來說,程式碼包括執行特定任務或實現特定抽象資料類型的常式(rountine)、程式、物件、元件、資料結構等。程式碼的功能可以根據需要在各種實施例中組合或分佈。本文描述的技術可以以硬體、軟體、韌體或它們的任何組合來實現,除非具體描述為以特定方式實現。描述為模組或元件的任何特徵也可以一起在整合邏輯裝置中實現,或者單獨實現為離散(dicrete)但可互動操作的邏輯裝置。如果以軟體實現,則這些技術至少可以部分地通過非暫態處理器可讀儲存媒體來實現,該非暫態處理器可讀儲存媒體包括指令,該指令在被執行時,執行上述一種或多種方法。非暫態處理器可讀資料儲存媒體可以形成電腦程式產品的一部分。對於韌體或軟體實現方式,這些方法可以通過具有執行本文所述功能的指令的模組(如:程式、功能等)來實現。任何有形地體現指令的機器可讀媒體都可以用於實現本文所述方法。例如,軟體
程式碼可以儲存在記憶體中並由一個或多個處理器執行。記憶體可以在處理器內實現為例如暫存器,或在處理器外部實現。
結合本文揭露的實施例描述的各種示例性邏輯塊、模組、電路和指令可以由一個或多個處理器或處理器單元21執行,該一個或多個處理器或處理器單元21例如為一個或多個中央處理單元(CPU)210(如:包括控制單元2101、具有暫存器21021和組合邏輯21022的處理器2102),和/或圖形處理單元(GPU)211,和/或聲音晶片212和/或視覺處理單元(VPU)213,和/或張量處理單元(TPU)214和/或神經處理單元(NPU)215,和/或物理處理單元(PPU)216,和/或數位訊號處理器(DSP)217,和/或協同處理單元(SPU)218和/或現場可程式化邏輯閘陣列(FPGA)219或本領域中已知的任何其他處理器單元21,例如,運動處理單元(motion processing unit;MPU)和/或通用微處理器和/或特殊應用積體電路(ASIC)和/或專用指令集處理器(application-specific instruction-set processor;ASIP),或其他等效整合或離散(dicrete)邏輯電路。本文中使用的術語「處理器」或「處理器單元」21可以指上述結構中的任何一種或任何其他適合於實現本文所述技術的結構。此外,在某些方面,本文所述功能可以在如本文所述配置的專用軟體模組或硬體模組中提供。此外,這些技術可以完全在一個或多個電路或邏輯元件中實現。通用處理器21可以是微處理器,但在替代方案中,處理器可以是任何一般(regular)處理器、控制器、微控制器或狀態機。在所描述的實施例中,處理元件是指多個處理器21和關聯的資源(如:記憶體或記憶體單元22)。本文揭露的一些示例方法和裝置可以全部或部分地實現,以促進或支持用於在多個處理器中處理程式碼的一個或多個操作或技術。多處理系統2還可以包括處理器陣列,該處理器陣列包括多個處理器21。處理器陣列的每個處理器21可以以硬體或硬體和軟體的組合來實現。處理器陣列可以代表能夠執行至少部分資訊計算技術或處理的一個或多個電路。作為示例但不限於,處理陣列的每個處理器可
以包括一個或多個處理器、控制器、微處理器、微控制器、特殊應用積體電路、數位訊號處理器、可程式設計邏輯裝置、現場可程式化邏輯閘陣列等,或其任何組合。如上所述,處理器21可以是任何通用中央處理單元(CPU)或專用處理器,例如,圖形處理單元(GPU)、數位訊號處理器(DSP)、視訊處理器或任何其他專用處理器。
本發明包括具有子系統11、...、16的編譯器系統1。在非限制性實施例中,子系統至少包括詞法分析器/解析器11和/或分析器12和/或排程器13和/或矩陣模組14和/或最佳化器模組和/或程式碼產生器16。此外,它們還可以包括處理器陣列和/或記憶體。編譯器1將程式碼分段為多個程式碼塊。對於所述實施例,塊或程式碼塊是指分組在一起的程式碼片段或程式碼部分。分組使得敘述/指令組能夠被視為它們好像是一個敘述,並且限制在塊中宣告的變數、程式和函式的範圍,使得它們不會與在程式中其他地方用於不同目的的具有相同名稱的變數衝突。
平行處理系統2的上述記憶體或記憶體單元22可以包括任何記憶體以儲存程式碼塊和資料。記憶體22可以表示任何合適或所需的資訊儲存媒體。記憶體可以與處理器單元21和/或處理陣列耦合。如本文所用,術語「記憶體」2是指任何類型的長期、短期、揮發性、非揮發性或其他記憶體,並且不限於任何特定類型的記憶體或記憶體數量,或儲存記憶體的媒體類型。記憶體2可以例如包括主儲存單元211作為處理器暫存器2111和/或處理器快取2112,該處理器快取2112包括多階級快取,如L1快取21221、L2快取21222等和/或隨機存取記憶體(RAM)單元2113。關於本申請,必須注意,多階級快取的問題在於快取延遲與命中率之間的權衡。較大的快取具有更好的命中率,但延遲更長。為了解決這種權衡,可以使用多階級快取,其中,小型快速快取由較大、較慢的快取備份。多階級快取一般通過首先檢查最快的1級(L1)快取來進行操作。如果命中,
則處理器可以以更高的速度繼續。如果較小的快取未命中,則檢查下一個最快的快取(2級,L2),依此類推,然後再存取外部記憶體。快取存取不能由程式設計師直接控制。它可能受資料局部性和/或編譯器提示的影響。隨著主記憶體與最快快取(參見圖1)之間的延遲差異越來越大,一些處理器已開始使用多達三級片上快取。記憶體2還可以例如包括輔助儲存單元212和/或第三儲存單元213(如:磁帶備份等),輔助儲存單元212包括例如硬碟驅動器(HDD)2121和/或固態驅動器(SSD)2122和/或通用序列匯流排(USB)記憶體2123和/或快閃記憶體驅動器2124和/或光學儲存裝置(CD或DVD驅動器)2125和/或軟碟機(FDD)2126和/或RAM硬碟2127和/或磁帶2128等。在至少一些實現方式中,本文描述的儲存媒體的一個或多個部分可以儲存代表由儲存媒體的特定狀態表達的資訊的訊號。例如,表示資訊的電子訊號可以通過影響或改變儲存媒體的一部分(如:記憶體、暫存器、正反器(Flip-Flop)等)的狀態來表示資訊而「儲存」在儲存媒體的該部分中。因此,在特定實現方式中,儲存媒體中儲存代表資訊的訊號的部分的這種狀態改變構成儲存媒體向不同狀態或事物的轉變。如上所述,記憶體2例如可以包括隨機存取記憶體(RAM),例如,同步動態隨機存取記憶體(synchronous dynamic random-access memory;SDRAM)、先進先出(FIFO)記憶體或其他已知儲存媒體。
(微)處理器基於積體電路,這使得基於(兩個)二元值(最簡單的1/0)進行算術和邏輯運算成為可能。為此,二元值必須可供處理器的計算單元使用。處理器單元需要獲得兩個二元值來計算運算式a=b運算元c的結果。檢索這些操作的資料所花費的時間稱為延遲時間。這些延遲時間的層次範圍很廣,包括暫存器、L1快取、記憶體存取、I/O操作或網路傳輸,以及處理器配置(如:CPU與GPU)。由於每個單個元件都有延遲時間,因此計算的總延遲時間主要是現代計算基礎設施中使資料從一個位置到另一個位置所需的硬體元件的組合。CPU(或GPU)獲得資料的最快位置與最慢位置之間的差異可能很大(在量級
>10^9的範圍內)。
從一般角度來看,延遲是系統中被觀察或測量的某些物理變化的原因與結果之間的時延。本文使用的延遲與多處理系統2的物理結構直接相關。多處理系統2包括基於積體電路的處理器單元21,這使得能夠基於(兩個)二元值(最簡單的1/0)進行算術和邏輯運算。這些二元值必須可供處理器的計算單元使用。處理器單元需要獲得兩個二元值來計算運算式a=b運算元c的結果。檢索這些操作的資料所花費的時間稱為延遲時間。這些延遲時間的層次範圍很廣,包括暫存器、L1快取、記憶體存取、I/O操作或網路傳輸,以及處理器配置(如:CPU與GPU)。由於每個單個元件都有延遲時間,因此計算的總延遲時間主要是多處理系統的基礎設施中使資料從一個位置到另一個位置所需的硬體元件的組合。值得注意的是,微處理器的速度每十年增加十倍以上,但商用記憶體(DRAM)的速度只增加了一倍,即存取時間減少了一半。因此,以處理器時脈週期為單位的記憶體存取延遲在10年內增加了六倍。多處理器系統2加劇了該問題。在基於匯流排的系統中,在處理器與記憶體之間建立高頻寬匯流排往往會增加從記憶體獲得資料的延遲。當記憶體在物理上分佈時,網路和網路介面的延遲會添加到存取節點上的本機記憶體的延遲中。延遲通常隨著多處理機1的大小而增加,因為更多的節點意味著關於計算的更多通訊、用於一般通訊的網路跳轉更多,並且可能存在更多競爭。平行計算硬體設計的主要目標是通過保持高可擴展頻寬來減少資料存取所用的總體延遲,而平行處理編碼設計的主要目標是減少處理器單元21的總體閒置時間。一般來說,處理器單元21的閒置時間可能有若干原因,如記憶體存取延遲、死結或競爭條件,例如,如果處理器單元21處理的程式碼塊或執行緒的順序或時序相互依賴,即,取決於干擾執行緒之間的相對時序。如本文所用,死結是多個處理器單元21中的一成員正在等待另一成員的輸出(如:由另一處理器單元21處理的指令塊的輸出)以採取行動的狀態。死
結是多處理系統1、平行計算和分散式系統中的常見問題,其中,軟體和硬體鎖用於仲裁共用資源並實現程序同步。因此,本文使用的死結在程序或執行緒進入等候狀態時發生,因為被請求的系統或資料資源被另一個等待程序持有或尚未被該程序獲得,而該程序又可能在等待另一個等待程序持有的另一個資源或資料。如果處理器單元21無法進行進一步處理,因為它請求的資源正在被另一個等待程序使用(另一個處理器單元21尚未完成的程序的資料存取或輸出),那麼本文將其稱為死結,死結導致相應的處理器單元21出現閒置時間。
編譯器系統1包括用於將電腦程式3的來源程式語言31翻譯成作為產生處理程式碼3.1,...,3.n的目標程式語言的機器碼32的裝置,該處理程式碼3.1,...,3.n包括平行處理系統2的多個處理單元21可執行的或用於控制多個處理單元21的操作的多個指令。來源程式語言例如可以是高階程式語言31。高階程式語言31例如可以包括C和/或C++311和/或python 312和/或Java 313、Fortran 314、OpenCL(開放計算語言)315或任何其他高階程式語言31。重要的是要注意,自動平行編譯器系統1還可以應用於機器碼31或組合程式碼31作為原始碼以實現程式碼的平行化。在這種情況下,高階語言到機器碼指令的翻譯不必由編譯器系統10執行。
平行處理系統2包括記憶體單元22,記憶體單元22至少包括主執行記憶體單元221/2212,主執行記憶體單元221/2212包括用於保持處理程式碼32的至少一部分的資料的多個記憶體組,以及過渡緩衝單元221/2211,過渡緩衝單元221/2211包括用於儲存處理程式碼32的起始位置和至少包括分支或跳轉指令和/或使用的記憶體引用和資料值的資料段的高速記憶體,其中,主執行記憶體單元2212提供比過渡緩衝單元2211更慢的存取時間。過渡緩衝單元2211例如可以包括快取記憶體模組2211和/或L1快取22121。
平行處理系統2對處理程式碼32的執行包括延遲時間26的發生,
延遲時間由處理單元21的用於檢索和/或儲存處理單元21執行處理程式碼32的特定指令塊所需的資料的閒置時間給出。延遲時間例如可以包括暫存器2211存取時間和/或L1快取22121存取時間和/或記憶體2213存取時間和/或I/O操作時間和/或資料網路傳輸時間和/或處理器配置時間。
編譯器系統1包括解析器模組11,其用於將來源程式語言31翻譯成能夠由處理單元直接執行的基本指令的程式碼32,其能夠由處理單元21的數量執行,基本指令能夠從特定於處理單元的基本指令集中選擇,該基本指令集包括算術運算321和/或邏輯運算322和/或控制運算和/或I/O運算,特別是針對處理單元21的數量的變數和陣列宣告指令323、比較運算指令324和程式碼流指令325。算術運算321例如可以包括加法、減法、乘法和除法運算。邏輯運算322例如可以包括多個邏輯運算式,例如相等、不等、大於、小於、大於或等於、小於或等於。控制運算例如可以包括「分支運算式」和/或「迴圈運算式」。
作為實施例變型,至少兩個處理單元可以例如具有不同的基本指令集。具有不同的基本指令集的不同處理單元可以例如包括中央處理單元(CPU)210、圖形處理單元(GPU)211、聲音晶片212、視覺處理單元(VPU)213,張量處理單元(TPU)214,神經處理單元(NPU)215、物理處理單元(PPU)216、數位訊號處理器(DSP)217、協同處理單元(SPU)218、現場可程式化邏輯閘陣列(FPGA)219等。
解析器模組11包括用於將基本指令的程式碼劃分為計算塊節點333的裝置,每個節點由不可進一步分解的單元的最小可能分段組成,每個不可進一步分解的單元包括需要相同輸入資料的基本指令序列。兩個或更多個計算塊節點333(每個節點具有基本指令鏈)形成計算鏈34,從而針對輸入資料創建有序的操作/指令流。計算塊節點333中的鏈(基本指令序列)由固定規則建置:指令放置在鏈34中新基本指令在對資料點進行寫入的基本指令之後進行讀取的位
置。這自動形成鏈34,該鏈以資料為中心,並將必要的、物理上有限的讀取和寫入操作映射到CPU21的計算暫存器2211、L1快取2212、網路I/O等。
編譯器系統1包括矩陣建置器15,其用於根據延遲時間26從計算鏈34中產生多個數值矩陣151、...、15i。在計算鏈34的圖中,可以評估系統的依賴關係,但是系統的依賴關係不能簡單地分解為各個獨立的鏈。鏈34中存在計算塊333鏈的融合和分解情況,這是由於資料依賴關係和/或程式碼分支造成的。在硬體系統中分發資訊的延遲被引入為物理時間。通過為每個計算塊節點333分配至少該時間間隔長度,圖或樹結構中的每個計算塊節點333可以根據其在圖中的位置進行編號並賦予塊編號,從而為圖中具有相同「時間位置」的計算塊節點333賦予相同的編號。如果計算塊節點333的長度至少要與系統中分發資訊所花費的時間長度相同且在此期間必須計算盡可能多的指令,並且每個計算塊節點333基於其在圖形中的位置根據程式流具有編號,則可以建置成組的矩陣151,...,15i。
矩陣151,...,15i還表明它們可以用數學方法獲得(基於CB、CC等的圖模型不能簡單地獲得為表格/矩陣)。因此,資料操作和通訊被給出並建置數值矩陣,其可以例如通過使用ML或AI進行最佳化(更改),具體取決於目標平台和/或硬體設置。
編譯器系統包括數值矩陣最佳化模組16,其使用數值矩陣最佳化技術,通過提供由多個處理單元21處理的計算鏈34的最佳化結構將總體發生的延遲時間最小化為合計延遲時間26,其中,借助程式碼產生器17,為具有最佳化的總體延遲時間26的平行處理系統的多個處理單元產生最佳化的機器碼。現在可以將最佳化應用於硬體基礎設施。對於每個時間單元和每個獨立鏈和分支,對最佳化重要的數量在矩陣151、...、15i中以數值形式已知:例如,根據矩陣中的內容:(i)基本指令的數量,這些基本指令必須是順序的,(ii)來自計算鏈u
中的計算塊x的資料傳輸的大小,以及何時在計算鏈v中的計算塊y上再次需要該傳輸(其中,y>x)(如:可以經由網路或組合計算塊使資料位於同一快取線上)。例如:對於GPU,資料應在一個處理步驟中從記憶體複製到GPU記憶體,然後應立即執行具有相同屬性的所有基本指令,但在CPU上,具有相同資料的操作應位於同一快取線上(取決於CPU),或者可以利用必要的更好指令集在對應的CPU上計算特定資料類型的操作。在本發明的系統中,即使沒有最佳化,這也始終會產生平行程式碼,因為基本元素在CB中按順序分組。
總之,由於(微)處理器僅理解基本指令,因此原始碼31被拆分成這些基本指令,以實現最基本的平行化級別。(請注意,本發明也適用於基於積體電路(IC)原理的(微)處理器最佳化的技術問題,積體電路是成組的電子電路。所提到的指令與(微)處理器上的電子電路的配置相關聯,因此以下主題也適用於任何形式的積體電路,反之亦然,可以用於為指定程式碼匯出最佳化的積體電路(或電子電路的配置或直接電子電路),因為指令可以看作是表示計算操作(如:+、-等)的電子電路配置的形式)。以下核心點是本發明系統的關鍵:(1)處理器系統的基本指令根據其獨特的「讀取」和「寫入」行為進行組合,即,根據以下規則在節點鏈中形成指令鏈並連結到計算塊333:“一條指令對X1進行寫入,在上一條對X1進行寫入的指令之後附加一條對X1進行讀取的新指令(an instruction writes to X1,a new instruction which reads to X1 is appended after the last instruction which writes to X1)”;(2)如果需要在多處理器系統2中傳播資訊/資料,則啟動新的計算塊333;(3)每個計算塊333具有最小時間長度。這與在硬體系統中向/從塊333傳播資訊(資料或訊號)所需的時間長度(延遲)成比例;(4)如果圖模型具有通過連結連接的兩個讀取資料節點、指令節點和一個寫入資料節點,則來自計算塊333的鏈具有以下位置:兩個鏈(a)相遇(如:因為指令從兩個寫入兩個不同計算塊333中的兩個資料點讀取,或者因為存在分支),(b)發生,例如,如
果兩個計算塊333可以通過同時讀取來啟動。如有必要,圖模型還可以例如基於超過2個的讀取節點和若干寫入節點,或者將若干指令組合在一個操作/指令節點中;以及(5)這些鏈34可以分解,並且可以在矩陣中獲得每個離散時間間隔的指令和必要的資訊傳輸。例如,每行分為若干列(時間間隔一列),並包含獨立的指令鏈和到其他鏈的必要的資訊傳輸。因此,這些對於自動最佳化過程,特別是數值最佳化過程是可行的。這為原始碼的全自動平行化提供了基礎。必須注意的是,在本自動平行化系統1中,圖模型不僅僅基於矩陣或表格表示,而且還提供了與計算平行鏈34相關聯的作為任務圖的計算塊圖的多維巢狀樹結構,從而允許系統1評估可以用於自動平行化、程式碼最佳化、計算塊333排程,甚至自動成本估算或自動映射到多處理系統2的不同架構的屬性。
如上所述,在計算矩陣中,單元包含由形成鏈34的計算塊節點333序列給出的指令鏈34,而在傳輸矩陣中,單元包含傳輸屬性,即,需要傳輸到其他計算塊節點333和來自其他計算塊節點333的傳輸。請注意,傳輸屬性包括另一個計算塊節點333中需要什麼資訊。根據目標基礎設施的級別,這可以通過傳統編譯/由處理器控制來解決=在快取中的傳輸(傳統編譯器將資料分發到暫存器並嘗試利用資料局部性來有效使用快取級別)或明確由共用記憶體共用並由鎖保護或明確使用例如訊息傳遞介面(MPI)協定從/向叢集中的不同節點發送和接收或通過多核心程序間通訊(IPC)中的通訊端發送和接收等。傳輸屬性可以具有任何形式的通訊,範圍從由處理器(快取)處理或由通訊模式明確(如:經由佇列的IPC、MPI等)。這使得本發明的方法能夠擴展到各種平台和/或基礎設施。因此,傳輸屬性可以例如包括將資料%1(整數)發送到單元(1,7)的資訊。傳輸和/或通訊需要一定的時間,這通常直接取決於特定系統中的(傳輸/通訊)延遲時間。最後,必須注意,如上所述,在計算矩陣的特定行中,列單元包括指令流或指令序列,其中,該行的每個列單元包括計算塊節點333序列中的一個計算塊節點333,形
成特定行的鏈34。然而,在特定實施例變型中,行的每個單元不一定需要包括指令序列或指令。計算矩陣的一個或多個特定行的一個或多個單元也可以為空。這對於傳輸矩陣也是如此。計算矩陣和傳輸矩陣的大小(即,行數和列數)通常相等。計算矩陣和傳輸矩陣為自動平行化提供可能的技術結構。
從技術上講,矩陣建置器根據來自解析器模組11的程式流(如:圖35)和/或程式碼32分別連接計算塊節點333。程式流通過連接計算塊節點333(類似於基本塊)來表示,例如,當添加新指令(=操作節點)時,可以例如產生新的計算塊節點333,其中,一般來說沒有明確的依賴關係(參見圖21),新的計算塊節點333位於另一個計算塊節點333之後或分支節點下。添加所有指令後,可以沿著程式流對每個計算塊節點333進行編號,形成如此產生的鏈34的序列。這些數字(塊號)等於矩陣的列。具有相同塊號的計算塊節點333分佈到計算矩陣同一列的不同行。
到目前為止,解釋了如何將來自循序原始碼(循序指令列表)的基本指令分組到此處定義的計算塊(CB=優選以循序運行的指令列表)中,並對所得到的組進行索引以檢索要平行運行的指令組,包括在不同計算單元上運行所需的傳輸。該方法建立在現代計算平台的系統視角之上,而現代計算平台仍然受到二進位計算步驟的限制。這個基本概念(即,如何在二進位計算系統(即,數位處理器2102/2103)上計算術學運算(如:+、-、*、/等))會導致一些物理限制和依賴關係:(i)為了計算敘述a=b<op>c,各自表示對應精度(int到雙精度)的數位的位元模式b和c在計算時必須物理地可供二進位計算單元使用;(ii)為了在平台或系統上傳輸位元模式a、b或c,會出現延遲時間Δt transfer;(iii)該Δt transfer至少比在一個計算單元(即,一個處理器2102或處理器核心2103)上循序計算若干指令高出一個冪。分組基於資料依賴關係提取,從而將指令分組到計算塊(CB)中。每個計算
塊都由一個循序指令鏈組成。CB之間所有需要的資料傳輸都保留下來。這種組合使得能夠以與硬體無關的方式最佳化和自動平行化要分別在平行計算單元(即,處理器2102和處理器核心2103)上處理的原始碼,而無需任何程式設計師的提示。
實施例變型使用位於自動平行化編譯器的中間端的系統和方法,參見圖84。產生的結果可以作為張量或圖形給出,具體取決於表示形式,參見圖85。如果程式碼由張量(或矩陣)表示,則由計算塊及其每個單元中的指令鏈組成。每行表示一系列指令組,這些指令組能夠獨立於同一列的其他行中的分組指令進行計算。在第二矩陣中,對應的資料傳輸收集在指令組之間。圖80還示出了可以如何將張量項目表示為圖形。必須注意的是,由於CBA定位在CBB中讀取資料可用後最早可能的段號(段號為A=B+1(1CB對應於潛在傳輸時間))的行和列中,因此屬於同一條件的計算矩陣中的連續項目基於相同的讀取資料。這些連續分段可以稱為計算分段,並指示無需其他資訊即可計算連續CB。如果兩個伽馬節點之間存在1條邊,則可以將伽馬節點組合為一個伽馬節點(Γ3a +Γ3b =>Γ3b )。這使得可以將它們組合在同一個伽馬節點中,因為它們以與屬於同一分支節點的同一行上的連續CB相同的方式基於相同的資料。根據定義,這種計算分段是計算塊節點333,因為它們包含任意系列的不共用任何資料依賴關係的循序指令。應用於費波那契情況,這在圖85中可見,並產生如V.Sarkar的“Fundamentals of parallel programming module parallelism”中的計算圖。在「展開情況」的示例中指示比較指令是為了說明目的,以說明圖75中應用於LLVM-IR的方法如何形成伽馬圖。圖30中示出了該方法如何在不同的分支節點上形成至少一個連續的CB系列,從而保持程式流從呼叫程式(用main()表示)到程式結束(用return(0)表示)。這在圖85中也可見。在多執行緒平台中解釋該伽馬圖,每個邊意味著為上下文切換引入延遲時間。
與索引版本一樣,可以平行計算的CB位於同一列,這意味著它們具有相同的段號。可以將具有相同段號的CB組合在一起(參見圖39)。在該步驟中,新計算段中的指令會加起來,並且單元之間的可能傳輸會消失,參見圖11。這會影響平行或循序計算CB的時間。
另一種表示形式是計算或任務圖,本文稱為「伽馬圖」。為了區分:(i)計算圖用於參考(參見V.Sarkar的Fundamentals of parallel programming module 1 parallelism;見上文),其中,節點由理想平行性領域中的任意循序指令組成;(ii)任務圖是具有任務的通用圖,與這些任務的形成方式無關(如:作為計算圖或在函式式程式設計領域中的函式意義上等);(iii)伽馬圖是每個節點都是一個CB或CB組合的圖。伽馬圖是任務圖,並且在初始精細度上是計算圖。伽馬節點表示計算段,見上文。
每個節點表示一個或多個CB。如果在張量表示的行中(即,在一個單元上),在沒有用於列間傳輸的項目時,則計算塊可以組合為一個計算段。對於每一行,都會發展出不同的計算和通訊序列。伽馬節點至少由一個計算塊節點(CB)或若干具有相同段號和/或具有相同計算段的組合組成。由此,可以通過本發明的系統和方法獲得程式碼的基於物理的、獨特的動態任務精細度,如下所述。
此外,利用該方法進行分解的結果是,在每一行(參見張量表示)或節點(參見伽馬圖)中得到不同的分段來進行計算和通訊。根據伽馬節點可以產生對應的平行程式碼,參見圖87。Δ t compute 是計算時間,Δ t transfer 是通訊/傳輸時間。圖87示出了不同的計算和傳輸/通訊部分。計算時間Δ t compute 和通訊/傳輸
時間Δ t transfer 都很容易獲得,也不必針對平台進行固定,但該方法的獨特特徵在於能夠在編譯期間從程式碼中提取這兩個獨特的屬性。這使得可以通過使用可用的框架(如:openMP、MPI或其他框架)最佳化節點(程式碼塊)到可用計算單元的分配。
總之,本發明的自動平行化方法和系統將循序程式碼中的指令分組並索引,並以進行計算和產生通訊(資料傳輸)部分的分組指令的形式提供程式碼,這些部分能夠表示為張量或圖。計算部分可視為具有與其他任務的對應傳輸/通訊的任務。任務的建置遵循基於基本物理的原理,即在不同的計算單元上分佈資料(位元資訊)引入傳輸並可以減少計算時間。它是以不同於程式碼的精細度產生基於物理的資料塊的方法。通過僅組合平行CB的能力,該方法能夠產生具有不同任務精細度的任務圖。為指定程式碼產生此類任務圖的能力為自動最佳化/平行化程式碼到由超過一個的計算單元組成的指定硬體帶來了新的機會。結合解決平行機器上作業/任務排程可能出現的NP完全問題的解決方案,本發明的方法是將程式碼分發到同質或異質平台的通用方法。
每個任務的精細度可以表示為G=Δ t compute /Δ t transfer 。例如,請參閱J.Kwiatkowski的“Evaluation of parallel programs by measurement of its granularity”。精細度與平行性級別相關。存在平行性的若干級別(見上文):(a)指令平行性:指令層級平行性(ILP)產生非常精細的平行性,並通過分析指令依賴關係來利用。微處理器(即微控制器)的硬體排程程式也會隱含地利用ILP;(b)資料平行性:許多程式操作應用於較大資料結構的元素。這些操作可以在平行或分散式系統上執行;(c)迴圈平行性:如果迴圈迭代沒有依賴關係,則可以平行執行。如果所有迴圈迭代都需要相同的執行時間,則可以通過靜態配置輕鬆完成分配,其中每個計算單元的迭代次數固定;以及(d)任務(或執行緒)平行化,其更多地從功能平行化的意義上定義平行化。經過大量簡化的SOTA編譯器基於
ILP,並且在某種程度上擴展為迴圈平行性。在SOTA編譯器中,將程式碼分解為基本塊是第一步驟。基本塊(BB)是沒有跳轉中斷的指令程式碼序列。這意味著除了入口和出口的一個分支之外,沒有其他分支(參見:Hennessy,JohnL.;David A.Patterson,Computer architecture:a quantitative approach,Elsevier,2011年)。本發明的方法擴展了基本塊概念,並為每個BB提取了可能的平行指令以及在對應的控制流圖(CFG)中與其他BB之間的對應傳輸選項。
下面展示了基本塊的概念如何與本發明方法互動。圖88示意性地示出了BB和CFG形式的程式碼。圖89中示出了將該方法應用於程式碼後潛在計算塊(CB)的對應圖表示。CB的分組和順序取決於BB內的指令資料依賴關係。在對CB進行索引後,計算和通訊段演變為2個單元,如圖90所示。T和F顯示了取決於導致圖89中分支的條件的分段。如果存在可能的平行指令機會來平行化BB中的計算,則分支形成傳輸時間Δ t transfer ,這在圖90的第一通訊步驟中可見。
對於每條路徑(基於一種特定條件組合,貫穿程式碼的節點的一種可能順序),提取對應的傳輸大小為S path1 、S path2 和S data ,參見圖89。在所得到的平行程式碼中,每個分支轉換(即,基本塊的改變)都有對應的傳輸,取決於每個基本塊內的指令平行性可能性。重要的是要注意,通過組合CB,這些傳輸屬性也可能消失,從而導致最佳化問題,該最佳化問題最好通過針對一個計算單元的SOTA編譯器方法進行最佳化。計算段可以看作任務,而傳輸可以看作通訊。程式碼或程式碼是具有明確定義的全序的操作序列,其中,平行性可以表示為偏序。本文使用的計算圖是所謂的有向無環圖(Directed Acyclic Graph;DAG),其中每個節點都是循序指令鏈(=任務),邊是排序限制。本發明的自動平行化方法能夠自動從程式碼中提取某個計算圖(CG)G(有關計算圖,請參見例如V.Sarkar的“Fundamentals of parallel programming module parallelism”)。若干屬性與計算圖G相關聯,其中, t runtime,p是平行執行時間,P是計算單元的數量。如果假設執
行時間time(N)已知,並且是不間斷的循序計算,則這不依賴於平行機器上的排程:
˙G中節點的執行時間總和:Work(G)=Σ node N in G time(N)
˙G中的最長路徑(關鍵路徑)->關鍵路徑長度:CPL(G)
˙指定計算圖G的最佳化(理想)平行性:Work(G)/CPL(G)
對於排程,即,向資源配置計算任務的操作,瞭解每個任務的長度以及它們如何相互關聯對於滿足其限制條件和最佳地排程它們至關重要。對於對稱平行架構,在假設CB的計算時間相對於傳輸時間較小的情況下,這一點尤其正確。在這裡,關鍵路徑(G中的最長路徑=CPL)是重要屬性,提供了指定程式碼的平行化程度的度量,因為不可能在少於這個時間內進行排程來計算或處理CG G。
對於在具有P個處理器的平行處理器機器上執行G(與排程無關):(1)容量邊界至少為 t runtime,p Work(G)/P。這意味著,小於 t runtime,p的執行時間在P個處理器上不可能實現(即使完美劃分);(2)關鍵路徑邊界至少為 t runtime,p CPL(G)/P。這意味著,對於某個程式碼而言,不可能以少於 t runtime,p的時間排程平行化,因為每個排程器都必須遵守關鍵路徑中的依賴關係。因此,平行執行時間 t runtime,p由以下等式給出:
總之,本發明的系統和方法提供了針對指定程式碼提取計算圖的新技術方法。利用EV3,迴圈部分也可以做到這一點,而無需明確地解決指令之間的每個資料依賴關係。這實現了根據硬體的延遲特性將原始碼自動平行化到硬體的新機會。本發明尤其通過應用於迴圈級平行化的技術問題而顯示出巨大的潛力,這是高效能運算(HPC)應用的核心方面,因為迴圈部分可以引入大量的
計算需求。在資料儲存在隨機存取資料結構中的應用中,特別提供了利用本發明的高度最佳化的平行化的機會。在這種背景下,對自動平行化進行基準測試的知名的技術示例是遞迴或迴圈實現方式以產生費波那契數,這將在下面討論。此外,當將傳輸時間視為平行機器平行運行應用的成本(如:執行緒環境中的上下文切換)時,本自動平行化編譯器能夠根據指定的傳輸時間(TT)形成任務圖。即,本發明的系統能夠提供特定的自動平行化,其產生對硬體特定特性進行最佳化的最佳化平行程式碼,以平行運行所使用的平行處理系統(特別是一個或多個多核心中央處理單元(CPU)的特定架構)的任務。
一般來說,該方法可以用於從程式碼中獲得理想平行領域中定義的計算圖,比較V.Sarkar的“Fundamentals of parallel programming module parallelism(平行程式設計模組平行性基礎)”。這使得在應用以下假設時能夠推斷出一些程式碼特徵:所有節點的執行時間已知,且不間斷地進行循序計算,並且該時間不取決於排程,處理器沒有限制。如上所述,對於最佳排程,即將計算任務分配給資源的操作,瞭解每個任務的長度以及它們如何相互關聯對於滿足其限制條件和最佳地排程它們至關重要,即,實現最佳最佳化。
為了測量處理器2102或處理器核心2103或平行處理器架構的效能和硬體特定參數,測量時脈速度頻率對於本發明的自動平行化系統1來說是不夠的,還需要更準確的參數來測量效能。重要的是要理解,如今,市場上有大量的處理器類型和品牌,它們的硬體屬性和特性差異很大:英特爾、AMD(Advanced Micro Devices,Inc.)和ARM(Acorn RISC Machines或Advanced RISC Machines)就是示例。每個公司都有多種不同的架構類型和處理器層級,這使事情變得更加複雜。為了最好地最佳化平行化,需要準確的方法來比較這些處理器的計算能力。一種測量處理器效能的可能方式是測量每秒指令數
(instruction per second;IPS)。因此,IPS(目前通常以MIP(每秒百萬條指令)或GIP(每秒十億條指令)為單位進行測量)可以例如用作處理器2102/2103的速度的度量,並且可以被視為處理器2102/2103在一秒鐘內可以處理多少條指令的一般度量或基準。但是,例如,對於複雜指令集電腦(complex instruction set computer;CISC),不同的指令花費不同的時間量,因此測得的值取決於指令組合。即使比較同一系列的處理器,IPS測量也可能存在問題。許多報告的IPS值表示在具有少量分支且沒有快取競爭的人工指令序列上的「峰值」執行率,而實際工作負載通常導致顯著更低的IPS值。記憶體層級結構也極大地影響處理器效能,而傳統IPS測量並未適當考慮這一問題。因此,沒有適當的方法來測量MIPS,並且MIPS測量不能用作本發明系統1所要求的指令執行速度的度量,而最多只能用作與參考值相比的任務效能速度。總之,指定處理器的速度取決於許多因素,例如正在執行的指令類型、執行順序和分支指令的存在(在處理器管線中存在問題)以及不同的快取級別。
請再次注意,處理器指令速率不同於時脈頻率,因為每條指令可能需要若干時脈週期才能完成,或者處理器可能能夠同時執行多個獨立指令。在比較利用類似的架構製成的處理器(如:Microchip品牌的微控制器)之間的效能時,MIPS可能很有用,但很難在不同的CPU與處理器2102/2103架構之間進行比較。特別是,具有較高數位的MIP測量結果對於需要精確的硬體特定測量參數值的當前系統1的實際操作情況意義不大。關於處理器架構,設計過程涉及選擇指令集和特定的執行範例(如:VLIW或RISC),並產生特定的微架構,該微架構通常在例如VHDL或Verilog中描述。對於微處理器設計,則採用各種半導體裝置製程中的一些來製造該描述,從而產生結合到晶片載體上的晶粒。然後將該晶片載體焊接到印刷電路板(PCB)上或插入到印刷電路板(PCB)上的插槽中。任何處理器的操作模式都是執行指令列表。指令通常包括使用暫存器計算或操縱資料
值、更改或檢索讀/寫記憶體中的值、執行資料值之間的關係測試以及控制程式流的指令。前面提到的處理器的時脈速度是另一種通常以兆赫和千兆赫為單位的度量。然而,如上所述,時脈速度本身也不是衡量本發明的處理器效能的準確方法。最後,每秒浮點運算(floating-point operations per second;FLOP)仍然是衡量處理器的效能的另一因素。浮點數是具有浮動小數點的數位,例如0.008。然而,FLOP基準僅測量浮點運算而不是整數,這意味著它也不能單獨地衡量處理器效能。
因此,單獨測量單個CB的執行時間既無效也不切實際。但是SOTA編譯器方法是為了最佳化指定處理器上的一系列指令(NP完全最佳化)而建置的。所提出的發明系統不會改變有關如何在處理器上排程指令方面的任何指示。對於本發明系統,CB的相對計算時間比一條特定指令或一個CB的絕對計算時間更為相關。目標更多的是確定不同CB的相對持續時間,並將計算時間從資料載入和儲存(受記憶體層級結構的影響,例如,快取存取)中分離出來,這表示為方法中的傳輸(如:在多核心架構中,計算單元之間的資料可以由L2或L3快取共用,並且本發明系統的最佳化是將CB分佈為在L2/L3快取上出現的傳輸的形式)。SOTA編譯器方法可以用於將CB中的程式碼編譯為機器碼。現代SOTA編譯器方法旨在對於指定的一系列指令(主要在基本塊的範圍內)利用處理器特性(如:通過例如使用例如適當的特定暫存器(如:XMM暫存器)利用指令平行性)、使用浮點單元、亂序執行等。這會導致目標計算單元的機器碼最佳化。如前所述,存在確定單個機器運算速度持續時間的既定方法,該週期持續時間是處理器時脈速度的函式,參見A.Fog,“Instruction tables”,丹麥技術大學,2022年。基於這些機器指令的表格值和作為資料大小與資料階層結構(如:快取級別、記憶體等)的函式的可用延遲時間,可以得出計算CB的相對持續時間。以這種方式,使用知名的SOTA編譯器方法涵蓋了對單個指令進行排程的最佳使用,這些方法非常
完善並且涵蓋了針對一個計算單元/處理器的指令排程的NP完全問題。這種步驟還推導出一系列任意循序指令與在指定硬體上計算該指令集所需的資料大小Scomp之間的關係。結合時脈速度頻率,這允許對不同CB(=一系列循序指令)之間的計算時間差異進行建模。由於同一列中的CB表示獨特且不同的指令鏈集,並且沒有任何資料依賴關係,因此相對執行時間可以通過指令數、每條指令的特定週期數和對記憶體的存取來近似。必須注意的是,連續CB中的指令鏈始終基於相同的獨特第一「讀取」資訊(在CB內,下一條指令的讀取值直接位於寫入指令之後=計算塊節點333的定義)。CB中計算所需的任何其他資訊都通過傳輸矩陣中的傳輸來收集。資料局部性的該基本特性使得可以推導出這些資料是否可以位於不同的記憶體層級結構(快取、記憶體或磁碟或網路等)上。同一列中CB的組合有所不同,因為這表明例如通過快取級別能夠利用資料依賴關係。可以通過累積所有平行CB的資料大小來檢測此影響,因為這是需要載入到暫存器的最小資料大小,並且可以得出可以保持資訊的對應快取級別的延遲。由於資料以塊的形式載入(如:頁面大小、快取線大小等),因此可以得出指定資料級別的最小載入次數,並用於編寫具有最佳化的資料局部性的平行程式碼。
這些方法並不意味著提供更好的方法來最佳化一個處理器上的指令,而是利用不同的級別(ILP到LLP)並提供結構化的方式來基於其資料局部性建置基於物理的指令塊。基於這些不同的指令塊(CB),可以推導出通用的最佳化問題,以最佳化(a)到物理關係(b)-引用為rel1:
I.該方法獲得計算圖,因此對於圖中的每個級別,任意循序指令(CB)的平行的獨特鏈的最大數量已知為運行時(runtime)參數的函式。
II.計算單元/處理器具有:
i.延遲時間集,用於檢索指定大小的資料(資料大小匹配到暫存器、Ln-快取、記憶體、磁碟等)
ii.對於指定的一系列指令,需要最小資料大小/輸入位元大小S comp 來計算指定處理器或組合電路上的一系列指定指令。
iii.對於指定的一系列指令,通過計算該一系列循序指令的對應方式(指令集、處理器架構、快取和記憶體佈局,或組合電路與循序電路),在處理器/組合電路上給出不同的計算時間。
這意味著對於每個伽馬圖級別,(a)不同CB的數量、(b)對於每個CB而言,計算CB中指令的最小大小,以及(c)所需的「讀取」和「寫入」資料大小(表示為資料傳輸)在編譯時間期間作為運行時參數的函式是已知的。idl-points表示伽馬節點,其中,當Γ2和Γ3b 不具有相同的執行時間,來進行所有S transfer,i 的傳輸和計算問題大小S comp,2,and3,a 時,處理器將idl(如:參見圖80,return(0))。此資訊以通用形式從任何指定程式碼中提取,因為資料關係的資訊必須處於可運行程式碼的任何形式。
總結一下,沿著具有初始精細度的伽馬圖=計算圖,參見上面的II-引用為rel2:
(1)每個級別給出平行伽馬節點的數量。每個CB都由獨特的指令鏈組成(圖80:Γ2,Γ3a ,Γ4)
(2)對於指定的平台,每個節點都有計算指令所需的不同資料大小S compute,CB (變數類型、處理器屬性和可用的SOTA編譯方法的函式)
相同的資訊包含在張量符號中。通過該方法提取的S compute 和S transfer 給出:a)每個圖級的問題大小(平行CB中所有平行計算大小的總和S compute =Σ S compute,Cbi ),b)能夠平行運行的獨特的一系列指令系列集,c)計算每個伽馬節點的S compute,CB,i 所需的大小。因此,S compute,CB,i 定義指定平台上計算CB中指令系列的最小暫存器大小(或使用更高的記憶體層級結構),並且如果
CB被視為組合電路,則定義矽晶圓上所需的不同的最小面積。結合S transfer ,可用的最快記憶體層級結構(記憶體、正反器(Flip-Flop)等)的載入次數是已知的。這些大小屬性在EV3中已知為迴圈變數和迴圈頭定義的函式。基於此EV1,方法能夠將(1)、(2)、(3)(參見rel2)與(i)、(ii)、(iii)(參見rel1)聯繫起來,因此可以進行數值最佳化。
這為實際應用中的各種不同的最佳化方法奠定了基礎,因為實際應用中並沒有給出理想的平行性假設。
迴圈級平行化是高效能運算(HPC)應用和高效能技術計算(High-Performance Technical Computing;HPTC)應用的核心方面之一,因為迴圈部分程式碼可能引入大量的計算需求。HPC和HPTC使用超級電腦和電腦叢集來求解高級計算問題。特別是,隨著積體電路(IC)設計以奈兆(Nano-Tera)級規模不斷增加的複雜性,多核心CPU和多核心GPU已成為新興平行算法的理想硬體平台。如今,多核心處理器廣泛應用於許多應用領域,包括通用、嵌入式、網路、數位訊號處理(DSP)和圖形(GPU)。核心數量高達數十個,對於專用晶片來說超過10,000個,而在超級電腦(即,晶片叢集)中,核心數量可以超過1000萬個。要有效地使用這種平台,平行化(特別是最佳化的迴圈平行化)在技術上是絕對必要的。然而,平行化的一個技術問題也源於這樣的事實:在複雜的原始碼和演算法(如:電路模擬)表現出很強的資料依賴關係的情況下,利用22nm和60GHz以上超大規模的平行硬體平台變得極具挑戰性。本發明的自動平行化系統在複雜程式碼(如:技術電路模擬,例如寄生元件參數擷取、暫態模擬和週期穩態(periodic-steady-state;PSS)模擬)的平行化中提供了資料依賴關係消除等,這為釋放平行硬體平台的潛在能力鋪平了道路。通過使用平行處理系統(如:多核心處理器)獲得的效能改進在很大程度上取決於所實現的平行化水準。具體而言,可
能的獲益受到可在多個核心或處理器上同時平行運行的平行化程式碼部分的限制;這種效應由阿姆達爾定律描述。在最好的情況下,所謂的高度平行問題可以實現接近核心數量的加速因子,如果問題被分解得足夠最佳化以適配每個處理器或核的(一個或多個)快取以避免使用速度慢得多的主系統記憶體,則加速因子甚至會更高。在現有技術中,大多數應用即使使用重構也不會加速太多。本發明的自動平行化系統允許實現可能的最高最佳化,其中,計算矩陣的列中的資料依賴關係消失。
電腦架構中的迴圈級平行化非常複雜。迴圈級平行化的技術目標是在迴圈中取出平行任務,以加快程序。當資料儲存在如陣列等隨機存取資料結構中時,尤其需要這種平行性。按順序運行的程式將遍歷陣列並一次對索引執行操作,具有迴圈級平行性的平行化程式碼例如將使用同時或不同時間對索引進行操作的多工/多執行緒/多程序。如前所述,利用平行性的機會主要存在於資料儲存在隨機存取資料結構中的應用中。在迴圈中,資料依賴關係可以分為以下幾類:
表格:該表說明了本發明的系統和方法獲得的「讀取」和「寫入」依賴關係
重要的區別在於「迴圈承載的(loop-carried)」依賴關係與「迴圈獨立的(loop-independent)」依賴關係。在「迴圈獨立的」依賴關係的情況下,每次迭代中的敘述之間沒有依賴關係,例如:
(4)DO-PIPE平行性(管線多執行緒(Pipelined multi-threading;PMT)):當迴圈迭代分佈在同步迴圈上時,就會利用平行性。
分散式迴圈平行化是最簡單的平行化,因此無需進一步解釋。在DO-ALL平行化中,迴圈的每次迭代都以平行且完全獨立的方式執行,沒有執行緒間/任務間通訊,就像分散式迴圈平行化中所做的那樣。迭代可以以循環方式(round-robin)分配給執行緒/任務。循環方法(round-robin)是處理佇列等的排程方法。例如,循環方法(round-robin)可以用作程序排程器,其中,它將有限的執行資源配置給若干競爭程序,或者在平行化中將處理單元作為處理器。迴圈程式在時間槽(time slot)內的短時段內將所有程序連續分配給一個或多個執行單元。在技術領域,該程序也稱為仲裁。在平行化中,迴圈可以例如用於處理單元的負載平衡。只有當迴圈不包含迴圈承載的依賴關係或可以更改以使同時執行的
迭代之間不發生衝突時,才有可能實現DO-ALL平行化和分散式迴圈平行化。可以通過DO-ALL平行化進行平行化的迴圈可能經歷加速,因為沒有執行緒間通訊的成本。然而,缺乏通訊也限制這種技術的適用性,因為許多迴圈不適合這種形式的平行化。
在DO-ACROSS平行化中,與獨立多執行緒一樣,迭代以迴圈方式分配給執行緒/任務。所描述的用於增加獨立多執行緒迴圈中的平行性的最佳化技術也可以用於迴圈多執行緒(cyclic multi-threading)。在這種技術中,依賴關係由編譯器識別,並且每個迴圈迭代的開始都會延遲,直到滿足前一次迭代的所有依賴關係。像這樣,一次迭代的平行部分與後續迭代的順序部分重疊。因此,它最終實現平行執行。一旦所有核心都開始了它們的第一次迭代,如果迴圈的平行部分非常大以允許充分利用核心,則這可以接近線性加速。
DO-PIPE平行化是具有交叉迭代依賴關係的迴圈平行化的方法。在這裡,迴圈主體被劃分為多個管線階段,其中每個管線階段被分配給不同的核。然後,迴圈的每次迭代分佈在各個核心上,其中迴圈的每個階段由被分配了該管線階段的核心執行。每個單獨的核心僅執行與分配給它的階段相關聯的程式碼。然而,現有技術中沒有像本發明系統現在提供的那樣一致的方式來處理和自動化迴圈級平行化,特別是在自動平行化級別上。
在編譯器技術中,例如對於低階虛擬機器(LLVM),迴圈被表示為控制流圖(CFG)中的不同節點。請注意,本文使用的CFG不僅是圖表示,而且準確地表示程式單元內部的流,這就是它在編譯器技術和系統中使用的原因。迴圈定義及其在運行時對感應變數的影響通常取決於運行時參數。由於程式碼中已知更改的位置,因此本發明的系統和方法的「讀取」和「寫入」概念可以應用於迴圈結構(loop body)中的陣列運算式。因此,可以在編譯期間確定對具有迴圈變數依賴關係的陣列運算式的影響,如上面針對通過區分不同的計算塊
(CB)來確定迴圈部分主體中的基本塊所描述的:(1)從隨機存取資料結構(如:陣列)讀取資料;(2)計算敘述;(3)將資料寫回資料結構。這在圖91中示出,其中,顯示了控制流中具有帶有LLVM IR程式碼的迴圈結構(loop body)的簡單迴圈部分,以及這如何通過本發明的方法產生「讀取」、「計算」和「寫入」計算塊(CB)。利用形式為a[i+Δiw]=a[i+Δir]+C(其中,Δiw=4且Δir=0)的簡單示例為例,迴圈中的CB(例如從i=0-7)可以如圖92所示的那樣表示。
如上所述,迴圈部分可以通過具有平行任務節點的伽馬圖表示,每個平行任務節點具有一個或多個組合計算塊(n ∥)和相關迭代次數(n loop)。圖93示出了具有平行CB和顯式迴圈迭代的此類迴圈部分。
在這種形式中,該方法將(巢狀)迴圈部分的主體傳輸到分散式迴圈平行性設置中或DO-ACROSS/DO-PIPE迴圈平行性設置中。如上所述,根據(巢狀)迴圈部分建置伽馬節點時可能會出現兩種不同的情況:
˙情況1-具有1次讀寫的通用CB,其產生分散式迴圈平行性
˙情況2-具有K次讀寫的通用CB,其產生DO-ACROSS/DO-PIPE迴圈平行性
對於資源有限的硬體平行處理架構的情況,可能存在的情況為:由於資源有限,即,可用計算單元的數量n units<n ∥,本發明方法中將伽馬節點排程到不同的n units的最佳化步驟在兩種情況下有所不同:
˙情況1-1次讀寫情況:如圖80所示,可以組合與1條邊相連的伽馬節點(或一行中沒有傳輸矩陣中的項目且具有相同分支節點的CB),這意味著CB再次建置清晰的「讀取」和「寫入」鏈。按照圖96中的示例,迴圈表示為級別中的n ∥個伽馬節點,每個伽馬節點的長度為n loop。在資源有限的情況下,最佳化是均勻分佈這些n ∥個伽馬節點。由於伽馬節點由具有循
序指令的CB組成,因此可以在其中一個循序指令之間拆分伽馬節點,將伽馬節點拆分為兩個不同的單元,參見圖103。在每個單元上,n evenCBs被排程,其餘的伽馬節點n partialCBs(n evenCBs,n partialCBs)=divmod(n ∥,n units)通過增加傳輸被均勻地分配給各單元。這是有益的,只要額外的傳輸增加的延遲時間比對應的分散式運算足夠小。
˙情況2-k次讀寫情況:最佳化是組合計算塊(導致計算總和和傳輸消失),以將CB均勻分佈到可用的n units個單元。在這種情況下,CB的組合應最小化所得到的傳輸。
可以看出,在指定的假設下,兩個最佳化步驟均能夠由分析引擎(即,至少基於算術邏輯單位、以條件分支和迴圈形式的控制流以及整合記憶體的系統)解決。解決某個問題並能夠在有限時間內由有限分析引擎處理的方法也稱為圖靈完備的。換句話說,本發明的自動平行化系統和方法提供了圖靈完備系統,因為對於自動平行化問題類,任何可能源程式碼的每次自動平行化都能夠使用本發明的方法在計算系統上進行計算。並非所有已知的現有技術自動平行化系統都是如此,這證明了本發明的系統和方法在運行時期間平行化迴圈部分的新穎性,因為這在現有技術的自動平行化系統中造成了最高的技術障礙。事實上,值得注意的是,本發明系統和方法實現的本發明硬體架構特定的原始碼最佳化平行化不僅適用於迴圈級平行化,而且一般適用於原始碼平行化。假設計算塊(CB)的t computation 相對於t data-transfer 較小,計算矩陣的列內的計算塊可以均勻分佈,以形成分佈到平行處理單元/處理器/核的均勻長任務。仍然假設t computation <t data-transfer ,CB的數量不必均勻分佈到特定硬體中可用的平行處理單元/處理器/核,因為如果使用該實施例變型,任務中的CB數量最多可以相差1。這在所有平行處理單元/處理器/核心具有相似的效能特徵並且傳輸延遲具有相同的量級時成立。
作為實施例變型,「對稱硬體平台」用作基礎,其中,原始碼將由硬體專用和硬體最佳化的自動平行化系統自動平行化。對稱硬體平台具有計算單元(處理器/核心),其中所有單元具有大致相同的計算能力和彼此之間相同的傳輸屬性。這通常至少大致適用於多核心CPU的核心。在這種設置下,在一個單元上的總計算時間不快於在多於一個的單元上運行問題的成本的情況下,本發明的方法允許以圖靈完備方式最佳化伽馬節點的排程。這是可能的,因為所有平行CB具有相同的計算需求從而具有相同的計算工作量,並且所有計算單元都可以同時解決這些計算。
本發明的自動平行化系統和方法還允許引入新結構,用於處理BB中程式碼中的(巢狀)迴圈部分,並根據特定硬體架構的處理單元的數量n units建置任務。由於分析迴圈中的所有資料依賴關係並不切實際(即,使用通過嘗試所有可能的解決方案的暴力方法通常不適用於如迴圈平行化等NP完全問題),因此本發明的方法用於根據圖94打破或構造迴圈部分。因此,本發明的系統和方法允許僅根據具有BB的CFG中的迴圈部分形成伽馬圖,而無需展開和分析所有相關的資料關係(暴力)。本發明的系統和方法為迴圈部分建置由CB形成的通用迴圈結構。
在將迴圈部分的伽馬節點分配給計算單元時,需要區分以下階段:
(i) 初始階段:從迴圈開始前最後一次進行寫入的位置(計算單元)獲取資料
(ii) 計算階段:計算指定計算單元上的平行n ∥個CB n loop次數
(iii) 內迴圈映射階段:在所有涉及的計算單元上傳輸針對下一次迴圈迭代的資料
(iv) 結果階段:當所有計算單元上的n loop次迭代完成後,資料必須傳
輸回主機
根據目標平台,可以相應地調整不同的部分。例如,對於叢集配置,其中,本機儲存區的資料儲存在磁碟上並由檔案系統同步,不需要明確應用結果部分。另一個示例是在多核心環境中,資料在記憶體中共用。在那裡,傳輸不是顯式的,但內迴圈映射可以用作屏障以避免競爭條件(見上文)。圖95示出了示例的4個階段,其中,n units=4。
由於n ∥是形式為a[i+Δiw]=a[i+Δir]的敘述中固有讀寫限制的函式,因此本發明方法可以通過分析迴圈結構(loop body)中的陣列運算式來推導n ∥並找到最小讀寫距離ΔI rw。這一定是可能的,因為陣列索引必須在陣列定義的範圍內,並且必須是正自然數,否則無法存取陣列。當迴圈變數發生變化(被寫入)並且必須能夠在任何程式碼中檢索時,索引的變化在靜態編譯期間作為步驟能夠通過分析的方式得出。程式碼中的該位置定義了在運行時期間何時可用此資訊,並且因此何時可以利用依賴平行機會。已知n ∥,可迭代迴圈變數限制n loop可以從迴圈定義中分別推導出來,在編譯時期間可以提取運行時參數與n ∥和n loop之間的數值關係。該系統可以分析靜態編譯期間陣列運算式的讀寫,並產生作為n ∥(可以是迴圈參數的函式)和n loop的函式的伽馬圖,從而產生具有n loop次迭代的分散式迴圈,參見圖93。這可以在不解決每個資料依賴關係的情況下完成。n ∥和n loop在大多數情況下取決於迴圈參數,因此直到運行時才已知。如果所有參數都是已知的,則可以在編譯時期間以分析的方式最佳化伽馬節點的排程。如果參數依賴於運行時,則在定義的對稱平台上,本發明的系統和方法可以用於在運行時期間以分析的方式解決排程。為了將伽馬節點最佳化為計算單元,存在兩種情況。
如果(一個或多個)陣列運算式中只有一個讀寫依賴關係,則對應
的伽馬節點具有圖96中的形式,例如,a[i+3]=f(a[i])。沒有內迴圈映射階段,並且本發明系統1產生分散式平行性。每個伽馬節點的計算負載nloop,Γi取決於迴圈參數,並且因此在大多數情況下與運行時相關。但和能夠通過簡單的算術過程進行計算:n loop,dist,n loop,reminder=divmod(n tot,n ∥),其中,每個伽馬節點接收一起分組在一個伽馬節點中的CB作為與1條邊連接的CB(=傳輸),並且它們建置任意序列的循序指令n loop,i=n loop,dist+n loop,reminder,j,j[n loop,reminder],否則j=0。
如果模型CB中存在K次對寫入存在依賴關係的讀取,則對應的伽馬節點具有根據圖97中的示例所示的通用形式,例如,a[i+5]=f(a[i],a[i-1])。存在內迴圈映射階段,並且本發明的系統產生DO-ACROSS/DO-PIPE迴圈平行性。因此,本發明的系統1和方法得出:
˙每個可迭代迴圈步驟的最大平行CB:n ∥=f(ΔI rw)=min(Δiw-Δir)=ΔI rw=5
˙在n ∥=n units:n transfers=1的情況下,每個CB到下次迭代之間的傳輸
利用這一點,每個伽馬圖的和可以通過分析程式碼,從迴圈參數中推導為函式。除了一個寫入->讀取依賴關係,每次讀取在下一次迭代中都有來自其他CB的傳輸,其可以通過n ∥=Δiw-Δir消失,因為它是在同一個計算單元上計算的。在若干讀取的情況下,n ∥是所有讀寫差異的最小距離,如圖98所示。
當所有統一計算單元都具有相同數量的CB時,則執行具有n loops的可迭代迴圈的一次迭代所需的執行時間最短。這意味著所有平行計算塊(n ∥)都
可以根據關係進行分佈,其中,G是由成組的具有權重{w 1 ,...,w n }的獨立節點組成的圖,並且k是可用處理器的數量。則:
對於上述多處理器系統上的即時任務排程,顯然任何系統都無法改進上述指定的計算時間,因為排程必須至少與最大任務一樣長,並且不可能比讓所有處理器持續忙碌更有效。平行CB的數量n ∥具有利用內迴圈映射中的Δt comp和具有Δt comm的所需傳輸的初始精細度
將n ∥分配給相同單元的可用數量n units是簡單的分析相關性。通過組合CB,本發明的系統能夠產生具有對應的G nunits的任務圖,其中,可以區分三種情況:
˙n ∥>n units:最佳化並組合平行CB以獲得G('()''*
˙n ∥=n units:存在確切的可用資源,並且可以使用具有GC的伽馬節點
˙n ∥<n units:可用資源多於能被使用的資源,→使用n units=n ∥並以G 0運行。
然後,本發明系統1執行的最佳化步驟是按照關係(參見上文)分配平行CB,以產生最佳任務精細度G nunits:
(a)將n ∥個CB分配到n units,以獲得每個計算單元上大致均勻分佈的Δt comp
(b)通過精細度G nunit最小化伽馬節點之間的傳輸,以最小化Δt comp
請注意,步驟(a)是本發明系統1可以以算術方式執行的步驟,與步驟(b)不同,系統1必須最佳化內迴圈映射。下面將展示,本發明系統也可以通過僅組合CB以分析方式執行此映射,從而最小化傳輸,因為當CB組合在一個計算單元上時,傳輸會消失。
當將平行CB組合到伽馬節點(所得到的精細度為G nunits)時,同一
單元上的傳輸消失,而計算相加,參見圖99。通過非常簡單的圖示,可以證明只有具有其中一個讀寫距離的組合才能最小化可迭代迴圈(n loop)的每次迭代中伽馬節點之間的傳輸次數。這可以通過以下方式總結為圖100所示:
˙讀取存取(IR中敘述或載入的正確位置),並且讀取次數是能夠提取的,讀取存取次數表示為n shifts。
˙每個CB的傳輸次數:n transfers=n shifts-1,因為1次寫入讀取可以通過最佳化消失,以便在下一次迭代中在同一單元上運行。
˙每個CB的傳輸大小,其中,S T是一次傳輸的大小:S transfer=n transfers.S T
˙對於圖101中的示例,這產生S transfer=2.S T
˙不沿著讀取移位元組合的CB:S transfer,combo(n comb)=n comb.n transfers.S T
˙沿著讀取移位元組合的CB:S transfer,combo(n comb)=n transfers.S T=const
如圖101所示,根據n transfers,任何組合都將產生固定的S transfer,combo,因為當將超過n comb個CB組合到一個伽馬節點時,讀取是位於來自同一計算單元的迭代中。通過敘述a[i][k]=a[i-2][k]+a[i+5][k]來說明,可以觀察到一些有趣的屬性(參見圖102):
˙通過T,可以標記一次大小為S T的傳輸,這取決於陣列類型‘a’
˙通過源自運算式部分([i-2][k])的read-shift=-2和作為運算式部分(a[i+5][k])的結果的read-shift=+5,迴圈迭代步驟大小為1的迭代距離為n comb,const=max(read-shift)-abs(min(read-shift))=7
˙當基於n comb,const將邊界組合成一個伽馬節點時,就會形成2個邊界:邊界A和邊界B。
˙組合超過n comb,const不會增加/減少傳輸次數。
○越過邊界A傳輸:min(read-shift):2.S T
○越過邊界B傳輸:max(read-shift):5.S T
○從邊界A和邊界B處的伽馬節點到伽馬節點的總傳輸:S T,const=(2+5).S T=7.S T
˙具有一個CB的伽馬節點有兩次傳輸:S T,1CB=2.S T
在將n comb個CB與n comb>n comb,const組合時,傳輸次數變為常數S T,const,如圖103所示。該效果在計算中也是可見的。在圖101中查找範圍1<n comb>n comb,const的組合時,必須根據寫入-讀取距離組合CB,這會導致傳輸線性增加。
如果在1次讀寫情況下存在有限的資源,則在將伽馬節點分配給n units時,可能會發生存在部分剩餘:(n full n partial)=divmod(n ∥,n units)。在這種情況下,n partial個伽馬節點必須均勻地分配給可用的n unit,如圖103所示。這可以通過添加作為(n full n partial)的函式的附加傳輸來完成。添加額外的拆分只有在通過添加額外的傳輸分配的部分CB不比不拆分時更長時才有意義。由於伽馬節點(一個或多個CB)包含任意循序指令,因此拆分的位置對Δt comp沒有顯著影響,可以通過partial/n units來定義。例如,在基於n units=2的a[i+3]=a[i]的情況下,這導致(1,1)=divmod(3,2),從而導致通過拆分一個伽馬節點添加一個附加傳輸。
如果資源有限,並且(n full n partial)=divmod(n ∥,n units)n partial=0,則可以通過最小化傳輸來平衡計算工作量。如果存在部分結果n partial>0,則無法以所有單元都完美平衡的形式進行排程。這將導致其他單元的閒置,但不可能平衡這種不平等,因為所有單元都具有相同的效能,傳輸具有所有相同的屬性,並且讀取移位無法減少任何傳輸。
當(巢狀)迴圈中的起始值和/或迭代步長不等於1且從間隙進行讀
取/(或寫入)到間隙時,迭代中會出現間隙。這意味著在資料結構中,某些值永遠不會寫入迴圈內,或者某些資料在每個迭代步驟中迴圈之前從CB讀取(如:2D熱傳導方程式(Heat equation)中的邊界條件)。圖104為結構化資料索引以及未對整個陣列進行迭代時產生的間隙。
存在不同的方法來實現映射。一種方法是為展開的迴圈[0,n ∥]產生全域索引,該索引可以為標記為間隙的所有巢狀迴圈開始、結束和步長產生。然後,可以使用每個伽馬節點的組合CB的數量將伽馬節點映射到全域索引,並可以計算區域資料索引。通過在每個伽馬節點中獲得唯一元素,每個階段的通訊連結包括:
˙首字母縮略詞(initialism),
˙邊界條件(計算階段期間從間隙讀取)
˙內迴圈映射
˙結果
它們可以通過可計算的陣列算術步驟輕鬆找到。其他選項是使用位元陣列或計算邊界A和B處的全域索引(參見圖102),具體取決於每個伽馬節點的讀取移位,如圖103所示。另一種方法是根據運行時參數計算每個計算單元的簡化迭代步驟nloop。這在運行時期間是可行的,因此可以使用該方法基於編譯時期間建置的模型在運行時期間最佳化對稱平行機器上的迴圈部分。
如圖106所示,平行處理領域中已知的技術問題可以借助於本發明的系統和方法解決。具體而言,圖106示出了本發明的系統1的不同實施例EV1至EV5。圖106中的EV1示出了本發明的系統1和方法的最基本的實施例變型和所有其他實施例變型的基礎,其中,EV1通過將總延遲時間最佳化到最小來提供程
式碼的自動平行化。如果可用的平行處理器(單核心2103和/或多核心2102)數量有限制,(ii)記憶體存取以及到處理器2102/2103的資料傳輸和來自處理器2102/2103的資料傳輸到在處理器2102/2103上計算計算塊節點333所需的處理時間的延遲時間不小,則實施例變型EV1基於一些基本假設,這些基本假設為:將行維度減少到可以組合行的有限資源的數量nunits。這種最佳化形式受以下假設限制:(i)與傳輸矩陣中的傳輸消失相比,任何傳輸都會引入顯著的延遲時間Δt transfer >>Δt transfer 0。(ii)傳輸之間的差異很小Δt transfer,i Δt transfer,j ,這意味著所有傳輸都具有近似相等的延遲時間。假設(i)和(ii),計算和傳輸矩陣中的最大行維度定義系統的組合複雜度(每個BB若干CB)。這可能導致組合複雜性的潛在限制,尤其是對於迴圈部分和/或如果(iii)單元具有相似的計算效能並且它們之間的傳輸延遲沒有給出。結合EV3,可以最佳化通用程式碼到(非)對稱平行機器。以下是張量/伽馬圖的最佳化選項的非結論性列表。對於每個選項,都注釋了如何估計計算和傳輸時間:
I.對於對稱平台上的EV3/迴圈部分:最佳化步驟是將平行的n∥個伽馬節點均勻地分配到可用單元。無需知道將n∥分配到平行單元nunits的具體計算/傳輸時間。對於具有快取延遲感知的多核心上的分佈,必須知道作為每個nunits的資料大小的函式的對共用記憶體層級結構(快取級別和記憶體)的存取延遲。這是可能的,因為所有n∥個平行CB在計算和傳輸矩陣單元中具有相同的屬性。這意味著每個CB具有相同的讀取、寫入和計算屬性。因此,(i)已知每個CB的不同循序指令鏈,(ii)已知利用指定處理器計算該指令集所需的對應資料大小。EV3包括從屬於計算矩陣中同一列的計算塊節點333建置任務的過程,即,由於可用資料而能夠平行執行。建置任務允許特定於處理器架構和/或特定於系統架構的最佳化自動平行化,其中,處理器2102/2103的數量、不同處理器/核心2102/2103和/
或處理器單元21的效能、不同記憶體單元22的大小和回應時間的差異,特別是不同的處理器暫存器2211和/或處理器快取2212和/或RAM單元2213。
II.根據Wall,David W.的“Limits of instruction-level parallelism”,Proceedings of the fourth international conference on Architectural support for programming languages and operating systems,1991年,基本塊中的ILP維度平均約為3-4,並且在假設EV1中的基本假設時,這是有界組合問題。通過應用EV3並分配到所有可用單元nunits,可以解決迴圈部分的限制。當每個迴圈部分使用所有單元時,可以最佳化其他非迴圈部分。這降低了排程剩餘基本塊(即,沒有迴圈部分的計算和傳輸矩陣的行維度)的組合複雜性。為了估算CB的執行時間,可以使用基於表格週期和記憶體層級結構的存取延遲的相對計算時間的模型,也可以剖析不同的行組合。
III.通過遍歷伽馬圖:從父伽馬節點開始,不斷組合子節點,直到達到目標精細度。然後從組合節點組成任務36,從而產生形成長度相等的任務的任務圖。這會產生具有固定精細度的任務圖,因此可以針對指定的硬體精細度G=Δt compute /Δt transfer 最佳化目標的排程。精細度可以通過#指令、指令的累積週期和組合CB的對應資料負載來估計。在這種情況下,只有不同CB之間的相對計算長度很重要,能夠通過表格指令值獲得,請參閱A.Fog的“Instruction tables”,丹麥技術大學,2022年。這減少了排程任務的工作量,因為它們可以均勻分佈,因為它們具有針對指定平台的最佳化任務精細度。這是有界問題,但該方法可能會錯過一些整體最佳化機會。
IV.在EV2的背景下,可以將固定值傳輸時間(TT)與編譯器的指定輸入關聯
起來,用於所有傳輸(伽馬圖中的邊)。在這種形式下,可以通過以下方式來形成伽馬圖:組合平行伽馬節點,直到它們的近似計算時間(如:通過表格值得出)在平行計算中比在循序計算中更具優勢。瑞士洛桑的可重構和嵌入式數位系統研究所(REDS Institute)的預研究證明了這種方法在自動平行化中的可實施性。可以證明,可以根據指定的延遲時間TT建置適配伽馬圖以產生具有對應任務精細度的延遲適配任務圖。對於這項預研究,假設所有參數都是已知的(不使用E3)。
V.使用伽馬圖作為輸入來形成(混合)整數線性程式設計問題:建置線性可最佳化等式組,其中,伽馬圖EV2表示與PCGmTSP類似的複雜度。要估計不同的m個伽馬節點組,可以選擇表格方法或概要方法(profiled approach)。結合EV3,迴圈部分可以與不同數量(m)的使用單元相關聯,具體取決於每個伽馬圖級別的平行組。
最後,圖106的實施例變型EV4(另參見圖110)示出了用於最佳化積體電路(IC)或晶片設計的本發明系統,其通過包含設計積體電路(IC)所需的邏輯和電路設計來解決IC設計的電子工程技術問題。具體而言,實施例變型EV4提供的IC設計提供了數位IC設計,其可以用於產生諸如微處理器(特別是多核心微處理器)、現場可程式化邏輯閘陣列(FPGA)、記憶體(快取、RAM、ROM和快閃記憶體架構)和數位特殊應用積體電路(ASIC)等組件。IC包括通過光刻在單片半導體基板上建置成電氣網路的微型電子元件。實施例變型EV4實現的數位設計在邏輯正確性、最大化電路密度以及放置電路方面提供了高度最佳化的IC架構,以便最有效地路由時脈和定時訊號。
下面,更詳細地討論本發明的系統1和方法的一些應用。
圖75示例性地示出了圖76中可見的並且作為圖81中的伽馬圖的
指令(CMP、SUB、ADD)的CB的構造。這是圖75中程式碼的遞迴呼叫f(3)的表示。在將該方法應用於費波那契數列的迴圈實現時,可以檢索到類似的圖形。
為了產生和計算費波那契數列,已知具有不同效能屬性的不同平行處理實現方式。下面說明如何將本發明應用於使用a)遞迴函式呼叫和b)迴圈的實現方式。兩種實現方式都表現出不同的效能。為了理解處理問題,例如可以參考https://www.geeksforgeeks.org/program-for-nth-fibonacci-number/。下面是使用遞迴產生費波那契數列的處理(來源)程式碼的示例。
圖41和圖42示意性地示出了計算塊節點(CB)及其操作和對應的資料節點(類似於上表1中的標記)。圖示表示傳輸到計算塊節點中的位置(計算塊節點的起點或終點)。函式的遞迴呼叫產生額外的傳輸,如圖42所示。
下一步驟是根據計算塊節點在程式碼中的呼叫位置對其進行編號。這將產生如圖43中示意性地表示的虛擬圖(pseudo graph),進而產生如圖44和45所示的計算和傳輸矩陣。
通過組合傳輸矩陣中的起始和終止通訊單元並消除計算矩陣中的空單元並將它們帶回到不同的程式碼片段,得到圖46的結果。基於該程式碼片段,可以直接產生程式碼(作為編譯器)或傳回程式碼,然後使用SOTA編譯器產生機器碼(作為轉譯器)。
為了展示本發明的系統和方法如何根據費波那契數列為遞迴實現方式的編譯帶來優勢,以下段落解釋了本發明的方法如何以比輸入程式碼更並行的解決方案映射和/或最佳化程式碼。如所示,是行之間的組合來最佳化程
式碼,圖中示出了標記為branch2b的分支節點中cbn的組合(參見圖43)並將它們組合起來,參見圖48。呼叫函式是在方法中將計算塊節點分別放置在矩陣中的正確位置,以應用對應的傳輸,如圖47所示。考慮到這一點,利用本發明的方法,函式的遞迴呼叫可以看作是函式參數和結果變數在返回敘述中的傳輸以及「讀取」和「寫入」,圖48。
根據fib(4)的示例,圖49逐步示出了額外的計算塊節點和傳輸的減少(因為所有都在一個計算鏈上)如何產生更最佳化的原始碼。
該鏈的深度直接取決於fib(n)中的數字n。由於遞迴呼叫在程式碼中可以很容易被檢測到,因此很容易不在最終應用中全維度實現遞迴呼叫。為了便於理解,圖50在進行了一些簡化的情況下示出了這一點。步驟4示出了在‘n=4’的情況下,呼叫的cbns。
圖51中的下一步驟示出了將要發生的傳輸(將最後一次對資料節點「寫入」的資訊傳輸到發生「讀取」的資料節點的位置,並在對應的計算塊節點中記住該資訊)。由於所有計算都在一條鏈上,因此傳輸將消失,如圖52所示。在解決每個步驟時,這將導致圖53中形式的程式。
使用矩陣表示將其帶回程式碼,可以看出結果為以下程式碼。這會產生比上表1中實現的原始fib(n=4)更高效的程式碼。使用SOTA編譯器分別編譯此程式碼將產生比不應用該方法更好的最佳化程式碼。
遞迴呼叫也可以解釋為類似應用本發明方法的陣列操作,因為它將資訊(函式參數param[i])傳輸到函式宣告的分支節點中對應的cbns,然後將(一個或多個)返回值傳回a[i],參見圖54。這將產生在偏微分方程中也看到的視角。費波那契數列的這種實現形式將在下文中進一步引用。然而,作為下一步驟,接下來的段落將展示偏微分方程的處理,這主要導致巢狀迴圈和大量使用陣列操作。
根據該專利申請,通過依賴於「讀取」和「寫入」模式放置操作節點並通過傳輸解決不明確的依賴關係的規則,可以為自由指定的PDE離散化實現推導出計算和通訊模型。本文將使用2D熱傳導方程式(Heat equation)的PDE,其中,2D熱傳導方程式(Heat equation)由以下等式給出:
圖55示出了Python中實現方式的一部分。陣列中的每個項目都是資料節點。從陣列索引讀取在方法中是具有索引的資料節點和陣列的基位址的操作節點。陣列操作可以看作是具有對應的資料節點的操作節點,參見圖56。
對於具有陣列操作a[i+Δiw]=a[i]的迴圈陣列的示例,圖57示出了對應的計算塊節點。考慮到這一點,初始塊(圖55)可以在如圖58所示的圖中詳細表示。計算塊中的所有計算(參見圖55)都發生在j迴圈中。通過使用一維陣列符
號並應用該方法的基本規則,得出迴圈中計算塊節點的示意圖,如圖59所示。
陣列讀取(如:u[k][i+1][j])將創建計算塊節點,並且將值傳輸到該索引的元資料(meta-data)將添加到兩個cbn,一個是「讀取」節點,另一個是上次寫入該資料節點的位置(如:在a[k+1][i][j])。這產生這樣的事實:諸如j迴圈中的陣列操作等敘述(圖55)產生5個計算塊節點,表示陣列的「讀取」操作,然後是計算算術解的計算塊節點,然後是在位置[k+1][i][j]對陣列進行寫入的計算塊節點。這種表示形式是示意圖以更清楚地示出該方法如何考慮此類陣列操作。這導致圖60中所示的情況。
本發明方法的最基本原理之一是找到對資料節點B進行「寫入」的最後一個操作節點A,然後在操作節點A之後放置從B進行「讀取」的新操作節點C。如果不是明確的0或1依賴關係,則添加至包含操作節點A或C的計算塊節點的傳輸。因此,a[i1]=a[i2]是對基位址為‘a’且索引為‘i2’的資料節點進行「讀取」,並對基位址為‘a’且索引為‘i1’的資料節點進行「寫入」,參見圖56。因此,每個迴圈都會創建具有「讀取」或「寫入」操作節點的新的計算塊節點以及對應的傳輸。可以得出以下方案,如圖61所示。
從圖61可以看出,迴圈示出每個迴圈段落都是新計算鏈(矩陣中的行)上的新計算塊節點。只要沒有傳輸,這些計算塊節點就會同時存在(導致編號過程步驟中的塊號或段號相同),因為傳輸矩陣中空的計算塊節點和項目會消失。如果發生傳輸,則cbns編號將不同,並且它們將無法在同一步驟中計算。從圖62可以看出,「讀取」和「寫入」操作的索引中的偏移量可能導致分別包含「讀取」和「寫入」操作節點的計算塊節點之間發生傳輸。
迴圈中索引的「讀取」和「寫入」的依賴關係導致圖63中的結論。如果ΔI小於0,則表明迴圈可以在與迴圈長度一樣多的計算塊節點上註冊。長表示由迴圈定義(如:‘for i=i0;i<>Ai;Bi’)中的起始值‘i0’和最大值‘Ai’以及增量值
‘Bi’定義的迭代次數。如果ΔI大於0,則只有ΔI個計算塊節點可以平行運行。如果使用的數量小於此數字,則會發生傳輸。如果迴圈在超過ΔI個單元上解決,則計算塊節點將不是平行的(意味著在流程圖中具有相同的編號)。因此,ΔI是用於決定「讀取」(即,使用索引處陣列中的資訊,但不更改它)可以如何在不同的計算單元上分佈的獨特數字。
這具有一些重要的結果:可以從巢狀迴圈中提取單個維度,以確定對陣列的每次「讀取」,這些讀取中的哪些導致迴圈內的「寫入」,以及哪些值是迴圈前對資料節點的「讀取」。因此,對於每次「讀取」,都可以得出是否存在到「寫入」部分的計算塊節點的傳輸(=計算鏈)。這可以作為模型來實現,並導致對巢狀迴圈中陣列的新的、相當通用的視角。此外,根據圖63中的概念,可以推導出哪些巢狀迴圈可以解決,這意味著在方法中可以平行計算,因為「讀取」與「寫入」資料節點之間沒有傳輸。對於具有中心差分法的2D熱傳導方程式(Heat equation),這會產生圖64所示的依賴關係。這意味著,i和j迴圈可以解決,因為ΔI始終小於或等於i和j迴圈中的迭代次數,但不小於或等於k迴圈中的迭代次數。這意味著i和j迴圈可以在該方法中解決。這意味著陣列中的「讀取」和「寫入」將分佈在計算塊節點中,這些計算塊節點可以平行運行,但k迴圈必須是迭代的。並且在每個k迴圈之後,單元之間都會發生傳輸。此時,請記住,如果它們在同一單元上,則該方法會在映射/最佳化步驟中消除傳輸。
在大多數求解PDE的實現方式中,計算僅發生在陣列的子集上(例如通過差分處理邊界條件),這使得這一步驟有點麻煩。以兩個巢狀迴圈為例,對於每個巢狀迴圈,可以得出規則來處理間隙以及對所提出的模型中的「傳輸」的影響,如圖65所示。const值是來自「計算塊」中迴圈之前的操作的計算或定義的值(參見圖55)。結合迴圈遍歷陣列子集所產生的間隙,可以推導出離散等式的傳輸模式,並得出傳輸模型,該模型取決於間隙大小、迴圈(在這種情況
下為網格)結果的大小,並表示該方法的計算塊節點,如圖66所示。通過nX=5和nY=4的非常小的示例進行展示,這產生如圖67所示的計算和傳輸矩陣。在傳輸矩陣中,箭頭“->”表示獲得資訊,“<-”表示將資料發送到其他計算塊節點。
本發明的方法得出了離散化PDE所需的網格中網格元素之間的所有必要傳輸/通訊。圖68示出了當每個單元都由矩陣中的一行表示時,單元之間發生的傳輸。在圖68中可以看到傳輸和計算矩陣的提取,其中深灰色表示傳輸的「接收」側,淺灰色表示傳輸的「發送」部。此時請注意,這並不意味著必須發送和接收它,它也可以例如由共用記憶體段共用並由屏障保護,或鎖定或消失,因為它由快取共用並因此由CPU處理-這取決於所使用的傳輸/通訊機制。這可以轉移到模型,分別導致如圖69所示的形式的程式碼。必須注意,p0與p1之間的計算會不斷發展,因為該方法被定義為添加從對資料節點進行「寫入」到對資料節點進行「讀取」的傳輸,並且當巢狀迴圈中的陣列操作以「讀取」操作節點開始時,就會發生這種情況。
圖70示出了可以如何使用傳輸來創建時間模型。灰色是元值(meta value,例如,從變數類型定義等中得知),其也可以用於將矩陣映射/最佳化到指定的硬體基礎設施。
該示例中未使用這些值。為了說明可能的最佳化步驟,接下來的圖71中示出了個非常簡單的已完全求解的模型,其中,行(1,2),(3,4)和(5,6)的組合導致3個單元計算:3 procs→(1,2),(3,4),(5,6)
行(1,2,3)和(4,5,6)的組合產生2個單元計算:2 procs→(1,2,3),(4,5,6)
並且所有行的組合(產生1個單位的計算而無需任何傳輸):1 procs→(1,2,3,4,5,6)
Δt=(0).Δt trans +(6*Γ).Δt latency transfer_size=(0)float_size cache_size=(16)float_size
這些步驟示例性地展示了該方法如何在計算與通訊之間創建不同的比率,以及如何根據組合減少傳輸並使每個單元的計算變得更高。為了更直觀地說明這一點,可以使用非常簡單的計算和通訊模型,並假設一些時間的「實際值」。具有根據其每週期(FP)浮點能力和頻率的效能值的兩代英特爾CPU產生它們計算浮點演算法的功率值(如模型中的T)。例如,可以使用P5 FP32:0.5和Haswell FP32:32,其週期頻率為66MHz和3.5GHz,浮點值的加法和乘法為4個週期。為了獲得表示網路中通訊延遲的傳輸Δ的值(作者知道做出了很多假
設,並且延遲不是網路的唯一關鍵值),使用兩種類型的延遲:針對無限頻寬類型的1ns和針對快取延遲的50ns。對於nX=2048和nY=1024的網格,可以通過Δt=組合cbn的數量*cpu+傳輸數量*網路延遲推導出圖72中的行為。
從該方法中取回程式碼(分別適用於可用的IPC選項的兩個矩陣)總是很簡單的。這種通用形式的最佳化程式碼為自動程式碼平行化領域帶來了新穎性。例如,程式碼可以被最佳地映射到例如MPI叢集基礎設施,或者利用更精細的調整,通過組合MPI(共用記憶體)和節點上的區域執行緒,應用混合方法。通過不同的組合(如:組合i方向上的前x個cbns和j方向上的y個cbns),可以為任何指定的離散化PDE獲得「計算」與「通訊」之間的最佳比率,但取決於可用的硬體基礎設施。這可以在沒有任何手動互動的情況下完成,因為還可以測試必要的屬性,或者為可用的硬體基礎設施計算,從而解決現有技術中的實際技術問題。
指標消歧也是尚未完全解決的技術問題(如:參見P.Alves的Runtime pointer disambiguation)。應用本發明的系統和方法,可以看出本發明的方法從技術上解決了通過將函式參數作為指標傳遞而發生的消歧,因為它將指標作為資訊,並且這種消歧將在傳輸消失的步驟中得到解決,如圖74所示。
費波那契源也可以使用迴圈來實現。
這具有與上圖53所示的程式碼結果類似的效能屬性。
為了證明本發明系統的實際效率並對本發明系統的效能進行基準測試,可以使用上述遞迴費波那契示例,其在自動平行化系統技術領域中通常用作功能證明和基準測試研究(參見例如V.Sarkar的“Fundamentals of parallel programming module 1 parallelism”,第60頁)。基於遞迴實現產生費波那契數的簡
單示例,可以顯示自動平行化系統和編譯器「是否」能夠針對指定平台的傳輸時間和處理時間最佳化程式碼,自動平行化系統和編譯器「如何」能夠針對指定平台的傳輸時間和處理時間最佳化程式碼,以及自動平行化系統和編譯器能夠針對指定平台的傳輸時間和處理時間最佳化程式碼的「效果」。圖75示出了遞迴實現方式、基本塊形式的LLVM IR以及系統如何處理方法中的分組。圖75示出了LLVM IR和計算塊(CB)中的指令分組。
下面討論兩種簡單的策略:
a)最佳化延遲時間:計算指定數量的單元的組合的所有近似執行時間。這參考了列出的最佳化策略中的II。
b)針對不同的傳輸時間TT進行最佳化:根據指定的傳輸時間(TT)形成不同的任務圖。不同的TT表示具有不同的傳輸延遲時間的硬體平台。這參考了上述列出的策略中的III。
最佳化方法a):最佳化延遲時間
為了通過知名且經研究的示例來展示該方法的效果,可以使用例如費波那契數列的遞迴實現方式,參見圖75。
為了說明該方法:程式碼中的所有指令都被展開,並且該方法創建不同的伽馬圖節點和對應的傳輸,如圖6中對fib(3)的呼叫所示。圖75示出了計算和傳輸段的形成。根據計算和通訊段,可以區分出對應的計算時間Δt ti和通訊時間Δt ti。計算時間可以被看作例如指令數ninstr和計算單元效能punitΔt ci=(ninstr,punit)的函式。每個計算段鏈都與一個計算單元相關聯。對於三個單元ninstr=3,圖77示出了計算和傳輸段的時間模型結構。可以建置簡單的線性等式組來產生運行時Δt end,其中,Δt s=0。這些單元的延遲時間為:
閒置時間如下:
˙單元1或2:Δt idl1=[Δt c3]-[2.Δt t+Δt c4]
˙單元1或2:Δt idl2=[Δt idl1(Δt t)+Δt c6]-[2.Δt t+Δt c5]
對於一個單元:nunit=1,如圖79所示。一個單元的延遲時間為Δt end,u1=[0].Δt t+[10].punit。
對於整體最佳化:在該形式中,Δt end是Δ t ci、Δt ti和n units的函式。這可以直接表示為Δt end=(Δt ci,Δt ti,n units)。因此,對於指定的成組硬體,利用Δt t,,最佳化為:
這說明了新的技術最佳化方法的效果與已知的現有技術SOTA
方法(參見,V.Sarkar的“Fundamentals of parallel programming module 1 parallelism”,第58頁)完全不同。
最佳化方法b):按照任務平行性建置伽馬圖
根據本發明的揭露內容,系統的結果可以表示為張量或圖,取決於表示形式,參見圖80。如果展開程式碼中的所有指令,則該方法將創建不同的伽馬圖節點和對應的傳輸,如圖81中對fib(3)的呼叫所示。
現在,對於伽馬圖中的每個節點,系統1計算通過承擔「傳輸資料」的代價(這也可以看作是上下文切換的時間)來平行運行子節點的成本是否有利。
˙連續工作量:t serialΓ=ΣΔt instr
˙平行工作量:t parallelΓ2=t serialΓparent -t serialΓchild +t contextsw
按照費波那契示例,這將產生具有每個節點對應的tserial和tparallel時間的計算圖,如圖82所示。在編譯器中,這可以看作是為編譯器提供了平台的傳輸時間(TT),並且編譯器能夠形成與TT無關的計算圖。例如,通過計算具有3個不同傳輸時間=1、5、10的費波那契程式碼fib(5)的計算圖,該方法能夠為對應的平台形成不同的計算圖(對於n=5,TT=1、5、10非常低從而能夠更容易地以圖形方式顯示效果)。圖83示出了針對TT=1、3、10的示例性的三個不同的計算圖。對於低TT=1,平行計算所有伽馬節點是有益的。對於較高的TT值(如:TT=5),伽馬節點4和5與伽馬節點2串聯,伽馬節點5、6、8與伽馬節點3串聯,但這兩個可以平行運行。這些結果與例如V.Sarkar的“Fundamentals of parallel programming module 1 parallelism”中示出的結果非常吻合。
本發明系統1可以應用於(參見圖106/圖110)VLSI設計的設計和
最佳化。電路設計是關於佈置電晶體以執行特定邏輯功能。從設計中可以估算延遲和功率。每個電路都可以表示為示意圖或以文本形式表示為網表。簡單地說明一下(參見圖111a),數位邏輯可以分為組合電路(布林邏輯)和循序電路,組合電路的輸出僅取決於當前輸入(一系列邏輯閘),而循序電路的建置塊是暫存器(正反器(Flip-Flop))和鎖存器。
本發明系統1可以用於確定計算塊節點。計算塊節點又可以用於確定數位邏輯,這將通過2D熱傳導方程式(Heat equation)的示例進行說明。圖67示出了該演算法的計算塊節點由5次讀取、1次計算和1次寫入組成(圖111b)。簡單電路的結果如圖111c所示。讀取變為由5個正反器(Flip-Flop)組成的循序電路(它們一起構成暫存器,但有效暫存器大小由單個資料的位元長決定)。可以假設時脈的上升緣(時間k),其中等待所需的保持時間以確保u[k][i+1][j]、u[k][i-1][j]、u[k][i][j+1]、u[k][i][j-1]和u[k][i][j]的正確值(邏輯0或1)出現在正反器(Flip-Flop)的輸出處。這基本上就是讀取。資料現在可以通過組合電路(計算塊)傳播,該組合電路由所需的加法器、移位器(乘以4)、減法器(反相器和加法器的組合)和乘法器組成的算術產生。在計算塊的輸出處,值u[k+1]在設置時間之後出現(相當於寫入操作),設置時間是正反器(Flip-Flop)的輸入在下一個時脈緣之前穩定所需的時間量。
右側的暫存器只不過是下一時間k+1處的值,這是左側的下一次迭代所需的。由此得出,可以將值直接寫入同一個暫存器。現在可以對計算矩陣上的每個點進行這個思想實驗。對於矩陣上的兩個點(圖111d),很明顯資料現在是交叉寫入的,或者每個矩陣點只需要一個暫存器。計算塊(CB)始終由相同的組合電路組成,儘管在電子實現方式中傳播延遲永遠不會相同。因此,重要的是要密切關注限制系統的操作速度並需要注意時序細節的關鍵路徑。
在VLSI設計中,現實世界的設置總是在空間上受到限制。無限
的可平行性是不可能的,因此某些(並非全部)計算塊被組合並依序處理。為了使有限數量的暫存器能夠實現這一點,在暫存器的輸出與CB的輸入之間連接了多工器。多工器基於選擇訊號從若干輸入中選擇輸出。同時,解多工器(demultiplexer)連接在CB的輸出與暫存器輸入之間(參見圖111e)以正確地回饋資料,由此設計最佳化過程可能表明解多工器並不總是需要的。理想的平行電路上每個時脈速率所處理的內容,現在在更現實的電路(圖111f/圖111g)中需要若干時脈週期來處理-盡可能多地在多個週期中平行處理,直到完成完整的迭代為止。以圖67中的4×5矩陣為例,這意味著:對於6個平行CB:1個週期來計算k+1,對於3個平行CB:2個週期(2×3平行),包括由於多工而產生的更高的延遲。
VLSI設計者始終必須在面積、吞吐量、延遲、功耗和執行任務的能量之間做出權衡。最佳電路始終位於反曲線的某個位置(參見圖111h)。如果可用面積很大,則可以很好地進行平行化。如果可用面積較少,系統必須進行多工,這會導致更高的延遲。面積和平行CB數量之間的最佳點位於兩者之間。由於本發明的系統1可以為指定單元提供最佳程式碼,因此它還可以用於針對指定面積找到最佳電路,從而說明在實際模組尺寸和關鍵路徑已知時完善迭代設計過程。
也就是說,FPGA或ASIC上平行化的精確實現取決於問題的具體情況和設計要求。它可能需要仔細考慮記憶體,尤其是系統之間的通訊要求,以及前面提到的VLSI設計中常見的面積、吞吐量、延遲、功耗和能量之間的權衡。
因此,本發明系統1採用成組的啟發式方法和演算法來識別和操作設計空間中的模式,以產生新穎且非顯而易見的解決方案。基於成組的預定指標(如:功耗、面積和效能)評估潛在的設計解決方案,並選擇最佳設計解決方案。使用本發明系統1探索和操作設計空間,通過一系列迭代步驟進一步最佳化
所選設計解決方案。
在用於最佳化平行VLSI設計過程的方法中,暫存器和時脈在確保電路的正常運行方面起著至關重要的作用。本發明系統1考慮暫存器的讀寫操作以及時脈時序限制,以產生滿足所需效能和功能要求的設計。
此外,本發明系統1考慮通過算術邏輯的傳播延遲,以最佳化電路的時序。這包括考慮每個邏輯閘中的延遲以及閘之間的路由,以最小化電路的整體延遲。本發明系統1採用各種技術(如:管線和平行性)以最小化傳播延遲並最大化電路的效能。
然而,在最佳化效能設計的同時,本發明系統1還考慮了目標實現平台(諸如,FPGA單元)的面積限制。該方法確保所得到的設計符合實現平台的可用資源,同時也滿足期望的效能和功能要求。
總之,使用本發明系統1最佳化平行VLSI設計過程的方法考慮了暫存器的讀寫操作、時脈時序限制、通過算術邏輯的傳播延遲以及實施平台的面積限制。這產生了高效且可擴展的VLSI設計,其滿足期望的效能和功能要求,同時也能夠在目標平台中實現。因此,平行化系統1允許將來自循序程式碼(循序指令列表)的指令分組到所謂的計算塊(CB=優選以循序方式運行的指令列表)中,並對所得到的組進行索引以檢索要平行運行(包括在不同計算單元上運行所需的傳輸)的指令組。該方法建立在現代計算平台的系統視角上,而現代計算平台仍然受到二進位計算步驟的限制。一個實施例變型使用該方法建置具有以下目標精細度的任務:
其為目標硬體計算和傳輸資料的函數。通過建置具有特定精細度的任務,至少在對稱(在該上下文中,具有相同或至少相似效能屬性的單元計算資料並且在彼此之間傳輸資料)平台上的任務排程將變得簡單,這對於最先進的方法來說是NP
困難問題。好處是該方法能夠使用讀後讀(Read-after-read;RAR)依賴關係來創建讀後讀(Read-after-write;RAW)鏈組並通過潛在傳輸連接這些組。該方法能夠通過使用這些未利用的RAR依賴關係提取比現有技術方法更多的資訊來建置平行程式碼。可以組合平行計算塊來最佳化目標硬體的程式碼,該目標硬體由可以交換資料的不同獨立單元組成。該方法使得軟體通用自動平行化、編譯語言(諸如C、C++等)以及直譯語言(諸如python、java等)能夠達到新的極限。此外,還可以基於新穎的分段創建硬體設計。
該方法能夠以基本精細度G 0對程式碼進行分段,參見圖126中的(a)。結果可以用圖形表示,其中計算塊(CB)為節點,並且傳輸為邊。它們建置一系列不同的計算->傳輸段。通過組合每個級別上的段,可以通過計算與傳輸(分別以通用方式進行通訊)之間的不同比率迭代地建置不同的精細度G。
迴圈部分可以包含大量計算工作量。存在從迴圈部分中提取指令層級平行性(ILP)的不同方法,例如,向量化或展開迴圈-但具有已知的限制。新的方法基於建置計算塊的簡單規則,無需展開迴圈即可提取伽馬圖。這會產生由以下關鍵參數描述的伽馬圖:
a)n ∥:針對每次所需迭代的平行計算塊節點的數量
b)n loop :迭代次數,意味著不可避免地會發生迴圈間傳輸
c)節點:迴圈中的CB:循序指令-具有RAW依賴關係的指令。
d)邊:CB之間的資料傳輸
這可以在不展開迴圈的情況下實現,只需進行靜態程式碼分析即可。n ∥是運行時參數的函式n ∥=f(params),n loop =f(n ∥ ,n units )是所使用的平行運行單元n units 的函式。與最先進的方法相比,這種分段通過以下方式是可能的:包括讀後讀依賴關係來提取潛在的傳輸並將指令分組到計算塊,這些計算
塊保持具有寫後讀依賴關係的指令。
根據具有基本塊(BB)的控制流圖(CFG)中的程式碼,該新穎方法可以產生具有4個階段的伽馬圖,描述迴圈部分的平行/分散式運算,包括所需的資料傳輸,參見圖127:
˙初始化:來自迴圈前CB的資料必須分發到所有平行的n ∥個CB
˙計算:每個單元逐個迭代地計算n ∥個CB中的一個(或多個)達n loop 次迭代,以完成迴圈部分。
˙迴圈間傳輸和間隙/邊界傳輸:對於n ∥個CB與例如來自巢狀迴圈定義中的間隙的資料之間的每次迭代,必須傳達/同步單元之間所需的傳輸,必須載入到單元。
˙結果:在計算n loop 次迭代之後,結果必須傳輸(非適用所有情況)到主程序,然後在迴圈後分別傳輸到CB。
伽馬圖中的每個節點表示計算塊(CB),並且邊表示潛在的轉移。
本節介紹可以如何從伽馬圖匯出IC設計。在第一步驟中,解釋伽馬圖中的對應元素及其與RTL元素/IC元素的關係。在第二步驟中,提出了該方法的兩種應用,以使用該方法產生針對輸入程式碼定制的對應IC設計作為通用方法:
與現有技術方法相比,本發明的系統允許在迴圈部分中利用更多的平行性,並且能夠利用包含具有RAW依賴關係的一系列指令的程式碼片段來匯出伽馬圖(能夠通過t pg 中的組合邏輯進行計算)。這些可以用於在FPGA上自動創建(平行)實例,以加快迴圈部分中的計算。最佳化步驟包括為固定運行時參數產生最佳化設計或為具有未知運行時參數的程式碼產生通用設計的選項。這引
入了新的極限,以便從靜態程式碼分析中完全自動地產生同步、可合成且可運行的IC設計。因此,這種方法對任何編譯或直譯語言都很有用。
該新穎的方法通過建置計算塊(CB),從具有基本塊的控制流圖(CFG)中的程式碼產生伽馬圖。它們包括一系列寫後讀依賴指令。平行CB在CFG上是可區分的。這使得能夠產生針對伽馬圖最佳化的多重派發CPU管線設計。然後可以使用伽馬圖產生能夠在對應的最佳化多重派發CPU設計上運行的高效能組合程式碼。
利用新穎的方法對程式碼進行分段產生伽馬圖,該伽馬圖由作為節點的計算塊和作為塊之間潛在的資料傳輸的邊組成。每個計算塊包含一系列寫後讀(RAW)指令。CB中RAW依賴關係的指令建置組合電路,這意味著對於指定輸入,計算可以在一個步驟/週期內執行。該計算需要花費t propagation 。(參見圖128)
同步設計所需的暫存器大小由塊中的指令中使用的資料節點定義。資料節點的大小由所使用變數的資料類型定義,這些變數由指令集架構(ISA)定義。這將資料節點的數量、資料類型定義和指令數量與所需的暫存器大小聯繫起來:S reg =f(S datanodes ,n datanodesinCB ,ISA)並且資料節點的大小是資料類型的函式:
線寬(線路寬度)也是資料類型和傳輸資料節點的數量的函式。這定義了每次傳輸的位元寬度,也就是定義了線的大小:
S wire =f(S datatypes ,n data )
因此,1位元組等於8位元(bit),這使得暫存器(用於計算)或線路(用於傳輸)的大小為8位。MIPS ISA定義則將整數變數定義為8位元(1位元組)、16b(半)、32b(字)和64b(長)。然後,高階程式語言中的指令由編譯器連結到所使用的指令集架構(ISA),其抽象了與ISA相關的硬體屬性,例如:a)資料類型和大小S datasnode :有符號或無符號、整數或浮點數和位元大小。
每條指令都可以通過指定的布林代數運算式或非同步計算來表示。這種轉換已經已知為能夠通用地實現,並且可以從具有基本+、-、*和/的算術運算式完全自動合成為數位邏輯閘的組合。在這種情況下,必須提到浮點數的處理:浮點數可以表示並轉換為定點表示。然後,加法就像整數類型一樣簡單。使用二補數定點制表示能夠通用地處理負數,因此也能夠用於減法。乘法和除法可以用符號表示-解析度會有所損失-並且比整數算術更容易。該定義也包括在ISA中。邏輯閘的組合計算的傳播時間t propagation 可以通過最先進的合成工具得出。由於每個組成部分都是已知的,因此可以在RTL級上以Verilog表示指令鏈,參見圖129:
˙暫存器輸入和輸出的大小
˙非同步部分的算術-是Verilog中已知算術運算(+、-、*和/)之間的簡單設定陳
述式。浮點變數的處理可以使用二補數定點表示來處理。
因此,伽馬節點=計算塊(CB),包含形成非同步設計的RTL程式碼以計算CB中包含的指令的所有資訊。圖中的邊(即,傳輸)包含每個組合計算之間的暫存器大小,這使得能夠形成同步設計。CB(即,圖中的節點)包含圖中每一級暫存器之間的分配定義。在這種形式下,CB中的所有指令都以可能最快的形式通過組合邏輯計算,並在同步設計中同步,參見圖130。S in 和S out 可以在
伽馬圖中的兩個級別之間聚合,參見圖129。在圖130中,對於每個級別,S in 和S out 單獨示出,以及從早期暫存器傳輸來的暫存器,參見S reg,Γ13。如果設計在一個裝置上,則輸入和輸出暫存器將組合到一個暫存器中。如果Γ2,a 和Γ2,b 將在不同的裝置上計算,則需要兩個輸入暫存器。這會影響最佳化步驟,參考下文「基本情況A-所有參數已知」和「基本情況B-運行參數未知」。每個組成部分(暫存器、線路和邏輯)都使用一定量的矽面積A silicon 。由平行伽馬節點形成的計算必須存在於設計中,並且不能重複使用以達到物理受限的組合計算,該物理受限的組合計算僅受所需操作定義的傳播時間t propagation 和計算二進位操作的物理限制的限制。
每個組成部分都需要一些矽面積:
˙邏輯:所需面積取決於計算的資料大小如何表示為邏輯閘S logic ,而邏輯閘又取決於操作(邏輯)的複雜性和資料類型。這可以通過使用最先進的工具進行合成來實現。
S logic =f(n instructions ,S datanodes )
˙暫存器:暫存器S reg 用於同步和穩定邏輯實例之間的傳輸。它們使用的矽面積取決於資料節點的數量及其類型。
S reg =f(n datanodea ,S datatypes )
˙線路:他們需要以線路S wire 的形式連接單元,其中,線路取決於要傳輸的資料節點量及其資料類型。
S wire =f(n datanodes ,S datatypes )
例如,這些值可以通過基於RTL程式碼的最先進的合成工具得出。它們還包括目標裝置(如:FPGA或ASIC)上的佈局和佈線。此外,它們可以以
高解析度對每個組合步驟的不同傳播時間t prob 進行建模。
有限狀態:伽馬圖中的每個級別都對應明確定義的狀態,因此每個步驟都是可區分的,參見圖131。
包括I/O:狀態包括使用經由I/O或可用RAM單元的通訊與其他平台元件進行通訊的選項,參見圖132。
時脈:分別同步邏輯步驟和I/O操作的時脈驅動是最佳選擇的函式,該最佳選擇作為伽馬圖中各級別的不同傳播時間t pb,i 的函式,參見圖133。可以在合成期間非常精確地對t prob,i 進行建模和估計。從RTL定義到佈局和佈線步驟t prob,i 的所有合成步驟均由最先進的工具鏈完全自動完成。這樣就能夠產生所需的鎖相環(PLL)訊號,分別調整不同單元類型所需的時脈頻率,參見圖133中的CLK1、CLK2、CLK3。
總結:伽馬圖定義將指定程式碼從高階程式語言轉移到同步IC設計(如:可以用於FPGA)所需的所有屬性。迄今為止引入的將每個狀態分別轉移到單元的設計是不切實際的,並且通過針對每個階段使用不同的暫存器會浪費可用面積。需要示意圖來說明將伽馬圖轉移到可合成RTL設計的原理。
應用:伽馬圖現在可以用於兩種不同的應用:
I.使用面積(如:在FPGA上的面積)來計算有多少個平行CB是可能的。這意味著在伽馬圖中的某一級別上應用平行CB的平行實例。這樣,可以實現CB的平行執行,具有每個級別的最佳傳播時間t prob,i 和完整伽馬圖的最佳執行時間,該最佳執行時間取決於佈置和佈線,其由可用的最先進工具(以及可達到的最佳化可能性)給出。這可以改善ILP的平行化和利用,尤其是對於通常具有高平行計算需求的迴圈部分。平行CB中包含的資訊在對應的RTL程式碼中傳輸,其包括以下步驟:
a.在迴圈中,建置具有相同邏輯的(一個或多個)平行CB,並且這定義每個
CB的實例
b.實例(=1CB)盡可能多次初始化,僅受目標裝置上各可用單元矽面積A silicon 的限制
c.每個週期平行計算實例,並從定義的輸入暫存器中產生輸出暫存器中的對應結果。
d.該暫存器可以用於(i)下一個迴圈或在面積有限的情況(ii)轉移到其他單元或主機平台以重新排序和儲存資料。
II.完全自動地基於指定的輸入程式碼建置具有IP塊的最佳化的靜態多重派發CPU管線設計。通過在平行管線所需面積與暫存器/快取暫存器面積之間分配可用面積,根據程式碼最佳化平行管線的數量和對應的暫存器大小。程式碼和ISA的選擇用作輸入。ISA抽象硬體屬性(如:諸如所需管線暫存器的大小、元件(如:程式計數器、暫存器、ALU)之間的佈線、針對硬體的操作碼形式的所需函式,其定義針對指定指令的暫存器的邏輯操作等)。這包括:
a.根據伽馬圖定義最佳管線數量和暫存器大小
b.創建由可用的已知基本元件(程式計數器、指令記憶體、暫存器、ALU和資料記憶體)形成的設計。這些元件目前能夠用作IP核。這些IP核還已經定義了目標裝置(FPGA或ASIC)上所需的面積。
c.定義後端的編譯器定義
d.為定制的多管線CPU產生靜態、最佳化的組合程式碼
在迴圈部分中,對於每n loop 次迭代,該方法提供了一系列平行且相等的CB,參見圖126中的(b)。圖134示出了從伽馬圖到RTL定義。迴圈部分中的伽馬圖完全由不同的狀態和對應的傳輸定義,參見圖127。這些傳輸產生針對迴圈部分的伽馬圖中不同階段的不同佈線,參見圖135,其示出了迴圈部分的
伽馬圖中的階段以及對應的展開的RTL設計。
該圖示出了迴圈內的不同傳輸類型以及對應IC設計中的不同佈線。
尚不能確定指定的迴圈部分是否可以映射到可用面積A silicon 。在這種情況下,必須區分不同的情況。這些情況主要有:
在這種情況下,可以得出用於邏輯計算的單元和暫存器的面積之間的A silicon,optimal 的最佳化的設計。該面積可以在一個裝置上,也可以在通過I/O通訊連接的若干裝置上。
該面積可以用於提供盡可能多的平行實例來解決平行CB。這旨在使用該面積以最佳方式解決盡可能多的平行CB。資料映射必須由驅動器應用提供,該應用還為執行提供資訊並處理資料映射,以防平行計算塊的數量高於FPGA上一個步驟可以解決的數量。這需要額外的矽面積。
從前面的章節中可知,計算塊定義邏輯工作量,因此定義延遲為t propagation 。目標裝置(FPGA或ASIC)定義指定解析度λ能夠達到的物理屬性。這又定義了一個實例中閘的容量C g 和所需的面積。
還有更多具有其他最佳化目標函數的情況,它們是上述基本情況的混合,例如:
在某些設計中,某些參數可能提前知道,而其他參數在運行時會發生變化。這種情況需要混合方法,其中在可能的情況下應用靜態最佳化,但也實施動態分配策略,以便在運行時期間重新配置FPGA能夠帶來好處。
可重構計算:FPGA固有地具有適應性。設計可以利用部分重構,其中,部分FPGA即時(on-the-fly)被重新配置,以更好地適應不斷變化的計算需求,或基於運行時資料在不同類型的計算塊之間轉變。
另一種情況涉及效能與功耗之間的平衡。根據應用的要求,可能需要犧牲一些計算速度來降低功耗,反之亦然,從而影響矽面積的利用方式。
對於關鍵應用,FPGA的某些部分可能專用於容錯機制,例如冗餘計算塊或校正碼,這會影響可用面積的分配方式。
在這種情況下,可以根據靜態程式碼分析在編譯時間期間計算n ∥,並且n ∥是常數。能夠在目標裝置上使用的最大平行實例可以通過以下方式迭代地找到:首先合成一個實例,然後合成例如5個實例,然後推斷合成工具的結果統計資料來定義指定裝置上的最大可能平行實例數n max∥device 。
如果n max∥device n ∥,「資料輸入」暫存器可以最佳化為僅包含獨特的輸入資料,參見圖136。如果可以組合平行CB,則可以減小它們的暫存器大小,但組合實例對其組合複雜性的益處微乎其微。原因在於,每個平行CB都是必需的,同時又是獨立的計算,因此(在此處定義的最佳化速度設計的目標下)無法重複使用。在這種情況下,每個時脈週期都會導致計算一次n loop 迭代,並且每次迭代的所有平行CB都在一步/週期內計算完成。
n max∥device >n ∥時,情況相反。在這種情況下,要麼引入額外的緩衝暫存器來儲存此處具有兩個CB的第一部分迭代,然後計算剩餘的一個CB並
組成結果。在這種情況下,前兩個平行CB的結果必須儲存在具有S reg,Buffer 的緩衝暫存器中。
要麼使用主機(如:具有記憶體的CPU),其中,每個週期之後主機使用區域記憶體協調每個週期的結果以儲存結果並提供正確的「資料輸入」和「資料輸出」。編譯器必須根據n max∥device 進行重新映射,並且無法減少每個CB的每個輸入暫存器的大小。IC設計包括最大數量的平行實例,每個實例具有單獨的暫存器來保持每個CB/實例所需的所有資料。在第一解決方案(圖137)中,額外的延遲為Δt delay =2.(t propagation )。該解決方案需要大小為S reg,Buffer 的額外的緩衝暫存器。在第二解決方案(圖138)中,不需要額外的緩衝暫存器,但會出現額外的Δt delay =2.(t propagation )+4.Δt bus-transfer 。
這展示了本發明的系統和方法如何能夠將緩衝暫存器Sreg,Buffer的附加矽面積ASilicon與資料傳輸的延遲時間Δtdelay關聯起來。
緩衝暫存器大小與平行CB的數量n ∥之間存在聯繫。所需的緩衝區大小為:S reg,Buffer =n ∥-n max∥instances =n buffer-registers .S datatype
這是實例邏輯所用面積A logic 相較於A silicon,reg =f(n buffer-registers )的大小的關鍵依賴關係,以根據目標裝置(FPGA類型或ASIC)的速度和功耗,平衡/最佳化/最小化所用矽面積A silicon 。與附加實例Alogic相比,這能夠最佳化緩衝暫存器所需的面積Asilicon,buffer-reg,並且與主機平台或裝置間連接Δttransfer相比,這能夠最佳化延遲時間。
如果緩衝暫存器的大小小於一個實例A Buffer <A instance ,則可以通過以下方式減少延遲:Δt delay =Δt delay,nobuffer -Δt delay,buffer =2.Δt bus-transfer
可以對FPGA進行程式設計以使用其I/O引腳建置叢集或通過使
用從循序匯流排到周邊元件互連標準(Peripheral Component Interconnect;PCI)到串列數位介面(Serial Digital Interface;SDI)等來相互通訊,參見圖139。在這種形式下,可以非常靈活地為指定數量n ∥的平行CB建置最佳A silicon 。
三級巢狀迴圈的平行CB用於計算離散化的二維擴散等式,其可以使用新穎的方法推導出來。每個CB具有5次讀取和1次寫入來計算一個網格節點的範本(stencil):t f =γ.(t a +t b +t c +t d -4.t e )+t e
每個CB計算該等式來得出結果t f ,該結果為空間網格上擴散隨時間的演變。
圖140示出了“in_memory”,其填充有來自主機平台的值,該主機平台使用通用非同步收發傳輸器(Universal Asynchronous Receiver/Transmitter;UART)協定來經由循序連接將起始值傳輸到FPGA。CB可以轉譯為例如Verilog程式碼,描述資料在從一個暫存器傳遞到另一個暫存器時如何轉換(即,RTL描述),參見圖141。CB的RTL定義產生了計算的邏輯描述,參見圖142。根據網格點的數量,伽馬圖可以用於在每次迭代後得出暫存器“ff1_in”、“ff1_out”與線路之間對應的所需傳輸。實例的每個輸出都路由到正確的輸入“ff1_in”,並分配ff1_in[N]<->tf_cmpN,參見圖143。實例的輸入(.ta,.tb,.tc,.td,.tf,.te)和輸出(.tf)根據「內迴圈映射階段」放置,分別參見圖127和圖135。按照圖136,在iCESugaer v1.5裝置上測試2D熱傳導方程式(Heat equation)的平行CB,該iCESugaer v1.5裝置具有帶5280個邏輯單元的“iCE40UP5K-SG48 FPGA”。計算了具有遞增的解析度nx×ny的四個不同的網格:5×5、7×7、9×9。為了精度,使用了1位元組=8位元定點表示,並且為了向FPGA傳輸資料和傳輸來自FPGA的資料,通過序列USB連接實現了UART實現方式。這表明了邏輯和佈線所用單元數增加與網格解析度
(即,所需實例)增加的線性依賴關係。A14實現方式具有相同的固定計算時間-在該FPGA上計算一個範本的傳播時間t propagation ,參見圖144。所需的每次迭代n loop 都通過一個週期解決。結果(圖145)與在CPU上利用相同解析度計算的值相對應。
從物理上講,不可能比使用最佳化的組合邏輯更快地計算一系列循序指令,該最佳化的組合邏輯沒有用於儲存資料的需要時脈並通過額外的線路進行傳輸的循序步驟。因此,通過該新穎方法形成的伽馬圖中表示的程式碼是程式碼的表示/分段,其將最快的計算指令形式分組在CB分段(RAW)中,並提供這些CB之間所需的資料/訊號傳輸的資訊。此外,這還意味著,當有足夠的矽面積可用於邏輯時,這種分段表示具有盡可能最小能耗的指令分組-前提是RAW指令鏈被合成為關於能量的最佳閘邏輯,並相應地選擇頻率和電壓。與最先進的方法相比,這在從高階程式到同步FPGA設計完全自動地合成程式碼方面具有一些優勢:
˙具有精細度G 0的伽馬圖就像是同步IC設計的RTL描述的藍圖,其中組合部分是具有帶寫後讀(Read-after-Write)依賴關係的指令的CB,這使得在CB中邏輯的傳播時間t propagation 內能夠進行物理計算。
˙該圖表示重複順序的有限狀態:計算->傳輸->....
˙最佳時脈由i個階段的t propagation,i 定義
˙如果t propagation,i 的差異太大,則可以通過在CB中增加循序步驟來使其同質化-拆分RAW指令鏈很簡單/在哪裡拆分沒有區別
˙通過在指定裝置(FPGA或ASIC)上使用最大數量的平行實例,主機平台上的驅動程式可以完成潛在剩餘平行CB的對應映射。
本節介紹最先進的管線CPU的基本組件。現代CPU具有多條發射(即平行管線,主要分為浮點單元、整數單元、載入和儲存等)和6-14階段的管線深度/管線階段。步驟越多,可以達到的頻率越高,因為每個步驟的傳播時間更短,但尤其是分支未命中會導致更長的暫停。
接下來的章節簡要介紹可以如何在5步管線中依賴於所描述的工作實現三種基本指令類型:((i)用於將資料從記憶體載入到暫存器和從暫存器儲存到記憶體的reg指令,(ii)用於計算算術指令的ALU指令,以及(iii)分支指令。這種方法實現無序執行,在許多不同的實現中都結合了最先進的超純量CPU。這使得能夠展示可以如何使用這些基本元件完全自動地基於可用的商業/許可IP塊為指定程式碼構成「基於單元的設計」。這些塊具有已知的大小和可操作的設計(已成功合成並進行了密集測試)。基於這些「預定義元件」,使用該新穎方法得出的伽馬圖可以用於基於用高階程式語言編寫的輸入程式碼自動使用通用的可實現過程構成定制多重派發CPU。這使得定制靜態多重派發CPU設計能夠最佳化為一個程式碼。
伽馬圖用於定義:
a)平行計算的最佳數量-管線與可用面積的比較。因此,程式碼中的可用平行性用於平衡計算延遲與快取/資料記憶體存取延遲,參見章節基本情況B-未知的運行參數。
b)每個管線的理想暫存器大小
c)緩衝暫存器(即,附加暫存器)的大小
d)廣泛使用ALU操作後的階段的轉發以將結果直接再次用於下一個ALU操作,因為所有計算塊都具有RAW依賴關係
e)當今CPU中硬體元件所需的矽面積較少,以通過硬體利用ILP:
a.動態指令排程硬體元件,因為沒有單個指令被排程,而是計算塊。這些塊可以由編譯器靜態排程。
b.通用快取結構,因為編譯器後端能夠最佳化可用暫存器/緩衝區上的程式碼。每個計算塊都定義了預定義的暫存器關聯。這使得能夠在編譯時間期間預先計算暫存器命名,以實現最佳化的多管線設計。
該新穎方法能夠建置具有最佳化數量n ∥pipelines 的平行計算管線的靜態多重派發CPU設計,其中,最先進的CPU中用於動態排程和快取所需的矽面積可以用更多的管線代替,以更快地進行計算和/或最小化能耗。使用伽馬圖定義編譯器的對應後端,能夠通過靜態排程計算塊來產生組合程式碼。這比排程單個指令的複雜度要低,這對於若干不同的單元來說,已經是NP困難問題。這產生了具有自動適應的編譯器後端的定制靜態多重派發CPU設計,並能夠產生最佳化的多重派發CPU設計,其針對更高階程式語言(編譯和直譯)形成的輸入程式碼進行定制。
「基於單元的設計使用標準單元庫作為晶片的基本建置塊」。這些基本建置塊提供具有已知面積A silicon,cell 、最佳頻率f sw 和電壓V DD 的功能合成佈局。它們可以用於創建具有適當ALU、暫存器和目標I/O連接的優選設計的管線。
使用沒有動態排程硬體支援的多重派發CPU(如:Tomasulo演算法),意味著排程必須由編譯器完成。但是,由於該新穎方法能夠比最先進的編譯器利用更多的ILP,因此該方法能夠形成由排程指令組成的計算塊。這導致不需要單指令排程,而是需要排程CB。對於基本塊標記法中的程式碼,已知的是,不在迴圈部分中的基本塊(不超過3-4個平行指令)是平行的,[指令層級平行性的
限制,D.W.Wall.pdf]。因此,分段程式碼包含的平行CB不超過3-4個。對於迴圈部分,平行CB通過以下屬性描述:平行CB的數量n ∥、所需的順序迴圈迭代n loop 和(固定)CB中的指令。因此,對於所有程式碼部分(控制流圖中的基本塊),可行的是通過該新穎方法創建伽馬圖。多重派發CPU是具有多條管線的CPU。這使得能夠計算指令超純量。(每條指令的週期CPI<1)。資料和控制依賴關係是平行運行指令的問題。該新穎方法是將指令分組到計算塊中,並且編譯器需要排程RAW指令組,這與排程單個指令的複雜度不同。如果編譯器負責指令的排程,則稱為靜態(多重派發CPU)。編譯器可以檢測並避免危險,因此該新穎方法提供的CPU設計不需要硬體支援動態指令排程,也不需要複雜的快取結構。這釋放出了能夠用於添加更多平行管道或每個管線的更大暫存器的矽面積,從而能夠更快地儲存和載入平行可執行指令。這樣,可以平行解決更多平行CB。在管線CPU上,計算CB中的指令是每個週期連續計算一條指令(某些指令需要超過1個週期-在編譯時間期間已知)。因此,平行CB中的指令可以平行計算。該新穎方法允許從IP核產生多重派發CPU管線,然後相應地編譯程式碼(靜態)。隨著在靜態編譯期間獲得更多關於程式碼平行性的資訊,可以通過該新穎方法最佳化排程更多指令。此外,為了獲得最佳數量的平行管線、對應的ALU和暫存器大小,伽馬圖的分析保持有界,特別是因為迴圈中的CB以及可以計算多少個平行CB可以作為敘述的距離向量的函式獲得並與迴圈參數相關聯。
為了命令電腦,硬體必須理解該語言。這些字(word)稱為指令集。它們的定義直接與某些硬體元件相關。例如,為了在管線CPU中獲取指令行,獲取與解碼階段之間的暫存器必須至少具有指令行長度的大小。流行的指令集是無互鎖管線階段的微處理器(MIPS)。這是精簡指令集電腦(RISC)的指令集架構(ISA)。以下描述假設使用MIPS ISA。
該新穎方法對分支或分支預測的有效性沒有直接影響。由於該新穎方法基於靜態編譯,因此與其他設計相比,它能夠減少一些潛在的負載和儲存,但在錯誤預測的分支上暫停,並且與最先進的設計一樣,對刷新管線的需求仍然是個問題。因此,在接下來的段落中只顯示r指令和l/s指令。需要它們來說明為什麼每個管線的暫存器大小S reg 是能夠從伽馬圖中提取的關鍵屬性。(參見圖146,示出了儲存(和載入)為(a)IC設計(b)管線版本。)儲存資料需要計算資料記憶體中從指令中的偏移量到暫存器號$t1的位址。該資料在至少2個週期內是可存取的(使用MEM/WB->MUX->reg 2 ALU的轉發)。儲存是相同的過程,但對延遲的敏感度較低,因為根據該新穎方法的規則,儲存的資料不會在儲存後立即被使用。這些方法將儲存和立即使用視為傳輸,因此在伽馬圖中被涵蓋。將資料從記憶體庫載入到暫存器需要多少個週期很重要。在最先進的CPU中,快取層位於管線與實體記憶體之間。這可以顯著減少資料存取延遲和CPU核心間傳輸,但快取未命中仍會升級到所有快取級別並導致更長的延遲。此外,快取以快取線長度的塊載入-因此快取操作/未命中與儲存有關,分別與具有快取線長度的資料的載入延遲有關-這會產生負面影響,例如當在迴圈中定址(或分配)陣列與快取線無關時。(參見圖147,示出了算術(R)運算為(a)IC設計(b)管線版本,指示轉發以在下一個週期使用前一條指令的結果。)在這裡,重要的是要注意,對於該新穎方法而言,R指令的「轉發」選項至關重要,因為計算塊中的指令具有RAW依賴關係,這意味著下一條指令始終需要前一條指令的結果。轉發單元能夠通過將MEM/WB階段中的rd欄位與ID/EX階段中的rs和rt欄位進行比較來使用硬體。如果兩者相同-這意味著MEM階段中的指令要對暫存器rd進行寫入,而EX中的指令要對rd進行讀取,其中,rs或rt正確地連接ALU。這可以通過硬體元件Fordward Unit來實現,並通過邏輯比較指令中的項目位元並比較
instructionbits->EX/MEM[15:11]=instructionbits->ID/EX[25:21]@ Reg1 ALU and=instructionbits->ID/EX[20:16]@ Reg2 ALU。為此,指令中的rs和rt欄位必須沿著該階段暫存器傳遞。
在現代最先進的CPU中,管線與外部記憶體之間有不同層的快取。這種快取需要額外的矽面積A silicon,cache ,但可以減少載入資料的延遲,與使用I/O匯流排到外部記憶體的滿載相比,這可以大大重複使用。當暫存器大小太小而無法儲存重複使用的資料時,快取延遲是有益的。因此,暫存器大小是關鍵屬性,因為它們在管線CPU中具有最低的負載和儲存延遲特性,但空間有限。在每個計算塊中,指令是已知的,並且可以在靜態排程期間在編譯時間期間指定暫存器順序。當平行管線的數量n ∥pipelines 和可用的暫存器大小S reg 已知時,就可以做到這一點。由於可以在編譯時間期間確定ILP與運行時參數之間的依賴關係,並且在該新穎方法中,編譯器會排程指令塊,因此重點是找到緩衝暫存器的最佳大小。因此,該方法主要不使用快取(或不僅使用快取),而是通過使額外的緩衝暫存器可用來最佳化資料存取。這些特殊暫存器的大小針對儲存和載入資料的延遲時間(即,目標平台的I/O特性)進行了最佳化。在同一管線的靠後階段(在矩陣中的同一行但位於靠後的列)中使用的資料節點的儲存可以儲存在這些額外的緩衝暫存器中。這使得對這些元素的存取速度比儲存和載入到外部快取/記憶體的速度更快。伽馬圖可以用於根據平行管線的數量n ∥pipelines 最佳化此類緩衝元素的大小並根據運行時變數params最佳化外部記憶體的延遲時間特性。
對於非迴圈CB和基本塊中ILP的已知限制,具有精細度G 0的伽馬圖定義第一解決方案。每級最大平行CB定義n ∥pipelinesoptimal ,並且CB中最大資
料節點數定義S reg 。需要該暫存器大小來平行計算一條管線上的CB。可以考慮功率效率,以僅平行排程具有足夠平行指令的CB。這可以通過每級平行CB的指令數量的差異得出。這種最佳化步驟在伽馬圖中是有界的,因為可以逐級分析(迴圈部分除外,其中每級CB可以通過參數表示)。
如果沒有足夠的矽面積A silicon 來實現n ∥pipelinesoptimal ,則最大數量為n ∥pipelines <n ∥pipelinesoptimal 。在非迴圈部分中,由於對管線長度的敏感性,分支會阻止在許多基本塊上進行有效預載入[bp.pdf]。在錯誤的預載入分支之後,必須清空所有已處理的管線階段。較長的管線能夠實現更高的頻率,因為它們的傳播時間更短,但在錯誤分支預測的情況下會引入更多延遲。迴圈部分則相反。因此,管線階段是取決於ALU的複雜度的最佳化步驟,其也可以是可用的程式碼和平行指令的函式。這由最先進的方法來產生對應的ALU所涵蓋,分別在IP核的選擇過程中涵蓋。
對於通常也依賴於運行時參數的迴圈部分而言,最佳平行管線n ∥pipelinesoptimal 會很大。因此,n ∥pipelines 由存取資料(即,分別將資料儲存和載入到管線)與數量n ∥pipelines 之間的平衡定義。對於具有比可以平行排程到不同管線的更多的平行CB的數量n ∥的程式碼部分,引入緩衝暫存器。在這種情況下,該新穎方法能夠找到緩衝暫存器(管線在一個週期內可存取的暫存器)的最佳大小,該最佳大小取決於外部、慢得多的記憶體(I/O)的延遲以及程式碼中定義並表示為平行CB的所需平行計算工作量。在靜態編譯期間,該新穎方法可以利用比最先進方法更多的ILP。可以使用該附加資訊來最佳化作為輸入程式碼中可用矽面積A silicon 的運行時參數的函式的緩衝區大小。此外,不需要用於動態排程的複雜硬體,緩衝暫存器可以取代快取方法,分別減小快取區域的大小。當找到與從外部記憶體載入資料的延遲相比的最佳緩衝區大小時,CB的靜態排程允許排程載入和儲存資料指令,以平衡暫存器的平行計算時間,並保持緩衝區可
用於短時間載入和儲存。
通過本發明的系統和方法(創建伽馬圖),對於在有界/分析最佳化步驟中用高階程式語言編寫的指定軟體程式碼,暫存器大小、平行管線數量之間的最佳化平衡可以被定義為可用矽面積和至外部記憶體的延遲的函式。對於具有不同級別的快取的最先進的CPU,可以通過快取敏感(cache-conscious)程式設計來實現這一點。該新穎方法能夠基於輸入程式碼和可用矽面積,使用數值方法自動找到平衡。這包括四個步驟:
1.定義最小暫存器大小S reg,min
3.如果有可用的閒置矽面積,並且程式碼中的迴圈部分具有潛在的高計算需求,則可以根據平行管線的數量n ∥piplines 、暫存器大小S reg 和至外部記憶體的延遲來最佳化閒置面積。
4.這產生針對可用矽面積A silicon 的固定參數n ∥piplines 和S reg ,從而能夠將計算塊最佳地排程到這些平行管線n ∥piplines 並以最佳的方式使用暫存器S reg 。
如果所有管線都具有暫存器的存取權限,並且所有管線都具有相同的ALU,則CB的最佳排程保持數值邊界。對於排程來說,重要的是,對於一個CB,所有資料都在管線的暫存器中可用。並且每個CB在計算完所有與RAW相關的指令後都會產生1個輸出,參見圖148:
S reg,stage,out,Γ2=S datatype,2a +S datatype,2b
必須將平行伽馬節點排程到可用的管線;每個CB都需要暫存器大小S reg,in,CB =f(n datanodes ,S datatypes )。計算伽馬節點/CB中的指令產生一個定義的新資料節點作為結果S reg,out,CB =f(S datatype )。如果可以在平行管線上計算某一級別的所有CB,則每個CB都會平行運行,管線CPU無法再進行最佳化。對於不在迴圈部分中的CB,分支主要限制載入和儲存靜態最佳化策略,已知方法已經通過軟體和硬體非常有效地解決這個問題以進行分支預測。這與由於平行管線有限n ∥piplines 而無法平行計算所有CB的情況形成對比。在這種情況下,最佳化步驟(在我們的示例中)編譯器需要在載入資料與計算之間找到平衡。由於下一個伽馬圖級別的CB可能需要平行計算的一些(或全部)資料節點,但由於並非所有CB都是平行計算的,因此必須保留中間結果。例如,在下一次針對迴圈間傳輸的迭代中,迴圈CB的情況就是如此,參見圖149。基於一個伽馬圖級別上的平行CB的數量n ∥,可以得出與平行管線的數量的關係:n bufferreg (n ∥)=S datatype .n ∥
該等式將所需緩衝暫存器的大小聯繫起來,以防止在n ∥=f(params)>n ∥pipelines 的部分通過快取/記憶體進行儲存和載入。該值n ∥主要取決於運行時變數。也會存在針對緩衝暫存器的閒置矽面積限制。該限制可以與將資料載入和儲存到外部記憶體的延遲相平衡。
每個CB包含一系列具有寫後讀依賴關係的指令。每個週期,CB中至少一條指令(或具有超過一個週期的指令)可以無任何暫停地計算。轉發很重要,因為每個週期之後,後續指令都需要結果。因此,每個級別的CB的數量n ∥定義了平行管線的最大最佳數量n max∥pipelines 。(參見圖150,其示出了將計算塊排
程到平行管線)。通過比較伽馬圖的每一級別上平行CB之間的運算元量n op,CB 的差異,可以選擇具有最小平行效率的CB:
為了自動選擇最佳平行效率,平行管線的可用頻率(單位時間週期定義單位時間的n op )直接使用指定使速度提高。與未使用的管線相比,使用這些作為不同的級別的函式的加速,定義了速度(=1)與功率效率之間的平衡中的最佳效率。參見電晶體中的延遲和功率動態,靜態功率損耗是電流和電壓的函式P static (I static ,V DD )。開關功率(動態功率)是容量、電壓和頻率的函式:
定義最佳的n ∥piplines ,需要兩個步驟:
n ∥piplines,min 定義最佳平行管線,以利用基本塊中的ILP,而不是迴圈部分中的ILP,在=1的情況下為最佳。此外,對於管線元件的面積,暫存器大小定義為S reg,min 。可用面積A silicon 限制所需暫存器大小為S reg,min 的可能平行管線的最終數量n ∥piplines 。如果在n ∥piplines,min 、S reg,min 以及所需的最少元件(程式計數器、硬體轉發、分支支援、暫存器、資料和指令記憶體)的情況下存在閒置A silicon ,則可以針對迴圈部分最佳化設計,其中,可以使用比最小平行管
線更多的平行CB,n ∥>n ∥piplines,min 。在這種情況下,可能需要第二最佳化步驟:
第二步驟中:在添加緩衝暫存器n buffer,reg (將資料節點載入/儲存在記憶體中的延遲時間)與增加n ∥piplines 以降低循序計算時間之間取得平衡。這與章節基本情況B-未知的運行參數中的相同,並且大多只適用於迴圈部分。(參見圖151,其示出了平行CB的分佈以及與所需暫存器和計算時間的關聯。)迴圈中每個級別平行CB的數量主要是運行時參數的函式n ∥=f(params)。基於n ∥,可以得出所需的平行作業的數量:
這給出了關於運行時(即,計算作為平行管線的數量n ∥pipelines 的函式的平行CB的數量n ∥的週期)的近似函數。平行管線的數量n ∥pipelines 定義了所需的附加暫存器-每個平行CB都會產生一個附加暫存器空間,大小為S datatype :
這將資料大小S datatype 、params、每個CB(組合工作量)中的運算元n op,i 與最佳(即,關鍵)管線的數量n ∥pipelinescritical 相關聯。對於指定的程式碼
和I/O屬性的限制而言,平行管線的數量多於n ∥pipelinescritical 不提高使用矽面積平行計算CB的效率。還將由對應參數(即,迴圈迭代次數)引入臨界問題大小params critical 。超過臨界大小,多重派發CPU將受I/O到外部記憶體的限制,最佳是用於具有params critical 的問題大小的面積。
Γ2,a 中需要的資料的負載應該在計算Γ stage,k 期間傳輸,參見圖152。
正確處理每個CB的載入和儲存非常重要。可以使用的可用暫存器越多,程式碼就越快。每個CB都知道指令的數量以計算n op,CB 。已知每個資料節點的傳輸(伽馬圖中的邊),其定義資料必須從哪裡傳輸到哪裡。基於限制,即設計的目標是在使用該時間進行計算以從外部記憶體載入資料(如果需要的話)之前載入CB,編譯器的步驟是決定要載入的資料是否已經在暫存器上。此外,在儲存時,儲存在暫存器上和/或儲存在記憶體位置處。通過該程式,可以防止由於載入資料延遲而導致排程CB的暫停。CB之間的傳輸可能導致:
˙到記憶體的儲存->從記憶體載入->smem/lmem
˙暫存器的儲存->從暫存器載入->sreg/lreg
實際CB的每個資料節點在暫存器中都有足夠的空間,這是所提出的設計的限制。例如,可以通過CB定義指令的讀寫暫存器,並根據暫存器大小添加載入和儲存來決定CB(在迴圈CB中-n ∥由函式給出,如果需要則作為運行時參數的函式n ∥=f(params))。
在五個步驟中,該新穎方法可以用於使用基於單元的設計創建多重派發CPU設計,並調整編譯器框架的後端以創建針對特定設計的最佳化組合程式碼,參見圖153。在這種形式下,該新穎方法基於靜態多重派發CPU架構的CPU設計原理,為指定的輸入程式碼創建全自動設計和對應的編譯器。這可以針對FPGA和ASIC應用。這五個步驟是:
1.通過該新穎方法分析指定的輸入程式碼
2.創建精細度G 0的伽馬圖,並可以通過有界數值方法來分析伽馬圖
3.基於ISA的選擇:可以選擇和組合用於管線CPU設計(基於單元的設計)的可用元件,以達到a)每個管線所需的暫存器大小,並計算平行管線的最佳數量n ∥pipeline 。
4.基於該配置,可以通過編譯器中對應的後端編譯該程式碼
5.這會產生針對最佳化的多管線CPU(靜態多重派發CPU)的編譯程式碼。
另一個用例是將最佳化任何指定程式碼的方法與具有特殊管線配置的通用多重派發CPU設計相結合。與SOTA方法相比,該方法能夠從原始碼中提取更多資訊以用於自動平行化。因此,編譯器可以完成更多的排程工作,而這些工作不必由任何硬體元件覆蓋。以下幾點阻止了SOTA編譯器的靜態排程指令:
I.快取未命中:無法預測暫停。
→解決方案:用於動態排程的硬體元件可向編譯器隱藏該問題
II.根據分支結構排列指令:分支失敗需要刷新管線。
→解決方案:硬體支援動態分支預測
III.管線延遲:每個現代CPU在問題寬度和延遲兩方面都不同。
動態排程、分支預測和複雜的快取層次結構是現代CPU中利用指令層級平行性(ILP)的重要硬體端元件。由於該方法比SOTA方法利用了更多的ILP,因此該方法可以通過固定通用多重派發CPU設計與靜態排程來不同地解決這三個主題I)-III)。這使得能夠釋放當今分支預測、動態排程和複雜快取層次結構所需的矽面積,並用於提高計算效能。
與排程單個指令相比,本發明的系統和方法能夠將計算塊(任意循序指令鏈-具有RAW資料依賴關係的指令)排程為非NP困難問題,如果目標平台具有對稱特性的話。因此,特定的通用設計能夠使用該方法將指定程式碼分發到不同的管線/核/叢集節點。每個基本塊都平行分割成計算塊鏈,參見圖154。可見的是具有取決於變數z的條件分支的程式碼。檢索針對兩個分支的伽馬圖,並且根據該條件(它是z值的函式),在編譯時間期間已知包括資料定址的平行機會。
適用於該方法的通用多重派發CPU設計無需硬體支援亂序執行。這使得用於動態指令/管線排程或複雜快取層次結構的硬體元件變得過時。
對於適合該方法的通用多重派發CPU設計,不需要硬體支援亂序執行(即,動態指令/管線排程或複雜的快取層次結構)。
通用設計包括:
˙平行管線的數量:n ∥pipelines
○這些管線可以具有相同或不同的特性,例如分為整數和浮點管線和/或單獨的載入和儲存管線等。
˙具有一定數量的緩衝暫存器的區域n bufferreg
○它們是具有名稱的暫存器(SRAM),替換快取層次結構並能夠儲存已
知重複使用的臨時資料,從而降低從外部記憶體(DRAM)儲存和載入的延遲時間。
管線的所有特性(階段暫存器大小、時脈、階段寬度等)例如都是所選指令集的函式,其影響管線階段大小、階段暫存器、緩衝區大小等的定義。為了說明的目的,圖155示出了標準的5階段管線。該基本管線設計用於說明最佳化管線以適應該方法所需的附加元件。為了使標準管線設計適用於該方法,必須添加以下額外的硬體支援:
a)轉發(通過將資料從MEM階段(EX/MEM-階段-暫存器)轉發到EX階段(ID/EX-階段-暫存器)來防止資料衝突)
b)交換(通過使EX/MEM-階段-暫存器的結果可用於平行管線的EX階段,實現管線之間的交換)
c)分支管線刷新(控制衝突:實現根據一條管線計算條件,僅刷新某些管線並執行分支位址計算)
a)轉發:計算塊中的所有指令都具有寫後讀(RAW)資料依賴關係。因此,必須為ALU提供1個暫存器上的轉發,參見圖156。需要支援為ALU「轉發」至少一個輸入暫存器,以利用每個計算塊中的直接寫後讀資料依賴關係。這使得能夠在編譯時間期間為每個計算塊檢索Δt compute ,因為所需的週期是已知的。
b)交換:此外,兩個沒有暫存器儲存和載入的管線之間的交換支持矩陣中不同行之間的傳輸,參見圖157。在圖(a)中,示出了兩行上的兩個計算塊之間的傳輸。使用MUX,可以通過比較相同的暫存器(即,在兩條指令中分別使用專用的交換名稱暫存器)來檢測傳輸,這可以由交換控制單元檢測到。
c)分支:在這種情況下,計算塊可以根據其行分配到對應的管線。在條
件分支的情況下,可以擴展該概念。添加如圖154所示的分支指令,在每個管線上對暫存器進行比較,只有未採用的管線才會被刷新。這使得僅通過一個冒泡步驟(bubble step)就能夠改進條件分支處理。圖158示出了通過啟用硬體來刷新超過一個管線(未採用的管線)的具有控制衝突支持的平行管線。編譯器可以在所有平行行上標記分支步驟,並且像在一個管線配置中一樣,在ID階段比較暫存器,然後運行下一條指令或通過刷新IF/ID階段添加‘nop’,並將控制標誌設置為0,從而刷新剩餘階段。在所有平行管線上也使用對應的分支指令,當在行1上完成比較時,可以刷新並分別使用正確的管線。
可以添加額外的緩衝暫存器(如:SRAM),而不是快取級別。緩衝暫存器的大小必須根據平行管線的速度和數量進行最佳化。靜態管線能夠使用最佳的載入/儲存指令來平衡到外部記憶體的傳輸時間。
如果伽馬圖的一個級別上的平行CB的數量高於可用的平行管線n ∥>n ∥pipelines ,則必須最佳化伽馬圖。這可以通過根據需要組合盡可能多的平行CB來實現,以減少平行計算塊的數量。如果例如在迴圈部分中的平行計算塊的數量取決於運行時變數,則編譯器需要引入適當的資料映射作為附加程式碼,該附加程式碼在運行時期間計算資料映射。例如,對於2D熱傳導方程式(Heat equation)示例,該方法知道迴圈部分中的平行計算塊的數量為n ∥=(n x -2)(n y -2)。指定通用的多重派發CPU,其中,n ∥pipelines =3,如圖159所示。通過簡單的示例,可以展示如何從指定數量n ∥的平行CB中將來自記憶體的資料在運行時期間映射到指定數量的平行管線的映射。在示例中,始終將5個CB分佈到一個管線(按照方法的最佳化步驟進行組合),並獲得對應的子迴圈索
引以定義要載入到不同管線的資料。例如,基於CB中的索引,可以獲得每個管線的獨特資料。CB具有由其定義給出的固定暫存器命名。然後,通過編譯器添加映射程式碼,給出記憶體與暫存器之間的映射,並且該映射在運行時期間能夠進行計算。這使編譯器能夠根據平行計算塊的數量n ∥=f(params)來處理執行時間。因此,可以基於靜態程式碼分析和所得到的計算塊在運行時期間映射資料。每個計算塊在固定的暫存器編號/名稱上都有指定的計算,並被排程到不同的管線。可以通過在運行時期間計算這些位址來完成對應的資料映射。
該方法能夠在分析步驟中在對稱平台上排程CB。因此,可以擴展所提出的通用多重派發CPU設計,以建置具有許多多重派發CPU核的多核心設計。為了實現對稱擴展,可以通過垂直和水平擴展來擴展基礎設計。
為了演示可以如何使用伽馬圖將程式碼排程到具有兩個管線的多重派發CPU,使用以下演示程式碼。該程式碼僅用於演示該新穎方法,不具有實際用途。它與技術說明中的程式碼相對應。利用clang對x68_64平台進行傳統編譯會從圖160中的程式碼創建5個基本塊,參見圖161。
本發明的系統和方法創建分佈到四個不同的分支節點的15個CB。邊表示潛在的傳輸。在分支br1b中,伽馬圖具有4個平行CB n ∥=4。圖162示出了演示程式碼,該演示程式碼具有1個分支、分支br1b中的BB1中的一些ILP以及BB3中的更多ILP。對伽馬圖的進一步分析得出:
˙最小CB暫存器大小:S reg =4
˙最大平行CB:n ∥=4
˙固定平行管線(如:由於可用矽面積A silicon 限制的內部限制):n ∥pipelines =
2
˙因此,每個管線所需的緩衝暫存器大小:S Buffer-Regpipeline =1(針對分支br1b中的平行CB的每個管線2個CB的組合)
這樣就可以為上述具有2個類似且平行的五級管線的多重派發CPU產生機器碼。緩衝區大小1不取決於運行時變數,因為該新穎方法通過關係g[i+4]=g[i]檢測到平行CB受索引距離4的限制。該程式碼中運行時變數N的選擇不會影響平行性。改進是使用n ∥pipelines =4,其中br_main中分支br1a的能效會有所損失,但br1b不會,其中,n ∥pipelines =4將導致最佳速度、更多所需矽面積和類似的能效。根據硬體規格,可以編譯程式碼,參見圖163、圖164和圖165。這會導致具有排程計算塊和最佳化後的載入和儲存指令的雙管線CPU的虛擬機器碼。示出移動的載入指令以補償比ALU上的R指令更長的外部記憶體延遲(參見圖166)。
根據圖46中的程式碼產生計算塊產生圖167中N=12的完整迴圈。對於圖167中的CB,迴圈中的平行CB為n ∥=1,基於乘法的加法。該加法在每次迭代中引入潛在傳輸。僅乘法敘述就具有作為向量N的大小的函式的平行CB,這使得n ∥=N。根據本發明系統和方法最佳化程式碼以減少平行單元的規則,組合是在傳輸週期0,-1上。
沿著該示例可以展示以下兩個應用:
a)理想的IC設計
假設矽面積A silicon 足夠大以合成所有CB。所得到的設計將是組合步驟,需要所有資料都在大小為reg[WIDTH-1:0]data_in[2*N]and reg[WIDTH-1:0]data_out[0]的暫存器中。
b)在5階段2個多重派發CPU上
組合CB與平行作業n op∥以及讀寫傳輸n transfers 之間的依賴關係:
˙組合2次迭代:n comb∥=2;n op∥=4;n transfers,init,r =4,並且n transfers,result,w =1傳輸
˙組合3次迭代:n comb∥=3;n op∥=6;n transfers,init,r =6,並且n transfers,result,w =1傳輸
˙組合4次迭代:n comb∥=4;n op∥=8;n transfers,init,r =8,並且n transfers,result,w =1傳輸
˙組合K次迭代:n comb∥=K;n op∥=K*2;n transfers,init,r =K.2,並且n transfers,result,w =1傳輸
請注意,現有技術中已知的各種方法在技術方法上與本發明有本質上的不同。為了進一步說明本發明的系統和方法,下面將詳細解釋與現有技術中的三種系統的本質區別:(a)M.Kandemir等人(以下簡稱Kandemir)的Slicing based code parallelization for minimizing inter-process communication揭露了一種用於可擴展平行化的方法,該方法最小化分散式記憶體多核心架構中的處理器間通訊。Kandemir使用迭代空間切片的概念,揭露了一種用於資料密集型應用的程式碼平行化方案。該方案針對分散式記憶體多核心架構,並使用切片來制定跨平行處理器的資料計算分佈(劃分)問題,以便從輸出陣列的劃分開始,迭代地確定其他陣列的劃分以及應用程式碼中巢狀迴圈的迭代空間。目標是基於這種基於迭代空間切片的問題制定來最小化處理器間資料通訊。然而,Kandemir通過迭代地確定應用程式碼中其他陣列的劃分(參見第87頁),利用輸出陣列的劃分來實現這一點。這是不同的方法,因為本文揭露的發明方法不包括迭代確定組合的陣列部分。本發明方法直接從程式碼中獲得該資訊。如Kandemir第88頁所揭露的,程式切片最初由Weiser在一篇開創性的論文中引入。切片意味著從程式中提取可能對特定感興趣的敘述產生影響的敘述,這是切片標準(參見J.Krinke的Advanced slicing of sequential and concurrent program。切片技術表現出與知名的點資料/控制依賴關係(參見D.Patterson的Computer architecture,第150頁)和資料流程分析(例如[8])類似的效果。我們的方法乍一看與這些方法相似。這是因為敘述、程式中的塊、資料依賴關係是程式設計和編譯中最核心的點之一,但本文揭露的發明方法具有不同的視角。新穎之處在於,這種新的方法提供了新的視角,即,報告指出的計算塊節點的定義。本發明方法明確地將每個變數視為獨特資訊(由一個特定的位元模式表示),並且由於計算指令(=敘述)只能使用可用的位元模式(在可存取的儲存裝置中,例如在CPU暫存器中)執行,因此本發明方
法提取在「位置」(如:暫存器)處修改與使用變數之間的時間。已知的SOTA編譯器不會從(來源)程式碼中提取該時間,也不會關注敘述中的單個資料實體(位元模式)-所有已知的現有技術系統始終將完整敘述的結果作為焦點。正如Kandemir所披露的(第89頁),使用迭代空間切片,可以回答諸如「哪些敘述的哪些迭代可能會影響來自arrayA的指定元素集合的值」等問題。這展示了不同的視角,其中,本發明的方法以以下這樣的通用形式精確地得出這種影響:找到陣列中每個元素的「讀取」和「寫入」,並將「讀取」和「寫入」的該延遲時間與傳輸元素所需的時間相關聯。它找到這種「影響」,而不是試圖通過「模擬」與線性代數方法(即,迭代方法)的互動來找到它。在第91頁,Kandemir總結了從巢狀迴圈s返回要分配給處理器p的迴圈迭代集的函式,其中,Zp,r是處理器p從陣列Ar存取的資料元素集合。與此相反,本發明的系統和方法並非基於這種方法:本發明的方法和系統首先匯出程式碼的所有依賴關係(也包括巢狀迴圈中的依賴關係),然後為程式中的所有程式碼創建矩陣,最後系統通過組合矩陣來映射/最佳化程式的所有操作。Kandemir的方法為陣列迴圈索引依賴關係創建矩陣,並通過將它們分配給處理器來匯出,然後通過採用Presbuerger集然後產生程式碼作為輸出「(一系列可能的巢狀迴圈)」來找到(參見Kandemir第92頁)這種方法需要多麼迭代,並且然後迭代未知數。Kandemir的方法也沒有考慮硬體規格;(b)A.Fonseca(以下簡稱Fonseca)的Automatic Parallelization:Executing Sequential Programs on a Task-Based Parallel Runtime揭露了現有技術中用於在現代多核心架構中自動平行化循序程式碼的另一種系統。Fonseca揭露了一種平行化編譯器,該平行化編譯器分析程式中的讀寫指令和控制流修改,以識別程式中指令之間的成組的依賴關係。之後,編譯器基於產生的依賴關係圖重寫並組織面向任務的結構中的程式。平行任務由無法平行執行的指令組成。基於工作竊取演算法的平行執行時間負責排程和管理產生的任務的精細度。此外,編譯時精細
度控制機制還避免創建不必要的資料結構。Fonseca專注於Java語言,但這些技術可能適用於其他程式語言。然而,與本申請中揭露的發明方法相反,在Fonseca的方法中,為了自動平行化程式,需要分析所存取的記憶體以瞭解程式各部分之間的依賴關係(參見第6頁,Fonseca)。本文揭露的發明方法有所不同:Fonseca使用資料組和記憶體佈局,然後檢查依賴關係。這與本發明方法的範圍不同,因為Fonseca明確認為這是任務平行性。例如,在如上所述的費波那契示例中,創建新任務的成本高於執行低輸入數方法的成本(參見Fonseca第7頁)。這表明這不是相同的方法,因為本發明方法以完全不同的方式處理該示例。另一方面,這也直接證明了可以通過發明方法解決的技術問題。此外,Fonseca(參見第9頁)必須定義未來創建的位置的主要要求。相反,本發明方法知道將每個指令(即,敘述)放置在何處,這取決於單個資訊/變數的資料依賴關係。Fonseca(參見第9頁)還揭露了必須使用演算法18來找到創建未來的最佳位置。相反,本發明方法基於新範圍將指令準確地放置在該位置。在Fonseca(參見第10頁)中,使用的操作是交換的和結合的。本發明方法不以這種形式為基礎,因為它排除了例如除法(在許多數學模型中使用)。這種限制通常也適用於減少映射方法(如本文所討論的);(c)揭露文本US2008/0263530A1揭露了一種系統,其用於將應用程式碼轉換為最佳化的應用程式碼或適合在至少包括第一和第二級資料記憶體單元的架構上執行的執行程式碼。該方法獲得應用程式碼,該應用程式碼包括在記憶體單元的級別之間的資料傳輸操作。該方法還包括轉換至少一部分應用程式碼。應用程式碼的轉換包括將資料傳輸操作從第一級記憶體單元排程到第二級記憶體單元,使得多次存取的資料的存取在時間上比在原始碼中更接近。應用程式碼的轉換還包括,在排程資料傳輸操作之後,決定第二級記憶體單元中資料的佈局以改善資料佈局局部性,使得被存取時間更接近的資料在佈局中也比在原始碼中更接近。US2008/0263530A1允許改善佈局局部性(參見US2008/0263530A1
第4頁,第0078段)。相反,本文揭露的發明方法具有不同的範圍,因為本發明方法找到這種「局部性」形式,並以指令分組的方式對指令進行排序,這些指令必須是「局部的」-然後將程式碼的這種固有形式放置在矩陣中,然後可以通過組合元素來獲得通用的、非迭代的元素,然後將最佳映射設置到指定硬體,這總是產生程式碼的並行形式。迭代解決方法可能錯過解並以不明確的結果結束。此外,US2008/0263530A1(第6頁,第0092段)揭露了它可以被視為複雜的非線性問題,為此提供了合理、接近最佳和可擴展的解。相反,本發明方法不是非線性問題,而是它防止獲得複雜的非線性問題,這需要迭代的數值解/最佳化方法/演算法。US2008/0263530A1(第6頁,第0093段)認為,通過計算重用向量並應用它們來找到適當的變換矩陣T,可以改善其存取局部性。相反,本文揭露的發明方法不需要變換矩陣,也不需要計算這樣的變換矩陣。它基於指定的程式碼(以編譯器IR語言中的迴圈定義或迴圈塊的形式或組合程式碼中的跳轉定義的形式)讀取陣列操作之間的固有邏輯連接。最後,US2008/0263530A1(第6頁,第0093段)認為,在固定T之後,巢狀迴圈中存取的陣列的放置M是固定的,而巢狀迴圈的放置尚未固定。這揭露了一種基於迭代和數值求解器的方法。本文揭露的發明方法在程式碼中讀取這種依賴關係,而無需使用線性代數方法來尋找等式組的解的迭代求解技術。
0:電腦輔助IC設計和製造系統
1:自動平行編譯器系統
2:平行處理系統/多處理器系統
31:循序原始碼
11:詞法分析器/解析器
12:分析器
13:排程器
14:計算塊鏈模組
15:矩陣建置器
151:計算矩陣
152:傳輸矩陣
153:任務矩陣
16:最佳化器模組
17:程式碼產生器
2:平行處理系統/多處理器系統
32:自動平行化目標程式碼
5:IC佈局系統
51:積體電路佈局元素
511:電晶體
512:電阻器
513:電容器
514:IC佈局元件的互連
515:半導體
52:佈局網表產生器
521:佈局網表
5211:位置變數
5212:IC佈局上佈局元素邊的位置
53:平行管線
54:IC佈局
6:IC製造系統
Claims (14)
- 一種具有多處理管線(53)靜態排程的用於最佳化的多核心和/或多處理器積體電路(2)架構的設計和製造系統(0),上述多核心和/或多處理器積體電路(2)包括通過執行平行化處理之機器碼(32)同時處理針對資料的指令的複數個處理管線(53), 其中,平行處理之多核心和/或多處理器積體電路(2)對上述機器碼(32)的執行包括延遲時間(26)的發生,上述延遲時間由在處理單元(21)針對資料處理完上述機器碼(32)的特定指令塊之後發回資料與接收上述處理單元(21)執行上述機器碼(32)的連續指令塊所需的資料之間的上述處理單元(21) 的閒置時間給出, 其特徵在於,上述設計和製造系統(0)包括自動平行化之編譯器系統(1)和IC佈局系統(5),上述編譯器系統(1)包括用於將以程式語言編寫的程式碼(3)的循序原始碼(31)轉換為平行之上述機器碼(32)的裝置,上述機器碼(32)包括能夠由上述多核心和/或多處理器積體電路(2)的複數個上述處理單元(21)執行或控制上述處理單元(21)的操作的複數個指令,上述IC佈局系統(5)用於產生具有複數個積體電路佈局元素(51)的平行處理IC佈局,上述積體電路佈局元素(51)至少包括表示記憶體單元(22)的元素和表示上述處理單元(21)和/或上述處理管線(53)的元素, 其特徵在於,上述編譯器系統(1)包括解析器模組(11),上述解析器模組(11)用於將上述循序原始碼(31)轉換為具有能夠由上述處理單元(21)執行的基本指令流的上述機器碼(32),其中,用於將以程式語言編寫的上述程式碼(3)的上述循序原始碼(31)轉換為平行之上述機器碼(32)的裝置是上述解析器模組(11),上述基本指令能夠從有限的且特定於處理單元的基本指令集中選擇,並且上述基本指令僅包括用於複數個上述處理單元(21)的基本算術和邏輯運算(321/322)和/或基本控制和儲存操作(325), 其特徵在於,上述解析器模組(11)包括用於將上述基本指令的上述機器碼(32)劃分為複數個計算塊節點(333)的裝置,上述計算塊節點(333)的每一者由能夠由單個上述處理單元(21)處理的上述機器碼(32)的不可進一步分解的基本指令序列的最小可能分段組成,上述基本指令的最小可能分段的特徵在於由連續的讀寫指令構成的上述基本指令序列,上述基本指令序列無法由連續的上述讀寫指令之間的更小基本指令序列進一步分解,並且上述讀寫指令是接收上述處理單元(21)處理上述基本指令序列所需的資料並在上述基本指令序列進行處理之後傳回資料需要的, 其特徵在於,上述編譯器系統(1)包括矩陣建置器(15),上述矩陣建置器(15)用於從由上述機器碼(32)分割的計算鏈(34)產生矩陣(151,…,153),上述矩陣(151,…,153)包括計算矩陣和傳輸矩陣(151/152)以及任務矩陣(153),其中,上述計算矩陣(151)中的每一列包括計算塊節點(333),上述計算塊節點(333)能夠基於傳輸上述計算塊節點(333)處理所需的資料的讀寫指令的可執行性而同時處理,其中,上述傳輸矩陣(151/152)包括到上述計算塊節點(333)的每一者的傳輸和處理屬性,上述傳輸和處理屬性至少表示從一個上述計算塊節點(333)到連續的上述計算塊節點(333)的資料傳輸屬性,上述資料傳輸屬性至少包括被傳輸資料的資料大小以及資料傳輸的來源計算塊節點和目標計算塊節點的標識和/或上述處理單元(21)中的一者的處理特性, 其特徵在於,上述任務矩陣(153)的任務(56)由上述矩陣建置器(15)形成,其中,在上述計算塊節點(333)各自具有不同的關聯讀取的情況下,上述任務(56)通過以下方式形成:將上述計算矩陣(151)的列的上述計算塊節點(333)均勻地分為複數個對稱之上述處理單元(21)的數量,對於上述計算矩陣(151)的每列的上述處理單元(21)中的每一者,形成一個上述任務(56),並且基於預定義方案將剩餘的上述計算塊節點(333)分為上述任務(56)的至少一部分,其中,在上述計算塊節點(333)至少部分地傳輸了相同資料的讀取的情況下,上述任務(56)是通過在複數個上述處理單元(21)上均勻地或基本均勻地最小化讀取次數來形成,并且/或者,在上述計算塊節點(333)至少部分地傳輸了相同資料的讀取的情況下,如果超過預定義的偏移值,則通過在每個處理單元(21)上均勻地最小化整合處理時間來形成上述任務(56), 其特徵在於,上述編譯器系統(1)包括最佳化器模組(16),上述最佳化器模組(16)使用最小化整合所有發生的延遲時間(261)的合計發生之上述延遲時間(26) 的矩陣最佳化技術,其中,為了提供上述任務矩陣(153)內上述任務(56)的最佳化結構,上述最佳化器模組(16)建置來自上述計算和傳輸矩陣的行的不同組合,來自上述計算和傳輸矩陣的行的上述不同組合的每一者表示可能的上述機器碼(32)作為平行處理程式碼,平行處理程式碼提供其關於上述多核心和/或多處理器積體電路(2)的硬體的屬性,其中,上述任務矩陣(153)的每一列由一個或複數個上述任務形成上述計算鏈(34) 來創建上述計算塊節點(333)的有序流以由上述處理單元(21)中的一者執行,並且其中,上述最佳化器模組(16)最小化整合了所有發生的延遲時間的合計發生之上述延遲時間(26), 其特徵在於,上述編譯器系統(1)包括程式碼產生器(17),上述程式碼產生器(17)用於基於經最佳化的上述任務矩陣(153)給出的上述計算鏈(34),為具有最佳化的合計之上述延遲時間(26)的上述處理單元(21)產生平行之上述機器碼(32), 其特徵在於,上述IC佈局系統(5)包括網表產生器(52),上述網表產生器(52)用於產生由上述多核心和/或多處理器積體電路(2)的上述積體電路佈局元素(51)組成的佈局網表(521),上述積體電路佈局元素(51)包括上述積體電路(2)的電子元件,上述電子元件至少包括電晶體(511)、電阻器(512)、電容器(513)以及上述元件在一片半導體(515)上的互連(514), 其特徵在於,上述佈局網表(521)包括複數個平行管線(53),上述平行管線(53)的每一者包括輸入鎖存器(531)和處理電路(532),其中,上述輸入鎖存器(531)的每一者包括用於緩衝區或暫存器的上述積體電路佈局元素(51),上述處理電路(532)包括用於通過基本指令(322)的基本集合的集合處理關聯的輸入鎖存器(531)的資料的積體電路佈局元素(521), 其特徵在於,處理階段(534)由上述平行管線(53)中的一者進行的特定資料處理給出,上述處理階段(534)產生中間結果(5341),其中,指定之處理階段(534)的上述輸入鎖存器(531)和上述處理電路(532)連接到後面階段(534)的輸入鎖存器(531), 其特徵在於,時脈訊號(533)連接到上述輸入鎖存器(531)的每一者,其中,上述時脈訊號(533)包括用於產生時脈脈衝(5331)的上述積體電路佈局元素(521),其中,在上述時脈脈衝(5331)中的每一者,複數個平行之上述處理階段(534)中的每一者將上述中間結果(5341)傳輸到上述後面處理階段(534)的上述輸入鎖存器(531),並且其中,輸入資料通過上述平行管線(53),時脈脈衝(5331)中的每一者完成一個上述處理階段(534),直到通過完成所有上述處理階段(534)達到最終結果(5342)為止, 其特徵在於,上述平行管線(53)包括用於執行如下操作的裝置: (i)通過提供從作為EX/MEM暫存器的MEM階段到作為ID/EX階段暫存器的EX階段的資料轉發而進行轉發; (ii)通過使EX-MEM階段暫存器的結果可被上述平行管線(53)的上述EX階段存取來提供管線之間的結果交換而進行交換;以及 (iii)通過基於分支位址計算條件僅對依賴於一條管線的那些管線進行刷新來提供控制衝突而實現分支管線刷新;以及 其特徵在於,上述佈局網表(521)包括由上述網表產生器(52)產生並分配給複數個上述積體電路佈局元素(51)的複數個位置變數(5211),其中,上述位置變數(5211)表示上述積體電路佈局元素(5212)的邊或點的位置,並且其中,IC佈局(54)由上述網表產生器(52)根據產生的上述佈局網表(521)的上述位置變數(5211)的值產生。
- 如請求項1所述之具有多處理管線(53)靜態排程的用於最佳化的多核心和/或多處理器積體電路(2)架構的設計和製造系統(0),其特徵在於,添加附加緩衝暫存器而不是添加快取級別,其中,上述緩衝暫存器的大小針對上述平行管線(53)的速度和數量而被適配最佳化。
- 如請求項1或2所述之具有多處理管線(53)靜態排程的用於最佳化的多核心和/或多處理器積體電路(2)架構的設計和製造系統(0),其特徵在於,在一個階段的上述計算塊節點(333)的數量高於可用平行管線(53)的情況下,針對上述計算塊節點(333)的數量最佳化上述計算矩陣(151)。
- 如請求項1至2所述之具有多處理管線(53)靜態排程的用於最佳化的多核心和/或多處理器積體電路(2)架構的設計和製造系統(0),其特徵在於,上述平行管線(53)全部完全相同或基本完全相同,從而給出對稱的多核心和/或多處理器之上述IC佈局(54)。
- 如請求項1至2所述之具有多處理管線(53)靜態排程的用於最佳化的多核心和/或多處理器積體電路(2)架構的設計和製造系統(0),其特徵在於,上述位置變數由上述網表產生器(51)基於限制系統產生並分配給上述積體電路佈局元素,上述限制系統包括表示上述積體電路佈局元素的邊或點與製程要求之間的關係的限制,其中,上述IC佈局是根據適配的上述位置變數之上述值產生的。
- 如請求項5所述之具有多處理管線(53)靜態排程的用於最佳化的多核心和/或多處理器積體電路(2)架構的設計和製造系統(0),其特徵在於,上述平行管線(53)中的每一者具有相同的儲存架構和技術處理器特性。
- 如請求項6所述之具有多處理管線(53)靜態排程的用於最佳化的多核心和/或多處理器積體電路(2)架構的設計和製造系統(0),其特徵在於,上述技術處理器特性至少包括具有相同的處理器(2102)或核心(2103)效能,其中,每秒處理相等或基本相等的指令數量。
- 如請求項1至2所述之具有多處理管線(53)靜態排程的用於最佳化的多核心和/或多處理器積體電路(2)架構的設計和製造系統(0),其特徵在於,上述輸入鎖存器(531)的上述緩衝區或上述暫存器的大小根據提供同步IC佈局設計的塊中的指令中使用的資料節點來設置,其中,上述資料節點的大小由所用變數的資料類型定義。
- 如請求項8所述之具有多處理管線(53)靜態排程的用於最佳化的多核心和/或多處理器積體電路(2)架構的設計和製造系統(0),其特徵在於,上述所用變數的上述資料類型由指令集架構(ISA)定義,上述指令集架構(ISA)通過𝑆 𝑟𝑒𝑔= 𝑓(𝑆 𝑑𝑎𝑡𝑎 𝑛𝑜𝑑𝑒𝑠, 𝑛 𝑑𝑎𝑡𝑎 𝑛𝑜𝑑𝑒𝑠𝑖𝑛 𝐶𝐵, 𝐼𝑆𝐴) 將上述資料節點的數量𝑛 𝑑𝑎𝑡𝑎 𝑛𝑜𝑑𝑒𝑠、資料類型定義和指令數量𝐼𝑆𝐴與所需的暫存器大小 S reg 聯繫起來,並且根據𝑆 𝑑𝑎𝑡𝑎 𝑛𝑜𝑑𝑒𝑠∝ 𝑆 𝑑𝑎𝑡𝑎 𝑡𝑦𝑝𝑒𝑠= 𝑓(𝐼𝑆𝐴),上述資料節點的大小是上述資料類型的函數。
- 如請求項8所述之具有多處理管線(53)靜態排程的用於最佳化的多核心和/或多處理器積體電路(2)架構的設計和製造系統(0),其特徵在於,線寬被設置為上述資料類型和傳輸資料節點的數量的函數,上述傳輸資料節點的數量提供每次傳輸的位元寬度,上述線寬定義用於上述IC佈局的線路的大小。
- 如請求項1至2所述之具有多處理管線(53)靜態排程的用於最佳化的多核心和/或多處理器積體電路(2)架構的設計和製造系統(0),其特徵在於,指令鏈是使用RTL級上的Verilog獲得的。
- 如請求項11所述之具有多處理管線(53)靜態排程的用於最佳化的多核心和/或多處理器積體電路(2)架構的設計和製造系統(0),其特徵在於,上述IC佈局被提供為非同步設計,其中,上述計算塊(CB)包括用於形成上述非同步設計的RTL程式碼以計算上述計算塊(CB)中包括的指令的所有資訊。
- 如請求項12所述之具有多處理管線(53)靜態排程的用於最佳化的多核心和/或多處理器積體電路(2)架構的設計和製造系統(0),其特徵在於,上述IC佈局被提供為同步設計,其中,給出傳輸的圖中的邊包括每次組合計算之間的暫存器的大小。
- 一種具有多處理管線(53)靜態排程的用於最佳化的多核心和/或多處理器積體電路(2)架構的設計和製造方法(0)上述多核心和/或多處理器積體電路(2)具有通過執行平行化處理之機器碼(32)同時處理針對資料的指令的複數個處理單元(21)和/或處理管線(53), 其中,上述機器碼(32)由平行處理之多核心和/或多處理器積體電路(2)執行,包括延遲時間(26)的發生,上述延遲時間由處理單元(21)在處理單元(21)針對資料處理完上述機器碼(32)的特定指令塊之後發回資料與接收上述處理單元(21)執行上述機器碼(32)的連續指令塊所需的資料之間的上述處理單元(21) 的閒置時間給出, 其特徵在於,自動並行化和IC佈局系統(0)包括自動平行化之編譯器系統(1)和IC佈局系統(5),上述編譯器系統(1)包括用於將以程式語言編寫的程式碼(3)的循序原始碼(31)轉換為平行之上述機器碼(32)的裝置,上述機器碼(32)包括能夠由上述多核心和/或多處理器積體電路(2)的上述處理單元(21)執行或控制上述處理單元(21)的操作的複數個指令,上述IC佈局系統(5)用於產生具有複數個積體電路佈局元素(51)的平行處理IC佈局,上述積體電路佈局元素(51)至少包括表示記憶體單元(22)的元素和表示上述處理單元(21)和/或上述處理管線的元素, 其特徵在於,上述編譯器系統(1)包括解析器模組(11),上述解析器模組(11)用於將上述循序原始碼(31)轉換為具有能夠由處理單元(21)執行的基本指令流的上述機器碼(32),其中,用於將以程式語言編寫的上述程式碼(3)的上述循序原始碼(31)轉換為平行之上述機器碼(32)的裝置是上述解析器模組(11),上述基本指令能夠從有限的且特定於處理單元的基本指令集中選擇,並且上述基本指令僅包括用於複數個上述處理單元(21)的基本算術和邏輯運算(321/322)和/或基本控制和儲存操作(325), 其特徵在於,上述基本指令的機器碼(32)由上述解析器模組(11)劃分為複數個計算塊節點(333),上述計算塊節點(333)的每一者由能夠由單個上述處理單元(21)處理的機器碼(32)的不可進一步分解的基本指令序列的最小可能分段組成,上述基本指令的最小可能分段的特徵在於由連續的讀寫指令構成的基本指令序列,上述基本指令序列無法由連續的上述讀寫指令之間的更小基本指令序列進一步分解,並且上述讀寫指令是接收上述處理單元(21)處理上述基本指令序列所需的資料並在基本指令序列進行處理之後傳回資料需要的, 其特徵在於,矩陣(151,…,153)由矩陣建置器(15)從由上述機器碼(32)分割的計算鏈(34)產生,上述矩陣(151,…,153)包括計算矩陣和傳輸矩陣(151/152)以及任務矩陣(153),其中,上述計算矩陣(151)中的每一列包括計算塊節點(333),上述計算塊節點(333)能夠基於傳輸上述計算塊節點(333)處理所需的資料的讀寫指令的可執行性而同時處理,其中,上述傳輸矩陣包括到每個計算塊節點(333)的傳輸和處理屬性,上述傳輸和處理屬性至少表示從一個上述計算塊節點到連續的上述計算塊節點(333)的資料傳輸屬性,上述資料傳輸屬性至少包括被傳輸資料的資料大小以及資料傳輸的來源計算塊節點(333)和目標計算塊節點(333)的標識和/或上述處理單元(21)中的一者的處理特性, 其特徵在於,上述任務矩陣(153)的任務(56)由矩陣建置器(15)形成,其中,在計算塊節點(333)各自具有不同的關聯讀取的情況下,上述任務(56)通過以下方式形成:將上述計算矩陣(151)的列的計算塊節點(333)均勻地分為複數個對稱處理單元(21)的數量,對於上述計算矩陣(151)的每列的上述處理單元(21)中的每一者,形成一個上述任務(56),並且基於預定義方案將剩餘的上述計算塊節點(333)分為上述任務(56)的至少一部分,其中,在上述計算塊節點(333)至少部分地傳輸了相同資料的讀取的情況下,上述任務(56)是通過在複數個上述處理單元(21)上均勻地或基本均勻地最小化讀取次數來形成,并且/或者, 在上述計算塊節點(333)至少部分地傳輸了相同資料的讀取的情況下,如果超過預定義的偏移值,則通過在每個處理單元(21)上均勻地最小化整合處理時間來形成上述任務(56), 其特徵在於,合計發生之上述延遲時間(26)由最佳化器模組(16)使用通過整合了所有發生的延遲時間(261)進行最小化的矩陣最佳化技術進行最小化,其中,為了提供上述任務矩陣(153)內上述任務(56)的最佳化結構,上述最佳化器模組(16)建置來自上述計算和傳輸矩陣的行的不同組合,來自上述計算和傳輸矩陣的行的上述不同組合的每一者表示可能的機器碼(32)作為平行處理程式碼,平行處理程式碼提供其關於多核心和/或多處理器積體電路(2)的硬體的屬性,其中,上述任務矩陣(153)的每一列由一個或複數個上述任務形成上述計算鏈(34)來創建上述計算塊節點(333)的有序流以由上述處理單元(21)中的一者執行,並且其中,上述最佳化器模組(16)最小化整合了所有發生的延遲時間的合計發生之上述延遲時間(26), 其特徵在於,上述平行機器碼(32)由程式碼產生器(17)基於經最佳化的是上述任務矩陣(153)給出的上述計算鏈(34),為具有最佳化的合計之上述延遲時間(26)的上述處理單元(21)產生, 其特徵在於,由積體電路(2)的複數個積體電路佈局元素(51)組成的佈局網表(521)由網表產生器(52)產生,上述積體電路佈局元素(51)包括上述多核心和/或多處理器積體電路(2)的電子元件,上述電子元件至少包括電晶體(521)、電阻器(522)、電容器(523)以及上述元件在一片半導體(555)上的互連(554), 其特徵在於,上述佈局網表(521)包括複數個平行管線(53),每個管線(53)包括輸入鎖存器(531)和處理電路(532),其中,上述輸入鎖存器(531)的每一者包括用於緩衝區或暫存器的上述積體電路佈局元素(51),上述處理電路(532)包括用於通過基本指令(322)的基本集合處理關聯的輸入鎖存器(531)的資料的積體電路佈局元素(51), 其特徵在於,處理階段(534)由上述平行管線(53)中的一者進行的特定資料處理給出,上述處理階段(534)產生中間結果,其中,指定階段(534)的上述輸入鎖存器(531)和上述處理電路(532)連接到後面階段(534)的輸入鎖存器(531), 其特徵在於,時脈訊號(533)連接到每個輸入鎖存器,其中,時脈訊號(533)包括用於產生時脈脈衝(5331)的上述積體電路佈局元素(51),其中,在上述時脈脈衝(5331)中的每一者,複數個平行之上述處理階段(534)中的每一者將中間結果(5341)傳輸到後面階段(534)的上述輸入鎖存器(531),並且其中,輸入資料通過上述平行管線(53),時脈脈衝(5331)中的每一者完成一個上述處理階段(534),直到產生最終結果(5341)為止, 其特徵在於,上述平行管線(53)包括用於執行如下操作的裝置: (i)通過提供從作為EX/MEM暫存器的MEM階段到作為ID/EX階段暫存器的EX階段的資料轉發而進行轉發; (ii)通過使EX-MEM階段暫存器的結果可被上述平行管線(53)的EX階段存取來提供管線之間的結果交換而進行交換;以及 (iii)通過基於分支位址計算條件僅對依賴於一條管線的那些管線進行刷新來提供控制衝突而實現分支管線刷新;以及 其特徵在於,上述佈局網表(521)包括由上述網表產生器(52)產生並分配給複數個上述積體電路佈局元素(51)的複數個位置變數(5211),其中,上述位置變數(5211)表示上述積體電路佈局元素(5212)的邊或點的位置,並且其中,IC佈局(54)由上述網表產生器(52)根據產生的上述佈局網表(521)的上述位置變數(5211)的值產生。
Applications Claiming Priority (2)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| PCT/EP2023/060677 WO2024223027A1 (en) | 2023-04-24 | 2023-04-24 | High-performance code parallelization compiler with loop-level parallelization |
| WOPCT/EP2023/060677 | 2023-04-24 |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| TW202501249A TW202501249A (zh) | 2025-01-01 |
| TWI888110B true TWI888110B (zh) | 2025-06-21 |
Family
ID=86331087
Family Applications (2)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| TW113115315A TW202507503A (zh) | 2023-04-24 | 2024-04-24 | 電腦輔助積體電路設計和製造系統 |
| TW113115316A TWI888110B (zh) | 2023-04-24 | 2024-04-24 | 具有多處理管線靜態排程的用於最佳化的多核心和/或多處理器積體電路架構的設計和製造系統和方法 |
Family Applications Before (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| TW113115315A TW202507503A (zh) | 2023-04-24 | 2024-04-24 | 電腦輔助積體電路設計和製造系統 |
Country Status (6)
| Country | Link |
|---|---|
| KR (3) | KR20260003060A (zh) |
| CN (2) | CN121399576A (zh) |
| AU (3) | AU2023445677A1 (zh) |
| IL (3) | IL323826A (zh) |
| TW (2) | TW202507503A (zh) |
| WO (3) | WO2024223027A1 (zh) |
Families Citing this family (10)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN116066754B (zh) * | 2023-01-11 | 2025-11-07 | 中国石油大学(北京) | 油气管道信息物理安全智能化风险辨识方法、装置及设备 |
| CN119211142B (zh) * | 2024-11-27 | 2025-02-14 | 新瑞数城技术有限公司 | 一种基于大数据的运维平台数据采集系统 |
| CN120104134B (zh) * | 2025-02-05 | 2025-11-25 | 中国科学院计算技术研究所 | 一种基于数据流分析的cuda代码生成方法 |
| CN120123058B (zh) * | 2025-02-21 | 2025-12-16 | 北京邮电大学 | 一种动静结合式并行计算方法、系统及存储介质 |
| CN119783743B (zh) * | 2025-03-10 | 2025-05-13 | 电子科技大学(深圳)高等研究院 | 一种基于脉动阵列的多任务神经网络处理器 |
| CN120029740B (zh) * | 2025-04-22 | 2025-07-04 | 山东浪潮科学研究院有限公司 | 一种异构多核处理器的任务调度方法及装置 |
| CN120066421B (zh) * | 2025-04-29 | 2025-07-22 | 浪潮电子信息产业股份有限公司 | 内存系统及数据处理方法、设备、存储介质、程序产品 |
| CN120278291B (zh) * | 2025-06-10 | 2025-09-26 | 浙江大学 | 一种基于分支预测的动态量子反馈系统 |
| CN120745517B (zh) * | 2025-08-15 | 2025-11-25 | 上海盈方微电子有限公司 | 一种基于逻辑深度拆分检查时序路径的方法及系统 |
| CN120872776B (zh) * | 2025-09-28 | 2025-12-02 | 统信软件技术有限公司 | 模型瓶颈确定方法、装置、电子设备、存储介质及程序 |
Citations (4)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US20080263530A1 (en) * | 2007-03-26 | 2008-10-23 | Interuniversitair Microelektronica Centrum Vzw (Imec) | Method and system for automated code conversion |
| US20160011857A1 (en) * | 2014-01-21 | 2016-01-14 | Nvidia Corporation | Dynamic Compiler Parallelism Techniques |
| US20160291942A1 (en) * | 2012-10-20 | 2016-10-06 | Luke Hutchison | Systems and methods for parallelization of program code, interactive data visualization, and graphically-augmented code editing |
| CN111857732A (zh) * | 2020-07-31 | 2020-10-30 | 中国科学技术大学 | 一种基于标记的串行程序并行化方法 |
Family Cites Families (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US6311316B1 (en) * | 1998-12-14 | 2001-10-30 | Clear Logic, Inc. | Designing integrated circuit gate arrays using programmable logic device bitstreams |
-
2023
- 2023-04-24 KR KR1020257039109A patent/KR20260003060A/ko active Pending
- 2023-04-24 WO PCT/EP2023/060677 patent/WO2024223027A1/en active Pending
- 2023-04-24 AU AU2023445677A patent/AU2023445677A1/en active Pending
-
2024
- 2024-04-24 TW TW113115315A patent/TW202507503A/zh unknown
- 2024-04-24 CN CN202480028180.6A patent/CN121399576A/zh active Pending
- 2024-04-24 AU AU2024262604A patent/AU2024262604A1/en active Pending
- 2024-04-24 WO PCT/EP2024/061258 patent/WO2024223668A1/en active Pending
- 2024-04-24 TW TW113115316A patent/TWI888110B/zh active
- 2024-04-24 KR KR1020257039127A patent/KR20250172969A/ko active Pending
- 2024-04-24 WO PCT/EP2024/061271 patent/WO2024223676A1/en active Pending
- 2024-04-24 AU AU2024262296A patent/AU2024262296A1/en active Pending
- 2024-04-24 KR KR1020257039135A patent/KR20250172970A/ko active Pending
- 2024-04-24 CN CN202480028216.0A patent/CN121399577A/zh active Pending
-
2025
- 2025-10-08 IL IL323826A patent/IL323826A/en unknown
- 2025-10-08 IL IL323827A patent/IL323827A/en unknown
- 2025-10-08 IL IL323829A patent/IL323829A/en unknown
Patent Citations (4)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US20080263530A1 (en) * | 2007-03-26 | 2008-10-23 | Interuniversitair Microelektronica Centrum Vzw (Imec) | Method and system for automated code conversion |
| US20160291942A1 (en) * | 2012-10-20 | 2016-10-06 | Luke Hutchison | Systems and methods for parallelization of program code, interactive data visualization, and graphically-augmented code editing |
| US20160011857A1 (en) * | 2014-01-21 | 2016-01-14 | Nvidia Corporation | Dynamic Compiler Parallelism Techniques |
| CN111857732A (zh) * | 2020-07-31 | 2020-10-30 | 中国科学技术大学 | 一种基于标记的串行程序并行化方法 |
Also Published As
| Publication number | Publication date |
|---|---|
| WO2024223676A1 (en) | 2024-10-31 |
| WO2024223668A1 (en) | 2024-10-31 |
| KR20260003060A (ko) | 2026-01-06 |
| CN121399577A (zh) | 2026-01-23 |
| CN121399576A (zh) | 2026-01-23 |
| AU2024262296A1 (en) | 2025-10-16 |
| IL323827A (en) | 2025-12-01 |
| IL323829A (en) | 2025-12-01 |
| TW202507503A (zh) | 2025-02-16 |
| TW202501249A (zh) | 2025-01-01 |
| AU2023445677A1 (en) | 2025-10-16 |
| KR20250172969A (ko) | 2025-12-09 |
| KR20250172970A (ko) | 2025-12-09 |
| AU2024262604A1 (en) | 2025-10-16 |
| WO2024223027A1 (en) | 2024-10-31 |
| IL323826A (en) | 2025-12-01 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| TWI888110B (zh) | 具有多處理管線靜態排程的用於最佳化的多核心和/或多處理器積體電路架構的設計和製造系統和方法 | |
| Krommydas et al. | Opendwarfs: Characterization of dwarf-based benchmarks on fixed and reconfigurable architectures | |
| EP4291980B1 (en) | System for auto-parallelization of processing codes for multi-processor systems with optimized latency, and method thereof | |
| Qadri et al. | Multicore Technology: Architecture, Reconfiguration, and Modeling | |
| Shah et al. | Efficient Execution of Irregular Dataflow Graphs | |
| Antonov et al. | Strategies of Computational Process Synthesis—A System-Level Model of HW/SW (Micro) Architectural Mechanisms | |
| Wei et al. | Compilation system | |
| CN121464428A (zh) | 具有循环级并行化的高性能代码并行化编译器 | |
| Sotiriou-Xanthopoulos et al. | OpenCL-based virtual prototyping and simulation of many-accelerator architectures | |
| Helal | Automated Runtime Analysis and Adaptation for Scalable Heterogeneous Computing | |
| CHEN | Compiling OpenMP task graphs to parallel hardware: a static analysis and synthesis approach | |
| Lau | Enabling Heterogeneous Computing for Software Developers | |
| Dossis | Formal ESL Synthesis for Control‐Intensive Applications | |
| KHALILI MAYBODI | A Data-Flow Threads Co-processor for MPSoC FPGA Clusters | |
| Nanjundappa | Accelerating Hardware Simulation on Multi-cores | |
| Ye | Optimization of Simplified Shallow Water Opencl Application on FPGA | |
| Shiddibhavi | Empowering FPGAS for massively parallel applications | |
| Cheng | Accelerator Synthesis and Integration for CPU+ FPGA Systems | |
| Cong et al. | Task‐Level Data Model for Hardware Synthesis Based on Concurrent Collections | |
| Liu | Parametric polyhedral optimisation for high-level synthesis | |
| Dossis | Formal Methods in High-Level and System Synthesis | |
| Murarasu | TECHNISCHE UNIVERSITAT MUNCHEN | |
| Zhou et al. | Automatically Tuning Task-Based Programs for Multicore Processors | |
| Borkar | Traileka Glacier X-Stack. Final Scientific/Technical Report | |
| Beach | Application acceleration: An investigation of automatic porting methods for application accelerators |