Java 有没有办法按升序和降序对Mpi中的排名进行排序
我正试图通过it等级的升序和降序来显示Hello World消息 我读过关于双音排序的书,但不知道如何实现它Java 有没有办法按升序和降序对Mpi中的排名进行排序,java,eclipse,mpj-express,Java,Eclipse,Mpj Express,我正试图通过it等级的升序和降序来显示Hello World消息 我读过关于双音排序的书,但不知道如何实现它 int[] datalist = new int[8]; MPI.Init(args); int rank = MPI.COMM_WORLD.Rank(); int size = MPI.COMM_WORLD.Size(); System.out.println("Hello World from <"+rank+"> of total "+size+" processe
int[] datalist = new int[8];
MPI.Init(args);
int rank = MPI.COMM_WORLD.Rank();
int size = MPI.COMM_WORLD.Size();
System.out.println("Hello World from <"+rank+"> of total "+size+" processes");
MPI.Finalize();
int[]datalist=newint[8];
MPI.Init(args);
int rank=MPI.COMM_WORLD.rank();
int size=MPI.COMM_WORLD.size();
System.out.println(“Hello World from of total”+大小+”进程);
MPI.Finalize();
我从这个编码中得到了输出,但不知道如何通过排序来输出,我真的需要帮助,因为我对mpi的东西还是很新的问题不是很清楚。可以用两种方式来解释:
希望这有帮助。默认情况下,Hello World程序的输出是不确定的。 但可以强制该程序按顺序输出Hello World,即强制MPI进程的顺序执行 说明:[假设您熟悉SPMD编程模型] 让我们看看这个程序的执行顺序 步骤1:秩为0的进程将首先到达print语句,并将获得输出通道来打印它。 如果,所有其他进程将进入
else,并且必须在Recv
函数调用处等待。注意:Recv
是阻塞呼叫,需要匹配的Send
。请参阅完整的文档以获得全面的解释
步骤2:等级为0的进程将向等级为1(等级+1)的进程发送消息。现在,随着匹配的Send
被发布,秩1进程从阻塞Recv
中出来,并将获得下一轮打印输出。之后,它将向下一个进程(排名+1)发送一条消息,让它轮到打印
下一步:在每个步骤中,else if
中的一个进程将获得一个匹配的Send
,并将从阻塞Recv
中出来,打印Hello World,并将消息发送到下一个列组以允许打印。最后,最后一个else
语句是最后一个worker打印输出而不发送消息的情况。然后执行完毕
int[] datalist = new int[8];
MPI.Init(args);
int rank = MPI.COMM_WORLD.Rank();
int size = MPI.COMM_WORLD.Size();
int buff[] = new int [1];
buff[0] = rank;
int tag = 1001;
if (rank == 0){
System.out.println("Hello World from <"+rank+"> of total "+size+" processes");
MPI.COMM_WORLD.Send(buff, 0, 1, MPI.INT, rank+1, tag);
}
else if (rank < size-1){
MPI.COMM_WORLD.Recv(buff, 0, 1, MPI.INT, rank-1, tag);
System.out.println("Hello World from <"+rank+"> of total "+size+" processes");
MPI.COMM_WORLD.Send(buff, 0, 1, MPI.INT, rank+1, tag);
}
else{
MPI.COMM_WORLD.Recv(buff, 0, 1, MPI.INT, rank-1, tag);
System.out.println("Hello World from <"+rank+"> of total "+size+" processes");
}
MPI.Finalize();
int[]datalist=newint[8];
MPI.Init(args);
int rank=MPI.COMM_WORLD.rank();
int size=MPI.COMM_WORLD.size();
int buff[]=新int[1];
buff[0]=等级;
int tag=1001;
如果(秩==0){
System.out.println(“Hello World from of total”+大小+”进程);
MPI.COMM_WORLD.Send(buff,0,1,MPI.INT,rank+1,tag);
}
否则,如果(排名<1号){
MPI.COMM_WORLD.Recv(buff,0,1,MPI.INT,rank-1,tag);
System.out.println(“Hello World from of total”+大小+”进程);
MPI.COMM_WORLD.Send(buff,0,1,MPI.INT,rank+1,tag);
}
否则{
MPI.COMM_WORLD.Recv(buff,0,1,MPI.INT,rank-1,tag);
System.out.println(“Hello World from of total”+大小+”进程);
}
MPI.Finalize();
对于4个过程,输出始终为:
Hello World from <0> of total 4 processes
Hello World from <1> of total 4 processes
Hello World from <2> of total 4 processes
Hello World from <3> of total 4 processes
Hello World共有4个进程
Hello World共有4个进程
Hello World共有4个进程
Hello World共有4个进程
如何按升序和降序排序?实际上,我需要按升序和降序排序。所以它可能是一种升序编码,然后是另一种降序编码。如果可能的话,请尽量不要求助于解释。如果这个问题说得不够清楚,请在评论中要求作者澄清。我想我是在试图做出你的第二个解释:如何实现gather()和reduce()?