36 use,
intrinsic :: iso_c_binding, only : c_ptr, c_int, c_bool
45 inv_thet, n, zero_initial, strm) &
46 bind(c, name=
'hip_amg_cheby_solve_part1')
47 use,
intrinsic :: iso_c_binding, only : c_ptr, c_int, c_bool
49 type(c_ptr),
value :: r_d, f_d, w_d, x_d, d_d, strm
50 real(c_rp) :: inv_thet
51 logical(c_bool) :: zero_initial
57 tmp1, tmp2, n, strm) bind(c, name='hip_amg_cheby_solve_part2')
58 use,
intrinsic :: iso_c_binding, only : c_ptr, c_int
60 type(c_ptr),
value :: r_d, w_d, d_d, x_d, strm
61 real(c_rp) :: tmp1, tmp2
68 inv_thet, n, zero_initial, strm) &
69 bind(c, name=
'cuda_amg_cheby_solve_part1')
70 use,
intrinsic :: iso_c_binding, only : c_ptr, c_int, c_bool
72 type(c_ptr),
value :: r_d, f_d, w_d, x_d, d_d, strm
73 real(c_rp) :: inv_thet
74 logical(c_bool) :: zero_initial
80 tmp1, tmp2, n, strm) bind(c, name='cuda_amg_cheby_solve_part2')
81 use,
intrinsic :: iso_c_binding, only : c_ptr, c_int
83 type(c_ptr),
value :: r_d, w_d, d_d, x_d, strm
84 real(c_rp) :: tmp1, tmp2
90 subroutine metal_amg_cheby_solve_part1(r_d, f_d, w_d, x_d, d_d, &
91 inv_thet, n, zero_initial, strm) &
92 bind(c, name=
'metal_amg_cheby_solve_part1')
93 use,
intrinsic :: iso_c_binding, only : c_ptr, c_int, c_bool
95 type(c_ptr),
value :: r_d, f_d, w_d, x_d, d_d, strm
96 real(c_rp) :: inv_thet
98 logical(c_bool) :: zero_initial
99 end subroutine metal_amg_cheby_solve_part1
103 subroutine metal_amg_cheby_solve_part2(r_d, w_d, d_d, x_d, &
104 tmp1, tmp2, n, strm) bind(c, name='metal_amg_cheby_solve_part2')
105 use,
intrinsic :: iso_c_binding, only : c_ptr, c_int
107 type(c_ptr),
value :: r_d, w_d, d_d, x_d, strm
108 real(c_rp) :: tmp1, tmp2
110 end subroutine metal_amg_cheby_solve_part2
120 inv_thet, n, zero_initial)
121 type(c_ptr),
intent(inout) :: r_d, f_d, w_d, d_d, x_d
122 real(kind=
rp),
intent(in) :: inv_thet
123 integer,
intent(in) :: n
124 logical,
intent(in) :: zero_initial
125 logical(c_bool) :: zinit
136 call metal_amg_cheby_solve_part1(r_d, f_d, w_d, x_d, d_d, &
139 call neko_error(
'No device backend configured')
144 type(c_ptr),
intent(inout) :: r_d, w_d, d_d, x_d
145 real(kind=
rp),
intent(in) :: tmp1, tmp2
146 integer,
intent(in) :: n
154 call metal_amg_cheby_solve_part2(r_d, w_d, d_d, x_d, &
157 call neko_error(
'No device backend configured')
void cuda_amg_cheby_solve_part2(void *r, void *w, void *d, void *x, real *tmp1, real *tmp2, int *n, cudaStream_t strm)
void cuda_amg_cheby_solve_part1(void *r, void *f, void *w, void *x, void *d, real *inv_thet, int *n, bool *zero_initial, cudaStream_t strm)
Implements device kernels for use with TreeAMG smoothers.
subroutine, public amg_device_cheby_solve_part1(r_d, f_d, w_d, x_d, d_d, inv_thet, n, zero_initial)
subroutine, public amg_device_cheby_solve_part2(r_d, w_d, d_d, x_d, tmp1, tmp2, n)
Device abstraction, common interface for various accelerators.
type(c_ptr), bind(C), public glb_cmd_queue
Global command queue.
integer, parameter, public c_rp
integer, parameter, public rp
Global precision used in computations.