Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MPI_*函数和PMPI_*函数之间有什么区别?_Mpi - Fatal编程技术网

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

MPI_*函数和PMPI_*函数之间有什么区别?,mpi,Mpi,我正在查看mpi.h标题,对PMPI_Init函数感到困惑。它放在MPI_Init声明的后面,看起来完全一样。但是,Msmpi.dll(例如)没有MPI_Init导出,只有PMPI_Init 这些PMPI函数是什么?您正在查看MPI评测界面。对于每个MPI函数,还有一个类似的PMPI函数,只是前缀不同 作为用户,您应该只调用MPI版本,而忽略PMPI版本 这是一种机制,允许工具开发人员拦截对MPI函数的调用,并在内部调用PMPI版本。通常这是这样实现的:所有函数都作为PMPI函数实现,而MPI函

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


这些PMPI函数是什么?

您正在查看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)

您可以在本手册第14.2节中找到更多信息。一般来说,我强烈建议查看标准中的函数签名等,而不是标题。

入口点是标准的一部分

默认情况下,这些符号只是引用它们的
MPI\uuu
函数名称,但是通过将它们定义为API的一部分,它们使得工具可以很容易地围绕MPI调用插入它们自己,以进行简单的性能分析或跟踪。它们的工作原理和使用方法有很多种

MPI代码工具利用这一点来做一些事情,如时间MPI通信例程、计算发送/接收的特定大小的消息数量等,而无需修改用户代码;您只需在分析库中进行链接

当然,评测接口不必严格用于评测,有些项目使用评测接口进行通信正确性检查(确保发送和接收匹配)、简单的启发式死锁测试等

一段时间以来,评测接口是MPI库的唯一标准工具接口,但现在也有了更丰富的接口