1#ifndef __MATH_AX_HELM_COMPR_KERNEL_H__
2#define __MATH_AX_HELM_COMPR_KERNEL_H__
55template<
typename T, const
int LX, const
int CHUNKS >
132 for (
int l = 0; l<
LX; l++){
154 for (
int l = 0; l<
LX; l++){
165template<
typename T, const
int LX, const
int EB >
192 static_assert(
sizeof(
shdx) +
199 "kstep block exceeds the LDS budget");
237 for (
int k = 0;
k <
LX; ++
k){
249 for (
int l = 0; l <
LX; l++){
257 for (
int l = 0; l <
LX; l++){
278 for (
int l = 0; l <
LX; l++){
287 for (
int k = 0;
k <
LX; ++
k){
298template<
typename T, const
int LX, const
int EB >
325 static_assert(
sizeof(
shdx) +
332 "kstep block exceeds the LDS 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){
465#if defined(__gfx90a__) || defined(__gfx942__)
481template<
typename T, const
int LX, const
int NWF, const
int TILE >
520 "wavefronts per block must split evenly over the elements");
530 static_assert(
sizeof(
shdx) +
sizeof(
shdy) +
sizeof(
shdz) +
533 "mfma block exceeds the shared memory budget");
537 const int tid = wf * 64 +
lane;
540 const int eb = wf /
WPE;
565 for (
int q = 0; q <
SPT; q++) {
582 for (
int q = 0; q <
SPT; q++) {
612 for (
int q = 0; q <
NG; q++) {
627 mfma_contract_sel<T, LX, 0, false, false, WPE, TILE, PAD, NEL>::run(
630 mfma_contract_sel<T, LX, 1, false, false, WPE, TILE, PAD, NEL>::run(
633 mfma_contract_sel<T, LX, 2, false, false, WPE, TILE, PAD, NEL>::run(
640 for (
int q = 0; q <
SPT; q++) {
648 const int r =
GREG ? q : 0;
676 mfma_contract_sel<T, LX, 0, true, false, WPE, TILE, PAD, NEL>::run(
680 mfma_contract_sel<T, LX, 1, true, true, WPE, TILE, PAD, NEL>::run(
684 mfma_contract_sel<T, LX, 2, true, true, WPE, TILE, PAD, NEL>::run(
690 for (
int q = 0; q <
SPT; q++) {
707template<
typename T, const
int LX, const
int NWF, const
int TILE >
710 const T *,
const T *,
const T *,
const T *,
711 const T *,
const T *,
const T *,
712 const int *,
const int) {}
715#if defined(__gfx90a__) || defined(__gfx942__)
718#define NEKO_AX_HELM_COMPR_MFMA_DISPATCH(TYPE, LXV) \
719 template< const int NWF, const int TILE > \
720 struct ax_helm_compr_mfma_dispatch< TYPE, LXV, NWF, TILE > { \
721 __device__ static void run(TYPE *w, const TYPE *u, \
722 const TYPE *dx, const TYPE *dy, \
723 const TYPE *dz, const TYPE *h1, \
724 const TYPE *g11, const TYPE *g22, \
725 const TYPE *g33, const TYPE *g12, \
726 const TYPE *g13, const TYPE *g23, \
727 const int *ind, const int nelv) { \
728 ax_helm_compr_mfma_elem< TYPE, LXV, NWF, TILE >(w, u, dx, dy, dz, h1, \
729 g11, g22, g33, g12, g13, g23, \
763template<
typename T, const
int LX, const
int NWF, const
int TILE >
790template<
typename T, const
int LX, const
int EB >
829 static_assert(
sizeof(
shdx) +
842 "kstep block exceeds the LDS budget");
877 for(
int k = 0;
k <
LX; ++
k){
891 for (
int k = 0;
k <
LX; ++
k){
907 for (
int l = 0; l <
LX; l++){
923 for (
int l = 0; l <
LX; l++){
979 for (
int l = 0; l <
LX; l++){
998 for (
int k = 0;
k <
LX; ++
k){
1006template<
typename T, const
int LX, const
int EB >
1045 static_assert(
sizeof(
shdx) +
1058 "kstep block exceeds the LDS budget");
1095 for(
int k = 0;
k <
LX; ++
k){
1109 for (
int k = 0;
k <
LX; ++
k){
1125 for (
int l = 0; l <
LX; l++){
1141 for (
int l = 0; l <
LX; l++){
1197 for (
int l = 0; l <
LX; l++){
1216 for (
int k = 0;
k <
LX; ++
k){
1256#if defined(__gfx90a__) || defined(__gfx942__)
1260template<
typename T, const
int LX, const
int NWF, const
int TILE >
1303 "wavefronts per block must split evenly over the elements");
1313 static_assert(
sizeof(
shdx) +
sizeof(
shdy) +
sizeof(
shdz) +
1316 "mfma vector block exceeds the shared memory budget");
1320 const int tid = wf * 64 +
lane;
1323 const int eb = wf /
WPE;
1324 const int sub = wf %
WPE;
1343 for (
int q = 0; q <
SPT; q++) {
1368 for (
int q = 0; q <
NG; q++) {
1382 for (
int c = 0; c < 3; c++) {
1386 const T *
const cin = (c == 0) ?
u : (c == 1) ?
v :
w;
1387 T *
const cout = (c == 0) ?
au : (c == 1) ?
av :
aw;
1393 for (
int q = 0; q <
SPT; q++) {
1402 mfma_contract_sel<T, LX, 0, false, false, WPE, TILE, PAD, NEL>::run(
1405 mfma_contract_sel<T, LX, 1, false, false, WPE, TILE, PAD, NEL>::run(
1408 mfma_contract_sel<T, LX, 2, false, false, WPE, TILE, PAD, NEL>::run(
1417 for (
int q = 0; q <
SPT; q++) {
1425 const int r =
GREG ? q : 0;
1448 mfma_contract_sel<T, LX, 0, true, false, WPE, TILE, PAD, NEL>::run(
1452 mfma_contract_sel<T, LX, 1, true, true, WPE, TILE, PAD, NEL>::run(
1456 mfma_contract_sel<T, LX, 2, true, true, WPE, TILE, PAD, NEL>::run(
1462 for (
int q = 0; q <
SPT; q++) {
1491template<
typename T, const
int LX, const
int NWF, const
int TILE >
1494 const T *,
const T *,
const T *,
1495 const T *,
const T *,
const T *,
const T *,
1496 const T *,
const T *,
const T *,
1497 const T *,
const T *,
const T *,
1498 const int *,
const int) {}
1501#if defined(__gfx90a__) || defined(__gfx942__)
1504#define NEKO_AX_HELM_COMPR_MFMA_VECTOR_DISPATCH(TYPE, LXV) \
1505 template< const int NWF, const int TILE > \
1506 struct ax_helm_compr_mfma_vector_dispatch< TYPE, LXV, NWF, TILE > { \
1507 __device__ static void run(TYPE *au, TYPE *av, TYPE *aw, \
1508 const TYPE *u, const TYPE *v, const TYPE *w, \
1509 const TYPE *dx, const TYPE *dy, \
1510 const TYPE *dz, const TYPE *h1, \
1511 const TYPE *g11, const TYPE *g22, \
1512 const TYPE *g33, const TYPE *g12, \
1513 const TYPE *g13, const TYPE *g23, \
1514 const int *ind, const int nelv) { \
1515 ax_helm_compr_mfma_vector_elem< TYPE, LXV, NWF, TILE >(au, av, aw, \
1516 u, v, w, dx, dy, dz, h1, \
1518 g12, g13, g23, ind, nelv); \
1553template<
typename T, const
int LX, const
int NWF, const
int TILE >
__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]
__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
__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)
__global__ void __launch_bounds__((LX *LX *EB)) ax_helm_compr_kernel_kstep(T *__restrict__ w
#define NEKO_MFMA_CUBE_N(LX, SZ)
#define NEKO_MFMA_NEL_N(EB, LX, SZ, TILE)
#define NEKO_MFMA_EB_N(NWF, LX, SZ)
#define NEKO_MFMA_VECTOR_GREG_N(SPT, SZ)
#define NEKO_MFMA_SPT_N(WPE, LX, SZ)
#define NEKO_MFMA_PAD_N(LX, SZ)
#define NEKO_MFMA_DMAT_N(LX, SZ)
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 int *, const int)
static __device__ void run(T *, T *, 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 *, const int)