Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

MPIX Stream #12

Open
hzhou opened this issue Oct 24, 2022 · 0 comments
Open

MPIX Stream #12

hzhou opened this issue Oct 24, 2022 · 0 comments

Comments

@hzhou
Copy link

hzhou commented Oct 24, 2022

Summary

MPIX Stream introduces a new concept/object into MPI to represent the execution context, by default, a serial execution context. MPIX streams can represent CPU threads so that users can convey threading context explicitly to MPI. It also can be amended by info hints to represent a GPU execution stream and to support async operations that are specific to GPU runtimes. Internally, an MPI implementation maps MPIX stream to hardware network endpoints, allowing users explicit control of communication performance.

APIs

MPIX Stream creation

  • int MPIX_Stream_create(MPI_Info info, MPIX_Stream *stream)
  • int MPIX_Stream_free(MPIX_Stream *stream)

Stream communicator

  • int MPIX_Stream_comm_create(MPI_Comm parent_comm, MPIX_Stream stream, MPI_Comm *stream_comm)
    • Works with existing MPI operations with the additional MPIX Stream semantics

Multiplex stream communicator

  • int MPIX_Stream_comm_create_multiplex(MPI_Comm parent_comm, int num_streams, MPIX_Stream streams[], MPI_Comm *multiplex_comm)
    • point-to-point APIs with rank + index addressing scheme

GPU enqueue APIs

  • int MPIX_Send_enqueue(buf, count, datatype, dest, tag, comm)
  • int MPIX_Recv_enqueue(buf, count, datatype, source, tag, comm, status)
  • int MPIX_Isend_enqueue(buf, count, datatype, dest, tag, comm, request)
  • int MPIX_Irecv_enqueue(buf, count, datatype, source, tag, comm, request)
  • int MPIX_Wait_enqueue(request, status)
  • int MPIX_Waitall_enqueue(count, array_of_requests, array_of_statuses)

discussion

  • Identical signatures to existing APIs with the additional enqueue semantics
  • Readily to be extended to collectives and one-sided APIs
  • Once we have an async graph object, in principle, we can extend with -
    * int MPIX_Graph_enqueue(graph, comm)

References

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant