Initialize an array using openmpi once

I am trying to run some tests using OPENmpi processing data in an array by spliting up the work across nodes (the second part is with matricies). I am running into some problems now because the data array is being initialized every time and I don't know how to prevent this from happening.

How, using ANSI C can I create a variable length array, using OPENmpi once? I tried making it static and global, but nothing.

#define NUM_THREADS 4
#define NUM_DATA 1000

static int *list = NULL;

int main(int argc, char *argv[]) {
  int numprocs, rank, namelen;
  char processor_name[MPI_MAX_PROCESSOR_NAME];
  int n = NUM_DATA*NUM_DATA;
  printf("hi\n");
  int i;
  if(list == NULL)
  {
     printf("ho\n");
     list = malloc(n*sizeof(int));

    for(i = 0 ; i < n; i++)
    {
      list[i] = rand() % 1000;
    }
  }

  int position;

  MPI_Init(&argc, &argv);
  MPI_Comm_size(MPI_COMM_WORLD, &numprocs);
  MPI_Comm_rank(MPI_COMM_WORLD, &rank);
  MPI_Get_processor_name(processor_name, &namelen);
  printf("Process %d on %s out of %d\n", rank,processor_name, numprocs);

  clock_t start = clock();

  position = n / NUM_THREADS * rank;
  search(list,position, n / NUM_THREADS * (rank + 1));

  printf("Time elapsed: %f seconds\n",  ((double)clock() - (double)start) /(double) CLOCKS_PER_SEC);

  free(list);

  MPI_Finalize();
  return 0;
}
1
задан Deduplicator 24 February 2015 в 01:46
поделиться