|
Orrery
A GPU-accelerated N-body gravitational simulator
|
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. | |
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.
| 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.
| 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.
| backend::Duration orrery::solvers::SyclTreeTimings::kernel {} |
Submitting the traversal and waiting for the device.
The figure a GPU throughput number should be computed from.
| 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.