180 likes | 327 Views
Couillard : 透過 粗尺度資料流編譯做平行化編程. 指導教授 :周 哲 民 學 生:黃 喬 楷 CAD Group Department of Electrical Engineering National Cheng Kung University Tainan, Taiwan, R.O.C. Outline. Introduction TALM & Trebuchet Compilation Front-end Back-end Auxiliary Functions and Command Line Arguments
E N D
Couillard:透過粗尺度資料流編譯做平行化編程 指導教授 :周 哲 民 學 生:黃 喬 楷 CAD Group Department of Electrical Engineering National Cheng Kung University Tainan, Taiwan, R.O.C
Outline • Introduction • TALM & Trebuchet • Compilation • Front-end • Back-end • Auxiliary Functions and Command Line Arguments • Illustrative Examples • Experiment and Results • Conclusion
Introduction(1/3) • 資料流編程提供了一個自然的方法去做平行化,當指令一執行其輸入運算元就立即有效。 • 實際上在動態資料流中,我們甚至可以從多次重覆同時運行在迴圈中得到多個獨立指令,在迴圈部分可能比別人跑得更快並到達下一次重複,因此,描述資料流的控制是複雜的。 • 使用TALM模型去平行化程式,程序員將變成超級指令部分的代碼區塊做標記,並描述它們的相依性,並根據他們的資料相依性在圖中(即資料流圖)做簡單的指令連接。通過這種方法,從資料流中自然地執行平行化。 • TALM是一個旨在利用多執行緒編程資料流優勢的執行模型。 • TALM的實用與否取決於程序員是否可以將超級指令指定連接在一起,包括描述使用資料流指令控制的複雜任務。
Introduction(2/3) • TALM的主要優點是提供了一種可以利用資料流的粗尺度平行化模型。這也是一個非常有彈性的模型,若主要的資料流指令為可用的,允許以資料流的方式做完全編譯控制。 • 這給了程序員去選擇從粗糙到細尺度的自由執行策略。 • Trebuchet系統為TALM的第一個實施,已開發如一個混合Von Neumann /資料流的執行系統,在共用記憶體平台中給基於執行緒的架構。Trebuchet模擬如一個資料流機器同時支援簡單指令與超級指令。 • 超級指令被編譯如獨立的功能由運行環境呼叫。 • 初步結果顯示平行化機器與使用OpenMP的平行化應用相比,無論是在基本的性能或加速都具良好競爭力。 • 在實驗過程中,應用需要更複雜的技術,此時使用TALM成為明顯的主要優點 • 如軟體的管線化(Pipelining)或猜測執行
Introduction(3/3) • 我們提出Couillard(一個C編譯器的設計)去編譯TALM註釋C程式到一個資料流圖,包括程式使用動態資料流控制的描述。 • Couillard設計使程序員可以忽略資料流編程的細節,程序員所要做的便是將超級指令定義和其相依性代碼進行註釋。 • 主要有兩個貢獻: • 我們定義TALM的語言如ANSI C的擴展,並提出了Couillard編譯器的全面實施,其產生資料流圖和超級指令代碼給TALM。 • 我們透過兩個PARSEC的benchmarks評估了Couillard的表現。 • 我們證明了Trebuchet和Couillard可探索複雜的平行化編程技術,如非線性的軟體管線化和隱藏I / O延遲。與現行的平行化編程模型相比,顯示,我們的做法與最先進的技術相比不只具競爭力,甚至可以達到更好的加速,並允許人們很容易地利用設計空間做複雜的平行化程式。
TALM&Trebuchet(1/3) • TALM允許應用開發人員在當前Von Neumann的架構中去利用可用的資料流模型,以更富彈性的方式去探討TLP。 • TALM的ISA將應用以資料流圖的形式表示,並可以平行化運行。 • TALM的主要貢獻是它使程序員可以引入用戶定義的指令,即所謂的超級指令。TALM與程序員做一個假設協議,不管他或她保證如果所有的輸入都是可用的,超級指令便可啟動執行,他或她保證盡快使輸出參數可用。
TALM&Trebuchet(2/3) • TALM已經多核心執行如一個混合Von Neumann/資料流的執行系統:Trebuchet。 • Trebuchet實際上是一個資料流的虛擬機,具有一組資料流處理單元(PE)連接在一個虛擬網絡。 • 在主機中(Von Neumann),每個PE聯繫一個執行緒。當一個程式被執行在Trebuchet上,指令被加載到各個PE並根據資料流模型發射。獨立的指令會平行運行,如果它們被映射到不同的PE上,並會有在主機上可用的核心去同時運行PE執行緒。
Compilation • 我們提出Couillard,一個C編譯器做資料流類型執行。程序員將變成超級指令的區塊做註解,並註解變化輸入輸出相對應的程式變化。Couillard接著產生C代碼相對應於每下個被編譯的超級指令,如一個共用物件到目標架構,並由Trebuchet加載。 • Couillard會產生TALM組合代碼去連接全部由使用者指定的超級指令。 • 此組合代碼代表了全部資料流圖的程式,並根據資料流規則,由Trebuchet引導執行。
Front-end • Couillard的前端(front-end)使用PLY和ANSI-C,但Couillard並不需要去支援全部的ANSI-C語法。 • 使用ANSI-C語法的子集延伸去支援資料流的超級指令和其相關指令。 • 我們假設超級指令佔了一個應用的大部分時間,如常規指令大都被使用去描述超級指令間資料與控制的關係。 • 超級指令碼會被常規的C編譯器作編譯,指令也趨於簡化。 • 我們改變了平行化超級指令中必要的不同聲明和存取的句法。 • 編譯器前端產生一個輔助語法樹”AST”(Auxiliary Syntax Tree)會處理如一個資料流圖表示。
Back-end • Couillard的後端(back-end)會產生TALM組合代碼給TALM、超級指令的C代碼(被編譯給動態鏈結庫)、程式圖……等。 • 當產生了程式的AST後,Couillard會產生其相對應的資料流圖; • 從此資料流圖中,會產生3個輸出檔: • .dot 檔 :描述了在Graphviz表示法中的圖。 • .fl檔 : 描述使用了TALM的ISA的圖,此檔為Trebuchet的組譯器的輸入產生.flb二進制檔加載到Trebuchet的虛擬機器中。 • .lib檔 : 將多個超級指令描述如多個功能,在C碼中會被編譯如動態鏈結庫。
Auxiliary Functions and Command Line Arguments • 在我們的系統中,應用可以用Trebuchet虛擬機器執行; • 命令線參數變量不能被宣布在應用代碼中,必須透過Trebuchet的命令線。因此,Trebuche分別在tre_superargv和treb_superargc儲存了一個命令線參數向量和參數數目。 • 然後當產生.lib檔,Couillard聲明這些變數如extern,意思為程序員可以用超級指令主體存取這些參數。
Illustrative Examples 圖2.如何使用TALM去隱藏I/O延遲的例子。
Illustrative Examples(2/4) • 圖2為在平行應用中如何使用TALM高階語言去隱藏I/O延遲的例子。 • 在此例子中,我們假設有300個元素需要從檔案中被讀取,處理並把結果記錄在一個輸出檔。 • 在A格中,超級指令所做了不同動作: • 初始化變量與檔案(FILE)指標器 • 讀取 • 處理 • 寫入 • 關閉檔案 • 在B格中,顯示了由Couillard產生的資料流圖。 • 這個構造能讓每個處理任務的執行在相對應的讀取動作結束後立即開始;也允許每個寫入每個處理任務i的結果在不需要等待任務x的情況下(當x<i)去完成。
Illustrative Examples 圖3.用TALM作非線性平行化管線化例子。
Illustrative Examples(4/4) • 圖3提供了一個如何用TALM高階語言去描述一個非線性的平行化管線化的例子。其主碼可分為三部分處理(Proc-1~3) • Proc-2被分為兩個部分Proc-2A、Proc-2B被條件式處理; • 在A格中顯示,TALM的註釋同時對應兩個執行緒在資料流圖中。 • 在B格中顯示了由Couillard編譯器產生的兩個執行緒。
Experiment and Results 圖4.執行Blackscholes結果 圖4.執行Ferret結果
Conclusion • 我們實現了一個Couillard編譯器去編譯一個延伸的C語言到TALM碼中。 • TALM已經實現如一個混合Von Neumann /資料流的執行系統(如: Trebuchet)。我們觀察到TALM的有用性在很大程度上取決於程序員如何指定和連接超級指令。 • 實驗結果顯示與現行最先進的平行化應用相比(Pthreads、TBB、OpenMP)都極具競爭力,甚至有較好的效能。