1#ifndef __MATH_CONV1_KERNEL_H__
2#define __MATH_CONV1_KERNEL_H__
45template<
typename T, const
int LX, const
int CHUNKS >
89 while(l < (
LX *
LX *
LX)) {
103 for (
int n = 0; n <
nchunks; n++) {
107 const int k =
jk /
LX;
108 const int j =
jk -
k *
LX;
113 for (
int l = 0; l <
LX; l++) {
133template<
typename T, const
int LX, const
int EB >
161 static_assert(
sizeof(
shu) +
166 "kstep block exceeds the shared memory budget");
205 for (
int k = 0;
k <
LX; ++
k) {
210 for (
int l = 0; l <
LX; l++) {
218 for (
int l = 0; l <
LX; l++) {
257#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 800) && (__CUDA_ARCH__ < 1000)
259template< const
int LX, const
int NW >
314 const int wf =
tid >> 5;
315 const int ebase = pack::ebase();
338 const int i = p %
LX;
339 const int l = p /
LX;
341 for (
int b = 0; b <
PPA; b++) {
342 const int m = (b *
LX +
i) +
DMMA_P * (b *
LX + l);
401template<
typename T, const
int LX, const
int NW >
416#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 800) && (__CUDA_ARCH__ < 1000)
419#define NEKO_CONV1_DMMA_DISPATCH(LXV) \
420 template< const int NW > \
421 struct conv1_dmma_dispatch< double, LXV, NW > { \
422 __device__ static void run(double * __restrict__ du, \
423 const double * __restrict__ u, \
424 const double * __restrict__ vx, \
425 const double * __restrict__ vy, \
426 const double * __restrict__ vz, \
427 const double * __restrict__ dx, \
428 const double * __restrict__ dy, \
429 const double * __restrict__ dz, \
430 const double * __restrict__ drdx, \
431 const double * __restrict__ dsdx, \
432 const double * __restrict__ dtdx, \
433 const double * __restrict__ drdy, \
434 const double * __restrict__ dsdy, \
435 const double * __restrict__ dtdy, \
436 const double * __restrict__ drdz, \
437 const double * __restrict__ dsdz, \
438 const double * __restrict__ dtdz, \
439 const double * __restrict__ jacinv, \
441 conv1_dmma_elem< LXV, NW >(du, u, vx, vy, vz, dx, dy, dz, \
442 drdx, dsdx, dtdx, drdy, dsdy, dtdy, \
443 drdz, dsdz, dtdz, jacinv, nelv); \
457template<
typename T, const
int LX, const
int NW >
479 conv1_dmma_dispatch< T, LX, NW >::run(du,
u,
vx,
vy,
vz,
dx,
dy,
dz,
508#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900) && \
509 (__CUDA_ARCH__ < 1000) && NEKO_TMA_TOOLKIT
511template< const
int LX, const
int NW >
536 "the dmma tma variant stages whole cubes only");
546 const int wf =
tid >> 5;
601 const double rtmp =
sm.r[p];
602 const double stmp =
sm.s[p];
603 const double ttmp =
sm.t[p];
605 sm.u[p] =
sm.g[3][p] *
641template<
typename T, const
int LX, const
int NW >
655#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900) && \
656 (__CUDA_ARCH__ < 1000) && NEKO_TMA_TOOLKIT
659#define NEKO_CONV1_DMMA_TMA_DISPATCH(LXV) \
660 template< const int NW > \
661 struct conv1_dmma_tma_dispatch< double, LXV, NW > { \
662 __device__ static void run(double * __restrict__ du, \
663 const double * __restrict__ u, \
664 const double * __restrict__ vx, \
665 const double * __restrict__ vy, \
666 const double * __restrict__ vz, \
667 const double * __restrict__ dx, \
668 const double * __restrict__ dy, \
669 const double * __restrict__ dz, \
670 const double * __restrict__ drdx, \
671 const double * __restrict__ dsdx, \
672 const double * __restrict__ dtdx, \
673 const double * __restrict__ drdy, \
674 const double * __restrict__ dsdy, \
675 const double * __restrict__ dtdy, \
676 const double * __restrict__ drdz, \
677 const double * __restrict__ dsdz, \
678 const double * __restrict__ dtdz, \
679 const double * __restrict__ jacinv) { \
680 conv1_dmma_tma_elem< LXV, NW >(du, u, vx, vy, vz, dx, dy, dz, \
681 drdx, dsdx, dtdx, drdy, dsdy, dtdy, \
682 drdz, dsdz, dtdz, jacinv); \
690template<
typename T, const
int LX, const
int NW >
711 conv1_dmma_tma_dispatch< T, LX, NW >::run(du,
u,
vx,
vy,
vz,
dx,
dy,
dz,
723template<
typename T, const
int LX, const
int NW >
726 static int state = -1;
729 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
__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
static bool conv1_dmma_tma_optin()
__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)
#define NEKO_CONV1_TMA_SMEM
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)
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__)