摘要:
介紹了一種異構(gòu)環(huán)境下的并行調(diào)試及性能分析工具ParaVT的設(shè)計(jì)方法和實(shí)現(xiàn)#65377;通過對(duì)并行程序源代碼的分析處理,利用自動(dòng)插樁模板插入用于調(diào)試和性能分析的用戶代碼,從而對(duì)并行程序進(jìn)行斷點(diǎn)調(diào)試和性能參數(shù)收集,達(dá)到進(jìn)一步優(yōu)化程序設(shè)計(jì)的目的#65377;
關(guān)鍵詞:異構(gòu); 并行調(diào)試; 性能分析; 插樁; 優(yōu)化
中圖分類號(hào):TP311文獻(xiàn)標(biāo)志碼:A
文章編號(hào):1001-3695(2007)10-0225-04
0引言
高性能計(jì)算技術(shù)的發(fā)展,尤其是近幾年網(wǎng)格計(jì)算技術(shù)的興起,使得大規(guī)模數(shù)據(jù)處理逐漸成為科學(xué)研究和工程應(yīng)用的一個(gè)重要領(lǐng)域,因此需要開發(fā)越來越多具有高速運(yùn)算能力和處理能力的高性能計(jì)算機(jī)#65377;與此同時(shí),并行程序的設(shè)計(jì)也變得越來越重要#65377;然而由于硬件結(jié)構(gòu)#65380;軟件平臺(tái)的差異,并行程序在不同的平臺(tái)上運(yùn)行時(shí)的調(diào)試技術(shù)#65380;性能效率等存在極大的差異#65377;如何設(shè)計(jì)一套異構(gòu)環(huán)境下具有良好移植性#65380;可擴(kuò)展性和功能靈活性的并行程序調(diào)試及性能分析工具變得十分重要#65377;
并行調(diào)試是并行處理中的一個(gè)難點(diǎn)#65377;并行程序之所以難以編寫#65380;調(diào)試,是由于多個(gè)進(jìn)程同時(shí)運(yùn)行于多臺(tái)計(jì)算機(jī)之上,彼此之間需要相互同步及協(xié)調(diào),較串行程序的運(yùn)行過程復(fù)雜得多,而且每一次執(zhí)行可能是不重現(xiàn)的#65377;引起程序出錯(cuò)的原因可能是資源競(jìng)爭(zhēng)引起的死鎖,或是程序本身所包含的不確定性,也可能是網(wǎng)絡(luò)延遲或通信錯(cuò)誤等#65377;
現(xiàn)有的并行調(diào)試及性能分析工具主要分為基于PVM并行平臺(tái)#65380;基于MPI并行平臺(tái)和跨平臺(tái)三種#65377;其中國外比較著名的并行調(diào)試及性能分析工具有XPVM[1]#65380;Paradyn[2]#65380;XMPI[3]#65380;SCALEA[4]和TotalView[5]等;國內(nèi)比較著名的并行程序行為可視化工具有運(yùn)行于曙光系列上的ParaVision[6]和DCDB[7]等#65377;以上這些系統(tǒng)由于對(duì)并行環(huán)境的依賴性比較強(qiáng),在系統(tǒng)平臺(tái)的可移植性#65380;功能擴(kuò)展性和健壯性方面都有一定的局限#65377;例如,TotalView[5]在符號(hào)調(diào)試中增加了多線程的窗口,并可以實(shí)現(xiàn)數(shù)組的可視化,但是數(shù)組查看只能針對(duì)單個(gè)進(jìn)程[5]#65377;同樣GuideView用于輔助用戶理解OpenMP[8]程序的性能,但缺乏自動(dòng)性能瓶頸分析的能力#65377;
本文正是通過對(duì)異構(gòu)平臺(tái)下并行程序動(dòng)態(tài)信息收集及通信管理技術(shù)的研究,提出了一種基于源代碼插樁技術(shù)的#65380;支持異構(gòu)體系的#65380;具有良好可擴(kuò)展性和通用性的并行調(diào)試及性能跟蹤方法#65377;在此基礎(chǔ)上實(shí)現(xiàn)了一套并行程序調(diào)試及性能分析的可視化輔助工具ParaVT#65377;
1體系結(jié)構(gòu)設(shè)計(jì)
本文提出的并行程序調(diào)試及性能分析的可視化輔助工具ParaVT(圖1),考慮到集群體系的異構(gòu)性,從邏輯上將本地的監(jiān)控端和遠(yuǎn)程運(yùn)行節(jié)點(diǎn)徹底分開#65377;并行環(huán)境調(diào)試及性能分析系統(tǒng)分為監(jiān)控端#65380;集群守護(hù)進(jìn)程以及遠(yuǎn)程運(yùn)行節(jié)點(diǎn)三部分#65377;
監(jiān)控端主要任務(wù)是對(duì)輸入的源程序進(jìn)行詞法語法分析,同時(shí)從遠(yuǎn)程運(yùn)行節(jié)點(diǎn)接收并行程序調(diào)試信息和性能分析數(shù)據(jù),然后對(duì)這些信息和數(shù)據(jù)進(jìn)行分析和可視化的顯示#65377;遠(yuǎn)程運(yùn)行節(jié)點(diǎn)接收本地監(jiān)控端代碼分析的結(jié)果,根據(jù)插樁模板庫對(duì)程序進(jìn)行插樁#65377;同時(shí),干擾補(bǔ)償模塊程序?qū)τ诓鍢哆^程中所產(chǎn)生的源程序干擾進(jìn)行補(bǔ)償;插樁后代碼在遠(yuǎn)程節(jié)點(diǎn)上運(yùn)行,產(chǎn)生一定的調(diào)試信息和程序性能分析數(shù)據(jù)#65377;這些信息和數(shù)據(jù)實(shí)時(shí)地發(fā)送回監(jiān)控端#65377;
在過去的研究過程中,曾經(jīng)嘗試將所跟蹤和調(diào)試的并行程序在監(jiān)控端所運(yùn)行的機(jī)器上編譯成二進(jìn)制可執(zhí)行文件,然后發(fā)布到并行集群上運(yùn)行[9]#65377;這個(gè)過程中隱含了一個(gè)假設(shè),即并行集群必須能夠識(shí)別所發(fā)布的并行程序的二進(jìn)制可執(zhí)行文件的格式#65377;這將在很大程度上限制ParaVT在異構(gòu)環(huán)境下的運(yùn)行和使用#65377;例如,遠(yuǎn)程運(yùn)行節(jié)點(diǎn)是由不同體系結(jié)構(gòu)或者不同操作平臺(tái)組成的運(yùn)行環(huán)境時(shí),在本地監(jiān)控端編譯以后的二進(jìn)制代碼有時(shí)候并不能被遠(yuǎn)程節(jié)點(diǎn)所識(shí)別,可能出現(xiàn)一些運(yùn)行錯(cuò)誤#65377;為了解決這個(gè)問題,對(duì)這種結(jié)構(gòu)進(jìn)行了改進(jìn),從邏輯上將監(jiān)控端和遠(yuǎn)程運(yùn)行的集群環(huán)境徹底分開#65377;考慮到集群的異構(gòu)性,在集群中的每一個(gè)節(jié)點(diǎn)都需要安裝一個(gè)守護(hù)進(jìn)程,這個(gè)守護(hù)進(jìn)程將負(fù)責(zé)與具體節(jié)點(diǎn)體系結(jié)構(gòu)和操作系統(tǒng)相關(guān)的工作#65377;這種方法很好地解決了本地監(jiān)控端和遠(yuǎn)程運(yùn)行端系統(tǒng)的異構(gòu)性問題,但同時(shí)也進(jìn)一步增加了遠(yuǎn)程節(jié)點(diǎn)互相通信的開銷#65377;
2并行程序源代碼插樁技術(shù)
2.1插樁技術(shù)簡(jiǎn)介
插樁是純軟件調(diào)試中較多采用的一種代碼修改機(jī)制,也叫軟件打點(diǎn)技術(shù)#65377;其目的是通過插樁點(diǎn)來捕獲程序當(dāng)前狀態(tài)#65377;插樁是目前大多數(shù)軟件測(cè)試檢測(cè)采用的關(guān)鍵技術(shù)#65377;程序插樁根據(jù)插樁的代碼形式分為兩種[10]:
a)目標(biāo)代碼插樁#65377;它的前提是對(duì)目標(biāo)代碼進(jìn)行必要的分析以確定插樁的地點(diǎn)和內(nèi)容#65377;目標(biāo)代碼的格式主要與操作系統(tǒng)相關(guān),與具體的編程語言及版本無關(guān)#65377;但是由于目標(biāo)代碼中語法#65380;語義信息不完整,造成對(duì)程序運(yùn)行錯(cuò)誤的捕獲#65380;定位#65380;分析有時(shí)不準(zhǔn)確#65377;
b)源代碼插樁#65377;需要對(duì)源程序進(jìn)行詞法#65380;語法和部分語義分析,工作量較大,而且隨著編程語言和版本的不同需要進(jìn)行一定的修改,適用性不夠廣泛#65377;由于源代碼中包括全部的語法#65380;語義信息,對(duì)源代碼的插樁分析能夠達(dá)到最高的準(zhǔn)確度#65377;
為了調(diào)試的準(zhǔn)確性和性能分析的完備性,本文采用了基于源代碼插樁的分析技術(shù),提出一套具有良好擴(kuò)展性的插樁模板機(jī)制,在此基礎(chǔ)上進(jìn)行ParaVT的整體設(shè)計(jì)#65377;
2.2基本插樁模板庫
為了實(shí)現(xiàn)異構(gòu)環(huán)境下并行調(diào)試分析的可擴(kuò)展性,ParaVT的插樁庫設(shè)計(jì)應(yīng)盡可能與編程語言及并行庫無關(guān)#65377;因此插樁庫的具體實(shí)現(xiàn)應(yīng)與其語義分離開來#65377;為此設(shè)計(jì)了一套基本插樁模板庫,ParaVT將根據(jù)插樁庫函數(shù)的語義修改用戶代碼#65377;具體函數(shù)的實(shí)現(xiàn),則可以由用戶修改和擴(kuò)充#65377;
基本的插樁模板包括程序開始/退出模板#65380;函數(shù)開始/退出模板#65380;靜態(tài)斷點(diǎn)模板以及變量記錄模板#65377;在這幾個(gè)模板中主要記錄了程序或者函數(shù)開始#65380;結(jié)束的位置以及時(shí)間;對(duì)于函數(shù)來說,還記錄了函數(shù)被調(diào)用的信息#65377;此外用戶還可以在這些模板中加入自己的初始化代碼,收集一些程序運(yùn)行的相關(guān)信息[9]#65377;
靜態(tài)變量模板用于記錄要插樁的所有全局變量,用戶也可以在此模板中添加新的變量#65377;該模板默認(rèn)這些變量為全局變量#65377;此變量模板的增加,為并行程序的調(diào)試提供了程序內(nèi)存變量的查看功能#65377;
變量記錄模板是較之前工作新添加的模板,這個(gè)模板主要是為并行調(diào)試工作提供了程序運(yùn)行過程中內(nèi)存變量的解析#65377;當(dāng)程序進(jìn)入斷點(diǎn)調(diào)試狀態(tài)后,將服務(wù)器端也就是遠(yuǎn)程運(yùn)行節(jié)點(diǎn)上的當(dāng)前內(nèi)存變量值取出#65377;從各個(gè)節(jié)點(diǎn)獲得的信息數(shù)據(jù)需基于BSD socket進(jìn)行網(wǎng)絡(luò)傳輸,并使用流格式(stream sockets)[11]的Internet套接字#65377;該模板的設(shè)計(jì)希望能夠在將來有新的異構(gòu)操作系統(tǒng)平臺(tái)的節(jié)點(diǎn)加入時(shí),只需對(duì)部屬到該節(jié)點(diǎn)的集群守護(hù)進(jìn)程設(shè)置進(jìn)行改動(dòng),而保留現(xiàn)有的監(jiān)控節(jié)點(diǎn)和通信模塊不變#65377;因此通過對(duì)數(shù)據(jù)類型制定一個(gè)協(xié)議,規(guī)定按照某種具體的格式進(jìn)行通信,稱這種新的協(xié)議為一種通用類型系統(tǒng)#65377;采用這種方法在控制網(wǎng)絡(luò)通信量及支持節(jié)點(diǎn)擴(kuò)展方面都有一定優(yōu)勢(shì)#65377;
ParaVT的通用類型系統(tǒng)實(shí)際上是一種基于C語言的數(shù)據(jù)類型的通用描述,包括數(shù)據(jù)類型#65380;名字以及內(nèi)部成員順序等,從邏輯上對(duì)每一種數(shù)據(jù)類型進(jìn)行了定義#65377;另外,在自動(dòng)插樁時(shí)還為每種數(shù)據(jù)類型自動(dòng)生成一段線序化代碼,以字符流形式發(fā)送數(shù)據(jù),以避免因不同系統(tǒng)下數(shù)據(jù)類型自動(dòng)填充產(chǎn)生的問題#65377;
在建立對(duì)于C語言的通用類型系統(tǒng)時(shí),選取了一系列屬性用于對(duì)數(shù)據(jù)類型進(jìn)行描述#65377;其中不僅定義了一個(gè)類型最基本的屬性,還包括了針對(duì)用戶自定義類型以及遞歸定義類型的屬性,是所有類型遵循的統(tǒng)一標(biāo)準(zhǔn)#65377;下面是對(duì)一個(gè)數(shù)據(jù)類型完整描述的定義:
typedef struct tagTypeDescription
{
int iType; //類型ID
int iPointerLevel; // 指針級(jí)數(shù),針對(duì)于指針類型
int iSign; // 是否帶符號(hào),array/struct/enum類型不適用
TreeNode* lpDeclNode; // 創(chuàng)建該類型的語法樹節(jié)點(diǎn)
std∷string szTypeName; // 類型名
std∷string szHandlerName; //類型處理函數(shù)的名字
std∷vector
std∷vector
// 成員聲明,針對(duì)結(jié)構(gòu)體情況
struct tagTypeDescription*lpBaseType;
// 基類型指針,針對(duì)遞歸的類型定義
}
TYPE_DESC;
在具體對(duì)數(shù)據(jù)類型進(jìn)行描述之前,還需要知道在程序中都有哪些變量#65377;在進(jìn)行代碼分析#65380;生成語法樹的過程中,每識(shí)別出一個(gè)標(biāo)志符,經(jīng)檢查若是一個(gè)用戶自定義類型,會(huì)將其加入類型表,從而可以構(gòu)建起一個(gè)程序中所有變量類型的列表TypeDescTable#65377;但實(shí)際上一個(gè)C語言并行程序中定義的變量類型往往非常多,進(jìn)行調(diào)試分析時(shí)并非會(huì)用到所有定義的變量類型#65377;如果不加考慮地給所有類型生成線序化代碼無疑會(huì)給程序增加大量無效的代碼,反而影響運(yùn)行效率#65377;因此在實(shí)際對(duì)變量類型進(jìn)行線序化時(shí)將只針對(duì)那些獲得使用的變量進(jìn)行#65377;
具體而言,在自動(dòng)插樁階段,在每個(gè)函數(shù)入口以及靜態(tài)斷點(diǎn)處都會(huì)將當(dāng)前用到的變量記錄下來#65377;這樣插樁結(jié)束后可以得到一個(gè)有效變量類型的列表UsedTypeTable,并且每個(gè)類型在UsedTypeTable中只出現(xiàn)一次#65377;在此基礎(chǔ)上進(jìn)一步對(duì)這些類型進(jìn)行分析#65377;
2.3基本插樁模板的實(shí)現(xiàn)
ParaVT的代碼分析模塊對(duì)并行程序的源代碼經(jīng)過詞法語法分析后,生成了源代碼的語法樹,以及用于記錄程序中函數(shù)#65380;變量等信息的配置文件#65377;在插樁過程中,ParaVT將自動(dòng)生成針對(duì)每個(gè)函數(shù)的插樁模板函數(shù)調(diào)用,以一個(gè)標(biāo)志符identifier節(jié)點(diǎn)的形式將該調(diào)用的函數(shù)模板直接插入語法樹中正確的位置,從而實(shí)現(xiàn)了對(duì)函數(shù)體的插樁#65377;
以記錄變量的模板函數(shù)為例,假設(shè)模板函數(shù)形式如下:
void Template_Func(paramlist);
該函數(shù)調(diào)用插入函數(shù)體的過程如下:
void instrument_Template_Func(TreeNode_Func*lpFunc)
{
for (int i=0; i { //生成變量記錄函數(shù)文字模板 Sprintf(char*VariableStatement,Template_Func(paramlist),paramlist); //為文字模板生成一個(gè)Identifier節(jié)點(diǎn) lpVariableStatement=CreateIdentifierNode(VariableStatement); lpComma=CreateTerminalNode(\";\"); /*為分號(hào)生成一個(gè)terminal節(jié)點(diǎn),將函數(shù)模板和分號(hào)組合在一起生成一個(gè)語句,插入變量聲明開始處*/ Insert(VarDeclsBegin(),new TreeNode_Expr_Stat(lpVariableStatement,lpComma)); } } 2.4對(duì)并行庫函數(shù)的包裝 由于并行庫函數(shù)是進(jìn)行并行程序調(diào)試及性能分析的關(guān)鍵#65377;除插入基本模板外,還需要對(duì)此類函數(shù)進(jìn)行進(jìn)一步包裝#65377;在對(duì)并行函數(shù)進(jìn)行包裝之前,事先把所有待插樁的并行函數(shù)進(jìn)行分類#65377;在所有并行庫函數(shù)中,主要關(guān)心發(fā)生通信的函數(shù)和一些與進(jìn)程狀態(tài)相關(guān)的函數(shù)#65377;這些函數(shù)可總結(jié)為以下幾類:發(fā)送函數(shù)#65380;接收函數(shù)#65380;廣播函數(shù)#65380;組通信函數(shù)和特殊功能函數(shù)#65377;表1列出了所有通信原語定義的形式化表達(dá)#65377; 將具體通信函數(shù)抽象成一組通信事件,用于實(shí)現(xiàn)對(duì)函數(shù)的包裝#65377;主要包括程序入口/出口事件#65380;函數(shù)入口/出口事件#65380;開始/完成發(fā)送事件#65380;開始/完成接收事件#65380;開始/完成調(diào)試事件等#65377;對(duì)于一類通信函數(shù),在包裝代碼中首先記錄需要分析的各項(xiàng)參數(shù);然后根據(jù)這些參數(shù)初始化對(duì)應(yīng)的通信原語,并且將生成的原語發(fā)送給服務(wù)器;最后再調(diào)用原并行庫函數(shù)進(jìn)行消息傳遞通信,從而使用戶可以通過包裝庫函數(shù)間接調(diào)用并行庫函數(shù)#65377;這一層抽象保證了性能參數(shù)收集模塊只需要考慮通信原語的解釋,而無須了解具體的并行環(huán)境#65377; 以PVM為例,從形式上來說,將包裝實(shí)現(xiàn)代碼獨(dú)立地放在一個(gè)文件中,然后在用戶代碼的頭上插入包裝函數(shù)的聲明#65377;對(duì)于所有的PVM函數(shù),都在函數(shù)的名字前面加上para_vt_,然后在參數(shù)列表前面加上文件名和行號(hào)這兩個(gè)參數(shù),作為對(duì)這個(gè)函數(shù)的包裝#65377;對(duì)于MPI庫函數(shù)的包裝形式與PVM函數(shù)相似#65377;以發(fā)送類函數(shù)為例,假設(shè)其函數(shù)定義為 int pvm_send(int tid, int msgtag); 對(duì)于這個(gè)函數(shù)的包裝是 int para_vt_pvm_send(int para_vt_iFile, int para_vt_iFunc, int para_vt_iLine, int tid, int msgtag) 包裝后函數(shù)的執(zhí)行過程如下: a)通知監(jiān)控節(jié)點(diǎn)開始發(fā)送; b)記錄開始發(fā)送的時(shí)間; c)調(diào)用原并行庫函數(shù)pvm_send(); d)記錄發(fā)送結(jié)束時(shí)間,收集發(fā)送函數(shù)執(zhí)行的參數(shù)信息,如進(jìn)程號(hào)#65380;發(fā)送數(shù)據(jù)量等; e)根據(jù)最終發(fā)送的結(jié)果,把上述所有的進(jìn)程通信參數(shù)信息發(fā)送回監(jiān)控節(jié)點(diǎn)#65377; 另外對(duì)于一些用戶調(diào)用的庫函數(shù)的跟蹤,采用用戶自定義的函數(shù)包裝#65377;其原理與并行庫函數(shù)的包裝一致,只是這些函數(shù)的包裝代碼是由用戶提供的#65377;此外在用戶自定義的函數(shù)中,還可以調(diào)用基本模板的實(shí)現(xiàn)函數(shù)#65377; 2.5插樁結(jié)果的干擾補(bǔ)償 在代碼插樁過程中,插樁的程序以及事件在一定程度上對(duì)源程序產(chǎn)生了干擾,其主要來源有兩個(gè)方面:a)遠(yuǎn)程運(yùn)行端需要把程序運(yùn)行中的實(shí)時(shí)數(shù)據(jù)發(fā)送回監(jiān)控端,需要一些系統(tǒng)開銷;同時(shí)由于網(wǎng)絡(luò)傳輸?shù)牟环€(wěn)定性所帶來的傳輸延遲等錯(cuò)誤,都會(huì)擾亂源程序的執(zhí)行#65377;b)插樁程序運(yùn)行本身的時(shí)間消耗#65377;由于調(diào)試事件和包裝程序需要對(duì)節(jié)點(diǎn)的硬件時(shí)鐘訪問多次,同時(shí)一些信息需要存入緩沖區(qū)中,也會(huì)對(duì)程序產(chǎn)生干擾#65377;這些干擾帶來的直接結(jié)果使得程序的執(zhí)行時(shí)間延長,同時(shí)可能造成不同節(jié)點(diǎn)上事件執(zhí)行的順序發(fā)生改變#65377; 在ParaVT中通過定義一個(gè)干擾的補(bǔ)償模塊,在遠(yuǎn)程運(yùn)行節(jié)點(diǎn)產(chǎn)生程序跟蹤事件的同時(shí),根據(jù)時(shí)間進(jìn)行排序,同時(shí)發(fā)送到干擾補(bǔ)償模塊中#65377;干擾補(bǔ)償能夠盡可能地減小由于調(diào)用程序調(diào)試事件及事件刷新帶來的耗費(fèi);輸出更新后的跟蹤文件,并發(fā)送到監(jiān)控端進(jìn)行動(dòng)態(tài)的顯示和分析#65377;干擾補(bǔ)償模塊從最大限度上對(duì)源程序進(jìn)行恢復(fù),在補(bǔ)償調(diào)試和性能事件帶來的延遲的同時(shí),保持了事件的相對(duì)順序#65377;保證了程序運(yùn)行中節(jié)點(diǎn)間的發(fā)送#65380;接收和阻塞等關(guān)系的一致性,從而最終防止程序運(yùn)行中死鎖的發(fā)生#65377; 3系統(tǒng)實(shí)現(xiàn)及實(shí)驗(yàn)結(jié)果 3.1系統(tǒng)實(shí)現(xiàn) 通過對(duì)并行程序源代碼的插樁,可以對(duì)并行程序的運(yùn)行進(jìn)行實(shí)時(shí)跟蹤,分析各個(gè)進(jìn)程的負(fù)載平衡和記錄程序運(yùn)行中各個(gè)進(jìn)程之間的通信量#65377;圖2的進(jìn)程通信圖中,進(jìn)程之間的通信關(guān)系用線條表示,發(fā)送應(yīng)與接收一一對(duì)應(yīng)#65377;當(dāng)用戶點(diǎn)擊單個(gè)進(jìn)程上代表一定通信行為的色塊時(shí),源代碼定位窗口將自動(dòng)定位到源代碼中發(fā)生該通信行為的語句#65377; 圖3負(fù)載平衡以多邊形的形式顯示所選擇的各節(jié)點(diǎn)的負(fù)載情況,每一頂點(diǎn)到圓心距離代表該節(jié)點(diǎn)負(fù)載大小,多邊形的形狀規(guī)則表示負(fù)載相對(duì)平衡,反之則負(fù)載不均衡#65377; 圖4的通信矩陣會(huì)以矩陣圖形式顯示所選擇的各節(jié)點(diǎn)彼此之間的通信量情況,點(diǎn)擊某一矩陣塊可顯示某兩點(diǎn)間通信量的具體數(shù)值#65377;此外用戶可自由選定需要的進(jìn)程進(jìn)行查看#65377; 3.2實(shí)驗(yàn)結(jié)果 實(shí)驗(yàn)測(cè)試環(huán)境是曙光3000高性能并行計(jì)算#65380;AIX操作系統(tǒng)#65380;多個(gè)PC計(jì)算機(jī)節(jié)點(diǎn)#65380;Linux操作系統(tǒng),在此異構(gòu)環(huán)境下進(jìn)行PVM并行程序的性能分析及調(diào)試監(jiān)控#65377; 在異構(gòu)機(jī)群節(jié)點(diǎn)上運(yùn)行同樣的工作任務(wù),通過反復(fù)統(tǒng)計(jì)比較在運(yùn)行和不運(yùn)行本機(jī)群負(fù)載監(jiān)控系統(tǒng)的兩種情況下,測(cè)算出程序計(jì)算時(shí)間影響率平均小于10%#65377;通過反復(fù)測(cè)試并行程序在運(yùn)行和不運(yùn)行本監(jiān)控系統(tǒng)兩種情況下可知,插樁過程對(duì)于源代碼的運(yùn)行時(shí)間不會(huì)有大幅度的提高,從而不會(huì)降低源程序的運(yùn)行效率,并且如果源程序運(yùn)行時(shí)間較長#65380;規(guī)模較大,插樁后程序運(yùn)行時(shí)間也比原來偏離較多;當(dāng)程序規(guī)模較小時(shí),運(yùn)行ParaVT前后程序的執(zhí)行時(shí)間沒有明顯的差別#65377; 4結(jié)束語 高性能并行計(jì)算發(fā)展到今天,以異構(gòu)環(huán)境為特點(diǎn)的大規(guī)模并行應(yīng)用向并行調(diào)試以及性能分析領(lǐng)域的研究提出了更大的挑戰(zhàn)#65377;本文正是在此基礎(chǔ)上提出了一套異構(gòu)體系下的并行調(diào)試及性能分析方法#65377;基于該方法實(shí)現(xiàn)的原型系統(tǒng)可對(duì)PVM和MPI的并行程序進(jìn)行調(diào)試分析,同時(shí)支持多種編程語言#65377;該系統(tǒng)在曙光3000系統(tǒng)上運(yùn)行,具有良好的調(diào)試分析性能;同時(shí)由于模塊之間相互獨(dú)立,該系統(tǒng)易于向其他并行計(jì)算環(huán)境擴(kuò)展#65377;本項(xiàng)目的研究成果今后將進(jìn)一步進(jìn)行完善,使其能支持多種并行環(huán)境和機(jī)群系統(tǒng)#65377; 參考文獻(xiàn): [1]KOHL J A,GEIST G A.The PVM 3.4 tracing facility and XPVM 1.1[EB/OL].[2006-08-30].http://ieeexplore.ieee.org/iel2/3511/10445/00495474.pdf?tp=arnumber=495474isnumber=10445. [2]BARTON P M, JEFFREY K H, MARK D C. The ParaDYN parallel performance measurement tool[J]. IEEE Computer, 1995,28(11):37-46. [3]XMPI[EB/OL].(2006-0212).[2006-08-20].http://www.lammpi.org/software/xmpi/. [4]TRUONG H L, FAHRINGER T, MADSEN G, et al. On using SCALEA for performance analysis of distributed and parallel programs[C]//Proc of ACM/IEEE Conference on Supercomputing. Berlin: SpringerVerlag, 2001. [5]TotalView[EB/OL].[2006-08-20].http://www.etnus.com/Products/TotalView/. [6]劉強(qiáng),張兆慶,喬如良.程序調(diào)試#65380;監(jiān)測(cè)與性能分析的一體化工具[J].軟件學(xué)報(bào),1999,10(2):220-224. [7]鄢超,劉淘英,陳國良.基于機(jī)群操作系統(tǒng)的并行調(diào)試器[J].計(jì)算機(jī)研究與發(fā)展,2004,41(4):630-636. [8]THIFFAULT C, VOSS M. Dynamic instrumentation of largescale MPI and openMP applications[C]//Proc of the International Parallel and Distributed Processing Symposium. Nice, France:[s.n.],2003. [9]王忱,劉吟,蔣昌俊,等.一種并行程序性能分析工具的體系結(jié)構(gòu)設(shè)計(jì)[J].信息技術(shù)與信息化,2004(5):29-31. [10]KUMAR N, CHILDERS B R, SOFFA M L. Tdb: a sourcelevel debugger for dynamically translated programs[C]//Proc of the 6th International Symposium on Automated Analysisdriven Debugging. New York: ACM Press, 2005:123132. [11]GAY W W.實(shí)戰(zhàn)Linux Socket編程[M].詹俊鵠,于衛(wèi),譯.西安:西安電子科技大學(xué)出版社,2002:110128. “本文中所涉及到的圖表、注解、公式等內(nèi)容請(qǐng)以PDF格式閱讀原文”