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){
422#if defined(__gfx90a__) || defined(__gfx942__)
436template<
typename T, const
int LX, const
int NWF >
460 "wavefronts per block must split evenly over the elements");
470 static_assert(
sizeof(
shdx) +
sizeof(
shdy) +
sizeof(
shdz) +
473 "mfma block exceeds the shared memory budget");
477 const int tid = wf * 64 +
lane;
480 const int eb = wf /
WPE;
508 mfma_contract_sel<T, LX, 0, false, false, WPE>::run(
shr +
sh,
shdx,
510 mfma_contract_sel<T, LX, 1, false, false, WPE>::run(
shs +
sh,
shdy,
512 mfma_contract_sel<T, LX, 2, false, false, WPE>::run(
sht +
sh,
shdz,
519 const int gp = p +
ele;
536 mfma_contract_sel<T, LX, 0, true, true, WPE>::run(
shu +
sh,
shdx,
539 mfma_contract_sel<T, LX, 1, true, true, WPE>::run(
shu +
sh,
shdy,
542 mfma_contract_sel<T, LX, 2, true, true, WPE>::run(
shu +
sh,
shdz,
562template<
typename T, const
int LX, const
int NWF >
565 const T *,
const T *,
const T *,
const T *,
566 const T *,
const T *,
const T *,
const int) {}
569#if defined(__gfx90a__) || defined(__gfx942__)
572#define NEKO_AX_HELM_MFMA_DISPATCH(TYPE, LXV) \
573 template< const int NWF > \
574 struct ax_helm_mfma_dispatch< TYPE, LXV, NWF > { \
575 __device__ static void run(TYPE *w, const TYPE *u, \
576 const TYPE *dx, const TYPE *dy, \
577 const TYPE *dz, const TYPE *h1, \
578 const TYPE *g11, const TYPE *g22, \
579 const TYPE *g33, const TYPE *g12, \
580 const TYPE *g13, const TYPE *g23, \
582 ax_helm_mfma_elem< TYPE, LXV, NWF >(w, u, dx, dy, dz, h1, \
583 g11, g22, g33, g12, g13, g23, \
615template<
typename T, const
int LX, const
int NWF >
639template<
typename T, const
int LX, const
int EB >
677 static_assert(
sizeof(
shdx) +
690 "kstep block exceeds the LDS budget");
723 for(
int k = 0;
k <
LX; ++
k){
737 for (
int k = 0;
k <
LX; ++
k){
753 for (
int l = 0; l <
LX; l++){
769 for (
int l = 0; l <
LX; l++){
825 for (
int l = 0; l <
LX; l++){
844 for (
int k = 0;
k <
LX; ++
k){
852template<
typename T, const
int LX, const
int EB >
890 static_assert(
sizeof(
shdx) +
903 "kstep block exceeds the LDS budget");
938 for(
int k = 0;
k <
LX; ++
k){
952 for (
int k = 0;
k <
LX; ++
k){
968 for (
int l = 0; l <
LX; l++){
984 for (
int l = 0; l <
LX; l++){
1040 for (
int l = 0; l <
LX; l++){
1059 for (
int k = 0;
k <
LX; ++
k){
1067template<
typename T >
1081 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
__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
__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), 3) ax_helm_kernel_kstep(T *__restrict__ w
#define NEKO_MFMA_EB_N(NWF, LX)
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)