链接使用MPI的库,我不知道,幕后发生了什么

时间:2014-06-04 23:49:38

标签: mpi dynamic-linking openmpi

我正在链接一个使用OpenMPI内部进程支持构建的库。

我的应用程序是在没有MPI支持的情况下构建的,我链接到这个库。我不知道关于mpi的幕后发生了什么。如果库A从openmpi加载/调用函数,这是否意味着我可以使用runmpi运行我的应用程序以使库进程自行分发?如果我决定使应用程序MPI知道并且想要使用mpich2而不是OpenMPI,或者如果我想使用与mpich而不是openmpi链接的库B,那么库和我的应用程序是否会在各自的消息空间中表现自己?是否通常强制应用程序开发人员明确链接mpi实现以使用启用mpi的库?

1 个答案:

答案 0 :(得分:1)

通常的做法是开发人员最终编译并将所有内容与单个MPI实现相关联。如果存在依赖于MPI的库,我通常会在系统上看到每个可用MPI实现的库的构建。如果您能够以某种方式设法链接两个MPI实现,并提出单独的MPI_InitMPI_COMM_WORLD定义以在单独的代码段中使用,它甚至可能工作。不过,这真的很脆弱。不要这样做。

至于你之前的问题,几乎可以使用MPI将应用程序调用到库中,并让它做正确的事情。首先,代码必须在某处调用MPI_Init 。客户端中的内容或完全封装在库中的内容可能会有所不同。图书馆必须知道它应该使用的 MPI通信器;通常客户端代码会传入一个。最后,客户端代码必须考虑到它将在所有MPI进程上运行的事实,而不仅仅是其中一个。因此,如果它执行任何只在一个进程中发生的IO或其他计算,那么您需要相应地设置条件。