Being able to pass noncontiguous subarrays is a nice feature
of the new F08 binding. A potential use case is in
stencil computing, where one need to exchange noncontiguous
halos (e.g., border of a submatrix). To get performance,
programmers usually create MPI derived data types in advance
to describe such halos. With the new feature, such
data type creation can be hidden in C wrappers so that it
could be convenient for programmers. But since these MPI
calls are usually embedded in loops, creating and freeing
MPI data types in every loop iteration will incur significant
overhead compared with that of a manually optimized code.
An interesting question to ask is whether we can have the
convenience of subarrays without losing performance. Noticing
that the shape of halos is actually fixed in stencil codes,
we wonder whether we can take advantage of this fact to
cache MPI data types or use MPI persistent requests, in order
to avoid repeated data type creation and freeing. Also,
in our code, Fortran wrappers are outside of a module, thus
eliminating some advantages of using modern Fortran (e.g.,
inlining). Can they be put within a module without breaking
the MPI profiling interface in general? Answering those
questions is our future work.
Being able to pass noncontiguous subarrays is a nice featureof the new F08 binding. A potential use case is instencil computing, where one need to exchange noncontiguoushalos (e.g., border of a submatrix). To get performance,programmers usually create MPI derived data types in advanceto describe such halos. With the new feature, suchdata type creation can be hidden in C wrappers so that itcould be convenient for programmers. But since these MPIcalls are usually embedded in loops, creating and freeingMPI data types in every loop iteration will incur significantoverhead compared with that of a manually optimized code.An interesting question to ask is whether we can have theconvenience of subarrays without losing performance. Noticingthat the shape of halos is actually fixed in stencil codes,we wonder whether we can take advantage of this fact tocache MPI data types or use MPI persistent requests, in orderto avoid repeated data type creation and freeing. Also,in our code, Fortran wrappers are outside of a module, thuseliminating some advantages of using modern Fortran (e.g.,inlining). Can they be put within a module without breakingthe MPI profiling interface in general? Answering thosequestions is our future work.
การแปล กรุณารอสักครู่..
