[英]Is there a way to profil an MPI Application during Runtime? - Using the time spent in MPI Calls in runtime
我想知道是否有一種方法可以測量運行時 MPI 調用所花費的時間。 因此,我可以使用它來計算新的負載平衡。
我知道如何使用 OpenMPI 或 Intel 的一些工具來分析和跟蹤程序,但這些都是在運行后使用的。 此外,我嘗試過 FPMPI,但沒有成功,因為無法構建最后一個版本。
“手動”測量在我的應用程序中沒有任何意義,因為它太大了:/
首先,你真的需要對 MPI 等低級通信進行概要分析嗎? 你不能簡單地為你的高級程序計時嗎?
無論如何,編寫自己的 MPI 分析器非常容易。 實際上,所有 MPI 庫(包括 Open MPI)都將其函數(例如MPI_Send
)導出為具有前綴P
的相同 function 符號的弱別名(例如PMPI_Send
)。 您需要做的就是使用與 MPI 庫中的原型相同的原型定義自己的函數。 在內部,更新您的呼叫計數器,啟動計時器,然后使用P
前綴調用原始 MPI function,並在返回時停止計時器:
extern "C"
int MPI_Send(void *buf, int count, MPI_Datatype dtype, int dest, int tag, MPI_Comm comm) {
// Update call counters and start the timer
calls["MPI_Send"]++;
timers["MPI_Send"].start();
// Call the original MPI function
int result = PMPI_Send(buf, count, dtype, dest, tag, comm);
// Stop the timer
timers["MPI_Send"].stop();
return result;
}
extern "C"
部分很重要,否則如果您在 C++ 中寫入,您將不會覆蓋正確的弱符號。
這種從 MPI 庫中覆蓋符號的能力是標准化的 - 請參閱當前版本標准中的#14.2 Profiling Interface 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.