1#ifndef __MATH_OPGRAD_KERNEL_H__
2#define __MATH_OPGRAD_KERNEL_H__
45template<
typename T, const
int LX, const
int CHUNKS >
91 for (
int n = 0; n <
nchunks; n++) {
101 for (
int l = 0; l <
LX; l++) {
127template<
typename T, const
int LX, const
int EB >
158 "kstep block exceeds the shared memory budget");
189 for (
int k = 0;
k <
LX; ++
k) {
195 for (
int l = 0; l <
LX; l++) {
203 for (
int l = 0; l <
LX; l++) {
251#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 800) && (__CUDA_ARCH__ < 1000)
253template< const
int LX, const
int NW >
307 const int wf =
tid >> 5;
308 const int ebase = pack::ebase();
331 const int i = p %
LX;
332 const int l = p /
LX;
334 for (
int b = 0; b <
PPA; b++) {
335 const int m = (b *
LX +
i) +
DMMA_P * (b *
LX + l);
364 const double W3 =
w3[
x.l];
395template<
typename T, const
int LX, const
int NW >
409#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 800) && (__CUDA_ARCH__ < 1000)
412#define NEKO_OPGRAD_DMMA_DISPATCH(LXV) \
413 template< const int NW > \
414 struct opgrad_dmma_dispatch< double, LXV, NW > { \
415 __device__ static void run(double * __restrict__ ux, \
416 double * __restrict__ uy, \
417 double * __restrict__ uz, \
418 const double * __restrict__ u, \
419 const double * __restrict__ dx, \
420 const double * __restrict__ dy, \
421 const double * __restrict__ dz, \
422 const double * __restrict__ drdx, \
423 const double * __restrict__ dsdx, \
424 const double * __restrict__ dtdx, \
425 const double * __restrict__ drdy, \
426 const double * __restrict__ dsdy, \
427 const double * __restrict__ dtdy, \
428 const double * __restrict__ drdz, \
429 const double * __restrict__ dsdz, \
430 const double * __restrict__ dtdz, \
431 const double * __restrict__ w3, \
433 opgrad_dmma_elem< LXV, NW >(ux, uy, uz, u, dx, dy, dz, \
434 drdx, dsdx, dtdx, drdy, dsdy, dtdy, \
435 drdz, dsdz, dtdz, w3, nelv); \
449template<
typename T, const
int LX, const
int NW >
501#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900) && \
502 (__CUDA_ARCH__ < 1000) && NEKO_TMA_TOOLKIT
504template< const
int LX, const
int NW >
528 "the dmma tma variant stages whole cubes only");
538 const int wf =
tid >> 5;
589 const double W3 =
w3[p];
590 const double rtmp =
sm.r[p];
591 const double stmp =
sm.s[p];
592 const double ttmp =
sm.t[p];
616template<
typename T, const
int LX, const
int NW >
629#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900) && \
630 (__CUDA_ARCH__ < 1000) && NEKO_TMA_TOOLKIT
633#define NEKO_OPGRAD_DMMA_TMA_DISPATCH(LXV) \
634 template< const int NW > \
635 struct opgrad_dmma_tma_dispatch< double, LXV, NW > { \
636 __device__ static void run(double * __restrict__ ux, \
637 double * __restrict__ uy, \
638 double * __restrict__ uz, \
639 const double * __restrict__ u, \
640 const double * __restrict__ dx, \
641 const double * __restrict__ dy, \
642 const double * __restrict__ dz, \
643 const double * __restrict__ drdx, \
644 const double * __restrict__ dsdx, \
645 const double * __restrict__ dtdx, \
646 const double * __restrict__ drdy, \
647 const double * __restrict__ dsdy, \
648 const double * __restrict__ dtdy, \
649 const double * __restrict__ drdz, \
650 const double * __restrict__ dsdz, \
651 const double * __restrict__ dtdz, \
652 const double * __restrict__ w3) { \
653 opgrad_dmma_tma_elem< LXV, NW >(ux, uy, uz, u, dx, dy, dz, \
654 drdx, dsdx, dtdx, drdy, dsdy, dtdy, \
655 drdz, dsdz, dtdz, w3); \
663template<
typename T, const
int LX, const
int NW >
703template<
typename T, const
int LX, const
int NW >
706 static int state = -1;
709 const void *
const fn =
__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__ x
#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
static bool opgrad_dmma_tma_optin()
__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
#define NEKO_OPGRAD_TMA_SMEM
static __device__ void run(T *__restrict__, 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)
static __device__ void run(T *__restrict__, 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__)