景翠萍,廖 麗,王 偉
北京應(yīng)用物理與計算數(shù)學(xué)研究所,北京 100094
復(fù)雜數(shù)值模擬并行應(yīng)用程序的快速研發(fā)是科學(xué)計算中的一個主要挑戰(zhàn),并行應(yīng)用編程框架(framework)是實現(xiàn)高效能編程的重要技術(shù)途徑。例如,北京應(yīng)用物理與計算數(shù)學(xué)研究所自主研制的JASMIN(J adaptive structured mesh applications infrastructure)框架和JAUMIN(J adaptive unstructured mesh application infrastructure)框架,它們是面向高性能科學(xué)與工程計算結(jié)構(gòu)網(wǎng)格和非結(jié)構(gòu)網(wǎng)格應(yīng)用的框架,提供了屏蔽并行計算的編程接口,支持領(lǐng)域?qū)<以趥€人電腦上“串行編程”,研發(fā)適應(yīng)于千萬億次計算機的高效并行應(yīng)用軟件[1]。然而,基于編程框架研發(fā)并行數(shù)值模擬程序,軟件研發(fā)人員仍然面臨以下挑戰(zhàn):首先,需要學(xué)習(xí)和掌握領(lǐng)域編程框架的編程原理與接口,并且需要熟練使用新的編程語言和開發(fā)技術(shù);其次,采用傳統(tǒng)的手工編程方式,軟件研發(fā)人員通過拷貝、修改的方式編寫了很多類似的代碼,若修改不當(dāng)將會花費較長的代碼調(diào)試時間;最后,軟件研發(fā)人員水平參差不齊,編寫的代碼風(fēng)格各異,代碼質(zhì)量難以保證。
自20世紀80年代起,計算機領(lǐng)域就開始探索并嘗試簡化手工編程的技術(shù)與手段,其中包括圖形化編程、代碼自動生成、領(lǐng)域編程語言、模型驅(qū)動開發(fā)等[2-4]。大多數(shù)編程技術(shù)并未取得廣泛的應(yīng)用,僅在少數(shù)專業(yè)領(lǐng)域有所進展。在科學(xué)與工程計算領(lǐng)域,領(lǐng)域編程語言受到很多關(guān)注并取得初步進展[5]。通過圖形化編程降低編程難度是很多學(xué)者的努力方向,經(jīng)過二十余年的發(fā)展,圖形化編程在圖形界面設(shè)計以及電氣電路設(shè)計方面取得很大進展,但在其他領(lǐng)域的應(yīng)用非常有限。Sedov等人開發(fā)了可視并行編程的集成開發(fā)環(huán)境,該方法要求編程者直接實現(xiàn)并行任務(wù)調(diào)度,受限于圖形表達能力,無法獲得更好的擴展性,其并行編程模型也不能適用于當(dāng)前的開發(fā)要求[6]。目前,并行軟件開發(fā)基本采用通用編程語言通過手工編程實現(xiàn),實現(xiàn)難度大,成為并行軟件快速研制的一大障礙。代碼自動生成是支持軟件快速開發(fā)、規(guī)范代碼實現(xiàn)、提高工作效率的有效手段。具備代碼自動生成功能的軟件很多,如StarUML、Rational Rose等,大多數(shù)軟件提供通用的面向?qū)ο筌浖O(shè)計思想,只能生成基于類的軟件架構(gòu),數(shù)據(jù)結(jié)構(gòu)與編程接口依賴于編程者的設(shè)計,不適用于數(shù)值模擬軟件的研發(fā)。
基于以上分析,研制了數(shù)值模擬應(yīng)用并行程序編程工具HiPro-P。HiPro-P軟件是一款基于并行編程框架的圖形化編程工具,它采用基于結(jié)構(gòu)化流程圖的圖形化編程方式,屏蔽了并行編程框架的編程接口,幫助用戶在不學(xué)習(xí)編程框架的基礎(chǔ)上快速開發(fā)基于框架的并行應(yīng)用程序。HiPro-P軟件可以支撐流體力學(xué)、分子動力學(xué)等領(lǐng)域的多個數(shù)值模擬程序的快速研制[7-8]。例如,北京應(yīng)用物理與計算數(shù)學(xué)研究所自主研制的離散元程序,全程基于HiPro-P軟件開發(fā),三維離散元程序的研制只用了一個半月的時間,實現(xiàn)了單晶以及多晶α鐵沖擊相變過程及典型非均質(zhì)炸藥的沖擊響應(yīng)過程的精細數(shù)值模擬。目前,HiPro-P軟件可以支撐面向結(jié)構(gòu)網(wǎng)格應(yīng)用的并行數(shù)值模擬程序的快速研發(fā),但尚未支持非結(jié)構(gòu)網(wǎng)格。非結(jié)構(gòu)網(wǎng)格是科學(xué)與工程計算中普遍采用的一類網(wǎng)格。非結(jié)構(gòu)網(wǎng)格應(yīng)用與結(jié)構(gòu)網(wǎng)格應(yīng)用具有不同的特點,HiPro-P軟件的某些模塊不能直接用于非結(jié)構(gòu)網(wǎng)格。為此,針對非結(jié)構(gòu)網(wǎng)格應(yīng)用特點,需擴充HiPro-P軟件的功能,支撐非結(jié)構(gòu)網(wǎng)格應(yīng)用。
針對以上需求,本文基于HiPro-P系統(tǒng)研制了面向非結(jié)構(gòu)網(wǎng)格數(shù)值模擬應(yīng)用并行程序的圖形化編程工具(以下簡稱“非結(jié)構(gòu)網(wǎng)格并行編程工具”)。借助該編程工具按照一定的規(guī)范和流程,可以自動生成全部或者大部分的數(shù)值模擬程序代碼。一方面,可以有效地減輕軟件開發(fā)人員的負擔(dān),不需或只需花費較少的時間學(xué)習(xí)編程框架,使開發(fā)人員的主要精力可以關(guān)注在軟件設(shè)計層面;另一方面,可以降低軟件研發(fā)難度,縮短數(shù)值模擬軟件的研發(fā)周期。其次,自動生成的數(shù)值模擬程序代碼規(guī)范且風(fēng)格統(tǒng)一,可以增強程序的可讀性及可維護性。
JAUMIN框架的全稱為并行自適應(yīng)非結(jié)構(gòu)網(wǎng)格應(yīng)用支撐軟件框架,它針對科學(xué)計算中的非結(jié)構(gòu)網(wǎng)格應(yīng)用,通過封裝高性能的數(shù)據(jù)結(jié)構(gòu),集成成熟的數(shù)值算法,屏蔽大規(guī)模并行和網(wǎng)格自適應(yīng)的計算技術(shù),支撐物理建模、數(shù)值方法、高性能算法的創(chuàng)新研究,加速研制可有效使用現(xiàn)代高性能計算機的并行自適應(yīng)計算應(yīng)用程序[9-10]。
圖1是基于編程框架研制的并行應(yīng)用軟件架構(gòu)。基于領(lǐng)域并行編程框架,領(lǐng)域?qū)<铱梢越Y(jié)合實際應(yīng)用的需求,選擇數(shù)據(jù)結(jié)構(gòu)來定義物理量,選擇構(gòu)件模型并編寫子區(qū)域數(shù)值計算子程序來定制并行計算構(gòu)件,通過計算流程將并行計算構(gòu)件組裝為應(yīng)用軟件。其中,并行計算由數(shù)據(jù)結(jié)構(gòu)和構(gòu)件模型來實現(xiàn),領(lǐng)域?qū)<覠o需了解其實現(xiàn)細節(jié)。編程框架可以將并行計算的實現(xiàn)從應(yīng)用軟件的研發(fā)中分離出來,將應(yīng)用軟件的研發(fā)模式從“并行設(shè)計—并行編程”提升到“并行思考—串行編程”。
計算模式與構(gòu)件模型:領(lǐng)域編程框架通過構(gòu)件模型封裝并行計算的細節(jié),提供不同類型的計算模式,組織內(nèi)存調(diào)度、數(shù)據(jù)通信以及并行計算。JAUMIN框架凝煉了10多種計算模式,設(shè)計了相應(yīng)的并行算法模板,研制了相應(yīng)的構(gòu)件模型,包括初值模式、規(guī)約模式、掃描模式、接觸拼接模式、復(fù)制模式、克隆模式等。初值模式為物理量賦初值,規(guī)約模式求物理量的規(guī)約值,接觸拼接模式支持接觸碰撞與滑移,復(fù)制模式將物理量的值復(fù)制給另一個物理量,克隆模式支持粒子和能群之間的獨立無關(guān)并行計算。
Fig.1 Architecture of parallel application software based on programming framework圖1 基于編程框架研制的并行應(yīng)用軟件架構(gòu)
基于可視化編程思想,抽象出數(shù)值模擬軟件開發(fā)的共性,找出編程規(guī)律并確定編程流程,便可以研制一種面向數(shù)值模擬軟件開發(fā)的圖形化編程工具[11-13]。JAUMIN應(yīng)用程序的主控程序的流程非常類似,因此可以為用戶定制編程流程,用戶通過組裝流程來生成完整的JAUMIN程序代碼?;谝陨显O(shè)計思路,研制了非結(jié)構(gòu)網(wǎng)格并行編程工具。該編程工具融合圖形化編程與代碼自動生成技術(shù),采用基于結(jié)構(gòu)化流程圖的編程模式,為用戶提供編程向?qū)?,降低用戶編程難度;可以自動生成大部分數(shù)值模擬程序代碼,從而幫助用戶基于JAUMIN框架快速重構(gòu)和研制非結(jié)構(gòu)網(wǎng)格并行應(yīng)用軟件。除此之外,還可以支撐數(shù)值模擬程序在數(shù)據(jù)結(jié)構(gòu)定義以及數(shù)值計算子程序編制中實現(xiàn)標準化和規(guī)范化。主要包括以下功能:
(1)提供可支撐非結(jié)構(gòu)網(wǎng)格應(yīng)用程序研制的圖形化編程界面,包括定義變量,創(chuàng)建并配置并行計算構(gòu)件,定義數(shù)值計算子程序等功能。
(2)代碼自動生成引擎可自動生成大部分應(yīng)用程序代碼(包括基架代碼、變量定義及引用、數(shù)值計算子程序接口定義、并行計算構(gòu)件定義及配置等),只有子程序執(zhí)行體部分的代碼需要用戶手工編寫。
(3)生成的代碼規(guī)范且風(fēng)格統(tǒng)一。
HiPro-P軟件體系結(jié)構(gòu)及模塊構(gòu)成如圖2所示,其中灰色部分標注的是非結(jié)構(gòu)網(wǎng)格應(yīng)用并行編程工具相關(guān)的軟件模塊。數(shù)據(jù)庫模塊由變量庫、數(shù)值計算子程序庫、計算流程庫、并行計算構(gòu)件庫、變量類型庫等構(gòu)成。代碼自動生成引擎由文件代碼生成器、片段代碼生成器以及應(yīng)用程序代碼模板構(gòu)成。除此之外,提供了基于編程框架編寫并行應(yīng)用程序的圖形化編程界面,包括應(yīng)用程序編輯、程序編譯、代碼調(diào)試及運行配置界面等。
針對非結(jié)構(gòu)網(wǎng)格應(yīng)用特點,需要擴充領(lǐng)域?qū)S米兞款愋蛶?。領(lǐng)域?qū)S米兞款愋椭父咝阅軘?shù)值模擬應(yīng)用領(lǐng)域特定的變量類型。非結(jié)構(gòu)網(wǎng)格應(yīng)用變量類型主要包括網(wǎng)格離散量、間斷有限元數(shù)據(jù)片、網(wǎng)格片幾何坐標量、粒子量、網(wǎng)格拓撲量、網(wǎng)格無關(guān)量、用戶自定義參數(shù)等。其中變量的屬性包括變量的名稱、類別、基本數(shù)據(jù)類型、輸入/輸出以及說明等。本文采用領(lǐng)域?qū)S米兞款愋兔枋鲎兞款悇e。針對非結(jié)構(gòu)網(wǎng)格應(yīng)用特點,建立了非結(jié)構(gòu)網(wǎng)格應(yīng)用領(lǐng)域變量類型庫。圖3是非結(jié)構(gòu)網(wǎng)格變量類型示例,例如中心量(cell)、結(jié)點量(node)、邊心量(edge)、面心量(face)等變量類型。
非結(jié)構(gòu)網(wǎng)格應(yīng)用子程序類型包括數(shù)值計算型和非數(shù)值計算型子程序。其中數(shù)值計算子程序包括網(wǎng)格片數(shù)值計算型、實體集數(shù)值計算型和網(wǎng)格無關(guān)數(shù)值計算型。非數(shù)值計算子程序包括內(nèi)存調(diào)度型、輸入輸出型和數(shù)據(jù)通信型子程序。數(shù)值計算子程序中,網(wǎng)格片尺寸、網(wǎng)格片拓撲、實體集、網(wǎng)格片幾何坐標、數(shù)據(jù)片及影像區(qū)寬度等數(shù)據(jù)通過形參傳遞。根據(jù)非結(jié)構(gòu)網(wǎng)格應(yīng)用數(shù)值計算子程序接口規(guī)范,將子程序形參表參數(shù)劃分為必選參數(shù)和可選參數(shù)。其中,必選參數(shù)根據(jù)數(shù)值計算子程序類型確定。
Fig.2 HiPro-P architecture圖2 HiPro-P軟件體系結(jié)構(gòu)
Fig.3 Examples of variable types for unstructured grids圖3 非結(jié)構(gòu)網(wǎng)格變量類型示例
面向JAUMIN框架提供的并行計算構(gòu)件,本文建立非結(jié)構(gòu)網(wǎng)格應(yīng)用構(gòu)件庫,如圖4所示。主要包括初值構(gòu)件、數(shù)值構(gòu)件、步長構(gòu)件、歸約構(gòu)件、內(nèi)存構(gòu)件、外表面操作構(gòu)件、掃描構(gòu)件以及接觸構(gòu)件等。
Fig.4 Component library for unstructured grids圖4 非結(jié)構(gòu)網(wǎng)格應(yīng)用構(gòu)件庫
代碼模板是用戶編寫數(shù)值模擬程序過程中常用的代碼片段構(gòu)成的一段文本,其中保留一些待定的參數(shù),這些參數(shù)通過代碼生成器的參數(shù)替換機制確定實際的值[14-16]。代碼自動生成引擎是用于生成完整代碼或代碼片段的代碼生成器。應(yīng)用代碼自動生成技術(shù),代碼生成引擎根據(jù)用戶圖形界面輸入,替換代碼模板中的參數(shù),自動生成符合數(shù)據(jù)結(jié)構(gòu)標準的變量定義代碼以及遵循子程序接口規(guī)范的子程序接口定義代碼,最終生成完整的數(shù)值模擬程序代碼。
建立非結(jié)構(gòu)網(wǎng)格應(yīng)用代碼模板庫,包括變量定義、變量引用、主控程序、網(wǎng)格層策略類、網(wǎng)格片策略類、可視化輸出以及外部子程序接口代碼模板等。非結(jié)構(gòu)網(wǎng)格應(yīng)用代碼模板庫如圖5所示。
Fig.5 Code template library for unstructured grids圖5 非結(jié)構(gòu)網(wǎng)格應(yīng)用代碼模板庫
由于變量定義、變量引用以及可視化輸出等代碼模板在面向非結(jié)構(gòu)網(wǎng)格數(shù)值模擬應(yīng)用的串行編程工具中有詳細介紹[17],這里不再詳述。下面介紹網(wǎng)格層時間積分算法策略類代碼模板和積分構(gòu)件網(wǎng)格片策略類代碼模板。
(1)網(wǎng)格層時間積分算法策略類代碼模板
網(wǎng)格層時間積分算法類是JAUMIN框架求解偏微分方程組的用戶界面類,它支持顯式時間離散格式和隱式時間離散格式。建立網(wǎng)格層時間積分算法策略類代碼模板,通過代碼自動生成引擎可以生成網(wǎng)格層策略類源文件。
(2)并行計算構(gòu)件網(wǎng)格片策略類代碼模板
并行計算構(gòu)件網(wǎng)格片策略類封裝了構(gòu)件在網(wǎng)格片完成的數(shù)值計算。針對每種類型的并行計算構(gòu)件,代碼自動生成引擎根據(jù)構(gòu)件定制圖形界面的輸入,替換對應(yīng)的網(wǎng)格片策略類代碼模板中的變量,自動生成并行計算構(gòu)件網(wǎng)格片策略類代碼片段。網(wǎng)格片策略類代碼模板包括初值構(gòu)件、數(shù)值構(gòu)件、步長構(gòu)件、歸約構(gòu)件、內(nèi)存構(gòu)件、外表面操作構(gòu)件、掃描構(gòu)件以及接觸構(gòu)件網(wǎng)格片策略類代碼模板等。
針對非結(jié)構(gòu)網(wǎng)格應(yīng)用特點,研制可支撐非結(jié)構(gòu)網(wǎng)格并行程序研制的圖形界面,主要包括變量庫界面、子程序編輯界面、并行計算構(gòu)件定制圖形界面等。由于變量庫界面和子程序編輯界面在面向非結(jié)構(gòu)網(wǎng)格數(shù)值模擬應(yīng)用的串行編程工具中有詳細介紹[17],這里不再詳述。下面介紹并行計算構(gòu)件定制圖形界面。
每種類型的并行計算構(gòu)件配有特定的圖形用戶界面,直觀反映構(gòu)件的功能。定制構(gòu)件的操作包括:根據(jù)功能選擇構(gòu)件類型,啟動該類型的構(gòu)件定制圖形界面,配置構(gòu)件的基本屬性及附加屬性[18]。
圖6為初值構(gòu)件的定制界面,包括兩個屬性頁面:(1)基本屬性,用于修改構(gòu)件名稱和功能說明;(2)初始化物理量,用于配置完成物理量初始化功能的數(shù)值計算子程序。
圖7為步長構(gòu)件的定制界面,包括3個屬性頁面:(1)基本屬性,用于修改構(gòu)件名稱和功能說明;(2)網(wǎng)格片計算時間步長,用于配置完成時間步長計算的計算內(nèi)核;(3)填充影響區(qū)或內(nèi)部區(qū)域,配置通信的物理量。
圖8為數(shù)值構(gòu)件的定制界面,包括3個屬性頁面:(1)基本屬性,用于修改構(gòu)件名稱和功能說明;(2)網(wǎng)格片計算,用于連接完成數(shù)值計算的計算內(nèi)核;(3)填充影像區(qū)或內(nèi)部區(qū)域,配置通信的物理量,為可選屬性。
除此之外,為防止參數(shù)錯配或漏配導(dǎo)致應(yīng)用程序錯誤,系統(tǒng)為每類構(gòu)件配備了檢查器。檢查項包括子程序類型匹配、參數(shù)類型匹配、強制參數(shù)匹配等。系統(tǒng)根據(jù)界面操作實時檢查配置信息的正確性與完備性。并行計算構(gòu)件定制完成后,代碼自動生成引擎針對每種并行計算構(gòu)件自動生成對應(yīng)的網(wǎng)格片策略類代碼。
Fig.6 Graphical interface of initialize component configuration圖6 初值構(gòu)件配置圖形界面
Fig.7 Graphical interface of time step component configuration圖7 步長構(gòu)件配置圖形界面
Fig.8 Graphical interface of numerical component configuration圖8 數(shù)值構(gòu)件配置圖形界面
本文介紹的非結(jié)構(gòu)網(wǎng)格應(yīng)用并行編程工具已成功應(yīng)用于一些非結(jié)構(gòu)網(wǎng)格數(shù)值模擬程序的開發(fā),例如初級反應(yīng)前二維非結(jié)構(gòu)多邊形流體力學(xué)程序、ICF三維集成程序等。本文以二維情形下線性對流方程的求解程序(簡稱“LinAdv程序”)以及歐拉方程的求解程序(簡稱“Euler程序”)為例,說明非結(jié)構(gòu)網(wǎng)格應(yīng)用并行編程工具如何生成應(yīng)用程序代碼,驗證編程工具生成的代碼是否可以正確編譯、運行,并統(tǒng)計編程工具自動生成的代碼量占總代碼量的比例。
以“LinAdv程序”為例,說明非結(jié)構(gòu)網(wǎng)格應(yīng)用并行編程工具如何生成并行應(yīng)用程序代碼。簡單的線性對流方程如式(1)所示:
為方便,記F(u)=au,a=(a1,a2)為對流速度。其中,線性對流方程及計算方法在面向非結(jié)構(gòu)網(wǎng)格數(shù)值模擬應(yīng)用的串行編程工具中有詳細介紹[17]。
應(yīng)用非結(jié)構(gòu)網(wǎng)格并行編程工具編寫LinAdv程序求解以上線性對流方程,主要包括以下5個步驟:
(1)定義變量
依據(jù)式(1)需要定義以下變量:物理量包括守恒量uval_current、通量flux_new、邊的全局法向edge_normal、邊的長度edge_length、單元的面積cell_area;輸入?yún)?shù)包括對流速度d_velocity、CFL條件數(shù)cfl等。
通過變量庫圖形界面定義以上變量,如圖9所示。變量定義完成后,編程工具將自動生成變量定義代碼片段。
Fig.9 Defining variable圖9 定義變量
(2)編寫數(shù)值計算子程序
求解以上線性對流方程,需要編寫的數(shù)值計算子程序包括:守恒量初始化子程序InitializeConservation、時間步長計算子程序computeTimeStep、通量計算子程序ComputeFlux、守恒量更新子程序updateConservation以及物理邊界處理子程序setPhysicalBdry等。非結(jié)構(gòu)網(wǎng)格并行編程工具編寫數(shù)值計算子程序的方法與面向非結(jié)構(gòu)網(wǎng)格數(shù)值模擬應(yīng)用的串行編程工具[17]中的方法一致,這里不再詳述。
(3)創(chuàng)建并定制并行計算構(gòu)件
編寫完以上子程序,需要創(chuàng)建并定制并行計算構(gòu)件封裝以上數(shù)值計算子程序。需要創(chuàng)建的構(gòu)件包括:初值構(gòu)件init_set_value、步長構(gòu)件step_size、數(shù)值構(gòu)件compute_flux、數(shù)值構(gòu)件set_bdry、數(shù)值構(gòu)件conser_diff以及內(nèi)存構(gòu)件allocateFlux等。
構(gòu)件庫界面如圖10所示。構(gòu)件庫界面用于管理和存儲用戶定義的并行計算構(gòu)件,支持用戶創(chuàng)建構(gòu)件,訪問、修改或刪除庫存構(gòu)件等。
創(chuàng)建完并行計算構(gòu)件,可以為每種并行計算構(gòu)件配置構(gòu)件的屬性。
Fig.10 Graphical interface of component library圖10 構(gòu)件庫界面
數(shù)值構(gòu)件compute_flux的定制界面如圖11所示,其他構(gòu)件的定制界面不再詳述。定義完并行計算構(gòu)件后,系統(tǒng)根據(jù)界面操作實時檢查構(gòu)件配置信息的正確性與完備性。
針對每種類型的并行計算構(gòu)件,代碼自動生成引擎根據(jù)構(gòu)件定制界面的輸入,自動生成并行計算構(gòu)件網(wǎng)格片策略類代碼片段。
(4)基于構(gòu)件組裝計算流程
Fig.11 Numerical component configuration圖11 數(shù)值構(gòu)件定制
定制完以上并行計算構(gòu)件,在流程編輯界面中,支撐用戶通過組裝構(gòu)件搭建基于JAUMIN框架的并行應(yīng)用算法流程。圖12是HiPro-P軟件的流程編輯界面。
(5)編譯、調(diào)試、運行LinAdv程序代碼
對非結(jié)構(gòu)網(wǎng)格應(yīng)用并行編程工具自動生成的代碼量進行統(tǒng)計。自動生成的LinAdv程序各代碼片段占總代碼量的比例如表1所示。
Fig.12 Flowchart editor of HiPro-P圖12 HiPro-P軟件的流程編輯界面
Table 1 Percentage of automatically generated code in total amount of program(LinAdv)表1 自動生成的代碼片段占總代碼量的比例(LinAdv) %
采用非結(jié)構(gòu)網(wǎng)格應(yīng)用并行編程工具自動生成的Euler程序各代碼片段占總代碼量的比例如表2所示。
Table 2 Percentage of automatically generated code in total amount of program(Euler)表2 自動生成的代碼片段占總代碼量的比例(Euler) %
從表1和表2中可以看出:編程工具自動生成的LinAdv程序代碼約占總代碼量的90.53%;自動生成的Euler程序代碼約占總代碼量的80.45%。因此,應(yīng)用編程工具編寫數(shù)值模擬程序,可以減少用戶編寫代碼量。
表3是采用手工編程方式和采用非結(jié)構(gòu)網(wǎng)格應(yīng)用并行編程工具生成的LinAdv程序和Euler程序的代碼大小。
Table 3 Comparison of code表3 代碼大小的比較
相對于手工編程方式,采用非結(jié)構(gòu)網(wǎng)格應(yīng)用并行編程工具,生成的LinAdv程序代碼大小的增長小于15%;生成的Euler程序代碼大小的增長小于10%。從實驗數(shù)據(jù)可以看出,編程工具生成的代碼在大小上相對于手工編寫的代碼是可接受的。
本文設(shè)計并研制了面向非結(jié)構(gòu)網(wǎng)格應(yīng)用的并行數(shù)值模擬程序圖形化編程工具。該編程工具有以下應(yīng)用效果:首先,采用基于結(jié)構(gòu)化流程圖的圖形化編程模式,屏蔽了并行編程框架的編程接口,降低了用戶編程難度;其次,自動生成大部分并行數(shù)值模擬程序代碼,用戶只需編寫數(shù)值計算子程序?qū)崿F(xiàn)體,減少了用戶編寫代碼量;最后,生成的代碼規(guī)范統(tǒng)一,系統(tǒng)的維護效率也得以大幅度提高。示例表明,該工具可以降低用戶編程難度,并幫助用戶在不學(xué)習(xí)編程框架的基礎(chǔ)上快速開發(fā)基于JAUMIN框架的并行應(yīng)用程序。
[1]Mo Zeyao,Zhang Aiqing,Liu Qingkai,et al.Research on the components and practices for domain-specific parallel programming models for numerical simulation[J].Scientia Sinica Informationis,2015,45(3):385-397.
[2]Cheisten M,Schenk O,Burkhart H.PATUS:a code generation and autotuning framework for parallel iterative stencil computations on modern microarchitectures[C]//Proceedings of the 25th International Symposium on Parallel and Distributed Processing,Anchorage,May 16-20,2011.Piscataway:IEEE,2011:676-687.
[3]ábrahám E,Bekas C,Brandic I,et al.Preparing HPC applications for exascale:challenges and recommendations[C]//Proceedings of the 18th International Conference on Network-Based Information Systems,Taipei,China,Sep 2-4,2015.Washington:IEEE Computer Society,2015:401-406.
[4]Wozniak J M,Armstrong T G,Wilde M,et al.Swift/T:scalable data flow programming for many-task applications[C]//Proceedings of the 18th ACM SIGPLAN Symposium on Principles and Practice of Parallel Programming,Shenzhen,Feb 23-27,2013.New York:ACM,2013:309-310.
[5]Raja A,Lakshmanan D.Domain specific languages[J].InternationalJournalofComputerApplications,2010,21(1):99-105.
[6]Sedov B,Syschikov A,Ivanova V.Integrated development environment for visual parallel programming[C]//Proceedings of the 10th Conference of Fruct Association,Tampere,Nov 7-11,2011.Piscataway:IEEE,2011:131-135.
[7]Liao Li,Zhang Aiqing,Yang Zhang,et al.IDE-JASMIN—an interactive graphical approach for parallel programming in scientific computing[C]//Proceedings of the 8th International Conference on Software Technologies,Reykjavik,Jul 29-31,2013:328-333.
[8]Liao Li,Jing Cuiping,Wang Wei,et al.HiPro-CodeGen—automatic programming for parallel numerical simulations[C]//Proceedings of the 9th International Conference on Software Engineering and Applications,Vienna,Aug 29-31,2014.Piscataway:IEEE,2014:125-131.
[9]Liu Qingkai,Zhao Weibo,Cheng Jie,et al.A programming framework for large scale numerical simulations on unstructured mesh[C]//Proceedings of the 2nd International Conference on High Performance and Smart Computing,New York,Apr 9-10,2016.Piscataway:IEEE,2016:298-303.
[10]Mo Zeyao,Zhang Aiqing,Cao Xiaolin,et al.JASMIN:a parallel software infrasture for scientific computing[J].Frontiers of Computer Science in China,2010,4(4):480-488.
[11]Wang Min,Chen Yaguang.An automatic programming tool based on visual programming[J].Computer Applications and Software,2010,27(12):29-33.
[12]Shao Weizhong,Liu Xin.Object-oriented design of humanmachine interface in the visual programming environment[J].Journal of Software,2002,13(8):1494-1499.
[13]Liu Wei,Zhao Songzheng,Sun Yiran,et al.An approach to project management information system requirements analysis[C]//Proceedings of the 2008 International Conference on Intelligent Computation Technology and Automation,Changsha,Oct 20-22,2008.Washington:IEEE Computer Society,2008:957-961.
[14]Kong Deyu,Luo Feng,Lin Weibo,et al.Research on a velocitybased automatic code generation technology[J].Computer Applications and Software,2014,31(10):20-33.
[15]Liu Yuxin,Yao Kaixue,Xu Daoyun.Automatic code generation based on template on.Net framework of three layers architecture[J].Computer Technology and Development,2012,22(8):13-16.
[16]Watts T.The SFC editor a graphical tool for algorithm development[J].Journal of Computing Sciences in Colleges,2004,20(2):73-85.
[17]Jing Cuiping,Liao Li,Wang Wei,et al.A graphical programming tool for sequential numerical simulation with unstructured grids[C]//Proceedings of the CCF HPC China 2015,Wuxi,Nov 10-12,2015:116-124.
[18]Liao Li,Zhang Aiqing,Wang Wei,et al.A graphical approach for component-based parallel programming[C]//Proceedings of the CCF HPC China 2015,Wuxi,Nov 10-12,2015:55-63.
附中文參考文獻:
[1]莫則堯,張愛清,劉青凱,等.數(shù)值模擬領(lǐng)域并行編程模型的要素與實例研究[J].中國科學(xué):信息科學(xué),2015,45(3):385-397.
[11]王敏,陳亞光.基于可視化編程的自動化編程工具[J].計算機應(yīng)用與軟件,2010,27(12):29-33.
[12]邵維忠,劉昕.可視化編程環(huán)境下人機界面的面向?qū)ο笤O(shè)計[J].軟件學(xué)報,2002,13(8):1494-1499.
[14]孔得雨,羅峰,林偉波,等.一種基于Velocity的代碼自動生成技術(shù)研究[J].計算機應(yīng)用與軟件,2014,31(10):20-33.
[15]劉于新,姚凱學(xué),許道云.基于模板的.Net三層架構(gòu)的代碼自動生成[J].計算機技術(shù)與發(fā)展,2012,22(8):13-16.
[17]景翠萍,廖麗,王偉,等.面向非結(jié)構(gòu)網(wǎng)格數(shù)值模擬應(yīng)用串行程序的圖形化編程工具[C]//2015年全國高性能計算學(xué)術(shù)年會論文集,無錫,2015:116-124.
[18]廖麗,張愛清,王偉,等.面向構(gòu)件化并行編程的圖形化編程技術(shù)[C]//2015年全國高性能計算學(xué)術(shù)年會論文集,無錫,2015:55-63.