You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: src/ParallelKernel/hide_communication.jl
+81-21Lines changed: 81 additions & 21 deletions
Original file line number
Diff line number
Diff line change
@@ -147,17 +147,35 @@ function hide_communication_gpu(ranges_outer::Union{Symbol,Expr}, ranges_inner::
147
147
push!(compcalls_outer, :(@parallel_async$ranges_outer[i] stream=ParallelStencil.ParallelKernel.@get_priority_stream(i) $(kwargs...) $compkernelcall)) #NOTE: it cannot directly go to ParallelStencil.ParallelKernel.@parallel_async as else it cannot honour ParallelStencil args as memopt (fixing it to ParallelStencil is also not possible as it assumes, else the ParalellKernel hide_communication unit tests fail).
for i in2:3 ParallelStencil.ParallelKernel.@synchronize(ParallelStencil.ParallelKernel.@get_priority_stream(i)); end# NOTE: synchronize the streams of the z-boundary computations (assumed to be stream 2 and 3 - to be in agreement with get_ranges_outer)
158
+
$bc_and_commcalls_z
159
+
for i in1:length($ranges_inner)
160
+
$(compcalls_inner...)
161
+
end
162
+
for i in1:1 ParallelStencil.ParallelKernel.@synchronize(ParallelStencil.ParallelKernel.@get_priority_stream(i)); end
163
+
for i in4:length($ranges_outer) ParallelStencil.ParallelKernel.@synchronize(ParallelStencil.ParallelKernel.@get_priority_stream(i)); end
164
+
$bc_and_commcalls_xy
165
+
for i in1:length($ranges_inner) ParallelStencil.ParallelKernel.@synchronize(ParallelStencil.ParallelKernel.@get_stream(i)); end
154
166
end
155
-
for i in1:length($ranges_inner)
156
-
$(compcalls_inner...)
167
+
else
168
+
quote
169
+
for i in1:length($ranges_outer)
170
+
$(compcalls_outer...)
171
+
end
172
+
for i in1:length($ranges_inner)
173
+
$(compcalls_inner...)
174
+
end
175
+
for i in1:length($ranges_outer) ParallelStencil.ParallelKernel.@synchronize(ParallelStencil.ParallelKernel.@get_priority_stream(i)); end
176
+
$bc_and_commcalls
177
+
for i in1:length($ranges_inner) ParallelStencil.ParallelKernel.@synchronize(ParallelStencil.ParallelKernel.@get_stream(i)); end
157
178
end
158
-
for i in1:length($ranges_outer) ParallelStencil.ParallelKernel.@synchronize(ParallelStencil.ParallelKernel.@get_priority_stream(i)); end
159
-
$bc_and_commcalls
160
-
for i in1:length($ranges_inner) ParallelStencil.ParallelKernel.@synchronize(ParallelStencil.ParallelKernel.@get_stream(i)); end
if!is_block(block) @ModuleInternalError("expression is not a block; a block with at least two statements for communication is expected (obtained: $block)") end
275
+
statements = block.args
276
+
comm_z_pos =-1
277
+
for i inlength(statements):-1:1
278
+
if (@capture(statements[i], f_(args__; kwarg_)) &&@capture(kwarg, dims=(3,))) comm_z_pos = i; break; end
279
+
end
280
+
if (comm_z_pos <1) @ModuleInternalError("no communication statement with dims=(3,) found in the block.") end
281
+
bc_and_commcalls_z =quote$(statements[1:comm_z_pos]...) end
282
+
bc_and_commcalls_xy =quote$(statements[comm_z_pos+1:end]...) end
283
+
return bc_and_commcalls_z, bc_and_commcalls_xy
284
+
end
285
+
229
286
230
287
## FUNCTIONS TO GET INNER AND OUTER RANGES AND TO PROMOTE BOUNDARY_WIDTH TO 3D
231
288
@@ -247,22 +304,25 @@ function get_ranges_outer(boundary_width, ranges::RANGES_TYPE...)
0 commit comments