From 5aec6a18e9674a817d1258798e77a9772a7af48c Mon Sep 17 00:00:00 2001 From: Balint Joo Date: Tue, 17 Aug 2021 13:30:27 -0500 Subject: [PATCH] Updated t_multishift_quda.cc source. Removed a diagnostic print from multiShift solver and marked t_multishift_quda as a single source build to make it pick up C++20 property --- .../multi_syssolver_mdagm_cg_clover_quda_w.h | 1 - mainprogs/tests/CMakeLists.txt | 31 ++++---- mainprogs/tests/t_multishift_quda.cc | 73 +++++++++++-------- 3 files changed, 56 insertions(+), 49 deletions(-) diff --git a/lib/actions/ferm/invert/quda_solvers/multi_syssolver_mdagm_cg_clover_quda_w.h b/lib/actions/ferm/invert/quda_solvers/multi_syssolver_mdagm_cg_clover_quda_w.h index 6ba9316e9..51a98ffae 100644 --- a/lib/actions/ferm/invert/quda_solvers/multi_syssolver_mdagm_cg_clover_quda_w.h +++ b/lib/actions/ferm/invert/quda_solvers/multi_syssolver_mdagm_cg_clover_quda_w.h @@ -485,7 +485,6 @@ namespace Chroma loadCloverQuda( (void*)(clover) , (void*)(cloverInv) ,&quda_inv_param); #endif - printQudaInvertParam(&quda_inv_param); } //! Destructor is automatic diff --git a/mainprogs/tests/CMakeLists.txt b/mainprogs/tests/CMakeLists.txt index 17a07832d..9f43a3e87 100644 --- a/mainprogs/tests/CMakeLists.txt +++ b/mainprogs/tests/CMakeLists.txt @@ -17,18 +17,19 @@ set(ChromaSingleExecs t_io t_mesons_w t_conslinop t_hypsmear - t_ape_smear - t_dwf4d - t_propagator_s - t_disc_loop_s - t_ritz - t_dwflocality - t_precact_4d - t_precact_5d - t_gauge_force - t_stout_state - t_aniso_gaugeact - t_temp_prec + t_ape_smear + t_dwf4d + t_propagator_s + t_disc_loop_s + t_ritz + t_dwflocality + t_precact_4d + t_precact_5d + t_gauge_force + t_stout_state + t_aniso_gaugeact + t_temp_prec + t_multishift_quda # Not really QUDA Specific. Can call syssolvers ) if( GMP_FOUND ) @@ -132,9 +133,3 @@ endif() target_link_libraries( t_inv_fgmres_dr PRIVATE Chroma::chromalib GTest) target_include_directories(t_inv_fgmres_dr PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}) endif() - -if( Chroma_ENABLE_QUDA ) - add_executable(t_multishift_quda t_multishift_quda.cc) - target_link_libraries( t_multishift_quda PRIVATE Chroma::chromalib GTest) - target_include_directories(t_multishift_quda PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}) -endif() diff --git a/mainprogs/tests/t_multishift_quda.cc b/mainprogs/tests/t_multishift_quda.cc index 2adb63d09..0270c3907 100644 --- a/mainprogs/tests/t_multishift_quda.cc +++ b/mainprogs/tests/t_multishift_quda.cc @@ -25,6 +25,7 @@ struct InputParam { GroupXML_t fermact; GroupXML_t inv_param; multi1d shifts; + int iters; QDP::Seed rng_seed; }; @@ -36,6 +37,16 @@ void read(XMLReader& xml, const std::string& path, InputParam& p) p.fermact = readXMLGroup(paramtop, "FermionAction", "FermAct"); p.inv_param = readXMLGroup(paramtop, "InvertParam", "invType"); read(paramtop, "shifts", p.shifts); + if( paramtop.count("iters") == 0 ) { + p.iters = 5; + } + else { + read(paramtop, "iters", p.iters); + } + if (paramtop.count("RNG") > 0) + read(paramtop, "RNG", p.rng_seed); + else + p.rng_seed = 11; // default seed } @@ -67,7 +78,6 @@ int main(int argc, char *argv[]) Handle > state; InputParam p; Handle M_asymm; - Handle> solver; Chroma::initialize(&argc, &argv); QDPIO::cout << "Linkage = " << linkageHack() << std::endl; @@ -142,51 +152,54 @@ int main(int argc, char *argv[]) QDPIO::cout << "Creating State" << std::endl; state = S_asymm->createState(u); M_asymm =dynamic_cast(S_asymm->linOp(state)); - solver = dynamic_cast*>(S_asymm->mInvMdagM(state,p.inv_param)); // Do tests here T rhs= zero; gaussian(rhs,rb[1]); + int success = 0; - // Zero the initial guesses - auto n_shift = p.shifts.size(); - multi1d solns(n_shift); - for(int shift=0; shift < n_shift; ++shift) { - solns[shift] = zero; // Zero all lattice - //(solns[shift])[rb[1]]=zero; - } + for(int i=0 ; i < p.iters; i++) { + QDPIO::cout << "Doing test " << i+1 << " of " << p.iters << std::endl; + // Zero the initial guesses + Handle> solver = dynamic_cast*>(S_asymm->mInvMdagM(state,p.inv_param)); - (*solver)(solns,p.shifts,rhs); + auto n_shift = p.shifts.size(); + multi1d solns(n_shift); + for(int shift=0; shift < n_shift; ++shift) { + solns[shift] = zero; // Zero all lattice + //(solns[shift])[rb[1]]=zero; + } - int success = 0; - for(int shift = 0; shift < n_shift; ++shift) { - T r; - r[rb[1]] = zero; - T tmp; - tmp[rb[1]] = zero; + (*solver)(solns,p.shifts,rhs); - (*M_asymm)(tmp,solns[shift],PLUS); - (*M_asymm)(r, tmp, MINUS); + for(int shift = 0; shift < n_shift; ++shift) { + T r; + r[rb[1]] = zero; + T tmp; + tmp[rb[1]] = zero; - r[rb[1]] += p.shifts[shift]*solns[shift]; + (*M_asymm)(tmp,solns[shift],PLUS); + (*M_asymm)(r, tmp, MINUS); - // -residudum - r[rb[1]] -= rhs; + r[rb[1]] += p.shifts[shift]*solns[shift]; - Double resid_rel = sqrt(norm2(r,rb[1])/norm2(rhs,rb[1])); - QDPIO::cout << "shift="<= 1.0e-8 ) { - QDPIO::cout << "FAILED " << std::endl; - success--; - } - else { - QDPIO::cout << "PASSED " << std::endl; + // -residudum + r[rb[1]] -= rhs; + + Double resid_rel = sqrt(norm2(r,rb[1])/norm2(rhs,rb[1])); + QDPIO::cout << "shift="<= 1.0e-8 ) { + QDPIO::cout << "FAILED " << std::endl; + success--; + } + else { + QDPIO::cout << "PASSED " << std::endl; + } } } - // Done with tests Chroma::finalize(); exit(success);