On 10/27/2014 8:30 AM, maxinator333 wrote:
Hello,I noticed this weird behavior, because after a certain time of more than one minute the transfer rates of MPI_Send and MPI_Recv dropped by a factor of 100+. By chance I saw, that my program did allocate more and more memory. I have the following minimal working example: #include <cstdlib> #include <mpi.h> const uint32_t MSG_LENGTH = 256; int main(int argc, char* argv[]) { MPI_Init(NULL, NULL); int rank; MPI_Comm_rank(MPI_COMM_WORLD, &rank); volatile char * msg = (char*) malloc( sizeof(char) * MSG_LENGTH ); for (uint64_t i = 0; i < 1e9; i++) { if ( rank == 1 ) { MPI_Recv( const_cast<char*>(msg), MSG_LENGTH, MPI_CHAR, rank-1, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE); MPI_Send( const_cast<char*>(msg), MSG_LENGTH, MPI_CHAR, rank-1, 0, MPI_COMM_WORLD); } else if ( rank == 0 ) { MPI_Send( const_cast<char*>(msg), MSG_LENGTH, MPI_CHAR, rank+1, 0, MPI_COMM_WORLD); MPI_Recv( const_cast<char*>(msg), MSG_LENGTH, MPI_CHAR, rank+1, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE); } MPI_Barrier( MPI_COMM_WORLD ); for (uint32_t k = 0; k < MSG_LENGTH; k++) msg[k]++; } MPI_Finalize(); return 0; } I run this with mpirun -n 2 ./pingpong_memleak.exe The program does nothing more than send a message from rank 0 to rank 1, then from rank 1 to rank 0 and so on in standard blocking mode, not even asynchronous. Running the program will allocate roughly 30mb/s (Windows Task Manager) until it stops at around 1.313.180kb. This is when the transfer rates (not being measured in above snippet) drop significantly to maybe a second per send instead of roughly 1µs. I use Cygwin with Windows 7 and 16Gb RAM. I haven't tested this minimal working example on other setups.
Can someone test on other platforms and confirm me that is a cygwin specific issue ? Regards Marco
