/home/runner/work/DiFfRG_current/DiFfRG_current/DiFfRG/include/DiFfRG/physics/integration/quadrature_integrator.hh Source File#
|
DiFfRG
Discretization Framework for functional Renormalization Group flows
|
quadrature_integrator.hh
Go to the documentation of this file.
55 QuadratureIntegrator(QuadratureProvider &quadrature_provider, const std::array<size_t, dim> &_grid_size,
72 void set_grid_extents(const std::array<ctype, dim> &grid_min, const std::array<ctype, dim> &grid_max)
132 device::apply([&](const auto &...iargs) { update += is_first ? KERNEL::constant(iargs...) : NT(0); }, args);
141 void map(ExecutionSpace &space, const view_type integral_view, const Coordinates &coordinates, const Args &...args)
201 Kokkos::view_alloc(space, Kokkos::WithoutInitializing, "QuadratureIntegrator_positions"), need);
206 Kokkos::RangePolicy<ExecutionSpace>(space, 0, integral_view.size()), KOKKOS_LAMBDA(const size_t i) {
236 auto subview = device::apply([&](const auto &...i) { return Kokkos::subview(cache, i...); }, idx);
260 device::apply([&](const auto &...iargs) { subview() = weight * KERNEL::kernel(xargs..., iargs...); },
265 Kokkos::parallel_for(make_kokkos_nd_range_divisible<1 + dim, ExecutionSpace>(space, {0}, extents),
271 auto subview = device::apply([&](const auto &...i) { return Kokkos::subview(cache, i...); }, idx);
294 device::apply([&](const auto &...iargs) { subview() = weight * KERNEL::kernel(xargs..., iargs...); },
299 Kokkos::parallel_for(make_kokkos_nd_range_divisible<1 + dim, ExecutionSpace>(space, {0}, extents),
398 const MapSlice slice = scheduler.schedule(integrator_id(), dest, sizeof(NT), coordinates.size(),
410 return map_dist(dest + slice.offset, SubCoordinates(coordinates, slice.offset, slice.count), args...);
424 auto dest_device_view = Kokkos::View<NT *, ExecutionSpace>(m_dest_device, Kokkos::make_pair(size_t(0), n));
438 if (m_dest_pinned_size > 0 && MapCompletion::has_pending(m_dest_pinned.data())) MapCompletion::flush();
533 mutable typename Kokkos::View<NT, typename ExecutionSpace::memory_space>::host_mirror_type m_result_host;
538 class QuadratureIntegrator<dim, NT, KERNEL, TBB_exec> : public QuadratureIntegrator<dim, NT, KERNEL, KokkosHost_exec>
550 QuadratureIntegrator(QuadratureProvider &quadrature_provider, const std::array<size_t, dim> _grid_size,
609 if (scheduler.active() && scheduler.plan_contains(this->integrator_id())) MapCompletion::flush();
611 const MapSlice slice = scheduler.schedule(this->integrator_id(), dest, sizeof(NT), coordinates.size(),
623 run_or_queue(dest + slice.offset, SubCoordinates(coordinates, slice.offset, slice.count), args...);
Common base of every integrator, carrying the identity MapScheduler needs.
Definition abstract_integrator.hh:81
static bool deferral_enabled()
Whether the caller has opened a DeferredMaps scope.
Definition map_completion.hh:159
static void record(void *dst, const void *src, const size_t bytes)
Register a device->host result that still has to be copied from staging into dst.
Definition map_completion.hh:73
static bool has_pending(const void *src)
Whether src already has an unlanded result queued.
Definition map_completion.hh:149
static void flush()
Fence, land every pending map result, then exchange slices between MPI ranks.
Definition map_completion.hh:108
static void record_work(std::function< void()> job)
Queue a host-side map() to be run at flush time instead of now.
Definition map_completion.hh:96
static MapScheduler & instance()
auto map(NT *dest, const Coordinates &coordinates, const Args &...args)
Definition quadrature_integrator.hh:601
void get(NT &dest, const T &...t) const
Definition quadrature_integrator.hh:559
typename get_type::ctype< NT > ctype
Numerical type to be used for integration tasks e.g. the argument or possible jacobians.
Definition quadrature_integrator.hh:547
void run_or_queue(NT *dest, const Coordinates &coordinates, const Args &...args)
Definition quadrature_integrator.hh:636
void map(execution_space &, NT *dest, const Coordinates &coordinates, const Args &...args)
Definition quadrature_integrator.hh:585
QuadratureIntegrator(QuadratureProvider &quadrature_provider, const std::array< size_t, dim > _grid_size, std::array< ctype, dim > grid_min, std::array< ctype, dim > grid_max, const std::array< QuadratureType, dim > quadrature_type)
Definition quadrature_integrator.hh:550
This class performs numerical integration over a d-dimensional hypercube using quadrature rules.
Definition quadrature_integrator.hh:44
Kokkos::View< NT, typename ExecutionSpace::memory_space > m_result_view
Definition quadrature_integrator.hh:532
ExecutionSpace execution_space
Execution space to be used for the integration, e.g. GPU_exec, TBB_exec.
Definition quadrature_integrator.hh:53
Kokkos::View< NT *, ExecutionSpace > m_dest_device
Definition quadrature_integrator.hh:527
void get(NT &dest, const T &...t) const
Definition quadrature_integrator.hh:85
void set_grid_extents(const std::array< ctype, dim > &grid_min, const std::array< ctype, dim > &grid_max)
Definition quadrature_integrator.hh:72
Kokkos::View< NT *, PinnedHost_memory > m_dest_pinned
Definition quadrature_integrator.hh:530
device::array< device::array< ctype, dim >, 2 > grid_extents
Definition quadrature_integrator.hh:513
QuadratureIntegrator(QuadratureProvider &quadrature_provider, const std::array< size_t, dim > &_grid_size, const std::array< ctype, dim > &grid_min, const std::array< ctype, dim > &grid_max, const std::array< QuadratureType, dim > &quadrature_type)
Definition quadrature_integrator.hh:55
Kokkos::View< NT, typenameExecutionSpace::memory_space >::host_mirror_type m_result_host
Definition quadrature_integrator.hh:533
void map(ExecutionSpace &space, const view_type integral_view, const Coordinates &coordinates, const Args &...args)
Definition quadrature_integrator.hh:141
typename get_type::ctype< NT > ctype
Numerical type to be used for integration tasks e.g. the argument or possible jacobians.
Definition quadrature_integrator.hh:49
KokkosNDView< 1+dim, NT, ExecutionSpace > m_cache
Definition quadrature_integrator.hh:521
device::array< Kokkos::View< const ctype *, typename ExecutionSpace::memory_space >, dim > nodes
Definition quadrature_integrator.hh:517
void run_host(NT *dest, const Coordinates &coordinates, const Args &...args)
Definition quadrature_integrator.hh:494
device::array< Kokkos::View< const ctype *, typename ExecutionSpace::memory_space >, dim > weights
Definition quadrature_integrator.hh:518
device::array< ctype, dim > grid_scale
Definition quadrature_integrator.hh:515
QuadratureProvider & quadrature_provider
Definition quadrature_integrator.hh:512
device::array< ctype, dim > grid_start
Definition quadrature_integrator.hh:514
device::array< size_t, dim > grid_size
Definition quadrature_integrator.hh:509
std::string m_positions_key
Definition quadrature_integrator.hh:526
Kokkos::View< ctype *, typename ExecutionSpace::memory_space > m_positions
Definition quadrature_integrator.hh:525
auto map_dist(NT *dest, const Coordinates &coordinates, const Args &...args)
Definition quadrature_integrator.hh:414
auto map(NT *dest, const Coordinates &coordinates, const Args &...args)
Definition quadrature_integrator.hh:388
size_t quadrature_volume() const
Points evaluated per external grid point. Half of the scheduler's cost score.
Definition quadrature_integrator.hh:379
void get(OT &dest, const T &...t) const
Definition quadrature_integrator.hh:103
void get(ExecutionSpace &space, OT &dest, const T &...t) const
Definition quadrature_integrator.hh:111
void run_or_queue_host(NT *dest, const Coordinates &coordinates, const Args &...args)
Run a host-backend map now, or queue it for flush time if a deferral scope is open.
Definition quadrature_integrator.hh:477
A class that provides quadrature points and weights, in host and device memory. The quadrature points...
Definition quadrature_provider.hh:239
A contiguous window into the linear index range of another coordinate system.
Definition coordinates.hh:207
Definition abstract_integrator.hh:61
constexpr bool has_device_backend
Whether the default execution space is a real device.
Definition map_completion.hh:26
Definition complex_math.hh:10
Kokkos::View< typename GetKokkosNDStarType< dim, T >::type, ExecutionSpace > KokkosNDView
Definition kokkos.hh:182
auto make_kokkos_nd_range(ExecutionSpace &space, const device::array< size_t, dim > start, const device::array< size_t, dim > end)
Definition kokkos.hh:390
auto make_kokkos_nd_range_divisible(ExecutionSpace &space, const device::array< size_t, dim > start, const device::array< size_t, dim > end)
Like make_kokkos_nd_range, but re-tiled so no lane is launched masked.
Definition kokkos.hh:437
constexpr bool has_cacheable_positions_v
Whether a coordinates type carries enough identity for QuadratureIntegrator::map() to cache its forwa...
Definition quadrature_integrator.hh:28
Kokkos::View< typename GetKokkosNDStarType< dim, T >::type, ExecutionSpace, Kokkos::MemoryTraits< Kokkos::Restrict > > KokkosNDViewRestrict
Definition kokkos.hh:187
constexpr auto & get(named_tuple< tuple_type, strSet > &ob)
get a reference to the element with the given name
Definition tuples.hh:125
MapTarget map_target()
The scheduling target of an execution space, selected at compile time.
Definition map_scheduler.hh:80
NT TBBReduction(const device::array< size_t, dim > &grid_size, const FUN &functor)
Bitwise reproducible reduction of functor over a dim-dimensional index grid.
Definition tbb.hh:88
auto make_kokkos_nd_view(const std::string &label, const device::array< size_t, dim > &extents)
Definition kokkos.hh:203
This is a functor which wraps a lambda for reduction. Basically, this is necessary when one wants to ...
Definition kokkos.hh:512
This is a functor which wraps a lambda. Basically, this is necessary when one wants to call a variadi...
Definition kokkos.hh:486
This rank's window into the external grid of one QuadratureIntegrator::map() call.
Definition map_scheduler.hh:97
bool owns_all(const size_t grid_size) const
Definition map_scheduler.hh:103
size_t count
Number of grid points; 0 means this rank does not participate in this map().
Definition map_scheduler.hh:101
size_t offset
First external grid point this rank computes.
Definition map_scheduler.hh:99
The CPU execution space: TBB, the one host thread pool DiFfRG runs on.
Definition kokkos.hh:34
Generated by