C++ 序列化mpi线程
是否仍然需要序列化MPI代码的特定部分?例如,将信息打印到屏幕上时。如下所示:C++ 序列化mpi线程,c++,serialization,parallel-processing,mpi,mpich,C++,Serialization,Parallel Processing,Mpi,Mpich,是否仍然需要序列化MPI代码的特定部分?例如,将信息打印到屏幕上时。如下所示: MPI_SERIALIZE(); cerr << "THIS WILL BE PRINTED "; cerr << "IN ORDER" << endl; MPI_END_SERILIZE(); 谢谢MPI不能明确指定类似的内容。但是,您可以使用MPI\u-Gather在一个进程中收集所需的内容/值,并在其中按顺序打印。MPI不能明确指定任何类似的内容。但是,您可以使用MPI
MPI_SERIALIZE();
cerr << "THIS WILL BE PRINTED ";
cerr << "IN ORDER" << endl;
MPI_END_SERILIZE();
谢谢MPI不能明确指定类似的内容。但是,您可以使用
MPI\u-Gather
在一个进程中收集所需的内容/值,并在其中按顺序打印。MPI不能明确指定任何类似的内容。但是,您可以使用MPI\u-Gather
在一个过程中收集所需的内容/值,并在其中按顺序打印它们。我在演示程序中这样做的方式(请注意,由于同步成本高,您只能在小型演示程序中执行此操作;如果您试图控制数据文件的输出,您将使用MPI-IO,如果您试图协调到终端的输出,则最容易将数据发送到任务0并让它完成所有输出)是通过障碍进行循环,类似于这样:
#include <iostream>
#include <mpi.h>
using namespace std;
int main(int argc, char **argv) {
int rank, size;
int ierr;
ierr = MPI_Init(&argc, &argv);
ierr = MPI_Comm_size(MPI_COMM_WORLD, &size);
ierr = MPI_Comm_rank(MPI_COMM_WORLD, &rank);
for (int i=0; i<size; i++)
{
if (i == rank) {
cout << "Hello from task " << rank << " of "
<< size << " world!" << endl;
}
MPI_Barrier(MPI_COMM_WORLD);
}
MPI_Finalize();
return 0;
}
#包括
#包括
使用名称空间std;
int main(int argc,字符**argv){
int等级、大小;
内特里尔;
ierr=MPI_Init(&argc,&argv);
ierr=MPI通信大小(MPI通信世界和大小);
ierr=MPI通信等级(MPI通信世界和等级);
对于(int i=0;i我在演示程序中的方式(请注意,由于同步成本高,您只能在小型演示程序中执行此操作;如果您试图控制数据文件的输出,您将使用MPI-IO,如果您试图协调到终端的输出,则最容易将数据发送到任务0并让它完成所有输出)是通过障碍进行循环,类似于这样:
#include <iostream>
#include <mpi.h>
using namespace std;
int main(int argc, char **argv) {
int rank, size;
int ierr;
ierr = MPI_Init(&argc, &argv);
ierr = MPI_Comm_size(MPI_COMM_WORLD, &size);
ierr = MPI_Comm_rank(MPI_COMM_WORLD, &rank);
for (int i=0; i<size; i++)
{
if (i == rank) {
cout << "Hello from task " << rank << " of "
<< size << " world!" << endl;
}
MPI_Barrier(MPI_COMM_WORLD);
}
MPI_Finalize();
return 0;
}
#包括
#包括
使用名称空间std;
int main(int argc,字符**argv){
int等级、大小;
内特里尔;
ierr=MPI_Init(&argc,&argv);
ierr=MPI通信大小(MPI通信世界和大小);
ierr=MPI通信等级(MPI通信世界和等级);
对于(int i=0;i我不建议在主节点以外的其他节点上输出任何内容,因为-取决于您使用的平台-从节点可能无法处理输出。因此,尽管这很糟糕,但您必须收集所有信息以打印到主节点。我不建议输出任何内容在主节点以外的其他节点上,由于从属节点可能无法处理输出(取决于您使用的平台)。因此,尽管这很糟糕,但您必须收集要打印到主节点的所有信息