int main (int argc, char ** argv){ if (argc < 2){ std::cerr << "Usage:" << argv[0] << " input_bin_file" << std::endl; exit(1); } Kokkos::initialize(argc, argv); MyExecSpace::print_configuration(std::cout); idx nv = 0, ne = 0; idx *xadj, *adj; //idx *half_srcs, *half_dsts; wt *ew; Experimental::KokkosKernels::Graph::Utils::read_graph_bin<idx, wt> ( &nv, &ne, &xadj, &adj, &ew, argv[1]); delete [] ew; um_array_type _xadj (xadj, nv + 1); um_edge_array_type _adj (adj, ne); idx_array_type kok_xadj ("xadj", nv + 1); idx_edge_array_type kok_adj("adj", ne); Kokkos::deep_copy (kok_xadj, _xadj); Kokkos::deep_copy (kok_adj, _adj); delete [] xadj; delete [] adj; typedef Experimental::KokkosKernels::KokkosKernelsHandle <idx_array_type,idx_edge_array_type, value_array_type, MyExecSpace, TemporaryWorkSpace,PersistentWorkSpace > KernelHandle; KernelHandle kkh; kkh.set_row_map(kok_xadj); kkh.set_entries(kok_adj); //kkh.set_values(); kkh.create_graph_coloring_handle(Experimental::KokkosKernels::Graph::COLORING_EB); Experimental::KokkosKernels::Graph::graph_color_solve<KernelHandle> (&kkh); std::cout << "EB " << "Time:" << kkh.get_graph_coloring_handle()->get_overall_coloring_time() << " " "Num colors:" << kkh.get_graph_coloring_handle()->get_num_colors() << " " "Num Phases:" << kkh.get_graph_coloring_handle()->get_num_phases() << std::endl; Experimental::KokkosKernels::Graph::graph_color_solve<KernelHandle> (&kkh); std::cout << "EBS " << "Time:" << kkh.get_graph_coloring_handle()->get_overall_coloring_time() << " " "Num colors:" << kkh.get_graph_coloring_handle()->get_num_colors() << " " "Num Phases:" << kkh.get_graph_coloring_handle()->get_num_phases() << std::endl; kkh.destroy_graph_coloring_handle(); kkh.create_graph_coloring_handle(Experimental::KokkosKernels::Graph::COLORING_SERIAL); Experimental::KokkosKernels::Graph::graph_color_solve<KernelHandle> (&kkh); std::cout << "SEQ " << "Time:" << kkh.get_graph_coloring_handle()->get_overall_coloring_time() << " " "Num colors:" << kkh.get_graph_coloring_handle()->get_num_colors() << " " "Num Phases:" << kkh.get_graph_coloring_handle()->get_num_phases() << std::endl; kkh.destroy_graph_coloring_handle(); kkh.create_graph_coloring_handle(Experimental::KokkosKernels::Graph::COLORING_VB); Experimental::KokkosKernels::Graph::graph_color_solve<KernelHandle> (&kkh); std::cout << "VB " << "Time:" << kkh.get_graph_coloring_handle()->get_overall_coloring_time() << " " "Num colors:" << kkh.get_graph_coloring_handle()->get_num_colors() << " " "Num Phases:" << kkh.get_graph_coloring_handle()->get_num_phases() << std::endl; kkh.destroy_graph_coloring_handle(); kkh.create_graph_coloring_handle(Experimental::KokkosKernels::Graph::COLORING_VBBIT); //kkh.get_graph_coloring_handle()->set_tictoc(true); Experimental::KokkosKernels::Graph::graph_color_solve<KernelHandle> (&kkh); std::cout << "VBBIT " << "Time:" << kkh.get_graph_coloring_handle()->get_overall_coloring_time() << " " "Num colors:" << kkh.get_graph_coloring_handle()->get_num_colors() << " " "Num Phases:" << kkh.get_graph_coloring_handle()->get_num_phases() << std::endl; kkh.destroy_graph_coloring_handle(); kkh.create_graph_coloring_handle(Experimental::KokkosKernels::Graph::COLORING_VBCS); //kkh.get_graph_coloring_handle()->set_tictoc(true); Experimental::KokkosKernels::Graph::graph_color_solve<KernelHandle> (&kkh); std::cout << "VBCS " << "Time:" << kkh.get_graph_coloring_handle()->get_overall_coloring_time() << " " "Num colors:" << kkh.get_graph_coloring_handle()->get_num_colors() << " " "Num Phases:" << kkh.get_graph_coloring_handle()->get_num_phases() << std::endl; Experimental::KokkosKernels::Graph::graph_color_solve<KernelHandle> (&kkh); std::cout << "VBCSS " << "Time:" << kkh.get_graph_coloring_handle()->get_overall_coloring_time() << " " "Num colors:" << kkh.get_graph_coloring_handle()->get_num_colors() << " " "Num Phases:" << kkh.get_graph_coloring_handle()->get_num_phases() << std::endl; kkh.destroy_graph_coloring_handle(); Kokkos::finalize(); return 0; }
void run_experiment( int repeatcount, idx nv, idx ne, idx_array_type kok_xadj, idx_edge_array_type kok_adj, value_array_type kok_mtx_vals ){ value_array_type kok_x_original = create_x_vector(nv, MAXVAL); value_array_type kok_b_vector = create_b_vector( nv, kok_xadj, kok_adj, kok_mtx_vals, kok_x_original); Experimental::KokkosKernels::Example::CrsMatrix<wt, idx, MyExecSpace> A(nv ,ne, kok_xadj, kok_adj, kok_mtx_vals); //create X vector value_array_type kok_x_vector("kok_x_vector", nv); double gs_time = 0; const unsigned cg_iteration_limit = 100000; const double cg_iteration_tolerance = 1e-7 ; Experimental::KokkosKernels::Example::CGSolveResult cg_result ; typedef Experimental::KokkosKernels::KokkosKernelsHandle <idx_array_type,idx_edge_array_type, value_array_type, MyExecSpace, TemporaryWorkSpace,PersistentWorkSpace > KernelHandle; KernelHandle kh; kh.set_row_map(A.graph.row_map); kh.set_entries(A.graph.entries); kh.set_values(A.coeff); Kokkos::Impl::Timer timer1; Experimental::KokkosKernels::Example::pcgsolve( kh , A , kok_b_vector , kok_x_vector , cg_iteration_limit , cg_iteration_tolerance , & cg_result , true ); Kokkos::fence(); gs_time = timer1.seconds(); std::cout << " cg_iteration[" << cg_result.iteration << "]" << " matvec_time[" << cg_result.matvec_time << "]" << " cg_residual[" << cg_result.norm_res << "]" << " cg_iter_time[" << cg_result.iter_time << "]" << " precond_time[" << cg_result.precond_time << "]" << " precond_init_time[" << cg_result.precond_init_time << "]" << " precond_time/iter[" << cg_result.precond_time / (cg_result.iteration + 1) << "]" << " GSTIME[" << gs_time<< "]" << std::endl ; kh.create_graph_coloring_handle(Experimental::KokkosKernels::Graph::COLORING_VB); Experimental::KokkosKernels::Graph::graph_color_solve<KernelHandle> (&kh); kok_x_vector = value_array_type("kok_x_vector", nv); timer1.reset(); Experimental::KokkosKernels::Example::pcgsolve( kh , A , kok_b_vector , kok_x_vector , cg_iteration_limit , cg_iteration_tolerance , & cg_result , true ); Kokkos::fence(); gs_time = timer1.seconds(); std::cout << "\n\nCOLORING_VB PRECALL:\n cg_iteration[" << cg_result.iteration << "]" << " matvec_time[" << cg_result.matvec_time << "]" << " cg_residual[" << cg_result.norm_res << "]" << " cg_iter_time[" << cg_result.iter_time << "]" << " precond_time[" << cg_result.precond_time << "]" << " precond_init_time[" << cg_result.precond_init_time << "]" << " precond_time/iter[" << cg_result.precond_time / (cg_result.iteration + 1) << "]" << " GSTIME[" << gs_time<< "]" << " numColor[" << kh.get_graph_coloring_handle()->get_num_colors()<<"]" << std::endl ; kh.destroy_graph_coloring_handle(); kh.create_graph_coloring_handle(Experimental::KokkosKernels::Graph::COLORING_EB); Experimental::KokkosKernels::Graph::graph_color_solve<KernelHandle> (&kh); kok_x_vector = value_array_type("kok_x_vector", nv); timer1.reset(); Experimental::KokkosKernels::Example::pcgsolve( kh , A , kok_b_vector , kok_x_vector , cg_iteration_limit , cg_iteration_tolerance , & cg_result , true ); Kokkos::fence(); gs_time = timer1.seconds(); std::cout << "\n\nCOLORING_EB PRECALL:\n cg_iteration[" << cg_result.iteration << "]" << " matvec_time[" << cg_result.matvec_time << "]" << " cg_residual[" << cg_result.norm_res << "]" << " cg_iter_time[" << cg_result.iter_time << "]" << " precond_time[" << cg_result.precond_time << "]" << " precond_init_time[" << cg_result.precond_init_time << "]" << " precond_time/iter[" << cg_result.precond_time / (cg_result.iteration + 1) << "]" << " GSTIME[" << gs_time<< "]" << " numColor[" << kh.get_graph_coloring_handle()->get_num_colors()<<"]" << std::endl ; kh.destroy_graph_coloring_handle(); kh.destroy_gs_handle(); kh.create_gs_handle(Experimental::KokkosKernels::Graph::GS_PERMUTED); kok_x_vector = value_array_type("kok_x_vector", nv); timer1.reset(); Experimental::KokkosKernels::Example::pcgsolve( kh , A , kok_b_vector , kok_x_vector , cg_iteration_limit , cg_iteration_tolerance , & cg_result , true ); Kokkos::fence(); gs_time = timer1.seconds(); std::cout << "\n\nPERMUTED:\n cg_iteration[" << cg_result.iteration << "]" << " matvec_time[" << cg_result.matvec_time << "]" << " cg_residual[" << cg_result.norm_res << "]" << " cg_iter_time[" << cg_result.iter_time << "]" << " precond_time[" << cg_result.precond_time << "]" << " precond_init_time[" << cg_result.precond_init_time << "]" << " precond_time/iter[" << cg_result.precond_time / (cg_result.iteration + 1) << "]" << " GSTIME[" << gs_time<< "]" << std::endl ; kh.destroy_graph_coloring_handle(); kh.destroy_gs_handle(); kh.create_gs_handle(Experimental::KokkosKernels::Graph::GS_TEAM); kok_x_vector = value_array_type("kok_x_vector", nv); timer1.reset(); Experimental::KokkosKernels::Example::pcgsolve( kh , A , kok_b_vector , kok_x_vector , cg_iteration_limit , cg_iteration_tolerance , & cg_result , true ); Kokkos::fence(); gs_time = timer1.seconds(); std::cout << "\n\nGSTEAM:\n cg_iteration[" << cg_result.iteration << "]" << " matvec_time[" << cg_result.matvec_time << "]" << " cg_residual[" << cg_result.norm_res << "]" << " cg_iter_time[" << cg_result.iter_time << "]" << " precond_time[" << cg_result.precond_time << "]" << " precond_init_time[" << cg_result.precond_init_time << "]" << " precond_time/iter[" << cg_result.precond_time / (cg_result.iteration + 1) << "]" << " GSTIME[" << gs_time<< "]" << std::endl ; }