📄 q1.cpp
字号:
# include <mpi.h>
# include <stdio.h>
# define NPROCS 8
int main(argc,argv)
int argc;
char *argv[]; {
MPI_Status status;
MPI_Request request;
int rank, new_group1,new_group2,rank1,rank2,ranks3,sendbuf,recvbuf, numtasks;
//new_rank,
int ranks1[8]={0,1,2,3,4,5,6,7};
//int ranks1[4]={0,1,2,3}, ranks2[4]={4,5,6,7};
MPI_Group orig_group;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &numtasks);
if (numtasks != NPROCS) {
printf("Must specify MP_PROCS= %d. Terminating.\n", NPROCS);
MPI_Finalize();
}
MPI_Comm_group(MPI_COMM_WORLD, &orig_group);
//if (rank <= NPROCS/2) {
//MPI_Group_incl(orig_group, NPROCS/2, ranks, &new_group1);
//}
//else {
//MPI_Group_incl(orig_group, NPROCS/2, ranks, &new_group2);
//}
MPI_Group_incl(orig_group,NPROCS/2,ranks1,&new_group1);
MPI_Group_excl(orig_group,NPROCS/2,ranks1,&new_group2);
MPI_Group_rank(new_group1,&rank1);
MPI_Group_rank(new_group2,&rank2);
if (rank1 == MPI_UNDEFINED)
{
//printf("rank1 undefined");
if(rank2 < NPROCS/2)
{
//int MPI_Group_translate_ranks(MPI_Group group1, int n,
//int *ranks1, MPI_Group group2, int *ranks2)
MPI_Group_translate_ranks(new_group1,1,&rank2,orig_group,&ranks3);
}
else
{
ranks3 = MPI_UNDEFINED;
}
}
else
{
MPI_Group_translate_ranks(new_group2,1,&rank1,orig_group,&ranks3);
}
if (ranks3 != MPI_UNDEFINED)
{
sendbuf = 666;
MPI_Isend(&sendbuf, 1, MPI_INT, ranks3, 0, MPI_COMM_WORLD, &request);
MPI_Recv(&recvbuf, 1, MPI_INT, ranks3, 0, MPI_COMM_WORLD, &status);
//MPI_Allreduce(&sendbuf,&recvbuf, 1, MPI_INT, MPI_SUM, MPI_COMM_WORLD);
//printf("rank= %d ->",ranks3);
if (rank2 != MPI_UNDEFINED)
{
if (ranks3<NPROCS/2)
printf("\nPROC(group2) <%d> transmit to PROC(group1) <%d> msg:(%d)",rank2,ranks3,recvbuf);
else
printf("\nPROC(group2) <%d> transmit to PROC(group1) <%d> msg:(%d)",rank2,(ranks3-NPROCS/2),recvbuf);
}
if (rank1!= MPI_UNDEFINED)
{
if (ranks3<NPROCS/2)
printf("\nPROC(group1) <%d> transmit to PROC(group2) <%d> msg:(%d)",rank1,ranks3,recvbuf);
else
printf("\nPROC(group1) <%d> transmit to PROC(group2) <%d> msg:(%d)",rank1,(ranks3-NPROCS/2),recvbuf);
}
}
MPI_Group_free(&new_group1);
MPI_Group_free(&new_group2);
MPI_Group_free(&orig_group);
MPI_Finalize();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -