Orrery
A GPU-accelerated N-body gravitational simulator
Loading...
Searching...
No Matches
orrery::solvers::SyclTreeTimings Struct Reference

Where one force evaluation spent its time. More...

#include <orrery/solvers/sycl_tree_solver.hpp>

Public Attributes

backend::Duration ordering {}
 Computing and sorting the Morton codes, on the host.
backend::Duration gathering {}
 Gathering the positions and masses into the tree's order, writing straight into shared memory.
backend::Duration construction {}
 Building the octree over the sorted order, on the host.
backend::Duration node_staging {}
 Converting the host node array into the device layout.
backend::Duration kernel {}
 Submitting the traversal and waiting for the device.
backend::Duration scatter {}
 Scattering the accelerations back to the caller's order out of shared memory.

Detailed Description

Where one force evaluation spent its time.

Six parts rather than the four EvaluationTimings reports, because two of the four now do double duty and hiding that would make the GPU solver look as though it pays a staging cost the CPU solver does not. It does not: the gather and the scatter below are the same gather and scatter the CPU tree solver performs, with shared memory at one end.

Taken unconditionally, for the reason EvaluationTimings gives: a build option that switched the instrumentation off would mean the configuration that reports the breakdown is not the configuration that was measured.

Member Data Documentation

◆ gathering

backend::Duration orrery::solvers::SyclTreeTimings::gathering {}

Gathering the positions and masses into the tree's order, writing straight into shared memory.

This is Phase 8's gather and Phase 9's staging at once.

◆ node_staging

backend::Duration orrery::solvers::SyclTreeTimings::node_staging {}

Converting the host node array into the device layout.

The one cost this solver carries that neither of its parents does. It is O(number of nodes), which is a fraction of N, and it is reported separately so that the fraction can be read rather than assumed.

◆ kernel

backend::Duration orrery::solvers::SyclTreeTimings::kernel {}

Submitting the traversal and waiting for the device.

The figure a GPU throughput number should be computed from.

◆ scatter

backend::Duration orrery::solvers::SyclTreeTimings::scatter {}

Scattering the accelerations back to the caller's order out of shared memory.

Phase 8's scatter and Phase 9's copy-out at once.


The documentation for this struct was generated from the following file: