int main ( int argc, char *argv[] ) { int np,myid,dim,nspt,nbpaths,*mysol; double startwtime,endwtime,wtime,*time; MPI_Status status; adainit(); MPI_Init(&argc,&argv); MPI_Comm_size(MPI_COMM_WORLD,&np); MPI_Comm_rank(MPI_COMM_WORLD,&myid); if(myid == 0) { time = (double*)calloc(np,sizeof(double)); mysol = (int*)calloc(np,sizeof(int)); startwtime = MPI_Wtime(); } else startwtime = MPI_Wtime(); retrieve_dimensions(myid,&nspt,&dim); supports_broadcast(myid,nspt,dim); system_broadcast(myid,dim-1); distribute_cells(myid,np,nspt,dim,&nbpaths); endwtime = MPI_Wtime(); wtime = endwtime-startwtime; MPI_Gather(&wtime,1,MPI_DOUBLE,time,1,MPI_DOUBLE,0,MPI_COMM_WORLD); MPI_Gather(&nbpaths,1,MPI_INT,mysol,1,MPI_INT,0,MPI_COMM_WORLD); if(myid == 0) { printf("\nTotal wall time = %lf seconds on %d processors\n", time[0],np); write_time_and_paths_to_defined_output_file(np,time,mysol); free(time); free(mysol); } MPI_Finalize(); adafinal(); return 0; }
int quaddobl_run ( int myid, int nbrp, int nbc, char* outfile, int verbose ) { int fail,dim,nbsols,mysolnum,len,*nbpaths; double startwtime,endwtime,wtime,*time; startwtime = MPI_Wtime(); if(myid == 0) { time = (double*)calloc(nbrp,sizeof(double)); nbpaths = (int*)calloc(nbrp,sizeof(int)); fail = read_quaddobl_target_system_without_solutions(); fail = copy_quaddobl_target_system_to_container(); fail = syscon_number_of_quaddobl_polynomials(&dim); fail = write_quaddobl_target_system(); } quaddobl_dimensions_broadcast(myid,&dim,&dim); if(verbose > 0) printf("Process %d has dimension %d.\n",myid,dim); quaddobl_monomials_broadcast(myid,dim); if(myid != 0) fail = copy_quaddobl_container_to_target_system(); if(verbose > 0) if(myid == 1) fail = write_quaddobl_target_system(); if(myid == 0) { fail = read_quaddobl_start_system(); fail = copy_quaddobl_start_system_to_container(); fail = write_quaddobl_start_system(); // writes to file fail = write_quaddobl_start_solutions(); // writes solutions to file fail = copy_quaddobl_start_solutions_to_container(); fail = solcon_number_of_quaddobl_solutions(&nbsols); if(verbose>0) printf("Read %d start solutions.\n",nbsols); } else fail = syscon_initialize_number_of_quaddobl_polynomials(dim); quaddobl_monomials_broadcast(myid,dim); // broadcast start system if(myid != 0) fail = copy_quaddobl_container_to_start_system(); if(verbose > 0) if(myid == 1) fail = write_quaddobl_start_system(); parameters_broadcast(myid,nbrp,1); MPI_Bcast(&nbsols,1,MPI_INT,0,MPI_COMM_WORLD); quaddobl_solutions_distribute(myid,nbsols,dim,nbrp,&mysolnum,verbose); fail = solcon_number_of_quaddobl_solutions(&len); if(verbose > 0) printf("Node %d has %d solutions.\n",myid,len); if(myid > 0) { fail = copy_quaddobl_container_to_start_solutions(); fail = quaddobl_track_paths(myid,nbrp,nbc,outfile,verbose); } quaddobl_solutions_collect(myid,nbsols,dim,nbrp,mysolnum); if(myid == 0) { fail = copy_quaddobl_container_to_target_solutions(); fail = write_quaddobl_target_solutions(); } endwtime = MPI_Wtime(); wtime = endwtime-startwtime; MPI_Gather(&wtime,1,MPI_DOUBLE,time,1,MPI_DOUBLE,0,MPI_COMM_WORLD); MPI_Gather(&mysolnum,1,MPI_INT,nbpaths,1,MPI_INT,0,MPI_COMM_WORLD); if(myid == 0) { nbpaths[0] = nbsols; write_time_and_paths_to_defined_output_file(nbrp,time,nbpaths); free(time); free(nbpaths); } return 0; }