diff options
Diffstat (limited to 'Source/FieldSolver/SpectralSolver')
-rw-r--r-- | Source/FieldSolver/SpectralSolver/SpectralFieldData.cpp | 18 | ||||
-rw-r--r-- | Source/FieldSolver/SpectralSolver/SpectralFieldDataRZ.cpp | 30 |
2 files changed, 29 insertions, 19 deletions
diff --git a/Source/FieldSolver/SpectralSolver/SpectralFieldData.cpp b/Source/FieldSolver/SpectralSolver/SpectralFieldData.cpp index 86fe8f7bd..6d7d18b5f 100644 --- a/Source/FieldSolver/SpectralSolver/SpectralFieldData.cpp +++ b/Source/FieldSolver/SpectralSolver/SpectralFieldData.cpp @@ -8,6 +8,7 @@ #include "SpectralFieldData.H" #include "Utils/WarpXAlgorithmSelection.H" +#include "Utils/WarpXUtil.H" #include "WarpX.H" #include <AMReX_Array4.H> @@ -104,6 +105,7 @@ SpectralFieldData::SpectralFieldData( const int lev, const bool periodic_single_box) { amrex::LayoutData<amrex::Real>* cost = WarpX::getCosts(lev); + bool do_costs = WarpXUtilLoadBalance::doCosts(cost, realspace_ba, dm); m_periodic_single_box = periodic_single_box; @@ -147,7 +149,7 @@ SpectralFieldData::SpectralFieldData( const int lev, // Loop over boxes and allocate the corresponding plan // for each box owned by the local MPI proc for ( MFIter mfi(spectralspace_ba, dm); mfi.isValid(); ++mfi ){ - if (cost && WarpX::load_balance_costs_update_algo == LoadBalanceCostsUpdateAlgo::Timers) + if (do_costs) { amrex::Gpu::synchronize(); } @@ -168,7 +170,7 @@ SpectralFieldData::SpectralFieldData( const int lev, reinterpret_cast<AnyFFT::Complex*>( tmpSpectralField[mfi].dataPtr()), AnyFFT::direction::C2R, AMREX_SPACEDIM); - if (cost && WarpX::load_balance_costs_update_algo == LoadBalanceCostsUpdateAlgo::Timers) + if (do_costs) { amrex::Gpu::synchronize(); wt = amrex::second() - wt; @@ -193,10 +195,11 @@ SpectralFieldData::~SpectralFieldData() * (in the spectral field specified by `field_index`) */ void SpectralFieldData::ForwardTransform (const int lev, - const MultiFab& mf, const int field_index, + const MultiFab& mf, const int field_index, const int i_comp, const IntVect& stag) { amrex::LayoutData<amrex::Real>* cost = WarpX::getCosts(lev); + bool do_costs = WarpXUtilLoadBalance::doCosts(cost, mf.boxArray(), mf.DistributionMap()); // Check field index type, in order to apply proper shift in spectral space #if (AMREX_SPACEDIM >= 2) @@ -215,7 +218,7 @@ SpectralFieldData::ForwardTransform (const int lev, // Note: we do NOT OpenMP parallelize here, since we use OpenMP threads for // the FFTs on each box! for ( MFIter mfi(mf); mfi.isValid(); ++mfi ){ - if (cost && WarpX::load_balance_costs_update_algo == LoadBalanceCostsUpdateAlgo::Timers) + if (do_costs) { amrex::Gpu::synchronize(); } @@ -283,7 +286,7 @@ SpectralFieldData::ForwardTransform (const int lev, }); } - if (cost && WarpX::load_balance_costs_update_algo == LoadBalanceCostsUpdateAlgo::Timers) + if (do_costs) { amrex::Gpu::synchronize(); wt = amrex::second() - wt; @@ -303,6 +306,7 @@ SpectralFieldData::BackwardTransform (const int lev, const amrex::IntVect& fill_guards) { amrex::LayoutData<amrex::Real>* cost = WarpX::getCosts(lev); + bool do_costs = WarpXUtilLoadBalance::doCosts(cost, mf.boxArray(), mf.DistributionMap()); // Check field index type, in order to apply proper shift in spectral space #if (AMREX_SPACEDIM >= 2) @@ -339,7 +343,7 @@ SpectralFieldData::BackwardTransform (const int lev, // Note: we do NOT OpenMP parallelize here, since we use OpenMP threads for // the iFFTs on each box! for ( MFIter mfi(mf); mfi.isValid(); ++mfi ){ - if (cost && WarpX::load_balance_costs_update_algo == LoadBalanceCostsUpdateAlgo::Timers) + if (do_costs) { amrex::Gpu::synchronize(); } @@ -443,7 +447,7 @@ SpectralFieldData::BackwardTransform (const int lev, }); } - if (cost && WarpX::load_balance_costs_update_algo == LoadBalanceCostsUpdateAlgo::Timers) + if (do_costs) { amrex::Gpu::synchronize(); wt = amrex::second() - wt; diff --git a/Source/FieldSolver/SpectralSolver/SpectralFieldDataRZ.cpp b/Source/FieldSolver/SpectralSolver/SpectralFieldDataRZ.cpp index a44ecb47e..57eac3a2c 100644 --- a/Source/FieldSolver/SpectralSolver/SpectralFieldDataRZ.cpp +++ b/Source/FieldSolver/SpectralSolver/SpectralFieldDataRZ.cpp @@ -408,6 +408,7 @@ SpectralFieldDataRZ::ForwardTransform (const int lev, int const i_comp) { amrex::LayoutData<amrex::Real>* cost = WarpX::getCosts(lev); + bool do_costs = WarpXUtilLoadBalance::doCosts(cost, field_mf.boxArray(), field_mf.DistributionMap()); // Check field index type, in order to apply proper shift in spectral space. // Only cell centered in r is supported. @@ -430,7 +431,7 @@ SpectralFieldDataRZ::ForwardTransform (const int lev, // Loop over boxes. for (amrex::MFIter mfi(field_mf); mfi.isValid(); ++mfi){ - if (cost && WarpX::load_balance_costs_update_algo == LoadBalanceCostsUpdateAlgo::Timers) + if (do_costs) { amrex::Gpu::synchronize(); } @@ -451,7 +452,7 @@ SpectralFieldDataRZ::ForwardTransform (const int lev, FABZForwardTransform(mfi, realspace_bx, tempHTransformedSplit, field_index, is_nodal_z); - if (cost && WarpX::load_balance_costs_update_algo == LoadBalanceCostsUpdateAlgo::Timers) + if (do_costs) { amrex::Gpu::synchronize(); wt = amrex::second() - wt; @@ -469,6 +470,7 @@ SpectralFieldDataRZ::ForwardTransform (const int lev, amrex::MultiFab const & field_mf_t, int const field_index_t) { amrex::LayoutData<amrex::Real>* cost = WarpX::getCosts(lev); + bool do_costs = WarpXUtilLoadBalance::doCosts(cost, field_mf_r.boxArray(), field_mf_r.DistributionMap()); // Check field index type, in order to apply proper shift in spectral space. // Only cell centered in r is supported. @@ -486,7 +488,7 @@ SpectralFieldDataRZ::ForwardTransform (const int lev, // Loop over boxes. for (amrex::MFIter mfi(field_mf_r); mfi.isValid(); ++mfi){ - if (cost && WarpX::load_balance_costs_update_algo == LoadBalanceCostsUpdateAlgo::Timers) + if (do_costs) { amrex::Gpu::synchronize(); } @@ -515,7 +517,7 @@ SpectralFieldDataRZ::ForwardTransform (const int lev, FABZForwardTransform(mfi, realspace_bx, tempHTransformedSplit_p, field_index_r, is_nodal_z); FABZForwardTransform(mfi, realspace_bx, tempHTransformedSplit_m, field_index_t, is_nodal_z); - if (cost && WarpX::load_balance_costs_update_algo == LoadBalanceCostsUpdateAlgo::Timers) + if (do_costs) { amrex::Gpu::synchronize(); wt = amrex::second() - wt; @@ -532,6 +534,7 @@ SpectralFieldDataRZ::BackwardTransform (const int lev, int const i_comp) { amrex::LayoutData<amrex::Real>* cost = WarpX::getCosts(lev); + bool do_costs = WarpXUtilLoadBalance::doCosts(cost, field_mf.boxArray(), field_mf.DistributionMap()); // Check field index type, in order to apply proper shift in spectral space. bool const is_nodal_z = field_mf.is_nodal(1); @@ -548,7 +551,7 @@ SpectralFieldDataRZ::BackwardTransform (const int lev, // Loop over boxes. for (amrex::MFIter mfi(field_mf); mfi.isValid(); ++mfi){ - if (cost && WarpX::load_balance_costs_update_algo == LoadBalanceCostsUpdateAlgo::Timers) + if (do_costs) { amrex::Gpu::synchronize(); } @@ -600,7 +603,7 @@ SpectralFieldDataRZ::BackwardTransform (const int lev, field_mf_array(i,j,k,ic) = sign*field_mf_copy_array(ii,j,k,icomp); }); - if (cost && WarpX::load_balance_costs_update_algo == LoadBalanceCostsUpdateAlgo::Timers) + if (do_costs) { amrex::Gpu::synchronize(); wt = amrex::second() - wt; @@ -617,6 +620,7 @@ SpectralFieldDataRZ::BackwardTransform (const int lev, amrex::MultiFab& field_mf_t, int const field_index_t) { amrex::LayoutData<amrex::Real>* cost = WarpX::getCosts(lev); + bool do_costs = WarpXUtilLoadBalance::doCosts(cost, field_mf_r.boxArray(), field_mf_r.DistributionMap()); // Check field index type, in order to apply proper shift in spectral space. bool const is_nodal_z = field_mf_r.is_nodal(1); @@ -632,7 +636,7 @@ SpectralFieldDataRZ::BackwardTransform (const int lev, // Loop over boxes. for (amrex::MFIter mfi(field_mf_r); mfi.isValid(); ++mfi){ - if (cost && WarpX::load_balance_costs_update_algo == LoadBalanceCostsUpdateAlgo::Timers) + if (do_costs) { amrex::Gpu::synchronize(); } @@ -695,7 +699,7 @@ SpectralFieldDataRZ::BackwardTransform (const int lev, } }); - if (cost && WarpX::load_balance_costs_update_algo == LoadBalanceCostsUpdateAlgo::Timers) + if (do_costs) { amrex::Gpu::synchronize(); wt = amrex::second() - wt; @@ -727,10 +731,11 @@ void SpectralFieldDataRZ::ApplyFilter (const int lev, int const field_index) { amrex::LayoutData<amrex::Real>* cost = WarpX::getCosts(lev); + bool do_costs = WarpXUtilLoadBalance::doCosts(cost, binomialfilter.boxArray(), binomialfilter.DistributionMap()); for (amrex::MFIter mfi(binomialfilter); mfi.isValid(); ++mfi){ - if (cost && WarpX::load_balance_costs_update_algo == LoadBalanceCostsUpdateAlgo::Timers) + if (do_costs) { amrex::Gpu::synchronize(); } @@ -756,7 +761,7 @@ SpectralFieldDataRZ::ApplyFilter (const int lev, int const field_index) fields_arr(i,j,k,ic) *= filter_r_arr[ir]*filter_z_arr[j]; }); - if (cost && WarpX::load_balance_costs_update_algo == LoadBalanceCostsUpdateAlgo::Timers) + if (do_costs) { amrex::Gpu::synchronize(); wt = amrex::second() - wt; @@ -771,10 +776,11 @@ SpectralFieldDataRZ::ApplyFilter (const int lev, int const field_index1, int const field_index2, int const field_index3) { amrex::LayoutData<amrex::Real>* cost = WarpX::getCosts(lev); + bool do_costs = WarpXUtilLoadBalance::doCosts(cost, binomialfilter.boxArray(), binomialfilter.DistributionMap()); for (amrex::MFIter mfi(binomialfilter); mfi.isValid(); ++mfi){ - if (cost && WarpX::load_balance_costs_update_algo == LoadBalanceCostsUpdateAlgo::Timers) + if (do_costs) { amrex::Gpu::synchronize(); } @@ -804,7 +810,7 @@ SpectralFieldDataRZ::ApplyFilter (const int lev, int const field_index1, fields_arr(i,j,k,ic3) *= filter_r_arr[ir]*filter_z_arr[j]; }); - if (cost && WarpX::load_balance_costs_update_algo == LoadBalanceCostsUpdateAlgo::Timers) + if (do_costs) { amrex::Gpu::synchronize(); wt = amrex::second() - wt; |