1#ifndef __MATH_CONV1_KERNEL_H__
2#define __MATH_CONV1_KERNEL_H__
46template<
typename T, const
int LX, const
int CHUNKS >
90 while(l < (
LX *
LX *
LX)) {
104 for (
int n = 0; n <
nchunks; n++) {
108 const int k =
jk /
LX;
109 const int j =
jk -
k *
LX;
114 for (
int l = 0; l <
LX; l++) {
134template<
typename T, const
int LX, const
int EB >
162 static_assert(
sizeof(
shu) +
167 "kstep block exceeds the LDS budget");
206 for (
int k = 0;
k <
LX; ++
k) {
211 for (
int l = 0; l <
LX; l++) {
219 for (
int l = 0; l <
LX; l++) {
252#if defined(__gfx90a__) || defined(__gfx942__)
254template<
typename T, const
int LX, const
int NWF >
284 "wavefronts per block must split evenly over the elements");
294 static_assert(
sizeof(
shdx) +
sizeof(
shdy) +
sizeof(
shdz) +
297 "mfma block exceeds the shared memory budget");
301 const int tid = wf * 64 +
lane;
304 const int eb = wf /
WPE;
333 mfma_contract_sel<T, LX, 0, false, false, WPE>::run(
shr +
sh,
shdx,
335 mfma_contract_sel<T, LX, 1, false, false, WPE>::run(
shs +
sh,
shdy,
337 mfma_contract_sel<T, LX, 2, false, false, WPE>::run(
sht +
sh,
shdz,
344 const int gp = p +
ele;
366template<
typename T, const
int LX, const
int NWF >
369 const T *,
const T *,
const T *,
const T *,
370 const T *,
const T *,
const T *,
const T *,
371 const T *,
const T *,
const T *,
const T *,
372 const T *,
const int) {}
375#if defined(__gfx90a__) || defined(__gfx942__)
378#define NEKO_CONV1_MFMA_DISPATCH(TYPE, LXV) \
379 template< const int NWF > \
380 struct conv1_mfma_dispatch< TYPE, LXV, NWF > { \
381 __device__ static void run(TYPE * du, \
398 const TYPE * jacinv, \
400 conv1_mfma_elem< TYPE, LXV, NWF >(du, u, vx, vy, vz, dx, dy, dz, \
401 drdx, dsdx, dtdx, drdy, dsdy, dtdy, \
402 drdz, dsdz, dtdz, jacinv, nelv); \
433template<
typename T, const
int LX, const
int NWF >
455 conv1_mfma_dispatch< T, LX, NWF >::run(du,
u,
vx,
vy,
vz,
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)
__global__ void const T *__restrict__ const T *__restrict__ const T *__restrict__ const T *__restrict__ const T *__restrict__ const T *__restrict__ const T *__restrict__ dz
__global__ void 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__ jacinv
__global__ void const T *__restrict__ const T *__restrict__ const T *__restrict__ const T *__restrict__ const T *__restrict__ const T *__restrict__ dy
__shared__ T shdy[LX *LX]
__global__ void const T *__restrict__ const T *__restrict__ const T *__restrict__ const T *__restrict__ const T *__restrict__ const T *__restrict__ const T *__restrict__ const T *__restrict__ drdx
__global__ void const T *__restrict__ const T *__restrict__ const T *__restrict__ const T *__restrict__ const T *__restrict__ dx
__global__ void 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 nelv
__global__ void 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__ dtdx
__shared__ T shdx[LX *LX]
__global__ void 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__ dtdz
__global__ void 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__ dsdx
__global__ void 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__ dtdy
__shared__ T shdz[LX *LX]
__global__ void 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__ dsdz
__global__ void conv1_kernel_1d(T *__restrict__ du, const T *__restrict__ u, const T *__restrict__ vx, const T *__restrict__ vy, const T *__restrict__ vz, 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__ jacinv)
__global__ void const T *__restrict__ const T *__restrict__ const T *__restrict__ const T *__restrict__ vz
__global__ void 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__ dsdy
__global__ void const T *__restrict__ const T *__restrict__ vx
__global__ void const T *__restrict__ u
__global__ void 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__ drdy
__global__ void const T *__restrict__ const T *__restrict__ const T *__restrict__ vy
__global__ void 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__ drdz
#define NEKO_EB_BOUNDS(NT)
__global__ void __launch_bounds__((LX *LX *EB), 3) conv1_kernel_kstep(T *__restrict__ du
#define NEKO_MFMA_EB_N(NWF, LX)
static __device__ void run(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 T *, const T *, const T *, const int)