Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 在MPI下执行SharedMemory可执行文件_C_Linux_Mpi_Shared Memory - Fatal编程技术网

C 在MPI下执行SharedMemory可执行文件

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

我有一个程序,比如说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_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的情况下启动两个拷贝?