int main(int ac, char **av){ char *outfile = NULL; char *infile = NULL; int i,k, cid; int rcode; RecBase Rec; int sw_err = 0; for ( k=1 ; k<ac ; k++ ){ if ( 0 == strcmp(av[k],"-h") ){ sw_help = 1; continue; } if ( 0 == strcmp(av[k],"-v") ){ sw_verbose = 1; continue; } if ( 0 == strcmp(av[k],"-dim") ){ if ( ++k >= ac ){ sw_err = 1; break; } sw_dim = atoi(av[k]); if ( sw_dim < 1 ){ sw_err = 1; break; } continue; } if ( 0 == strcmp(av[k],"-F") ){ if ( ++k >= ac ){ sw_err = 1; break; } #ifdef Use_DEfeature if ( 0 == strcmp(av[k],"DEF") ){ sw_dim = FVECDIM_DEF; continue; } if ( 0 == strcmp(av[k],"DEFOL") ){ sw_dim = FVECDIM_DEFOL; continue; } #endif if ( 0 == strcmp(av[k],"P-LOVE") ){ sw_dim = FVECDIM_PLOVE; continue; } if ( 0 == strcmp(av[k],"PLOVE") ){ sw_dim = FVECDIM_PLOVE; continue; } if ( 0 == strcmp(av[k],"P-LM") ){ sw_dim = FVECDIM_PLM; continue; } if ( 0 == strcmp(av[k],"PLM") ){ sw_dim = FVECDIM_PLM; continue; } sw_err = 1; break; } if ( 0 == strcmp(av[k],"-o") ){ if ( ++k >= ac ){ sw_err = 1; break; } outfile = av[k]; continue; } if ( infile == NULL ){ infile = av[k]; break; } } if ( sw_err || sw_help || outfile == NULL || infile == NULL ){ fputs("Make character dictionary\n",stderr); fputs("makedic v1.1 Copyright (C) 2005-2010 Hideaki Goto\n",stderr); fputs("usage: makedic [options] -o out_dic_file vec_file1 vec_file2 ...\n",stderr); #ifdef Use_DEfeature fputs(" -F type : feature type PLOVE/PLM(default)/DEF/DEFOL\n",stderr); #else fputs(" -F type : feature type PLOVE/PLM(default)\n",stderr); #endif fprintf(stderr," -dim N : dimension of feature vector (default:%d)\n",FVECDIM_PLM); fputs(" -v : verbose mode\n",stderr); return(1); } rcode = load_vec(&Rec, infile, sw_dim); if ( rcode ) return(rcode); for ( k++ ; k<ac ; k++ ){ rcode = add_vec(&Rec, av[k]); if ( rcode ) return(rcode); } if ( sw_verbose ){ fprintf(stderr,"%d sets loaded.\n",n_set); } /* normalization */ for ( cid=0 ; cid<Rec.n_cat ; cid++ ){ for ( i=0 ; i<Rec.dic[cid].dim ; i++ ){ Rec.dic[cid].e[i] /= (double)n_set; } } save_dic(&Rec, outfile); return(rcode); }
int main( int argc, char* argv[] ) { int writeOutX = 0; int n, k; int maxiterations = 1000; int niters=0; double norm; double* b; double* x; double time; double t1, t2; MPI_Init( &argc, &argv ); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &size); // Read command line args. // 1st case runs model problem, 2nd Case allows you to specify your own b vector if ( argc == 3 ) { k = atoi( argv[1] ); n = k*k; // each processor calls cs240_getB to build its own part of the b vector! } else if ( !strcmp( argv[1], "-i" ) && argc == 4 ) { b = load_vec( argv[2], &k ); } else { printf( "\nCGSOLVE Usage: \n\t" "Model Problem:\tmpirun -np [number_procs] cgsolve [k] [output_1=y_0=n]\n\t" "Custom Input:\tmpirun -np [number_procs] cgsolve -i [input_filename] [output_1=y_0=n]\n\n"); exit(0); } writeOutX = atoi( argv[argc-1] ); // Write X to file if true, do not write if unspecified. // Start Timer t1 = MPI_Wtime(); // CG Solve here! x = cgsolve(k); // End Timer t2 = MPI_Wtime(); printf("TEST: %s\n", cs240_verify(x, k, 0.0) ? "PASSED" : "FAILED"); if ( writeOutX ) { save_vec( k, x ); } // Output printf( "Problem size (k): %d\n",k); if(niters>0){ printf( "Norm of the residual after %d iterations: %lf\n",niters,norm); } printf( "Elapsed time during CGSOLVE: %lf\n", t2-t1); // Deallocate if(niters > 0){ free(b); } if(niters > 0){ free(x); } MPI_Finalize(); return 0; }