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 >
516 "wavefronts per block must split evenly over the elements");
526 static_assert(
sizeof(
shdx) +
sizeof(
shdy) +
sizeof(
shdz) +
529 "mfma block exceeds the shared memory budget");
533 const int tid = wf * 64 +
lane;
536 const int eb = wf /
WPE;
561 for (
int q = 0; q <
SPT; q++) {
578 for (
int q = 0; q <
SPT; q++) {
608 for (
int q = 0; q <
NG; q++) {
622 mfma_contract_sel<T, LX, 0, false, false, WPE, TILE, PAD>::run(
shr +
sh,
624 mfma_contract_sel<T, LX, 1, false, false, WPE, TILE, PAD>::run(
shs +
sh,
626 mfma_contract_sel<T, LX, 2, false, false, WPE, TILE, PAD>::run(
sht +
sh,
633 for (
int q = 0; q <
SPT; q++) {
641 const int r =
GREG ? q : 0;
668 mfma_contract_sel<T, LX, 0, true, false, WPE, TILE, PAD>::run(
shu +
sh,
671 mfma_contract_sel<T, LX, 1, true, true, WPE, TILE, PAD>::run(
shu +
sh,
674 mfma_contract_sel<T, LX, 2, true, true, WPE, TILE, PAD>::run(
shu +
sh,
680 for (
int q = 0; q <
SPT; q++) {
697template<
typename T, const
int LX, const
int NWF, const
int TILE >
700 const T *,
const T *,
const T *,
const T *,
701 const T *,
const T *,
const T *,
702 const int *,
const int) {}
705#if defined(__gfx90a__) || defined(__gfx942__)
708#define NEKO_AX_HELM_COMPR_MFMA_DISPATCH(TYPE, LXV) \
709 template< const int NWF, const int TILE > \
710 struct ax_helm_compr_mfma_dispatch< TYPE, LXV, NWF, TILE > { \
711 __device__ static void run(TYPE *w, const TYPE *u, \
712 const TYPE *dx, const TYPE *dy, \
713 const TYPE *dz, const TYPE *h1, \
714 const TYPE *g11, const TYPE *g22, \
715 const TYPE *g33, const TYPE *g12, \
716 const TYPE *g13, const TYPE *g23, \
717 const int *ind, const int nelv) { \
718 ax_helm_compr_mfma_elem< TYPE, LXV, NWF, TILE >(w, u, dx, dy, dz, h1, \
719 g11, g22, g33, g12, g13, g23, \
751template<
typename T, const
int LX, const
int NWF, const
int TILE >
778template<
typename T, const
int LX, const
int EB >
817 static_assert(
sizeof(
shdx) +
830 "kstep block exceeds the LDS budget");
865 for(
int k = 0;
k <
LX; ++
k){
879 for (
int k = 0;
k <
LX; ++
k){
895 for (
int l = 0; l <
LX; l++){
911 for (
int l = 0; l <
LX; l++){
967 for (
int l = 0; l <
LX; l++){
986 for (
int k = 0;
k <
LX; ++
k){
994template<
typename T, const
int LX, const
int EB >
1033 static_assert(
sizeof(
shdx) +
1046 "kstep block exceeds the LDS budget");
1083 for(
int k = 0;
k <
LX; ++
k){
1097 for (
int k = 0;
k <
LX; ++
k){
1113 for (
int l = 0; l <
LX; l++){
1129 for (
int l = 0; l <
LX; l++){
1185 for (
int l = 0; l <
LX; l++){
1204 for (
int k = 0;
k <
LX; ++
k){
1244#if defined(__gfx90a__) || defined(__gfx942__)
1248template<
typename T, const
int LX, const
int NWF, const
int TILE >
1287 "wavefronts per block must split evenly over the elements");
1297 static_assert(
sizeof(
shdx) +
sizeof(
shdy) +
sizeof(
shdz) +
1300 "mfma vector block exceeds the shared memory budget");
1304 const int tid = wf * 64 +
lane;
1307 const int eb = wf /
WPE;
1308 const int sub = wf %
WPE;
1327 for (
int q = 0; q <
SPT; q++) {
1352 for (
int q = 0; q <
NG; q++) {
1366 for (
int c = 0; c < 3; c++) {
1370 const T *
const cin = (c == 0) ?
u : (c == 1) ?
v :
w;
1371 T *
const cout = (c == 0) ?
au : (c == 1) ?
av :
aw;
1377 for (
int q = 0; q <
SPT; q++) {
1385 mfma_contract_sel<T, LX, 0, false, false, WPE, TILE, PAD>::run(
shr +
sh,
1387 mfma_contract_sel<T, LX, 1, false, false, WPE, TILE, PAD>::run(
shs +
sh,
1389 mfma_contract_sel<T, LX, 2, false, false, WPE, TILE, PAD>::run(
sht +
sh,
1398 for (
int q = 0; q <
SPT; q++) {
1406 const int r =
GREG ? q : 0;
1428 mfma_contract_sel<T, LX, 0, true, false, WPE, TILE, PAD>::run(
shc +
sh,
1431 mfma_contract_sel<T, LX, 1, true, true, WPE, TILE, PAD>::run(
shc +
sh,
1434 mfma_contract_sel<T, LX, 2, true, true, WPE, TILE, PAD>::run(
shc +
sh,
1440 for (
int q = 0; q <
SPT; q++) {
1469template<
typename T, const
int LX, const
int NWF, const
int TILE >
1472 const T *,
const T *,
const T *,
1473 const T *,
const T *,
const T *,
const T *,
1474 const T *,
const T *,
const T *,
1475 const T *,
const T *,
const T *,
1476 const int *,
const int) {}
1479#if defined(__gfx90a__) || defined(__gfx942__)
1482#define NEKO_AX_HELM_COMPR_MFMA_VECTOR_DISPATCH(TYPE, LXV) \
1483 template< const int NWF, const int TILE > \
1484 struct ax_helm_compr_mfma_vector_dispatch< TYPE, LXV, NWF, TILE > { \
1485 __device__ static void run(TYPE *au, TYPE *av, TYPE *aw, \
1486 const TYPE *u, const TYPE *v, const TYPE *w, \
1487 const TYPE *dx, const TYPE *dy, \
1488 const TYPE *dz, const TYPE *h1, \
1489 const TYPE *g11, const TYPE *g22, \
1490 const TYPE *g33, const TYPE *g12, \
1491 const TYPE *g13, const TYPE *g23, \
1492 const int *ind, const int nelv) { \
1493 ax_helm_compr_mfma_vector_elem< TYPE, LXV, NWF, TILE >(au, av, aw, \
1494 u, v, w, dx, dy, dz, h1, \
1496 g12, g13, g23, ind, nelv); \
1529template<
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_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)