Detecting Illegal Buffer Modifications
(LOCAL:MEMORY:ILLEGAL_MODIFICATION)
MPI owns the memory that active communication references. The application must not
touch it during that time. Illegal writes into buffers that the MPI is asked to send
are detected by calculating a checksum of the data immediately before the request is
activated and comparing it against a checksum when the send completes. If the
checksum is different, someone must have modified the buffer. The reported
LOCAL:MEMORY:ILLEGAL_MODIFICATION
is a real error.This problem is more common with non-blocking communication because the application
gets control back while MPI still owns the buffer and then might accidentally modify
the buffer. For non-blocking communication the call stacks of where the send was
initiated and where it completed are provided. For persistent requests it is also
shown where it was created.
The problem might also occur for blocking communication, for example when the MPI
implementation incorrectly modifies the send buffer, the program is multithreaded
and writes into it or other communication happens to write into the buffer. In this
case only the call stack of the blocking call where the problem was detected gets
printed.
Strictly speaking, reads are also illegal because the MPI standard makes no
guaranteed about the content of buffers while MPI owns them. Because reads do not
modify buffers, such errors are not detected. Writes are also not detected when they
happen (which would make debugging a lot easier) but only later when the damage is
detected.