Skip to content

Issue #6258 still occurring on 4.0.1 - When on OSX hang when message size larger than a few MB.  #6568

Closed
@steve-ord

Description

@steve-ord

Thank you for taking the time to submit an issue!

Background information

What version of Open MPI are you using? (e.g., v1.10.3, v2.1.0, git branch name and hash, etc.)

4.0.1 for the release

Describe how Open MPI was installed (e.g., from a source/distribution tarball, from a git clone, from an operating system distribution package, etc.)

I edited the brew formula to pull the 4.0.1 instead of 4.0.0 and build from source. The compiler flags are those as default for the brew formula for 4.0.0

Please describe the system on which you are running

  • Operating system/version:
  • Computer hardware:
  • Network type:

OSX Mojave 10.14.3

Details of the problem

This is a continuation of ticket #6258 which is now closed and was advised to open a new one I still see exactly the same issue. If I drop the size of the messages the application runs fine.

I replicated the last test and the magic number for failure is 19145881 bytes - the test code replicated from #6258 is:

#include <stdio.h>

#include "mpi.h"

static const MPI_Datatype Datatype = MPI_PACKED;
static const int Tag = 42;
static const int RecvProc = 0;
static const int SendProc = 1;

// 19145880 does not hang 19145881  does hang in the Wait()s
#define MessageSize (19145880+1)
static unsigned char data[MessageSize] = {0};

int main(int argc, char *argv[])
{
	MPI_Init(&argc, &argv);
	MPI_Comm comm = MPI_COMM_WORLD;

	int myID = 0;
	int nProcs = 1;
	MPI_Comm_size(comm, &nProcs);
	MPI_Comm_rank(comm, &myID);

	if (nProcs != 2)
	{
		if (myID == 0)
			printf("Must be run on 2 procs\n");
		MPI_Finalize();
		return -1;
	}

	int result = 0;
	if (myID == RecvProc)
	{MPI_Status probeStatus;
		result = MPI_Probe(SendProc, MPI_ANY_TAG, comm, &probeStatus);
		printf("[%i] MPI_Probe => %i\n", myID, result);
		int size = 0;
		result = MPI_Get_count(&probeStatus, Datatype, &size);
		printf("[%i] MPI_Get_count => %i, size = %i\n", myID, result, size);

		MPI_Request recvRequest;
		result = MPI_Irecv(data, size, Datatype, SendProc, Tag, comm, &recvRequest);
		printf("[%i] MPI_Irecv(size = %i) => %i\n", myID, size, result);
		MPI_Status recvStatus;
		result = MPI_Wait(&recvRequest, &recvStatus);
		printf("[%i] MPI_Wait => %i\n", myID, result);
	}
	else
	{ // myID == SendProc
		MPI_Request sendRequest;
		result = MPI_Isend(data, MessageSize, Datatype, RecvProc, Tag, comm, &sendRequest);
		printf("[%i] MPI_Isend(size = %i) => %i\n", myID, MessageSize, result);
		MPI_Status sendStatus;
		result = MPI_Wait(&sendRequest, &sendStatus);
		printf("[%i] MPI_Wait => %i\n", myID, result);
	}

	printf("[%i] Done\n", myID);
	MPI_Finalize();
	return 0;
}

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions