ARTEMIS
ProfilerWrapper.H
Go to the documentation of this file.
1 /* Copyright 2020-2021 Axel Huebl, Maxence Thevenet
2  *
3  * This file is part of WarpX.
4  *
5  * License: BSD-3-Clause-LBNL
6  */
7 
8 #ifndef ABLASTR_PROFILERWRAPPER_H_
9 #define ABLASTR_PROFILERWRAPPER_H_
10 
11 #include <AMReX_BLProfiler.H>
12 #include <AMReX_GpuDevice.H>
13 
14 
15 namespace ablastr {
16 namespace profiler {
22  void
23  device_synchronize(bool const do_device_synchronize = false) {
24  if (do_device_synchronize)
26  }
27 
33  SynchronizeOnDestruct(bool const do_device_synchronize = false)
34  : m_do_device_synchronize(do_device_synchronize) {}
35 
39  }
40 
42  };
43 
44 } // namespace profiler
45 } // namespace ablastr
46 
47 // `BL_PROFILE_PASTE(SYNC_SCOPE_, __COUNTER__)` and `SYNC_V_##vname` used to make unique names for
48 // synchronizeOnDestruct objects, like `SYNC_SCOPE_0` and `SYNC_V_pmain`
49 #define ABLASTR_PROFILE(fname, sync) ablastr::profiler::device_synchronize(sync); BL_PROFILE(fname); ablastr::profiler::SynchronizeOnDestruct BL_PROFILE_PASTE(SYNC_SCOPE_, __COUNTER__){sync}
50 #define ABLASTR_PROFILE_VAR(fname, vname, sync) ablastr::profiler::device_synchronize(sync); BL_PROFILE_VAR(fname, vname); ablastr::profiler::SynchronizeOnDestruct SYNC_V_##vname{sync}
51 #define ABLASTR_PROFILE_VAR_NS(fname, vname, sync) BL_PROFILE_VAR_NS(fname, vname); ablastr::profiler::SynchronizeOnDestruct SYNC_V_##vname{sync}
52 #define ABLASTR_PROFILE_VAR_START(vname, sync) ablastr::profiler::device_synchronize(sync); BL_PROFILE_VAR_START(vname)
53 #define ABLASTR_PROFILE_VAR_STOP(vname, sync) ablastr::profiler::device_synchronize(sync); BL_PROFILE_VAR_STOP(vname)
54 #define ABLASTR_PROFILE_REGION(rname, sync) ablastr::profiler::device_synchronize(sync); BL_PROFILE_REGION(rname); ablastr::profiler::SynchronizeOnDestruct BL_PROFILE_PASTE(SYNC_R_, __COUNTER__){sync}
55 
56 #endif // ABLASTR_PROFILERWRAPPER_H_
#define AMREX_FORCE_INLINE
AMREX_FORCE_INLINE void device_synchronize(bool const do_device_synchronize=false)
Definition: ProfilerWrapper.H:23
Definition: average.cpp:23
void synchronize() noexcept
Definition: ProfilerWrapper.H:32
AMREX_FORCE_INLINE ~SynchronizeOnDestruct()
Definition: ProfilerWrapper.H:37
SynchronizeOnDestruct(bool const do_device_synchronize=false)
Definition: ProfilerWrapper.H:33
bool m_do_device_synchronize
Definition: ProfilerWrapper.H:41