When using MPI_Bcast one should expect that, in the root process, the buffer will be left unchanged. While this is certainly true of Intel's implementation, there is a certain peculiarity. When the buffer exceeds a certain size (somewhere between 3.7k and 7.5k), the root process needs write access to the buffer. In the application I am currently developing, I first mapped the data to be broadcast as read-only in the root process's vm. Unfortunately this lead to a segfault, and changing the mapping fixed the problem. I later confirmed that the buffer is the same before and after MPI_Bcast.
Can anyone tell me why I need write access to the buffer in the root process? This is not true in any other implementation of MPI that I've used.