diff options
author | 2021-03-16 11:35:07 -0700 | |
---|---|---|
committer | 2021-03-16 11:35:07 -0700 | |
commit | 76ebee96eeabd7336c49c1250e255db59ec0d971 (patch) | |
tree | 30449968791934a0522271e6e19f71ea2935478d /Source/Particles/MultiParticleContainer.cpp | |
parent | 6cf0ca819ce31f8e7ac471b49bbf078e54e55a94 (diff) | |
download | WarpX-76ebee96eeabd7336c49c1250e255db59ec0d971.tar.gz WarpX-76ebee96eeabd7336c49c1250e255db59ec0d971.tar.zst WarpX-76ebee96eeabd7336c49c1250e255db59ec0d971.zip |
Add timers in routines that depend on cell-related work (#1692)
* Add timers
* eol
* AtomicAdd
* lev argument for getCosts
* style
* style
* wip
* eol
* .ipynb
* passing down lev
* eol
* passing lev
* eol
* Update Source/Particles/Collision/PairWiseCoulombCollision.cpp
Co-authored-by: Axel Huebl <axel.huebl@plasma.ninja>
* Add for QED and ionization routines
* eol
* remove unneeded
* mfi-->pti
* move cost
* eol
Co-authored-by: Axel Huebl <axel.huebl@plasma.ninja>
Diffstat (limited to 'Source/Particles/MultiParticleContainer.cpp')
-rw-r--r-- | Source/Particles/MultiParticleContainer.cpp | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/Source/Particles/MultiParticleContainer.cpp b/Source/Particles/MultiParticleContainer.cpp index 658dbf23f..5501d43d8 100644 --- a/Source/Particles/MultiParticleContainer.cpp +++ b/Source/Particles/MultiParticleContainer.cpp @@ -687,6 +687,8 @@ MultiParticleContainer::doFieldIonization (int lev, { WARPX_PROFILE("MultiParticleContainer::doFieldIonization()"); + amrex::LayoutData<amrex::Real>* cost = WarpX::getCosts(lev); + // Loop over all species. // Ionized particles in pc_source create particles in pc_product for (auto& pc_source : allcontainers) @@ -711,6 +713,12 @@ MultiParticleContainer::doFieldIonization (int lev, #endif for (WarpXParIter pti(*pc_source, lev, info); pti.isValid(); ++pti) { + if (cost && WarpX::load_balance_costs_update_algo == LoadBalanceCostsUpdateAlgo::Timers) + { + amrex::Gpu::synchronize(); + } + Real wt = amrex::second(); + auto& src_tile = pc_source ->ParticlesAt(lev, pti); auto& dst_tile = pc_product->ParticlesAt(lev, pti); @@ -723,6 +731,13 @@ MultiParticleContainer::doFieldIonization (int lev, Filter, Copy, Transform); setNewParticleIDs(dst_tile, np_dst, 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); + } } } } @@ -1252,6 +1267,8 @@ void MultiParticleContainer::doQedBreitWheeler (int lev, { WARPX_PROFILE("MultiParticleContainer::doQedBreitWheeler()"); + amrex::LayoutData<amrex::Real>* cost = WarpX::getCosts(lev); + // Loop over all species. // Photons undergoing Breit Wheeler process create electrons // in pc_product_ele and positrons in pc_product_pos @@ -1286,6 +1303,12 @@ void MultiParticleContainer::doQedBreitWheeler (int lev, #endif for (WarpXParIter pti(*pc_source, lev, info); pti.isValid(); ++pti) { + if (cost && WarpX::load_balance_costs_update_algo == LoadBalanceCostsUpdateAlgo::Timers) + { + amrex::Gpu::synchronize(); + } + Real wt = amrex::second(); + auto Transform = PairGenerationTransformFunc(pair_gen_functor, pti, lev, Ex.nGrow(), Ex[pti], Ey[pti], Ez[pti], @@ -1305,6 +1328,13 @@ void MultiParticleContainer::doQedBreitWheeler (int lev, setNewParticleIDs(dst_ele_tile, np_dst_ele, num_added); setNewParticleIDs(dst_pos_tile, np_dst_pos, 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); + } } } } @@ -1319,6 +1349,8 @@ void MultiParticleContainer::doQedQuantumSync (int lev, { WARPX_PROFILE("MultiParticleContainer::doQedQuantumSync()"); + amrex::LayoutData<amrex::Real>* cost = WarpX::getCosts(lev); + // Loop over all species. // Electrons or positrons undergoing Quantum photon emission process // create photons in pc_product_phot @@ -1347,6 +1379,12 @@ void MultiParticleContainer::doQedQuantumSync (int lev, #endif for (WarpXParIter pti(*pc_source, lev, info); pti.isValid(); ++pti) { + if (cost && WarpX::load_balance_costs_update_algo == LoadBalanceCostsUpdateAlgo::Timers) + { + amrex::Gpu::synchronize(); + } + Real wt = amrex::second(); + auto Transform = PhotonEmissionTransformFunc( m_shr_p_qs_engine->build_optical_depth_functor(), pc_source->particle_runtime_comps["optical_depth_QSR"], @@ -1370,6 +1408,13 @@ void MultiParticleContainer::doQedQuantumSync (int lev, cleanLowEnergyPhotons( dst_tile, np_dst, num_added, m_quantum_sync_photon_creation_energy_threshold); + + 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); + } } } } |