1#ifndef __MATH_AX_HELM_KERNEL_H__
2#define __MATH_AX_HELM_KERNEL_H__
64template<
typename T, const
int LX, const
int CHUNKS >
138 for (
int l = 0; l<
LX; l++){
160 for (
int l = 0; l<
LX; l++){
171template<
typename T, const
int LX, const
int EB >
197 static_assert(
sizeof(
shdx) +
204 "kstep block exceeds the shared memory budget");
240 for (
int k = 0;
k <
LX; ++
k){
252 for (
int l = 0; l <
LX; l++){
260 for (
int l = 0; l <
LX; l++){
281 for (
int l = 0; l <
LX; l++){
290 for (
int k = 0;
k <
LX; ++
k){
301template<
typename T, const
int LX, const
int EB >
327 static_assert(
sizeof(
shdx) +
334 "kstep block exceeds the shared memory budget");
361 for(
int k = 0;
k <
LX; ++
k){
369 for (
int k = 0;
k <
LX; ++
k){
381 for (
int l = 0; l <
LX; l++){
389 for (
int l = 0; l <
LX; l++){
410 for (
int l = 0; l <
LX; l++){
419 for (
int k = 0;
k <
LX; ++
k){
438#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 800) && (__CUDA_ARCH__ < 1000)
440template< const
int LX, const
int NW >
492 const int wf =
tid >> 5;
493 const int ebase = pack::ebase();
515 const int i = p %
LX;
516 const int l = p /
LX;
518 for (
int b = 0; b <
PPA; b++) {
519 const int m = (b *
LX +
i) +
DMMA_P * (b *
LX + l);
546 const double G11 =
g22[
gp];
547 const double G22 =
g33[
gp];
550 const double G12 =
g23[
gp];
604template<
typename T, const
int LX, const
int NW >
621#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 800) && (__CUDA_ARCH__ < 1000)
624#define NEKO_AX_HELM_DMMA_DISPATCH(LXV) \
625 template< const int NW > \
626 struct ax_helm_dmma_dispatch< double, LXV, NW > { \
627 __device__ static void run(double * __restrict__ w, \
628 const double * __restrict__ u, \
629 const double * __restrict__ dx, \
630 const double * __restrict__ dy, \
631 const double * __restrict__ dz, \
632 const double * __restrict__ h1, \
633 const double * __restrict__ g11, \
634 const double * __restrict__ g22, \
635 const double * __restrict__ g33, \
636 const double * __restrict__ g12, \
637 const double * __restrict__ g13, \
638 const double * __restrict__ g23, \
640 ax_helm_dmma_elem< LXV, NW >(w, u, dx, dy, dz, h1, \
641 g11, g22, g33, g12, g13, g23, nelv); \
655template<
typename T, const
int LX, const
int NW >
695#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900) && \
696 (__CUDA_ARCH__ < 1000) && NEKO_TMA_TOOLKIT
698template< const
int LX, const
int NW >
756 const int wf =
tid >> 5;
802 const double H1 =
shg[0][p];
803 const double G00 =
shg[1][p];
804 const double G11 =
shg[2][p];
805 const double G22 =
shg[3][p];
806 const double G01 =
shg[4][p];
807 const double G02 =
shg[5][p];
808 const double G12 =
shg[6][p];
862template<
typename T, const
int LX, const
int NW >
878#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900) && \
879 (__CUDA_ARCH__ < 1000) && NEKO_TMA_TOOLKIT
882#define NEKO_AX_HELM_DMMA_TMA_DISPATCH(LXV) \
883 template< const int NW > \
884 struct ax_helm_dmma_tma_dispatch< double, LXV, NW > { \
885 __device__ static void run(double * __restrict__ w, \
886 const double * __restrict__ u, \
887 const double * __restrict__ dx, \
888 const double * __restrict__ dy, \
889 const double * __restrict__ dz, \
890 const double * __restrict__ h1, \
891 const double * __restrict__ g11, \
892 const double * __restrict__ g22, \
893 const double * __restrict__ g33, \
894 const double * __restrict__ g12, \
895 const double * __restrict__ g13, \
896 const double * __restrict__ g23) { \
897 ax_helm_dmma_tma_elem< LXV, NW >(w, u, dx, dy, dz, h1, \
898 g11, g22, g33, g12, g13, g23); \
906template<
typename T, const
int LX, const
int NW >
930template<
typename T, const
int LX, const
int EB >
968 static_assert(
sizeof(
shdx) +
981 "kstep block exceeds the shared memory budget");
1014 for(
int k = 0;
k <
LX; ++
k){
1028 for (
int k = 0;
k <
LX; ++
k){
1044 for (
int l = 0; l <
LX; l++){
1060 for (
int l = 0; l <
LX; l++){
1116 for (
int l = 0; l <
LX; l++){
1135 for (
int k = 0;
k <
LX; ++
k){
1143template<
typename T, const
int LX, const
int EB >
1181 static_assert(
sizeof(
shdx) +
1194 "kstep block exceeds the shared memory budget");
1229 for(
int k = 0;
k <
LX; ++
k){
1243 for (
int k = 0;
k <
LX; ++
k){
1259 for (
int l = 0; l <
LX; l++){
1275 for (
int l = 0; l <
LX; l++){
1331 for (
int l = 0; l <
LX; l++){
1350 for (
int k = 0;
k <
LX; ++
k){
1385#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 800) && (__CUDA_ARCH__ < 1000)
1387template< const
int LX, const
int NW >
1433 const int wf =
tid >> 5;
1457 const int i = p %
LX;
1458 const int l = p /
LX;
1466 for (
int q = 0; q <
PPT; q++) {
1470 const int i = p %
LX;
1471 const int jk = p /
LX;
1472 const int j =
jk %
LX;
1473 const int k =
jk /
LX;
1496 const double *
const cin[3] = {
u,
v,
w };
1500 for (
int c = 0; c < 3; c++) {
1503 const int i = p %
LX;
1504 const int jk = p /
LX;
1505 const int j =
jk %
LX;
1506 const int k =
jk /
LX;
1519 for (
int q = 0; q <
PPT; q++) {
1523 const int idx =
rc[q];
1553 const int i = p %
LX;
1554 const int jk = p /
LX;
1555 const int j =
jk %
LX;
1556 const int k =
jk /
LX;
1571template<
typename T, const
int LX, const
int NW >
1591#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 800) && (__CUDA_ARCH__ < 1000)
1595#define NEKO_AX_HELM_DMMA_VECTOR_DISPATCH(LXV) \
1596 template< const int NW > \
1597 struct ax_helm_dmma_vector_dispatch< double, LXV, NW > { \
1598 __device__ static void run(double * __restrict__ au, \
1599 double * __restrict__ av, \
1600 double * __restrict__ aw, \
1601 const double * __restrict__ u, \
1602 const double * __restrict__ v, \
1603 const double * __restrict__ w, \
1604 const double * __restrict__ dx, \
1605 const double * __restrict__ dy, \
1606 const double * __restrict__ dz, \
1607 const double * __restrict__ h1, \
1608 const double * __restrict__ g11, \
1609 const double * __restrict__ g22, \
1610 const double * __restrict__ g33, \
1611 const double * __restrict__ g12, \
1612 const double * __restrict__ g13, \
1613 const double * __restrict__ g23) { \
1614 ax_helm_dmma_vector_elem< LXV, NW >(au, av, aw, u, v, w, dx, dy, dz, h1, \
1615 g11, g22, g33, g12, g13, g23); \
1627template<
typename T, const
int LX, const
int NW >
1682#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900) && \
1683 (__CUDA_ARCH__ < 1000) && NEKO_TMA_TOOLKIT
1685template< const
int LX, const
int NW >
1743 const int wf =
tid >> 5;
1776 const double *
const cin[3] = {
u,
v,
w };
1780 for (
int c = 0; c < 3; c++) {
1805 const double H1 =
shg[0][p];
1806 const double G00 =
shg[1][p];
1807 const double G11 =
shg[2][p];
1808 const double G22 =
shg[3][p];
1809 const double G01 =
shg[4][p];
1810 const double G02 =
shg[5][p];
1811 const double G12 =
shg[6][p];
1861template<
typename T, const
int LX, const
int NW >
1881#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900) && \
1882 (__CUDA_ARCH__ < 1000) && NEKO_TMA_TOOLKIT
1885#define NEKO_AX_HELM_DMMA_TMA_VECTOR_DISPATCH(LXV) \
1886 template< const int NW > \
1887 struct ax_helm_dmma_tma_vector_dispatch< double, LXV, NW > { \
1888 __device__ static void run(double * __restrict__ au, \
1889 double * __restrict__ av, \
1890 double * __restrict__ aw, \
1891 const double * __restrict__ u, \
1892 const double * __restrict__ v, \
1893 const double * __restrict__ w, \
1894 const double * __restrict__ dx, \
1895 const double * __restrict__ dy, \
1896 const double * __restrict__ dz, \
1897 const double * __restrict__ h1, \
1898 const double * __restrict__ g11, \
1899 const double * __restrict__ g22, \
1900 const double * __restrict__ g33, \
1901 const double * __restrict__ g12, \
1902 const double * __restrict__ g13, \
1903 const double * __restrict__ g23) { \
1904 ax_helm_dmma_tma_vector_elem< LXV, NW >(au, av, aw, u, v, w, \
1915template<
typename T, const
int LX, const
int NW >
1974#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900) && \
1975 (__CUDA_ARCH__ < 1000) && NEKO_TMA_TOOLKIT
1977template< const
int LX, const
int NW >
1998 "the dmma tma batch variant stages whole cubes only");
2010 const int wf =
tid >> 5;
2054 for (
int c = 0; c < 3; c++) {
2068 const double H1 =
sm.g[0][p];
2069 const double G00 =
sm.g[1][p];
2070 const double G11 =
sm.g[2][p];
2071 const double G22 =
sm.g[3][p];
2072 const double G01 =
sm.g[4][p];
2073 const double G02 =
sm.g[5][p];
2074 const double G12 =
sm.g[6][p];
2076 const double rtmp =
sm.r[p];
2077 const double stmp =
sm.s[p];
2078 const double ttmp =
sm.t[p];
2134template<
typename T, const
int LX, const
int NW >
2154#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900) && \
2155 (__CUDA_ARCH__ < 1000) && NEKO_TMA_TOOLKIT
2158#define NEKO_AX_HELM_DMMA_TMA_BATCH_DISPATCH(LXV) \
2159 template< const int NW > \
2160 struct ax_helm_dmma_tma_batch_dispatch< double, LXV, NW > { \
2161 __device__ static void run(double * __restrict__ au, \
2162 double * __restrict__ av, \
2163 double * __restrict__ aw, \
2164 const double * __restrict__ u, \
2165 const double * __restrict__ v, \
2166 const double * __restrict__ w, \
2167 const double * __restrict__ dx, \
2168 const double * __restrict__ dy, \
2169 const double * __restrict__ dz, \
2170 const double * __restrict__ h1, \
2171 const double * __restrict__ g11, \
2172 const double * __restrict__ g22, \
2173 const double * __restrict__ g33, \
2174 const double * __restrict__ g12, \
2175 const double * __restrict__ g13, \
2176 const double * __restrict__ g23) { \
2177 ax_helm_dmma_tma_batch_elem< LXV, NW >(au, av, aw, u, v, w, \
2188template<
typename T, const
int LX, const
int NW >
2227template<
typename T, const
int LX, const
int NW >
2230 static int state = -1;
2233 const void *
const fn =
2253template<
typename T >
2267 for (
int i = idx;
i < n;
i +=
str) {
__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 shus[EB *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__ g23
__global__ void const T *__restrict__ const T *__restrict__ const T *__restrict__ const T *__restrict__ const T *__restrict__ const T *__restrict__ const T *__restrict__ g22
__global__ void T *__restrict__ av
static bool ax_helm_dmma_tma_batch_optin()
__shared__ T shv[EB *LX *LX]
__shared__ T shwr[EB *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__ g13
__global__ void ax_helm_kernel_1d(T *__restrict__ w, const T *__restrict__ u, const T *__restrict__ dx, const T *__restrict__ dy, const T *__restrict__ dz, const T *__restrict__ dxt, const T *__restrict__ dyt, const T *__restrict__ dzt, const T *__restrict__ h1, const T *__restrict__ g11, const T *__restrict__ g22, const T *__restrict__ g33, const T *__restrict__ g12, const T *__restrict__ g13, const T *__restrict__ g23)
__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 int nelv
__shared__ T shur[EB *LX *LX]
__shared__ T shvs[EB *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__ g12
__shared__ T shw[EB *LX *LX]
__shared__ T shws[EB *LX *LX]
__shared__ T shu[EB *LX *LX]
__global__ void T *__restrict__ T *__restrict__ const T *__restrict__ const T *__restrict__ const T *__restrict__ w
__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__ g33
__global__ void T *__restrict__ T *__restrict__ aw
__shared__ T shvr[EB *LX *LX]
__global__ void const T *__restrict__ u
__global__ void const T *__restrict__ const T *__restrict__ dx
__global__ void const T *__restrict__ const T *__restrict__ const T *__restrict__ const T *__restrict__ dz
__shared__ T shdz[LX *LX]
__global__ void const T *__restrict__ const T *__restrict__ const T *__restrict__ dy
__global__ void const T *__restrict__ const T *__restrict__ const T *__restrict__ const T *__restrict__ const T *__restrict__ h1
__global__ void const T *__restrict__ const T *__restrict__ const T *__restrict__ const T *__restrict__ const T *__restrict__ const T *__restrict__ g11
__global__ void T *__restrict__ T *__restrict__ const T *__restrict__ const T *__restrict__ v
__global__ void ax_helm_kernel_vector_part2(T *__restrict__ au, T *__restrict__ av, T *__restrict__ aw, const T *__restrict__ u, const T *__restrict__ v, const T *__restrict__ w, const T *__restrict__ h2, const T *__restrict__ B, const int n)
__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__ dyt
__shared__ T shdzt[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__ dzt
__global__ void const T *__restrict__ x
__shared__ T shdyt[LX *LX]
__global__ void const T *__restrict__ const T *__restrict__ const T *__restrict__ const T *__restrict__ const T *__restrict__ dxt
#define NEKO_EB_BOUNDS(NT)
#define NEKO_DMMA_TMA_BATCH_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 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__)
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__)
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__)
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__)