MPI_ *函数和PMPI_ *函数之间有什么区别?

时间:2017-03-24 15:06:52

标签: mpi

我正在查看mpi.h标题,我对PMPI_Init函数感到困惑。它位于MPI_Init声明之后,看起来完全一样。但是,Msmpi.dll(例如)没有MPI_Init导出,只有PMPI_Init

这些PMPI_功能是什么?

2 个答案:

答案 0 :(得分:3)

PMPI_个入口点是MPI Profiling Interface的一部分。

默认情况下,这些符号只是引用它们的MPI_函数名称,但通过将它们定义为API的一部分,它们使工具可以轻松地将其自身插入到MPI调用中以进行简单的性能分析或跟踪。 lots examples Most如何使用它们以及如何使用它们。

用于MPI代码的

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节中找到更多信息。一般来说,我强烈建议您查看功能签名的标准,而不是标题。