aboutsummaryrefslogtreecommitdiff
path: root/Source/Particles/MultiParticleContainer.cpp
diff options
context:
space:
mode:
authorGravatar Michael E Rowan <38045958+mrowan137@users.noreply.github.com> 2021-03-16 11:35:07 -0700
committerGravatar GitHub <noreply@github.com> 2021-03-16 11:35:07 -0700
commit76ebee96eeabd7336c49c1250e255db59ec0d971 (patch)
tree30449968791934a0522271e6e19f71ea2935478d /Source/Particles/MultiParticleContainer.cpp
parent6cf0ca819ce31f8e7ac471b49bbf078e54e55a94 (diff)
downloadWarpX-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.cpp45
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);
+ }
}
}
}