|
Neko 1.99.9
A portable framework for high-order spectral element flow simulations
|
#include <conv1_kernel.h>
Static Public Member Functions | |
| static __device__ void | run (T *__restrict__, const T *__restrict__, const T *__restrict__, const T *__restrict__, const T *__restrict__, const T *__restrict__, const T *__restrict__, const T *__restrict__, const T *__restrict__, const T *__restrict__, const T *__restrict__, const T *__restrict__, const T *__restrict__, const T *__restrict__, const T *__restrict__, const T *__restrict__, const T *__restrict__, const T *__restrict__, const int) |
Device kernel for the convective term on the fp64 tensor cores
Structurally the same as opgrad_dmma_elem(): the same four DMMA_P^3 cubes, the same stage-u-then-contract-three-axes, and a pointwise tail. Only u is contracted – the convecting velocity and the metrics enter pointwise – so three contractions serve thirteen streamed factor cubes.
That gives conv1 20480 bytes per contraction at lx = 8, the highest of any operator in the tree and 3.3x axhelm's 6144. Since the staging tax is paid per contraction and the memory time hiding it is paid per byte, this is the most favourable of that trade anywhere, which is the whole reason the strategy is offered here. See dmma_kernel.h for the padded staging, the per axis matrix views and the arch and LX bounds.
Definition at line 402 of file conv1_kernel.h.
|
inlinestatic |