我是MPI的新手,想尝试一下它,即围绕它的boost包装器实现;当";MPI恰好开始在多个节点上工作。我在文件中读到:
mpi::environment对象是用主程序中的程序参数(它可以修改(初始化的。该对象的创建将初始化MPI,其销毁将最终确定MPI。在绝大多数Boost.MPI程序中,MPI::environment的一个实例将在程序一开始就以main形式声明。
但是,如果我希望代码在初始化MPI之前做几件事(仅在主节点上(,但不希望在它们周围有if子句,该怎么办。MPI是否只是在几个节点上启动相同的代码,而通信器只是"告诉"不同的节点它们有哪个进程编号?然后开发人员通过子句决定哪个节点执行哪些操作?或者多节点环境实际上是从MPI的实例化开始的吗?我可以这样做吗?例如:
#include <boost/mpi/environment.hpp>
#include <boost/mpi/communicator.hpp>
#include <iostream>
int main(int, char**) {
std::cerr << "I am something on the main process should do." << std::endl;
{
boost::mpi::environment env;
boost::mpi::communicator world;
std::cerr << "I am process " << world.rank() << " of " << world.size() << "." << std::endl;
}
return 0;
}
在我的预期中,这将不局限于增强MPI,因为它只是MPI本身的包装器。
MPI_Init
并计算秩之前,每个MPI进程都会做完全相同的事情。