38 use,
intrinsic :: iso_c_binding, only : c_ptr
54 subroutine gs_cpu_init(this, nlocal, nshared, nlcl_blks, nshrd_blks)
55 class(
gs_cpu_t),
intent(inout) :: this
56 integer,
intent(in) :: nlocal
57 integer,
intent(in) :: nshared
58 integer,
intent(in) :: nlcl_blks
59 integer,
intent(in) :: nshrd_blks
64 class(
gs_cpu_t),
intent(inout) :: this
68 subroutine gs_gather_cpu(this, v, m, o, dg, u, n, gd, nb, b, bo, op, shrd)
69 integer,
intent(in) :: m
70 integer,
intent(in) :: n
71 integer,
intent(in) :: nb
72 class(
gs_cpu_t),
intent(inout) :: this
73 real(kind=
rp),
dimension(m),
intent(inout) :: v
74 integer,
dimension(m),
intent(inout) :: dg
75 real(kind=
rp),
dimension(n),
intent(inout) :: u
76 integer,
dimension(m),
intent(inout) :: gd
77 integer,
dimension(nb),
intent(inout) :: b
78 integer,
dimension(nb),
intent(inout) :: bo
79 integer,
intent(in) :: o
80 integer,
intent(in) :: op
81 logical,
intent(in) :: shrd
99 integer,
intent(in) :: m
100 integer,
intent(in) :: n
101 integer,
intent(in) :: nb
102 real(kind=
rp),
dimension(m),
intent(inout) :: v
103 integer,
dimension(m),
intent(inout) :: dg
104 real(kind=
rp),
dimension(n),
intent(inout) :: u
105 integer,
dimension(m),
intent(inout) :: gd
106 integer,
dimension(nb),
intent(inout) :: b
107 integer,
dimension(nb),
intent(inout) :: bo
108 integer,
intent(in) :: o
109 integer :: i, j, k, blk_len
118 tmp = tmp + u(gd(k + j))
133 v(dg(i)) = u(gd(i)) + u(gd(i+1))
143 integer,
intent(in) :: m
144 integer,
intent(in) :: n
145 integer,
intent(in) :: nb
146 real(kind=
rp),
dimension(m),
intent(inout) :: v
147 integer,
dimension(m),
intent(inout) :: dg
148 real(kind=
rp),
dimension(n),
intent(inout) :: u
149 integer,
dimension(m),
intent(inout) :: gd
150 integer,
dimension(nb),
intent(inout) :: b
151 integer,
dimension(nb),
intent(inout) :: bo
152 integer,
intent(in) :: o
153 integer :: i, j, k, blk_len
162 tmp = tmp * u(gd(k + j))
177 v(dg(i)) = u(gd(i)) * u(gd(i+1))
187 integer,
intent(in) :: m
188 integer,
intent(in) :: n
189 integer,
intent(in) :: nb
190 real(kind=
rp),
dimension(m),
intent(inout) :: v
191 integer,
dimension(m),
intent(inout) :: dg
192 real(kind=
rp),
dimension(n),
intent(inout) :: u
193 integer,
dimension(m),
intent(inout) :: gd
194 integer,
dimension(nb),
intent(inout) :: b
195 integer,
dimension(nb),
intent(inout) :: bo
196 integer,
intent(in) :: o
197 integer :: i, j, k, blk_len
206 tmp = min(tmp, u(gd(k + j)))
221 v(dg(i)) = min(u(gd(i)), u(gd(i+1)))
231 integer,
intent(in) :: m
232 integer,
intent(in) :: n
233 integer,
intent(in) :: nb
234 real(kind=
rp),
dimension(m),
intent(inout) :: v
235 integer,
dimension(m),
intent(inout) :: dg
236 real(kind=
rp),
dimension(n),
intent(inout) :: u
237 integer,
dimension(m),
intent(inout) :: gd
238 integer,
dimension(nb),
intent(inout) :: b
239 integer,
dimension(nb),
intent(inout) :: bo
240 integer,
intent(in) :: o
241 integer :: i, j, k, blk_len
250 tmp =
max(tmp, u(gd(k + j)))
265 v(dg(i)) =
max(u(gd(i)), u(gd(i+1)))
273 subroutine gs_scatter_cpu(this, v, m, dg, u, n, gd, nb, b, bo, shrd, event)
274 integer,
intent(in) :: m
275 integer,
intent(in) :: n
276 integer,
intent(in) :: nb
277 class(
gs_cpu_t),
intent(inout) :: this
278 real(kind=
rp),
dimension(m),
intent(inout) :: v
279 integer,
dimension(m),
intent(inout) :: dg
280 real(kind=
rp),
dimension(n),
intent(inout) :: u
281 integer,
dimension(m),
intent(inout) :: gd
282 integer,
dimension(nb),
intent(inout) :: b
283 integer,
dimension(nb),
intent(inout) :: bo
284 logical,
intent(in) :: shrd
293 integer,
intent(in) :: m
294 integer,
intent(in) :: n
295 integer,
intent(in) :: nb
296 real(kind=
rp),
dimension(m),
intent(inout) :: v
297 integer,
dimension(m),
intent(inout) :: dg
298 real(kind=
rp),
dimension(n),
intent(inout) :: u
299 integer,
dimension(m),
intent(inout) :: gd
300 integer,
dimension(nb),
intent(inout) :: b
301 integer,
dimension(nb),
intent(inout) :: bo
302 integer :: i, j, k, blk_len
317 do i = (bo(nb) + b(nb) + 1), m
Defines a gather-scatter backend.
Generic Gather-scatter backend for CPUs.
subroutine gs_scatter_kernel(v, m, dg, u, n, gd, nb, b, bo)
Scatter kernel .
subroutine gs_cpu_init(this, nlocal, nshared, nlcl_blks, nshrd_blks)
Dummy backend initialisation.
subroutine gs_gather_kernel_add(v, m, o, dg, u, n, gd, nb, b, bo)
Gather kernel for addition of data .
subroutine gs_gather_kernel_mul(v, m, o, dg, u, n, gd, nb, b, bo)
Gather kernel for multiplication of data .
subroutine gs_cpu_free(this)
Dummy backend deallocation.
subroutine gs_scatter_cpu(this, v, m, dg, u, n, gd, nb, b, bo, shrd, event)
Scatter kernel.
subroutine gs_gather_cpu(this, v, m, o, dg, u, n, gd, nb, b, bo, op, shrd)
Gather kernel.
subroutine gs_gather_kernel_min(v, m, o, dg, u, n, gd, nb, b, bo)
Gather kernel for minimum of data .
subroutine gs_gather_kernel_max(v, m, o, dg, u, n, gd, nb, b, bo)
Gather kernel for maximum of data .
Defines Gather-scatter operations.
integer, parameter, public gs_op_add
integer, parameter, public gs_op_max
integer, parameter, public gs_op_min
integer, parameter, public gs_op_mul
integer, parameter, public rp
Global precision used in computations.
Gather-scatter backend for CPUs.