int target_in_container_broadcast ( int myid, int n ) { int fail; if(myid == 0) { if(v>0) printf("Manager copies target system to container.\n"); fail = copy_target_system_to_container(); } else { if(v>0) printf("Node %d initializes container with n = %d.\n",myid,n); fail = syscon_initialize_number_of_standard_polynomials(n); } monomials_broadcast(myid,n); if(myid != 0) { if(v>0) printf("Node %d copies container to target.\n",myid); fail = copy_container_to_target_system(); fail = syscon_clear_standard_system(); } return fail; }
int input_argument_free ( void ) { int fail,n; char outfile[80],ch; printf("\nReading and writing a polynomial system ...\n"); fail = read_standard_target_system(); if(v==1) printf("-> read_target_system returns %d\n",fail); fail = copy_target_system_to_container(); if(v==1) printf("-> copy_target_system_to_container returns %d\n",fail); printf("\nThe system read :\n"); fail = print_system(); if(v==1) printf("-> print_system returns %d\n",fail); printf("\nGive name of the output file : "); scanf("%s",outfile); n = (int) strlen(outfile); fail = define_output_file_with_string(n,outfile); if(v==1) printf("-> define_output_file_with_string returns %d\n",fail); fail = print_system(); if(v==1) printf("-> print_system returns %d\n",fail); fail = write_string_to_defined_output_file(21,"\nTITLE : some system\n"); if(v==1) printf("-> write_string_to_defined_output_file returns %d\n",fail); fail = close_output_file(); if(v==1) printf("-> close_output_file returns %d\n",fail); return 0; }
void slave_initialize(int id, int NUM_GROUP, char filename[50]) { int flag,*buffer,*newbuffer,count,i,eqn_1,dim_1,solution_1,eqn_2, cnt_eqns,eqnid,eqn_pack[NUM_GROUP],quit_flag=0, fail,k,n; char outfile[80]; MPI_Status status; if(v>2) printf("Node %d knows the filename: %s\n",id, filename);fflush; fail = read_named_target_without_solutions ((int) strlen(filename),filename); fail = copy_target_system_to_container(); cnt_eqns = 0; while(!quit_flag) { MPI_Iprobe(0,MPI_ANY_TAG,MPI_COMM_WORLD,&flag,&status); while(flag) /* while flag -- pending recv */ { if(status.MPI_TAG==EQN_TAG) { MPI_Recv(&eqnid,1,MPI_INT,0,EQN_TAG,MPI_COMM_WORLD,&status); if(eqnid!=0) { eqn_pack[cnt_eqns] = eqnid; cnt_eqns++; if(v>2) printf("node %d solving eqn. %d; cnt_eqns=%d \n", id, eqnid, cnt_eqns); fflush; /* solving eqn. */ sprintf(outfile, "%s_%d", filename, eqnid ); n = (int) strlen(outfile); fail = hypersurface_witness_set(eqnid,n,outfile); /* end of solving eqn. */ } else { if(v>2) printf("node %d recv end signal and send back: \n", id); /* send the index of the eqns for which the worker has computed back */ eqn_pack[cnt_eqns] = 0; /* the last number is 0 */ cnt_eqns++; if(v>2) { printf("cnt_eqns=%d\n", cnt_eqns); for(i=0;i<cnt_eqns;i++) printf("%d\n", eqn_pack[i]); } MPI_Send(eqn_pack,cnt_eqns,MPI_INT,0,EQN_TAG,MPI_COMM_WORLD); /* clean the system and solution container */ fail = solcon_clear_standard_solutions( ); if(fail>0) printf("fail to clear solution container.\n"); fail = syscon_clear_standard_system( ); if(fail>0) printf("fail to clear system container.\n"); /* end of cleaning the system and solution container */ quit_flag =1; } fflush; } /* status.MPI_TAG */ MPI_Iprobe(0,MPI_ANY_TAG,MPI_COMM_WORLD,&flag,&status); } /* flag */ } /* quit_flag */ }
int standard_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_target_system_without_solutions(); fail = copy_target_system_to_container(); fail = syscon_number_of_standard_polynomials(&dim); fail = write_standard_target_system(); // writes to file } standard_dimensions_broadcast(myid,&dim,&dim); if(verbose > 0) printf("Process %d has dimension %d.\n",myid,dim); monomials_broadcast(myid,dim); // broadcast target system if(myid != 0) fail = copy_container_to_target_system(); if(verbose > 0) if(myid == 1) fail = write_standard_target_system(); if(myid == 0) { fail = read_standard_start_system(); fail = copy_start_system_to_container(); fail = write_standard_start_system(); // writes to file fail = write_start_solutions(); // writes solutions to file fail = copy_start_solutions_to_container(); fail = solcon_number_of_standard_solutions(&nbsols); if(verbose>0) printf("Read %d start solutions.\n",nbsols); } else fail = syscon_initialize_number_of_standard_polynomials(dim); monomials_broadcast(myid,dim); // broadcast start system if(myid != 0) fail = copy_container_to_start_system(); if(verbose > 0) if(myid == 1) fail = write_standard_start_system(); parameters_broadcast(myid,nbrp,verbose); if(myid == 0) verbose = prompt_for_verbose(); MPI_Barrier(MPI_COMM_WORLD); MPI_Bcast(&verbose,1,MPI_INT,0,MPI_COMM_WORLD); MPI_Bcast(&nbsols,1,MPI_INT,0,MPI_COMM_WORLD); solutions_distribute(myid,nbsols,dim,nbrp,&mysolnum); fail = solcon_number_of_standard_solutions(&len); if(verbose > 0) printf("Node %d has %d solutions.\n",myid,len); if(myid > 0) { fail = copy_container_to_start_solutions(); fail = standard_track_paths(myid,nbrp,nbc,outfile,verbose); } MPI_Barrier(MPI_COMM_WORLD); solutions_collect(myid,nbsols,dim,nbrp,mysolnum); if(myid == 0) { fail = copy_container_to_target_solutions(); fail = write_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; }