mirror of
https://github.com/sfilippone/psblas3.git
synced 2026-10-17 19:32:08 +00:00
The complex halo exchange declared real MPI datatypes on complex buffers, with counts in elements and never doubled, so it moved the wrong number of bytes. On z every scheme transferred half the payload; on c the baseline and persistent paths happened to work because complex(spk) and real(dpk) are both 8 bytes, while the neighbour collective and the RMA get/put moved half. Regenerated from template-psblas after fixing @RMPI_TYPE@ to @MPI_TYPE@ there; the only change in these files is the datatype handle, no other line differs. Only c and z are regenerated on purpose. psi_sswapdata.F90 carries the index bounds checks and psi_dswapdata.F90 the PSCW optimization, neither of which has been folded back into the template yet, so regenerating those two would silently drop them. Neither needs this fix anyway: for s and d the real and complex macros resolve to the same handle. Per-type halo test on 4 ranks, all five schemes: before s 9/9 d 9/9 c 3/9 z 2/9 after s 9/9 d 9/9 c 9/9 z 9/9 Confirmed end to end by the CG driver, where all five schemes now reach the same final error to the last digit in the same 62 iterations.