int main(int argc, char* argv[]){
  int n;
  int m;
  double *value=NULL;
  int *colind=NULL;
  int *rbegin=NULL;
  double *answer=NULL;
  double *b=NULL;

  int nproc,rank,namelen;
  char processor_name[MPI_MAX_PROCESSOR_NAME];
  MPI_Init(&argc,&argv);
  MPI_Comm_size(MPI_COMM_WORLD,&nproc);
  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, nproc);
  fflush(stdout);
  if (rank==MPI_RANK_ROOT){
    readFile(argv[1],&n,&value,&colind,&rbegin,&b);
    scatterData(&n,&m,&value,&colind,&rbegin,&b,rank,nproc);
  }
  else{
    scatterData(&n,&m,&value,&colind,&rbegin,&b,rank,nproc);
  }
  MPI_Barrier(MPI_COMM_WORLD);

  double tv1,tv2;
  tv1=MPI_Wtime();
  answer=cg(n,value,colind,rbegin,b,rank,nproc);
  tv2=MPI_Wtime();
  if (rank==MPI_RANK_ROOT){
    printf("Process %d takes %.10f seconds\n",rank,tv2-tv1);
  }
  if (value!=NULL) {free(value);}
  if (colind!=NULL) {free(colind);}
  if (rbegin!=NULL) {free(rbegin);}
  if (b!=NULL) {free(b);}
  if (rank==MPI_RANK_ROOT) {
    writeFile(n,answer);
  }
  if (answer!=NULL) {free(answer);}
  MPI_Finalize();
  return 1;  
}
Exemple #2
0
int main (int argc, char* argv[])
{
	int rank, size;
	int *arr;
	int i;
	/*
	for (i=0;i<N;i++)
		arr[i]=N-i;
*/
	MPI_Init (&argc, &argv);      /* starts MPI */
	MPI_Comm_rank (MPI_COMM_WORLD, &rank);        /* get current process id */
	MPI_Comm_size (MPI_COMM_WORLD, &size);        /* get number of processes */
	printf( "Hello world from process %d of %d\n", rank, size );
	
	scatterData(arr,N,rank,size);
	
	MPI_Finalize();
	return 0;
}