//Begin Execution int main(int argv,char *argc[]){ int inN; do{ Menu(); inN=getN(); switch(inN){ case 1: problem1();break; case 2: problem2();break; case 3: problem3();break; case 4: problem4();break; case 5: problem5();break; case 6: problem6();break; default: def(inN);} }while(inN>=1&&inN<=6); return 0; }
/* The main function, or the "entry function" of the lab2 program, simply calls the other * functions to run. */ int main() { cout << ">> I'm going to run the lab review now:" << endl; illegalStatements(); cout << ">> I'm going to run lab problem 1 now:" << endl; problem1(); cout << ">> I'm going to run lab problem 2 now:" << endl; problem2(); cout << ">> I'm going to run lab problem 3 now:" << endl; problem3(); cout << ">> I'm going to run lab problem 4/5 now:" << endl; problem45(); return 0; // Lets the operating system know everything ran successfully. }
int main(int argc, char** argv) { double res, resAtr, resFac; El::Initialize(argc, argv); bmpi::communicator world; int rank = world.rank(); skybase::context_t context(23234); // Setup problem and righthand side // Using Skylark's uniform generator (as opposed to Elemental's) // will insure the same A and b are generated regardless of the number // of processors. matrix_type A = skyutil::uniform_matrix_t<matrix_type>::generate(m, n, El::DefaultGrid(), context); matrix_type b = skyutil::uniform_matrix_t<matrix_type>::generate(m, 1, El::DefaultGrid(), context); regression_problem_type problem(m, n, A); boost::mpi::timer timer; double telp; sol_type x(n,1); rhs_type r(b); // Using QR timer.restart(); exact_solver_type<skyalg::qr_l2_solver_tag> exact_solver(problem); exact_solver.solve(b, x); telp = timer.elapsed(); check_solution(problem, b, x, r, res, resAtr, resFac); if (rank == 0) std::cout << "Exact (QR):\t\t\t||r||_2 = " << boost::format("%.2f") % res << "\t\t\t\t\t\t\t||A' * r||_2 = " << boost::format("%.2e") % resAtr << "\t\tTime: " << boost::format("%.2e") % telp << " sec" << std::endl; double res_opt = res; skybase::Gemv(El::NORMAL, -1.0, problem.input_matrix, x, 1.0, r); // Using SNE (semi-normal equations) timer.restart(); exact_solver_type<skyalg::sne_l2_solver_tag>(problem).solve(b, x); telp = timer.elapsed(); check_solution(problem, b, x, r, res, resAtr, resFac); if (rank == 0) std::cout << "Exact (SNE):\t\t\t||r||_2 = " << boost::format("%.2f") % res << "\t\t\t\t\t\t\t||A' * r||_2 = " << boost::format("%.2e") % resAtr << "\t\tTime: " << boost::format("%.2e") % telp << " sec" << std::endl; res_opt = res; // Again, using SNE, only with the computed interface (example; to be removed.) cmatrix CA(A); regression_problem_type1 problem1(m, n, CA); timer.restart(); exact_solver_type1<skyalg::sne_l2_solver_tag>(problem1).solve(b, x); telp = timer.elapsed(); check_solution(problem, b, x, r, res, resAtr, resFac); if (rank == 0) std::cout << "Exact (SNE) (COMPUTED):\t\t\t||r||_2 = " << boost::format("%.2f") % res << "\t\t\t\t\t\t\t||A' * r||_2 = " << boost::format("%.2e") % resAtr << "\t\tTime: " << boost::format("%.2e") % telp << " sec" << std::endl; res_opt = res; // Using SVD timer.restart(); exact_solver_type<skyalg::svd_l2_solver_tag>(problem).solve(b, x); telp = timer.elapsed(); check_solution(problem, b, x, r, res, resAtr, resFac); if (rank == 0) std::cout << "Exact (SVD):\t\t\t||r||_2 = " << boost::format("%.2f") % res << "\t\t\t\t\t\t\t||A' * r||_2 = " << boost::format("%.2e") % resAtr << "\t\tTime: " << boost::format("%.2e") % telp << " sec" << std::endl; res_opt = res; // Using LSQR skyalg::krylov_iter_params_t lsqrparams; lsqrparams.am_i_printing = rank == 0; lsqrparams.log_level = 0; timer.restart(); exact_solver_type< skyalg::iterative_l2_solver_tag< skyalg::lsqr_tag > >(problem, lsqrparams) .solve(b, x); telp = timer.elapsed(); check_solution(problem, b, x, r, res, resAtr, resFac); if (rank == 0) std::cout << "Exact (LSQR):\t\t\t||r||_2 = " << boost::format("%.2f") % res << "\t\t||r - r*||_2 / ||b - r*||_2 = " << boost::format("%.2e") % resFac << "\t||A' * r||_2 = " << boost::format("%.2e") % resAtr << "\t\tTime: " << boost::format("%.2e") % telp << " sec" << std::endl; // Using sketch-and-solve #if 0 timer.restart(); sketched_solver_type<skysk::JLT_t>(problem, t, context).solve(b, x); telp = timer.elapsed(); check_solution(problem, b, x, r, res, resAtr, resFac); if (rank == 0) std::cout << "Sketch-and-Solve (JLT):\t\t||r||_2 = " << boost::format("%.2f") % res << " (x " << boost::format("%.5f") % (res / res_opt) << ")" << "\t||r - r*||_2 / ||b - r*||_2 = " << boost::format("%.2e") % resFac << "\t||A' * r||_2 = " << boost::format("%.2e") % resAtr << "\t\tTime: " << boost::format("%.2e") % telp << " sec" << std::endl; #endif timer.restart(); sketched_solver_type<skysk::CWT_t>(problem, t, context).solve(b, x); telp = timer.elapsed(); check_solution(problem, b, x, r, res, resAtr, resFac); if (rank == 0) std::cout << "Sketch-and-Solve (CWT):\t\t||r||_2 = " << boost::format("%.2f") % res << " (x " << boost::format("%.5f") % (res / res_opt) << ")" << "\t||r - r*||_2 / ||b - r*||_2 = " << boost::format("%.2e") % resFac << "\t||A' * r||_2 = " << boost::format("%.2e") % resAtr << "\t\tTime: " << boost::format("%.2e") % telp << " sec" << std::endl; timer.restart(); sketched_solver_type<skysk::FJLT_t>(problem, t, context).solve(b, x); telp = timer.elapsed(); check_solution(problem, b, x, r, res, resAtr, resFac); if (rank == 0) std::cout << "Sketch-and-Solve (FJLT):\t||r||_2 = " << boost::format("%.2f") % res << " (x " << boost::format("%.5f") % (res / res_opt) << ")" << "\t||r - r*||_2 / ||b - r*||_2 = " << boost::format("%.2e") % resFac << "\t||A' * r||_2 = " << boost::format("%.2e") % resAtr << "\t\tTime: " << boost::format("%.2e") % telp << " sec" << std::endl; // Accelerate-using-sketching #if 0 timer.restart(); accelerated_exact_solver_type_sb<skysk::JLT_t>(problem, context).solve(b, x); telp = timer.elapsed(); check_solution(problem, b, x, r, res, resAtr, resFac); if (rank == 0) std::cout << "Simplified Blendenpik (JLT):\t||r||_2 = " << boost::format("%.2f") % res << " (x " << boost::format("%.5f") % (res / res_opt) << ")" << "\t||r - r*||_2 / ||b - r*||_2 = " << boost::format("%.2e") % resFac << "\t||A' * r||_2 = " << boost::format("%.2e") % resAtr << "\t\tTime: " << boost::format("%.2e") % telp << " sec" << std::endl; #endif timer.restart(); accelerated_exact_solver_type_sb<skysk::FJLT_t>(problem, context).solve(b, x); telp = timer.elapsed(); check_solution(problem, b, x, r, res, resAtr, resFac); if (rank == 0) std::cout << "Simplified Blendenpik (FJLT):\t||r||_2 = " << boost::format("%.2f") % res << " (x " << boost::format("%.5f") % (res / res_opt) << ")" << "\t||r - r*||_2 / ||b - r*||_2 = " << boost::format("%.2e") % resFac << "\t||A' * r||_2 = " << boost::format("%.2e") % resAtr << "\t\tTime: " << boost::format("%.2e") % telp << " sec" << std::endl; timer.restart(); accelerated_exact_solver_type_sb<skysk::CWT_t>(problem, context).solve(b, x); telp = timer.elapsed(); check_solution(problem, b, x, r, res, resAtr, resFac); if (rank == 0) std::cout << "Simplified Blendenpik (CWT):\t||r||_2 = " << boost::format("%.2f") % res << " (x " << boost::format("%.5f") % (res / res_opt) << ")" << "\t||r - r*||_2 / ||b - r*||_2 = " << boost::format("%.2e") % resFac << "\t||A' * r||_2 = " << boost::format("%.2e") % resAtr << "\t\tTime: " << boost::format("%.2e") % telp << " sec" << std::endl; timer.restart(); accelerated_exact_solver_type_blendenpik(problem, context).solve(b, x); telp = timer.elapsed(); check_solution(problem, b, x, r, res, resAtr, resFac); if (rank == 0) std::cout << "Blendenpik:\t\t\t||r||_2 = " << boost::format("%.2f") % res << " (x " << boost::format("%.5f") % (res / res_opt) << ")" << "\t||r - r*||_2 / ||b - r*||_2 = " << boost::format("%.2e") % resFac << "\t||A' * r||_2 = " << boost::format("%.2e") % resAtr << "\t\tTime: " << boost::format("%.2e") % telp << " sec" << std::endl; timer.restart(); accelerated_exact_solver_type_lsrn(problem, context).solve(b, x); telp = timer.elapsed(); check_solution(problem, b, x, r, res, resAtr, resFac); if (rank == 0) std::cout << "LSRN:\t\t\t\t||r||_2 = " << boost::format("%.2f") % res << " (x " << boost::format("%.5f") % (res / res_opt) << ")" << "\t||r - r*||_2 / ||b - r*||_2 = " << boost::format("%.2e") % resFac << "\t||A' * r||_2 = " << boost::format("%.2e") % resAtr << "\t\tTime: " << boost::format("%.2e") % telp << " sec" << std::endl; return 0; }