I am new to MPI and bit confused about the data communication between CPUs of different nodes. How do cpus communicate data between them when they are located in different nodes?
For example I want to send and recv data from once to other :
MPI_Send(
void* data, // This is a pointer that cpu-1 in Node-1 want to sent to cpu-2 in node-2,
int count,
MPI_Datatype datatype,
int destination,
int tag,
MPI_Comm communicator)
MPI_Recv(
void* data, // I receive the pointer from Node-1, but this pointer corresponds to different memory in Node-2. How does this work?
int count,
MPI_Datatype datatype,
int source,
int tag,
MPI_Comm communicator,
MPI_Status* status)
CodePudding user response:
MPI was written in the early 1990s when the concept of a core didn't exist. So processes were always on a different node. The first implementation on the MPI routines probably used Unix sockets to send data over ethernet cables. Current implementations use whatever networking library the system provides, which can go over Infiniband or Ethernet or whatever is there.