專利名稱:面向串行程序代碼量大的領域的半自動并行化方法
技術領域:
本發(fā)明涉及的是一種計算機技術領域的方法,具體而言,是一種面向串行程序代碼量大的領域的半自動并行化方法。
背景技術:
計算機技術和通信技術的快速發(fā)展,出現了集群技術,集群是由一組通過高速網絡互聯的計算結點,這些計算結點協同工作以提供單一系統(tǒng)映像的計算資源。與硬件技術迅速發(fā)展相比,并行編程技術的發(fā)展卻是停止不前。首先,并行編程比串行編程復雜度高;其次,并行編程較之于串行編程缺乏軟件支持;最后,并行編程的發(fā)展時間短,目前還沒有足夠的技術積累。盡管如此,并行編程技術也有許多發(fā)展,其中在并行編程模型領域逐步形成兩個研究方向程序自動并行化模型、程序顯式并行化模型。自動并行化方法即是對順序程序實行自動并行化,由編譯器對順序程序的源代碼進行相關性分析,然后使用一組程序變換技術將串行代碼轉換成并行代碼。并行化串行代碼的關鍵之一是相關性分析,由它識別代碼中的數據相關和控制相關。自動并行化方法目前尚未達到通用與高效的程度,使用這種方法獲得的并行程序效率通常比較低,并且有相當比例的程序尚無法進行并行化處理。理論研究表明不論在編譯期間還是在運行期間,都不存在能開發(fā)串行程序中所有潛在并行性的自動化技術。顯式并行化方法是由程序員使用特定的語言結構、編譯器命令、或庫函數在程序中對并行性加以顯式說明。其中主要的顯式并行編程模型有數據并行、消息傳遞、和共享變量等。顯式并行化方法的缺點是顯式并行程序的開發(fā),要求用戶必須掌握大量的并行算法范例、并行編程語言等。缺乏統(tǒng)一的編程接口,使得并行程序難以在不同平臺間進行移植。
經對現有技術的文獻檢索發(fā)現,S.Mitra等在《Proceedings of the 7thInternational Conference on High Performance Computing》(第七屆國際高性能計算大會會議集)(2000年第1970卷141頁至148頁)上發(fā)表的“ParAgentAdomain-specific semi-automatic parallelization tool”(ParAgent一種特定領域的半自動并行化工具),該文中提出針對有限差分法、有限元法和邊界元法等領域的應用進行半自動并行化的方法,具體方法為將串行的Fortran-77源代碼轉換為嵌入有通信庫原語的并行程序,針對循環(huán)操作提高其并行性)其不足在于該方法的程序結構性較差,人工參與過多,自動并行化率較低,并且只針對Fortran-77這種較老的程序語言。
檢索中還發(fā)現,中國專利名稱“用戶指導的程序半自動并行化方法”,專利號200510026587.4。雖然該方法可以適用較多簡單領域、將基于面向對象串行Java代碼轉換成并行程序,然而,對于實際情況下比較復雜的領域(這些領域里串行程序代碼量比較大,同時代碼以面向過程的C/Fortran代碼占大多數的,比如CFD,也就是計算流體力學),此方法顯得無能為力。
發(fā)明內容
本發(fā)明的目的在于針對現有技術的不足,提供一種面向串行程序代碼量大的領域的半自動并行化方法。本發(fā)明結合了自動并行化方法與顯式并行化方法的優(yōu)點,避免了它們的缺陷,通過用戶交互引導并行化,使得產生的并行程序效率可以得到必要的保證。本發(fā)明根據CFD領域并行計算程序的特征,提取出相應的五種類型的并行程序模板,在模板中采用tag標識并行程序的特征部分,通過用戶交互界面,實現串行程序向并行程序的源到源轉換。
本發(fā)明是通過以下技術方案實現的,本發(fā)明具體步驟如下1.創(chuàng)建標準CFD串行程序所謂標準,是指用戶必須在串行程序流程上嚴格按照五種并行模版所對應的串行程序框架編寫串行程序。
2.分析并行化并非所有的串行程序都可以并行化。在可并行化的串行程序中也并非所有計算部分都可以并行化。所以,首先要分析串行程序,以及其所包含的各個計算任務,歸納出串行程序流程,以及各個計算任務的主要特征。串行程序的標準流程是由該程序所針對問題的領域決定的。其次,針對各個計算任務,抽象出計算框架。最后,用戶挑選最耗時的計算任務所對應的框架,看這個框架適合于哪種并行范例,由用戶指導將該串行程序映射到該并行范例所對應的模版上去。所謂并行范例,是對經典的并行算法的抽象,能夠涵蓋高性能計算領域的并行應用。經典并行算法范例包括階段并行、分而治之、流水線、主-從結構、工作池式等。所謂模版,是對CFD領域的并行程序進行總結歸納出的,對應五種范例的并行程序架構。
3.創(chuàng)建元計算任務元計算任務,簡稱元任務,是指與并行通信無關,且其自身內部不能并行執(zhí)行的計算任務,是構成并行程序的基本元素,元任務之間的數據相關性是數據輸入和輸出等,無相關性的多個元任務可以并行執(zhí)行。元任務可單獨進行調試和測試。
4.導入串行程序指定需要并行的串行工程項目。
5.導入并行模版指定串行程序所定應的模版。
6.交互指導并行化通過交互向導過程來完成的,交互向導是一個交互圖形界面,通過該界面引導用戶完成相關的并行化工作。具體還包括如下步驟(1)創(chuàng)建轉換工程。該工程將包括串行程序,將要生成的并行程序,并行程序的目標可執(zhí)行程序,以及模版代碼等。
(2)選擇并行范例。根據步驟2中分析抽象出的問題框架,確定合適的并行范例以及并行模版。
(3)并行代碼的生成。根據串行程序流程,把相應功能的代碼插入到模版所對應的標簽tag處。
(4)編輯并行代碼??梢栽谵D換后得到并行代碼上繼續(xù)直接修改,最終生成合時的并行程序代碼。
(5)生成可執(zhí)行并行程序。如果上述過程沒有問題,可以最終生成可執(zhí)行并行程序。
本發(fā)明通過以上的步驟,可以創(chuàng)建一個以階段并行、分而治之、流水線、主-從結構、工作池等五種范例的并行代碼,同時屏蔽底層并行編程的復雜性。與現有技術相比,主要優(yōu)點在于針對CFD領域的并行模版,基本覆蓋該領域所有串行程序所對應的并行程序,便于串行程序開發(fā)人員直接使用;其次,采用元任務對實際可并行計算的計算模塊進行封裝;然后,不需要用戶對并行知識有太多了解。
本發(fā)明比大多數全自動方法所得最終并行程序效果好,效率高。同時,由于模版的幫助,又克服了大多數顯示并行的缺點,不需要用戶太多的專業(yè)并行知識,或者編寫大量的令人頭痛的并行代碼。此外,本發(fā)明的模版是開放性的,用戶可以根據自己的需求,增加標簽,改變標簽的位置,減少標簽,改變標簽名,從而使用自己訂制的符合特定應用的模版。與現有技術相比,本發(fā)明解決了CFD領域的串行程序并行化的問題。同時,在模版方面,本發(fā)明由于采用了開放性的原則,使得用戶可以更加自由地根據應用場景改變模版,這一點也是現有技術中所不具備的。
圖1為本發(fā)明原理框架示意2為實施例中相關串行代碼示意3為實施例中相關并行代碼生成示意4為實施例中相關標簽示意圖具體實施方式
以下結合附圖對本發(fā)明實施例作出描述如圖1所示,本發(fā)明原理框架示意圖。
1串行元任務的實現串行元任務在邏輯上是僅與業(yè)務邏輯相關的,元任務只能由用戶生成,并且不涉及并行語義。擴展后的元任務可以涉及并行語義。串行程序中可能存在多個元任務或擴展元任務,本發(fā)明要求用戶對計算量最大的元任務進行并行化。而元任務的擴展程度決定了并行化的粒度。元任務由用戶在串行程序中選出,插入到模版中的<metatask>...</metatask>處。各個計算結點的元任務代碼相同,只不過輸入輸出不同。
2范例框架實現2.1范例框架通過模板代碼加以實現在編寫代碼過程中應用程序代碼符合一定的結構、規(guī)則,將這些規(guī)則抽象出來以形成一種能夠覆蓋用戶應用的程序代碼框架,稱此程序代碼框架為模板代碼。
而針對并行程序所抽象出來的模版就是所謂的并行模版。
模板代碼的主要特點有1)抽象的架構,它是用來描述一個程序的架構,其自身要符合一定的預定義規(guī)范。2)不可編譯性,它是不能在實際機器上直接編譯、運行的程序代碼,必須經過轉換后才能成為可編譯、運行的具體代碼。3)廣涵性,即它是具有一定的代表性,能夠涵蓋某類具體應用,為解決這類應用提供了框架。
并行模版有附加的特性,即通信語義。它雖然不體現任何業(yè)務邏輯,但是不同的并行模版體現出不同的并行語義,或者說通信語義。
2.2模板代碼實現首先必須編寫好模板代碼,然后將這些模板代碼加入到系統(tǒng)中,如圖1。這樣,這些模板才能被利用。
實現一個完整而良好的且符合要求的模板代碼,需要盡可能多的去獲取應用需求,分析這些需求的實現,可將程序分解為業(yè)務邏輯相關、業(yè)務邏輯無關。業(yè)務邏輯無關是指,在某類應用程序群中,這些程序具有相同程序結構、或者代碼,即在不同的應用程序中這些部分是相同的。為增強模板的通用性,需要盡可能地抽象出這些通用的不變部分。業(yè)務邏輯相關是指,在某類應用程序群中,程序根據具體情況而有不同的程序結構與代碼,根據特定情況需要改變的部分。業(yè)務邏輯無關的代碼,可以在模版中直接給出,這樣便省去了并行程序開發(fā)的大量重復勞動,可以讓程序員著重在問題的業(yè)務邏輯上。而業(yè)務邏輯相關的代碼,必須配合用戶的指導,轉換向導,以及模版中的標簽共同完成并行化工作。
2.3標簽實現所謂標簽,就是在模版里事先標記出位置,用戶通過標簽名把所對應的功能代碼插入到該位置的一種手段,如圖4中的<標簽名>與</標簽名>。標簽的名字體現了相應代碼的功能。標簽的位置決定了程序的框架,包括開始、工作、結束等語義。標簽的數目決定模版的通用性。標簽數越多,模版通用性越差。所以我們要在保證模版的正確性下,盡量減少標簽的數目。
標簽的數目,位置,名稱的改動,伴隨著新的模版的出現。所以本發(fā)明是模版開放性的。即在一定的標準下,模版可以根據用戶的需求自行改動,增刪以出現新的,符合特定用戶需求的模版。
3并行代碼的生成根據用戶的指導,轉換向導,把串行程序的相應功能的代碼插入到并行模版的相應的標記處。而針對模版的操作,有以下幾種手段。
1)插入新代碼,即在模板代碼的某些位置插入新的代碼,常見的插入包括對元任務代碼的調用以及其它需要增加的功能。
2)修改代碼,可以針對用戶需求,對現有模版代碼加以改動。
3)刪除代碼,刪除模板代碼中不必要的代碼,由于模板是一個通用框架代碼,某些功能對于特定的應用而言是多余的,因此需要刪除。
從圖2的串行代碼中可以看到,“call METAEVALUATE(AEROPA,X)”部分的計算被用戶指定為原子任務,其代碼便被復制到各從結點上。具體過程為,“METAEVALUATE(AEROPA,X)”的串行代碼實現被插入到模版文件的<METATASK></METATASK>之間。而原串行程序的主結點任務變?yōu)閳D3所示的并行程序??梢钥闯觯艘幌盗蠱PI_SEND()和MPI_RECV()通行原語,圖2的中主結點的計算任務與圖3中的主結點計算任務一致。而圖3中的通行原語,是由模版提供,刻畫了主從結構的通行語義,也正因為這部分的特點,淡化了用戶對并行程序通行細節(jié)的關注,從而幫助用戶專注于邏輯業(yè)務本身。
通過這三種操作,模板代碼轉化為可以編譯、運行的并行代碼,如圖2和圖3。
權利要求
1.一種面向串行程序代碼量大的領域的半自動并行化方法,其特征在于,具體步驟如下(1)創(chuàng)建標準CFD串行程序;(2)分析并行化;(3)創(chuàng)建元計算任務;(4)導入串行程序;(5)導入并行模版;(6)交互指導并行化。
2.根據權利要求1所述的面向串行程序代碼量大的領域的半自動并行化方法,其特征是,所述的步驟(1)中的創(chuàng)建標準CFD串行程序,是指是指用戶必須在串行程序流程上嚴格按照五種并行模版所對應的串行程序框架編寫串行程序。
3.根據權利要求2所述的面向串行程序代碼量大的領域的半自動并行化方法,其特征是,所述的步驟(1)中的模版,是指對CFD領域的并行程序進行總結歸納出的,對應五種范例的并行程序架構。
4.根據權利要求3所述的面向串行程序代碼量大的領域的半自動并行化方法,其特征是,所述的步驟(1)中的范例,是指對經典的并行算法的抽象,能夠涵蓋高性能計算領域的并行應用,經典并行算法范例包括階段并行、分而治之、流水線、主-從結構、工作池式。
5.根據權利要求1所述的面向串行程序代碼量大的領域的半自動并行化方法,其特征是,所述的步驟(2)中的分析并行化,是指首先要分析串行程序,以及其所包含的各個計算任務,歸納出串行程序流程,以及各個計算任務的主要特征,串行程序的標準流程是由該程序所針對問題的領域決定的;其次,針對各個計算任務,抽象出計算框架;最后,用戶挑選最耗時的計算任務所對應的框架,看這個框架適合于哪種并行范例,由用戶指導將該串行程序映射到該并行范例所對應的模版上去。
6.根據權利要求1所述的面向串行程序代碼量大的領域的半自動并行化方法,其特征是,所述的步驟(3)中的元計算任務,簡稱元任務,是指與并行通信無關,且其自身內部不能并行執(zhí)行的計算任務,是構成并行程序的基本元素,元任務之間的數據相關性是數據輸入和輸出等,無相關性的多個元任務可并行執(zhí)行,元任務可單獨進行調試和測試。
7.根據權利要求1所述的面向串行程序代碼量大的領域的半自動并行化方法,其特征是,所述的步驟(4)中的導入串行程序,指定需要并行的串行工程項目。
8.根據權利要求1所述的面向串行程序代碼量大的領域的半自動并行化方法,其特征是,所述的步驟(5)中的導入并行模版,是指指定串行程序所定應的模版。
9.根據權利要求1所述的面向串行程序代碼量大的領域的半自動并行化方法,其特征是,所述的步驟(6)中的交互向導,其是一個交互圖形界面,通過該界面引導用戶完成相關的并行化工作,通過交互向導過程,具體還包括如下步驟①創(chuàng)建轉換工程該工程將包括串行程序,將要生成的并行程序,并行程序的目標可執(zhí)行程序,以及模版代碼;②選擇并行范例根據步驟(2)中分析抽象出的問題框架,確定并行范例以及并行模版;③并行代碼的生成根據串行程序流程,把相應功能的代碼插入到模版所對應的標簽tag處;④編輯并行代碼在轉換后得到并行代碼上繼續(xù)直接修改,最終生成合時的并行程序代碼;⑤生成可執(zhí)行并行程序如果上述過程沒有問題,最終生成可執(zhí)行并行程序。
全文摘要
一種面向串行程序代碼量大的領域的半自動并行化方法,具體步驟如下(1)創(chuàng)建標準CFD串行程序;(2)分析并行化;(3)創(chuàng)建元計算任務;(4)導入串行程序;(5)導入并行模版;(6)交互指導并行化。本發(fā)明針對CFD領域的并行模版,基本覆蓋該領域所有串行程序所對應的并行程序,便于串行程序開發(fā)人員直接使用;其次,采用元任務對實際可并行計算的計算模塊進行封裝;然后,不需要用戶對并行知識有太多了解。由于是對CFD領域特殊處理,本發(fā)明比大多數全自動方法所得最終并行程序效果好,效率高。同時,由于模版的幫助,又克服了大多數顯示并行的缺點,不需要用戶太多的專業(yè)并行知識,或者編寫大量的令人頭痛的并行代碼,且本發(fā)明的模版是開放性的。
文檔編號G06F9/45GK1932766SQ20061011705
公開日2007年3月21日 申請日期2006年10月12日 優(yōu)先權日2006年10月12日
發(fā)明者翁楚良, 邵一峰, 李明祿, 陸鑫達 申請人:上海交通大學