MARMOT簡介 乙個MPI程式檢測分析工具

2021-06-15 20:22:54 字數 2654 閱讀 7426

marmot簡介――乙個mpi程式檢測分析工具

marmot簡介――乙個mpi程式檢測分析工具

(c) icymoon@nku

$date:

2006-4-30

0.並行程式程式設計與分析除錯的困難

除了序列程式的所有問題之外,mpi並行程式還會有一些其它的問題存在:

(1)mpi

程式的複雜性

顯然,並行程式要比序列程式難寫,比如,一些不當的訊息傳遞方式可能導致死鎖;多程序之間的協同工作(任務的對映與分發等)導致並行程式比序列程式更難於駕馭。而且,不同版本的mpi實現中一些細節上的差異也會使問題變得更加複雜,比如,程式的可移植性。

(2)除錯並行程式的困難

在乙個gdb受到廣泛讚譽的時代,除錯並行程式仍然是乙個有難度的問題。當不同的程序執行於不同的物理節點上的時候,單一節點上的乙個debuger是無法知道程序要等待的訊息何時才會到達的,也難於知道其它相關程序的運**況(在某些程式中這是不必要的,但是在大多數程式中,這是需要的)。

1.並行程式除錯工具簡介

目前為止,有幾種不同的思路來做並行程式的偵錯程式:

(1)擴充套件傳統的除錯工具,對每個程序都起動乙個偵錯程式。像totalview, ddt,p2d2(這幾個都不是free的),還有mpigdb,是以gdb做為後台的。

(2)提供乙個mpi庫的除錯版。像mpich那樣,檢測內部錯誤,也檢查使用者的誤用(比如型別不匹配等問題)。

(3)開發單獨的工具來檢查mpi應用程式的問題。mpi-check, umpire,還有marmot。mpi_check目前支援fortran,而umpire只限於共享記憶體的平台。

2.marmot

簡介2.1

作者&支援

bettina krammer

katrin bidmon

matthias mueller

支援:歐洲crossgrid

專案支援。

2.2設計目標&主要功能

portability:

檢查程式是否遵循mpi標準,以確認程式能執行於任何平台。

scalability:

不需要使用者干涉而使偵錯程式在多個程序中執行。

reproducibility:

檢測可能的競態條件與死鎖。

2.3設計結構圖(出自[3])

3.對mpi程式的檢查內容

marmot使用乙個額外的程序做除錯程序,不需要更改任何應用程式的原始碼,而是通過mpi的「profiling」介面(

mpi_pcontrol

)來截獲mpi呼叫然後進行分析。

(1)mpi

環境(mpi_init, mpi_get_processor_name, mpi_finalize):

檢查在mpi_init前和mpi_finalize之後是否有不恰當的mpi呼叫,以及mpi_init是否被多次呼叫。目前為止,對mpi_get_processor_name沒有任何檢查。

(2)通訊環境(mpi_comm_size, mpi_comm_rank, mpi_barrier):

檢查乙個mpi通訊域是否合法,比如不能用mpi_comm_null,如果是使用者自定義的通訊域,要看建立得是否合適並且在使用時沒被釋放掉。

(3)資料型別的構造(mpi_type_extent, mpi_type_struct, mpi_type_hvector, mpi_type_commit):

檢測呼叫引數的型別是否合法,對於mpi_type_struct, mpi_type_hvector,還要檢查資料長度與個數是否大於0。還要防止mpi_type_commit重複遞交已經遞交過的資料型別。

(4)點對點通訊(mpi_sent, mpi_recv, mpi_sendrecv):

檢查呼叫引數是否合法,包括通訊域、標識、資料型別、數量,源/目標程序等。資料型別不能是mpi_datatype_null,資料的數量與長度也不能小於或等於0,標識與程序號也不可以超出範圍。

還有乙個要考慮的問題是不同的mpi實現中,傳送與接收訊息(標準模式)給的緩衝區大小不同,這就給程式的可移植性帶來問題。所以,最好不要過分依賴於mpi實現中給出的緩衝區。

(5)其它一些操作(mpi_bcast, mpi_reduce, mpi_gather, mpi_gatherv, mpi_scatterv):

除了檢查(4)中提到的引數外,還要檢查root程序是否合法,對一mpi_reduce,還得檢查operator是否合法,而對於mpi_gatherv和mpi_scatterv,要檢查偏移量。

除了上述呼叫外,marmot支援了所有mpi-1.2標準中的呼叫,但是並沒有實現所有情況的檢測(這太困難了)。

目前,關於死鎖的檢測採用的是超時機制,由除錯服務程序等待並給出警告。

對於競態條件,則列出所有的源程序呼叫,比如要從mpi_any_source接收訊息的時候。marmot不會記錄並追蹤這些問題。

從測試結果來看,這樣的分析除錯工具效率還是很不錯的。

4.參考文獻

[2]

[3]

marmot-

mpi

analysis and checking tool

[4]

5.

第乙個mpi程式in linux

有時候安裝完畢,顯示的螢幕區域只有一部分,小於應該顯示的空間,這時需要調整螢幕解析度,對於ubuntu 804來說,設定包含在首選項裡 另外裝完了,記得把.iso檔案從cd rom拿出來,否則啟動就停在啟動條那了 3.安裝mpich 我採用的是1.2.7版本的mpich tar xzvf mpich...

如何寫乙個MPI程式

2.輸入命令sudo apt get install y build essential,通過包管理器安裝build essential來實現基礎的編譯環境。3.輸入gcc v來檢視gcc版本資訊。5.輸入mpicc v來觀察mpicc版本資訊。6.輸入 cd 切換到使用者家目錄。7.輸入vim m...

求助,請進來看乙個簡單的MPI程式

是 mpi與openmp並行程式設計 c語言版 的作業 91頁裡面習題4.11 通過計算在曲線下圖形的面積來計算pi,乙個簡單的方法是使用矩形規則,將區間 0,1 分成k個等長子區間。用這些高度可以構造k個矩形。這些矩形的面積逼近曲線下圖形的面積。如下是課文中的c程式 define interval...