1#ifndef __MATH_AX_HELM_COMPR_KERNEL_H__
2#define __MATH_AX_HELM_COMPR_KERNEL_H__
87template<
typename T, const
int LX, const
int CHUNKS >
119 const int ec =
ind[
e] - 1;
163 for (
int l = 0; l<
LX; l++){
185 for (
int l = 0; l<
LX; l++){
196template<
typename T, const
int LX, const
int EB >
223 static_assert(
sizeof(
shdx) +
230 "kstep block exceeds the shared memory budget");
267 for (
int k = 0;
k <
LX; ++
k){
279 for (
int l = 0; l <
LX; l++){
287 for (
int l = 0; l <
LX; l++){
308 for (
int l = 0; l <
LX; l++){
317 for (
int k = 0;
k <
LX; ++
k){
328template<
typename T, const
int LX, const
int EB >
355 static_assert(
sizeof(
shdx) +
362 "kstep block exceeds the shared memory budget");
390 for(
int k = 0;
k <
LX; ++
k){
398 for (
int k = 0;
k <
LX; ++
k){
410 for (
int l = 0; l <
LX; l++){
418 for (
int l = 0; l <
LX; l++){
439 for (
int l = 0; l <
LX; l++){
448 for (
int k = 0;
k <
LX; ++
k){
467#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 800) && (__CUDA_ARCH__ < 1000)
469template< const
int LX, const
int NW >
522 const int wf =
tid >> 5;
523 const int ebase = pack::ebase();
545 const int i = p %
LX;
546 const int l = p /
LX;
548 for (
int b = 0; b <
PPA; b++) {
549 const int m = (b *
LX +
i) +
DMMA_P * (b *
LX + l);
577 const double G11 =
g22[
gq];
578 const double G22 =
g33[
gq];
581 const double G12 =
g23[
gq];
635template<
typename T, const
int LX, const
int NW >
653#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 800) && (__CUDA_ARCH__ < 1000)
656#define NEKO_AX_HELM_COMPR_DMMA_DISPATCH(LXV) \
657 template< const int NW > \
658 struct ax_helm_compr_dmma_dispatch< double, LXV, NW > { \
659 __device__ static void run(double * __restrict__ w, \
660 const double * __restrict__ u, \
661 const double * __restrict__ dx, \
662 const double * __restrict__ dy, \
663 const double * __restrict__ dz, \
664 const double * __restrict__ h1, \
665 const double * __restrict__ g11, \
666 const double * __restrict__ g22, \
667 const double * __restrict__ g33, \
668 const double * __restrict__ g12, \
669 const double * __restrict__ g13, \
670 const double * __restrict__ g23, \
671 const int * __restrict__ ind, \
673 ax_helm_compr_dmma_elem< LXV, NW >(w, u, dx, dy, dz, h1, g11, g22, g33, \
674 g12, g13, g23, ind, nelv); \
688template<
typename T, const
int LX, const
int NW >
705 ax_helm_compr_dmma_dispatch< T, LX, NW >::run(
w,
u,
dx,
dy,
dz,
h1,
g11,
g22,
730#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900) && \
731 (__CUDA_ARCH__ < 1000) && NEKO_TMA_TOOLKIT
733template< const
int LX, const
int NW >
792 const int wf =
tid >> 5;
839 const double H1 =
shg[0][p];
840 const double G00 =
shg[1][p];
841 const double G11 =
shg[2][p];
842 const double G22 =
shg[3][p];
843 const double G01 =
shg[4][p];
844 const double G02 =
shg[5][p];
845 const double G12 =
shg[6][p];
899template<
typename T, const
int LX, const
int NW >
916#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900) && \
917 (__CUDA_ARCH__ < 1000) && NEKO_TMA_TOOLKIT
920#define NEKO_AX_HELM_COMPR_DMMA_TMA_DISPATCH(LXV) \
921 template< const int NW > \
922 struct ax_helm_compr_dmma_tma_dispatch< double, LXV, NW > { \
923 __device__ static void run(double * __restrict__ w, \
924 const double * __restrict__ u, \
925 const double * __restrict__ dx, \
926 const double * __restrict__ dy, \
927 const double * __restrict__ dz, \
928 const double * __restrict__ h1, \
929 const double * __restrict__ g11, \
930 const double * __restrict__ g22, \
931 const double * __restrict__ g33, \
932 const double * __restrict__ g12, \
933 const double * __restrict__ g13, \
934 const double * __restrict__ g23, \
935 const int * __restrict__ ind) { \
936 ax_helm_compr_dmma_tma_elem< LXV, NW >(w, u, dx, dy, dz, h1, g11, g22, \
937 g33, g12, g13, g23, ind); \
945template<
typename T, const
int LX, const
int NW >
971template<
typename T, const
int LX, const
int EB >
1010 static_assert(
sizeof(
shdx) +
1023 "kstep block exceeds the shared memory budget");
1057 for(
int k = 0;
k <
LX; ++
k){
1071 for (
int k = 0;
k <
LX; ++
k){
1087 for (
int l = 0; l <
LX; l++){
1103 for (
int l = 0; l <
LX; l++){
1159 for (
int l = 0; l <
LX; l++){
1178 for (
int k = 0;
k <
LX; ++
k){
1186template<
typename T, const
int LX, const
int EB >
1225 static_assert(
sizeof(
shdx) +
1238 "kstep block exceeds the shared memory budget");
1274 for(
int k = 0;
k <
LX; ++
k){
1288 for (
int k = 0;
k <
LX; ++
k){
1304 for (
int l = 0; l <
LX; l++){
1320 for (
int l = 0; l <
LX; l++){
1376 for (
int l = 0; l <
LX; l++){
1395 for (
int k = 0;
k <
LX; ++
k){
1430#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 800) && (__CUDA_ARCH__ < 1000)
1432template< const
int LX, const
int NW >
1479 const int wf =
tid >> 5;
1504 const int i = p %
LX;
1505 const int l = p /
LX;
1513 for (
int q = 0; q <
PPT; q++) {
1517 const int i = p %
LX;
1518 const int jk = p /
LX;
1519 const int j =
jk %
LX;
1520 const int k =
jk /
LX;
1543 const double *
const cin[3] = {
u,
v,
w };
1547 for (
int c = 0; c < 3; c++) {
1550 const int i = p %
LX;
1551 const int jk = p /
LX;
1552 const int j =
jk %
LX;
1553 const int k =
jk /
LX;
1566 for (
int q = 0; q <
PPT; q++) {
1570 const int idx =
rc[q];
1600 const int i = p %
LX;
1601 const int jk = p /
LX;
1602 const int j =
jk %
LX;
1603 const int k =
jk /
LX;
1618template<
typename T, const
int LX, const
int NW >
1639#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 800) && (__CUDA_ARCH__ < 1000)
1643#define NEKO_AX_HELM_COMPR_DMMA_VECTOR_DISPATCH(LXV) \
1644 template< const int NW > \
1645 struct ax_helm_compr_dmma_vector_dispatch< double, LXV, NW > { \
1646 __device__ static void run(double * __restrict__ au, \
1647 double * __restrict__ av, \
1648 double * __restrict__ aw, \
1649 const double * __restrict__ u, \
1650 const double * __restrict__ v, \
1651 const double * __restrict__ w, \
1652 const double * __restrict__ dx, \
1653 const double * __restrict__ dy, \
1654 const double * __restrict__ dz, \
1655 const double * __restrict__ h1, \
1656 const double * __restrict__ g11, \
1657 const double * __restrict__ g22, \
1658 const double * __restrict__ g33, \
1659 const double * __restrict__ g12, \
1660 const double * __restrict__ g13, \
1661 const double * __restrict__ g23, \
1662 const int * __restrict__ ind) { \
1663 ax_helm_compr_dmma_vector_elem< LXV, NW >(au, av, aw, u, v, w, dx, dy, \
1664 dz, h1, g11, g22, g33, g12, \
1677template<
typename T, const
int LX, const
int NW >
1733#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900) && \
1734 (__CUDA_ARCH__ < 1000) && NEKO_TMA_TOOLKIT
1736template< const
int LX, const
int NW >
1795 const int wf =
tid >> 5;
1829 const double *
const cin[3] = {
u,
v,
w };
1833 for (
int c = 0; c < 3; c++) {
1858 const double H1 =
shg[0][p];
1859 const double G00 =
shg[1][p];
1860 const double G11 =
shg[2][p];
1861 const double G22 =
shg[3][p];
1862 const double G01 =
shg[4][p];
1863 const double G02 =
shg[5][p];
1864 const double G12 =
shg[6][p];
1914template<
typename T, const
int LX, const
int NW >
1935#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900) && \
1936 (__CUDA_ARCH__ < 1000) && NEKO_TMA_TOOLKIT
1939#define NEKO_AX_HELM_COMPR_DMMA_TMA_VECTOR_DISPATCH(LXV) \
1940 template< const int NW > \
1941 struct ax_helm_compr_dmma_tma_vector_dispatch< double, LXV, NW > { \
1942 __device__ static void run(double * __restrict__ au, \
1943 double * __restrict__ av, \
1944 double * __restrict__ aw, \
1945 const double * __restrict__ u, \
1946 const double * __restrict__ v, \
1947 const double * __restrict__ w, \
1948 const double * __restrict__ dx, \
1949 const double * __restrict__ dy, \
1950 const double * __restrict__ dz, \
1951 const double * __restrict__ h1, \
1952 const double * __restrict__ g11, \
1953 const double * __restrict__ g22, \
1954 const double * __restrict__ g33, \
1955 const double * __restrict__ g12, \
1956 const double * __restrict__ g13, \
1957 const double * __restrict__ g23, \
1958 const int * __restrict__ ind) { \
1959 ax_helm_compr_dmma_tma_vector_elem< LXV, NW >(au, av, aw, u, v, w, \
1962 g12, g13, g23, ind); \
1970template<
typename T, const
int LX, const
int NW >
2030#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900) && \
2031 (__CUDA_ARCH__ < 1000) && NEKO_TMA_TOOLKIT
2033template< const
int LX, const
int NW >
2055 "the dmma tma batch variant stages whole cubes only");
2067 const int wf =
tid >> 5;
2112 for (
int c = 0; c < 3; c++) {
2126 const double H1 =
sm.g[0][p];
2127 const double G00 =
sm.g[1][p];
2128 const double G11 =
sm.g[2][p];
2129 const double G22 =
sm.g[3][p];
2130 const double G01 =
sm.g[4][p];
2131 const double G02 =
sm.g[5][p];
2132 const double G12 =
sm.g[6][p];
2134 const double rtmp =
sm.r[p];
2135 const double stmp =
sm.s[p];
2136 const double ttmp =
sm.t[p];
2192template<
typename T, const
int LX, const
int NW >
2213#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900) && \
2214 (__CUDA_ARCH__ < 1000) && NEKO_TMA_TOOLKIT
2217#define NEKO_AX_HELM_COMPR_DMMA_TMA_BATCH_DISPATCH(LXV) \
2218 template< const int NW > \
2219 struct ax_helm_compr_dmma_tma_batch_dispatch< double, LXV, NW > { \
2220 __device__ static void run(double * __restrict__ au, \
2221 double * __restrict__ av, \
2222 double * __restrict__ aw, \
2223 const double * __restrict__ u, \
2224 const double * __restrict__ v, \
2225 const double * __restrict__ w, \
2226 const double * __restrict__ dx, \
2227 const double * __restrict__ dy, \
2228 const double * __restrict__ dz, \
2229 const double * __restrict__ h1, \
2230 const double * __restrict__ g11, \
2231 const double * __restrict__ g22, \
2232 const double * __restrict__ g33, \
2233 const double * __restrict__ g12, \
2234 const double * __restrict__ g13, \
2235 const double * __restrict__ g23, \
2236 const int * __restrict__ ind) { \
2237 ax_helm_compr_dmma_tma_batch_elem< LXV, NW >(au, av, aw, u, v, w, \
2240 g12, g13, g23, ind); \
2248template<
typename T, const
int LX, const
int NW >
2288template<
typename T, const
int LX, const
int NW >
2291 static int state = -1;
2294 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)
__shared__ T shv[EB *LX *LX]
__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__ const T *__restrict__ const T *__restrict__ const T *__restrict__ g23
__global__ void T *__restrict__ T *__restrict__ aw
__shared__ T shu[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__ g22
__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 *__restrict__ ind
__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__ g13
__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__ const T *__restrict__ const T *__restrict__ const T *__restrict__ const int *__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__ g12
__global__ void const T *__restrict__ const T *__restrict__ const T *__restrict__ const T *__restrict__ dz
__global__ void const T *__restrict__ const T *__restrict__ dx
__global__ void const T *__restrict__ u
__shared__ T shus[EB *LX *LX]
__global__ void T *__restrict__ av
__shared__ T shur[EB *LX *LX]
__global__ void const T *__restrict__ const T *__restrict__ const T *__restrict__ dy
__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__ g33
__shared__ T shw[EB *LX *LX]
__shared__ T shwr[EB *LX *LX]
__global__ void ax_helm_compr_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, const int *__restrict__ ind)
__global__ void T *__restrict__ T *__restrict__ const T *__restrict__ const T *__restrict__ v
__shared__ T shvr[EB *LX *LX]
__global__ void const T *__restrict__ const T *__restrict__ const T *__restrict__ const T *__restrict__ const T *__restrict__ const T *__restrict__ g11
__global__ void const T *__restrict__ const T *__restrict__ const T *__restrict__ const T *__restrict__ const T *__restrict__ h1
__shared__ T shws[EB *LX *LX]
static bool ax_helm_compr_dmma_tma_batch_optin()
__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 *__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 int *__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__, const int *__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__, const int *__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__, const int *__restrict__)