C 在MPI下执行SharedMemory可执行文件
我有一个程序,比如说g09.x,可以在共享内存处理器上并行执行 现在我有8个内核,我使用mpi将其分为两组。 对于每个组,我希望它们分别使用4个内核执行g09.x 有没有人对如何做到这一点有经验或想法 MPI_组的构造如下所示,但区域/*Execute Shared Memory Program*/仍为空C 在MPI下执行SharedMemory可执行文件,c,linux,mpi,shared-memory,C,Linux,Mpi,Shared Memory,我有一个程序,比如说g09.x,可以在共享内存处理器上并行执行 现在我有8个内核,我使用mpi将其分为两组。 对于每个组,我希望它们分别使用4个内核执行g09.x 有没有人对如何做到这一点有经验或想法 MPI_组的构造如下所示,但区域/*Execute Shared Memory Program*/仍为空 #include "mpi.h" #include <stdio.h> int main (int argc, char *argv[]) { int rank, group
#include "mpi.h"
#include <stdio.h>
int main (int argc, char *argv[])
{
int rank, group_rank, numtasks, group_size, rc,
group1[4]={0,1,2,3},
group2[4]={4,5,6,7};
MPI_Group orig_group, new_group;
MPI_Comm group_comm;
rc = MPI_Init(&argc, &argv);
if (rc !=0){
printf("MPI_aborted\n");
MPI_Abort(MPI_COMM_WORLD, rc);
}
MPI_Comm_size(MPI_COMM_WORLD, &numtasks);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
/* Extract the original group handle */
MPI_Comm_group(MPI_COMM_WORLD, &orig_group);
/* Divide tasks into two distinct groups based upon rank */
if (rank < 4){
MPI_Group_incl(orig_group, 4, group1, &new_group);
}
else {
MPI_Group_incl(orig_group, 4, group2, &new_group);
}
/* Create new communicator */
MPI_Comm_create(MPI_COMM_WORLD, new_group, &group_comm);
MPI_Group_size(new_group, &group_size);
MPI_Group_rank(new_group, &group_rank);
printf("rank=%d, group_rank=%d, numtasks=%d, group_size=%d\n", rank, group_rank, numtasks, group_size);
/* Do Something */
/* Execute Shared Memory Program */
MPI_Finalize();
return 0;
}
#包括“mpi.h”
#包括
int main(int argc,char*argv[])
{
整数秩,组秩,numtask,组大小,rc,
group1[4]={0,1,2,3},
组2[4]={4,5,6,7};
MPI_组原始组、新组;
MPI通信组通信;
rc=MPI_Init(&argc,&argv);
如果(rc!=0){
printf(“MPI_中止\n”);
MPI_中止(MPI_通信世界,rc);
}
MPI通信大小(MPI通信世界和numtasks);
MPI通信等级(MPI通信世界和等级);
/*提取原始组句柄*/
MPI_Comm_group(MPI_Comm_WORLD和orig_group);
/*根据等级将任务分为两个不同的组*/
如果(排名<4){
MPI组(包括原组、第4组、第1组和新组);
}
否则{
MPI组(包括原组、4组、2组和新组);
}
/*创建新的通讯器*/
MPI通信创建(MPI通信世界、新通信集团和通信集团);
MPI组大小(新组和组大小);
MPI组排名(新组和组排名);
printf(“秩=%d,组秩=%d,numtasks=%d,组大小=%d\n”,秩,组秩,numtasks,组大小);
/*做点什么*/
/*执行共享内存程序*/
MPI_Finalize();
返回0;
}
如果g09.x是一个并行可执行文件而不是共享内存可执行文件,这会使问题更容易解决吗?看起来您正在尝试启动Gaussian09的多个实例。是什么阻止您在每个拷贝配置为使用4个CPU的情况下启动两个拷贝?