diff options
author | 2021-11-19 14:37:22 -0800 | |
---|---|---|
committer | 2021-11-19 14:37:22 -0800 | |
commit | 1ab82a3dd77863dba5ef14e06b019cfa8ae53e13 (patch) | |
tree | 52c9f717a958a3faa6066b825df057878739f79b /Source/Particles/Collision/BackgroundMCCCollision.cpp | |
parent | 279aadf47f2c19c17129e83a0bc4544f280e7068 (diff) | |
download | WarpX-1ab82a3dd77863dba5ef14e06b019cfa8ae53e13.tar.gz WarpX-1ab82a3dd77863dba5ef14e06b019cfa8ae53e13.tar.zst WarpX-1ab82a3dd77863dba5ef14e06b019cfa8ae53e13.zip |
added cost of MCC collisions to load balancing calculation (when using Timers) (#2584)
Diffstat (limited to '')
-rw-r--r-- | Source/Particles/Collision/BackgroundMCCCollision.cpp | 35 |
1 files changed, 32 insertions, 3 deletions
diff --git a/Source/Particles/Collision/BackgroundMCCCollision.cpp b/Source/Particles/Collision/BackgroundMCCCollision.cpp index 736f78423..857685985 100644 --- a/Source/Particles/Collision/BackgroundMCCCollision.cpp +++ b/Source/Particles/Collision/BackgroundMCCCollision.cpp @@ -209,18 +209,33 @@ BackgroundMCCCollision::doCollisions (amrex::Real cur_time, MultiParticleContain auto const flvl = species1.finestLevel(); for (int lev = 0; lev <= flvl; ++lev) { + auto cost = WarpX::getCosts(lev); + // firstly loop over particles box by box and do all particle conserving // scattering #ifdef _OPENMP #pragma omp parallel if (amrex::Gpu::notInLaunchRegion()) #endif for (WarpXParIter pti(species1, lev); pti.isValid(); ++pti) { + if (cost && WarpX::load_balance_costs_update_algo == LoadBalanceCostsUpdateAlgo::Timers) + { + amrex::Gpu::synchronize(); + } + amrex::Real wt = amrex::second(); + doBackgroundCollisionsWithinTile(pti); + + if (cost && WarpX::load_balance_costs_update_algo == LoadBalanceCostsUpdateAlgo::Timers) + { + amrex::Gpu::synchronize(); + wt = amrex::second() - wt; + amrex::HostDevice::Atomic::Add( &(*cost)[pti.index()], wt); + } } // secondly perform ionization through the SmartCopyFactory if needed if (ionization_flag) { - doBackgroundIonization(lev, species1, species2); + doBackgroundIonization(lev, cost, species1, species2); } } } @@ -348,8 +363,8 @@ void BackgroundMCCCollision::doBackgroundCollisionsWithinTile void BackgroundMCCCollision::doBackgroundIonization -( int lev, WarpXParticleContainer& species1, - WarpXParticleContainer& species2) +( int lev, amrex::LayoutData<amrex::Real>* cost, + WarpXParticleContainer& species1, WarpXParticleContainer& species2) { WARPX_PROFILE("BackgroundMCCCollision::doBackgroundIonization()"); @@ -372,6 +387,13 @@ void BackgroundMCCCollision::doBackgroundIonization #pragma omp parallel if (amrex::Gpu::notInLaunchRegion()) #endif for (WarpXParIter pti(species1, lev); pti.isValid(); ++pti) { + + if (cost && WarpX::load_balance_costs_update_algo == LoadBalanceCostsUpdateAlgo::Timers) + { + amrex::Gpu::synchronize(); + } + amrex::Real wt = amrex::second(); + auto& elec_tile = species1.ParticlesAt(lev, pti); auto& ion_tile = species2.ParticlesAt(lev, pti); @@ -389,5 +411,12 @@ void BackgroundMCCCollision::doBackgroundIonization setNewParticleIDs(elec_tile, np_elec, num_added); setNewParticleIDs(ion_tile, np_ion, num_added); + + if (cost && WarpX::load_balance_costs_update_algo == LoadBalanceCostsUpdateAlgo::Timers) + { + amrex::Gpu::synchronize(); + wt = amrex::second() - wt; + amrex::HostDevice::Atomic::Add( &(*cost)[pti.index()], wt); + } } } |