1#ifndef __MATH_AX_HELM_KERNEL_H__
2#define __MATH_AX_HELM_KERNEL_H__
45template<
typename T, const
int LX, const
int CHUNKS >
119 for (
int l = 0; l<
LX; l++){
141 for (
int l = 0; l<
LX; l++){
152template<
typename T, const
int LX, const
int EB >
178 static_assert(
sizeof(
shdx) +
185 "kstep block exceeds the LDS budget");
221 for (
int k = 0;
k <
LX; ++
k){
233 for (
int l = 0; l <
LX; l++){
241 for (
int l = 0; l <
LX; l++){
262 for (
int l = 0; l <
LX; l++){
271 for (
int k = 0;
k <
LX; ++
k){
282template<
typename T, const
int LX, const
int EB >
308 static_assert(
sizeof(
shdx) +
315 "kstep block exceeds the LDS budget");
342 for(
int k = 0;
k <
LX; ++
k){
350 for (
int k = 0;
k <
LX; ++
k){
362 for (
int l = 0; l <
LX; l++){
370 for (
int l = 0; l <
LX; l++){
391 for (
int l = 0; l <
LX; l++){
400 for (
int k = 0;
k <
LX; ++
k){
446#if defined(__gfx90a__) || defined(__gfx942__)
462template<
typename T, const
int LX, const
int NWF, const
int TILE >
500 "wavefronts per block must split evenly over the elements");
510 static_assert(
sizeof(
shdx) +
sizeof(
shdy) +
sizeof(
shdz) +
513 "mfma block exceeds the shared memory budget");
517 const int tid = wf * 64 +
lane;
520 const int eb = wf /
WPE;
543 for (
int q = 0; q <
SPT; q++) {
560 for (
int q = 0; q <
SPT; q++) {
590 for (
int q = 0; q <
NG; q++) {
604 mfma_contract_sel<T, LX, 0, false, false, WPE, TILE, PAD, NEL>::run(
607 mfma_contract_sel<T, LX, 1, false, false, WPE, TILE, PAD, NEL>::run(
610 mfma_contract_sel<T, LX, 2, false, false, WPE, TILE, PAD, NEL>::run(
617 for (
int q = 0; q <
SPT; q++) {
625 const int r =
GREG ? q : 0;
652 mfma_contract_sel<T, LX, 0, true, false, WPE, TILE, PAD, NEL>::run(
656 mfma_contract_sel<T, LX, 1, true, true, WPE, TILE, PAD, NEL>::run(
660 mfma_contract_sel<T, LX, 2, true, true, WPE, TILE, PAD, NEL>::run(
666 for (
int q = 0; q <
SPT; q++) {
683template<
typename T, const
int LX, const
int NWF, const
int TILE >
686 const T *,
const T *,
const T *,
const T *,
687 const T *,
const T *,
const T *,
const int) {}
690#if defined(__gfx90a__) || defined(__gfx942__)
693#define NEKO_AX_HELM_MFMA_DISPATCH(TYPE, LXV) \
694 template< const int NWF, const int TILE > \
695 struct ax_helm_mfma_dispatch< TYPE, LXV, NWF, TILE > { \
696 __device__ static void run(TYPE *w, const TYPE *u, \
697 const TYPE *dx, const TYPE *dy, \
698 const TYPE *dz, const TYPE *h1, \
699 const TYPE *g11, const TYPE *g22, \
700 const TYPE *g33, const TYPE *g12, \
701 const TYPE *g13, const TYPE *g23, \
703 ax_helm_mfma_elem< TYPE, LXV, NWF, TILE >(w, u, dx, dy, dz, h1, \
704 g11, g22, g33, g12, g13, g23, \
738template<
typename T, const
int LX, const
int NWF, const
int TILE >
763template<
typename T, const
int LX, const
int EB >
801 static_assert(
sizeof(
shdx) +
814 "kstep block exceeds the LDS budget");
847 for(
int k = 0;
k <
LX; ++
k){
861 for (
int k = 0;
k <
LX; ++
k){
877 for (
int l = 0; l <
LX; l++){
893 for (
int l = 0; l <
LX; l++){
949 for (
int l = 0; l <
LX; l++){
968 for (
int k = 0;
k <
LX; ++
k){
976template<
typename T, const
int LX, const
int EB >
1014 static_assert(
sizeof(
shdx) +
1027 "kstep block exceeds the LDS budget");
1062 for(
int k = 0;
k <
LX; ++
k){
1076 for (
int k = 0;
k <
LX; ++
k){
1092 for (
int l = 0; l <
LX; l++){
1108 for (
int l = 0; l <
LX; l++){
1164 for (
int l = 0; l <
LX; l++){
1183 for (
int k = 0;
k <
LX; ++
k){
1223#if defined(__gfx90a__) || defined(__gfx942__)
1227template<
typename T, const
int LX, const
int NWF, const
int TILE >
1269 "wavefronts per block must split evenly over the elements");
1279 static_assert(
sizeof(
shdx) +
sizeof(
shdy) +
sizeof(
shdz) +
1282 "mfma vector block exceeds the shared memory budget");
1286 const int tid = wf * 64 +
lane;
1289 const int eb = wf /
WPE;
1290 const int sub = wf %
WPE;
1307 for (
int q = 0; q <
SPT; q++) {
1332 for (
int q = 0; q <
NG; q++) {
1345 for (
int c = 0; c < 3; c++) {
1349 const T *
const cin = (c == 0) ?
u : (c == 1) ?
v :
w;
1350 T *
const cout = (c == 0) ?
au : (c == 1) ?
av :
aw;
1356 for (
int q = 0; q <
SPT; q++) {
1365 mfma_contract_sel<T, LX, 0, false, false, WPE, TILE, PAD, NEL>::run(
1368 mfma_contract_sel<T, LX, 1, false, false, WPE, TILE, PAD, NEL>::run(
1371 mfma_contract_sel<T, LX, 2, false, false, WPE, TILE, PAD, NEL>::run(
1380 for (
int q = 0; q <
SPT; q++) {
1388 const int r =
GREG ? q : 0;
1410 mfma_contract_sel<T, LX, 0, true, false, WPE, TILE, PAD, NEL>::run(
1414 mfma_contract_sel<T, LX, 1, true, true, WPE, TILE, PAD, NEL>::run(
1418 mfma_contract_sel<T, LX, 2, true, true, WPE, TILE, PAD, NEL>::run(
1424 for (
int q = 0; q <
SPT; q++) {
1453template<
typename T, const
int LX, const
int NWF, const
int TILE >
1456 const T *,
const T *,
const T *,
1457 const T *,
const T *,
const T *,
const T *,
1458 const T *,
const T *,
const T *,
1459 const T *,
const T *,
const T *,
const int) {}
1462#if defined(__gfx90a__) || defined(__gfx942__)
1465#define NEKO_AX_HELM_MFMA_VECTOR_DISPATCH(TYPE, LXV) \
1466 template< const int NWF, const int TILE > \
1467 struct ax_helm_mfma_vector_dispatch< TYPE, LXV, NWF, TILE > { \
1468 __device__ static void run(TYPE *au, TYPE *av, TYPE *aw, \
1469 const TYPE *u, const TYPE *v, const TYPE *w, \
1470 const TYPE *dx, const TYPE *dy, \
1471 const TYPE *dz, const TYPE *h1, \
1472 const TYPE *g11, const TYPE *g22, \
1473 const TYPE *g33, const TYPE *g12, \
1474 const TYPE *g13, const TYPE *g23, \
1476 ax_helm_mfma_vector_elem< TYPE, LXV, NWF, TILE >(au, av, aw, u, v, w, \
1479 g12, g13, g23, nelv); \
1514template<
typename T, const
int LX, const
int NWF, const
int TILE >
1540template<
typename T >
1554 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__ g33
__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__ av
__shared__ T shv[EB *LX *LX]
__shared__ T shwr[EB *LX *LX]
__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)
__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__ g22
__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__ const T *__restrict__ const T *__restrict__ const T *__restrict__ g23
__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__ 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__ const T *__restrict__ h1
__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
__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)
__global__ void const T *__restrict__ const T *__restrict__ const T *__restrict__ const T *__restrict__ const T *__restrict__ const T *__restrict__ g11
__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
__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_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)
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)