1#ifndef __MATH_OPGRAD_KERNEL_H__
2#define __MATH_OPGRAD_KERNEL_H__
46template<
typename T, const
int LX, const
int CHUNKS >
92 for (
int n = 0; n <
nchunks; n++) {
102 for (
int l = 0; l <
LX; l++) {
128template<
typename T, const
int LX, const
int EB >
159 "kstep block exceeds the LDS budget");
190 for (
int k = 0;
k <
LX; ++
k) {
196 for (
int l = 0; l <
LX; l++) {
204 for (
int l = 0; l <
LX; l++) {
241#if defined(__gfx90a__) || defined(__gfx942__)
243template<
typename T, const
int LX, const
int NWF, const
int TILE >
276 "wavefronts per block must split evenly over the elements");
286 static_assert(
sizeof(
shdx) +
sizeof(
shdy) +
sizeof(
shdz) +
289 "mfma block exceeds the shared memory budget");
293 const int tid = wf * 64 +
lane;
296 const int eb = wf /
WPE;
326 mfma_contract_sel<T, LX, 0, false, false, WPE, TILE, 0, NEL>::run(
329 mfma_contract_sel<T, LX, 1, false, false, WPE, TILE, 0, NEL>::run(
332 mfma_contract_sel<T, LX, 2, false, false, WPE, TILE, 0, NEL>::run(
339 const int gp = p +
ele;
361template<
typename T, const
int LX, const
int NWF, const
int TILE >
364 const T *,
const T *,
const T *,
const T *,
365 const T *,
const T *,
const T *,
const T *,
366 const T *,
const T *,
const T *,
const int) {}
369#if defined(__gfx90a__) || defined(__gfx942__)
372#define NEKO_OPGRAD_MFMA_DISPATCH(TYPE, LXV) \
373 template< const int NWF, const int TILE > \
374 struct opgrad_mfma_dispatch< TYPE, LXV, NWF, TILE > { \
375 __device__ static void run(TYPE * ux, \
393 opgrad_mfma_elem< TYPE, LXV, NWF, TILE >(ux, uy, uz, u, dx, dy, dz, \
394 drdx, dsdx, dtdx, drdy, dsdy, \
395 dtdy, drdz, dsdz, dtdz, w3, \
429template<
typename T, const
int LX, const
int NWF, const
int TILE >
450 opgrad_mfma_dispatch< T, LX, NWF, TILE >::run(
ux,
uy,
uz,
u,
dx,
dy,
dz,
drdx,
__global__ void ale_add_kinematics_kernel(const int n, T *__restrict__ wx, T *__restrict__ wy, T *__restrict__ wz, const T *__restrict__ x_ref, const T *__restrict__ y_ref, const T *__restrict__ z_ref, const T *__restrict__ phi, const T *__restrict__ x, const T *__restrict__ y, const T *__restrict__ z, const kinematics_params_t kin_params)
__shared__ T shu[EB *LX *LX]
#define NEKO_EB_BOUNDS(NT)
__global__ void T *__restrict__ T *__restrict__ const T *__restrict__ const T *__restrict__ const T *__restrict__ const T *__restrict__ const T *__restrict__ const T *__restrict__ dsdx
__global__ void T *__restrict__ 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__ dtdz
__global__ void opgrad_kernel_1d(T *__restrict__ ux, T *__restrict__ uy, T *__restrict__ uz, const T *__restrict__ u, const T *__restrict__ dx, const T *__restrict__ dy, const T *__restrict__ dz, const T *__restrict__ drdx, const T *__restrict__ dsdx, const T *__restrict__ dtdx, const T *__restrict__ drdy, const T *__restrict__ dsdy, const T *__restrict__ dtdy, const T *__restrict__ drdz, const T *__restrict__ dsdz, const T *__restrict__ dtdz, const T *__restrict__ w3)
__global__ void T *__restrict__ T *__restrict__ const T *__restrict__ const T *__restrict__ dx
__global__ void T *__restrict__ uy
__global__ void T *__restrict__ 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__ dsdz
__global__ void T *__restrict__ 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 nelv
__global__ void T *__restrict__ T *__restrict__ const T *__restrict__ const T *__restrict__ const T *__restrict__ const T *__restrict__ dz
__shared__ T shdy[LX *LX]
__global__ void T *__restrict__ 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__ drdy
__global__ void T *__restrict__ 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__ drdz
__global__ void T *__restrict__ T *__restrict__ const T *__restrict__ const T *__restrict__ const T *__restrict__ const T *__restrict__ const T *__restrict__ const T *__restrict__ const T *__restrict__ dtdx
__shared__ T shdx[LX *LX]
__global__ void T *__restrict__ 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__ dtdy
__global__ void T *__restrict__ T *__restrict__ const T *__restrict__ const T *__restrict__ const T *__restrict__ const T *__restrict__ const T *__restrict__ drdx
__shared__ T shdz[LX *LX]
__global__ void T *__restrict__ 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__ dsdy
__global__ void T *__restrict__ T *__restrict__ const T *__restrict__ const T *__restrict__ const T *__restrict__ dy
__global__ void T *__restrict__ T *__restrict__ const T *__restrict__ u
__global__ void T *__restrict__ 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__ w3
__global__ void T *__restrict__ T *__restrict__ uz
__global__ void __launch_bounds__((LX *LX *EB)) opgrad_kernel_kstep(T *__restrict__ ux
#define NEKO_MFMA_NEL_N(EB, LX, SZ, TILE)
#define NEKO_MFMA_EB_N(NWF, LX, SZ)
static __device__ void run(T *, T *, T *, const T *, const T *, const T *, const T *, const T *, const T *, const T *, const T *, const T *, const T *, const T *, const T *, const T *, const T *, const int)