我正在查看mpi.h
标题,我对PMPI_Init
函数感到困惑。它位于MPI_Init
声明之后,看起来完全一样。但是,Msmpi.dll
(例如)没有MPI_Init
导出,只有PMPI_Init
。
这些PMPI_
功能是什么?
答案 0 :(得分:3)
PMPI_
个入口点是MPI Profiling Interface的一部分。
默认情况下,这些符号只是引用它们的MPI_
函数名称,但通过将它们定义为API的一部分,它们使工具可以轻松地将其自身插入到MPI调用中以进行简单的性能分析或跟踪。 lots examples Most如何使用它们以及如何使用它们。
profiling Tools interface工具利用此功能执行时间MPI通信例程,计算以特定大小发送/接收的消息数等,而无需修改用户代码;你只需要在配置文件库中链接。
Profiling接口不必严格用于分析,当然 - 已经有项目使用分析接口进行通信正确性检查(确保发送和接收匹配),简单的启发式死锁测试等
分析界面是MPI库的唯一标准工具界面已有一段时间了,但现在还有更丰富的ftp://ftp.agrc.utah.gov/UtahSGID_Vector/UTM12_NAD83/HEALTH/UnpackagedData/HealthDistricts2015/_Statewide/HealthDistricts2015_shp.zip。
答案 1 :(得分:2)
您正在查看MPI分析界面。对于每个MPI函数,还有一个类似的PMPI函数,它只是前缀不同。
作为用户,您只应拨打MPI
版本,然后忽略PMPI
版本。
这是一种允许工具开发人员拦截对MPI
函数的调用并在内部调用PMPI
版本的机制。通常这是实现的,所有函数都实现为PMPI
函数,MPI
函数作为指向它们的弱符号。然后,该工具可以用自己的包装器实现替换弱符号,并仍在内部调用PMPI
函数。
// Normal case
user --calls--> libmpi:MPI_Init --redicrects to--> libmpi:PMPI_Init (implementation)
// Tool case
user --calls--> libtool:MPI_Init (does tool things) --calls--> libmpi:PMPI_Init (implementation)
您可以在MPI standard的第14.2节中找到更多信息。一般来说,我强烈建议您查看功能签名的标准,而不是标题。