控制一些代码在MPI中执行一次

时间:2018-11-20 22:35:10

标签: c mpi

我无法控制如何使用mpi一旦执行一些代码

#include "mpi.h"
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <sys/time.h>

#define N 10
#define ITERS 1
// N and ITERS might be input arguments

double **A;
int times = 0;

void initialize (double **A)
{
  int i,j;

  for(i =0; i < N+2 ; i++){
    for(j =0; j < N+2 ; j++){
      if(i== 0 || j == 0 || i == (N+1) || j == (N +1) )
      A[i][j] = 0.0;
      else
      A[i][j] = rand() % 10 + 1;
    }
  }
}


int main(int argc, char * argv[]){

  int MyProc, size,tag=1;
  char msg='A', msg_recpt;
  MPI_Status status;
  double **received_array;

  MPI_Init(&argc, &argv);
  MPI_Comm_rank(MPI_COMM_WORLD, &MyProc);
  MPI_Comm_size(MPI_COMM_WORLD, &size);

  printf("Process # %d started \n", MyProc);
  MPI_Barrier(MPI_COMM_WORLD);

  int i;
  /******Make it once*******/
  if(times == 0){
    printf("One time\n");
    A = malloc((N+2) * sizeof(double *));

    for (i=0; i<N+2; i++) {
      A[i] = malloc((N+2) * sizeof(double));
    }
    initialize(A);
    times ++;
  }
  /*************/


    MPI_Barrier(MPI_COMM_WORLD);
  }
  MPI_Finalize();
}

我尝试使用times变量作为标志,但是一次创建部分,每个进程执行一次... everethig我尝试过每个进程执行一次,我不知道要尝试什么,我无法使用进程级别来完成,因为我需要到达的第一个程序执行一次。

0 个答案:

没有答案