簡體   English   中英

有沒有辦法在運行時分析 MPI 應用程序? - 在運行時使用 MPI 調用所花費的時間

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM