1. 05 Nov, 2014 1 commit
  2. 31 Jul, 2014 7 commits
    • Wesley Bland's avatar
      Add MPIX_Comm_agree · 1f0ee136
      Wesley Bland authored
      Adds function implementing an agreement algorithm for the user. This function
      lets the user manually perform an agreement as well as detect unacknowledged
      Signed-off-by: default avatarJunchao Zhang <jczhang@mcs.anl.gov>
    • Wesley Bland's avatar
      Add MPIX_Comm_shrink functionality · 5be10ce9
      Wesley Bland authored
      This adds a new function MPIX_COMM_SHRINK. This is a communicator creation
      function that creates a new communicator based on a previous communicator, but
      excluding any failed processes.
      As part of the operation, the shrink call needs to perform an agreement to
      determine the group of failed processes. This is done using the algorithm
      published by Hursey et al. in his EuroMPI '12 paper.
      The list of failed processes is collected using a bit array. This happens via
      a few new functions in the CH3 layer to create and send a bitarry to the
      master process and receive an updated bitarray. Obviously, this is not a very
      scalable implementation yet, but something better can easily be plugged in
      here to replace the naïve implementation. This is also a use case for an
      MPI_Recv_reduce for future reference.
      Signed-off-by: default avatarJunchao Zhang <jczhang@mcs.anl.gov>
    • Wesley Bland's avatar
      Add MPI_Comm_revoke · 57f6ee88
      Wesley Bland authored
      MPI_Comm_revoke is a special function because it does not have a matching call
      on the "receiving side". This is because it has to act as an out-of-band,
      resilient broadcast algorithm. Because of this, in this commit, in addition to
      the usual functions to implement MPI communication calls (MPI/MPID/CH3/etc.),
      we add a new CH3 packet type that will handle revoking a communicator without
      involving a matching call from the MPI layer (similar to how RMA is currently
      The thing that must be handled most carefully when revoking a communicator is
      to ensure that a previously used context ID will eventually be returned to the
      pool of available context IDs and that after this occurs, no old messages will
      match the new usage of the context ID (for instance, if some messages are very
      slow and show up late). To accomplish this, revoke is implemented as an
      all-to-all algorithm. When one process calls revoke, it will send a message to
      all other processes in the communicator, which will trigger that process to
      send a message to all other processes, and so on. Once a process has already
      revoked its communicator locally, it won't send out another wave of messages.
      As each process receives the revoke messages from the other processes, it will
      track how many messages have been received. Once it has either received a
      revoke message or a message about a process failure for each other process, it
      will release its refcount on the communicator object. After the application
      has freed all of its references to the communicator (and all requests, files,
      etc. associated with it), the context ID will be returned to the available
      Signed-off-by: default avatarJunchao Zhang <jczhang@mcs.anl.gov>
    • Wesley Bland's avatar
      Add MPIX_Comm_failure_ack/get_acked · 8652e0ad
      Wesley Bland authored
      This commit adds the new functions MPI(X)_COMM_FAILURE_ACK and
      MPI(X)_COMM_FAILURE_GET_ACKED. These two functions together allow the user to
      get the group of failed processes.
      Most of the implementation for this is pushed into the MPID layer since some
      systems won't support this (PAMI). The existing function
      MPIDI_CH3U_Check_for_failed_procs has been modified to give back the group of
      acknowledged failed processes. There is an inefficiency here in that the list
      of failed processes is retrieved from PMI and parsed every time the user calls
      both failure_ack and get_acked, but this means we don't have to try to cache
      the list that comes back from PMI (which could potentially be expensive, but
      would have some cost even in the failure-free case).
      This commit adds a failed to the MPID_Comm structure. There is now a field
      called last_ack_rank. This is a single integer that stores the last
      acknowledged failure for this communicator which is used to determine when to
      stop parsing when getting back the list of acknowledged failed processes.
      Lastly, this commit includes a test to make sure that all of the above works
      (test/mpi/ft/failure_ack). This tests that a failure is appropriately included
      in the failed group and excluded if the failure was not previously
      Signed-off-by: default avatarJunchao Zhang <jczhang@mcs.anl.gov>
    • Wesley Bland's avatar
      Wesley Bland authored
      This is a new error code required by the ULFM proposal. This code replaces
      MPI_ERR_PENDING in cases where the failure that would have otherwise cause
      MPI_ERR_PENDING is related to process failure (MPIX_ERR_PROC_FAILED). In that
      case, we return MPIX_ERR_PROC_FAILED_PENDING instead.
      Signed-off-by: default avatarJunchao Zhang <jczhang@mcs.anl.gov>
    • Wesley Bland's avatar
      Rename error code to MPIX_ERR_PROC_FAILED · 6ce71547
      Wesley Bland authored
      Previously, MPICH was using MPIX_ERR_FAIL_STOP as the generic error code for
      process failures. The ULFM document specifies the error code to be
      Signed-off-by: default avatarJunchao Zhang <jczhang@mcs.anl.gov>
    • Wesley Bland's avatar
      Introduce MPICH_ERR_LAST_MPIX · b68657dc
      Wesley Bland authored
      There were a few places in MPICH where the error class was being checked
      against MPICH_ERR_LAST_CLASS and being flagged as invalid if it was too large.
      This is incorrect now that we have a new space for MPIX error codes. Add
      MPICH_ERR_LAST_MPIX as a way of keeping track of what the actual last valid
      error class is.
      Signed-off-by: default avatarJunchao Zhang <jczhang@mcs.anl.gov>
  3. 30 Jul, 2014 1 commit
  4. 29 Jul, 2014 3 commits
    • Wesley Bland's avatar
      Move MPIX functions to the end of mpi.h · 3e5395d4
      Wesley Bland authored
      Moving the MPIX functions to the end of the mpi.h.in file will help with ABI
      Signed-off-by: Pavan Balaji's avatarPavan Balaji <balaji@anl.gov>
    • Wesley Bland's avatar
      Move MPIX_ERR_FAIL_STOP to the MPIX errcode section · 339b9cc6
      Wesley Bland authored
      MPIX error codes now have their own section. Move MPIX_ERR_FAIL_STOP to that
      section with a new value.
      This does not break ABI compatiblity because this error code was prefixed MPIX
      and therefore is not available in all implementations.
      Signed-off-by: Pavan Balaji's avatarPavan Balaji <balaji@anl.gov>
    • Wesley Bland's avatar
      Reorganize mpi.h for MPIX err codes · 8189d9cf
      Wesley Bland authored
      The mpi.h header already had one MPIX error code in the middle of the regular
      MPI error codes. This is bad for ABI compatibility since if that error code
      ever needs to change, it might cause problems. To avoid this, we'll now have a
      new value called MPI_ERR_FIRST_MPIX which is bigger than MPICH_ERR_LAST_CLASS.
      All MPIX error classes will be based on this value. If anything above that
      value ever changes, it's not a problem because it's MPIX and not part of the
      ABI agreement.
      There is a gap between MPICH_ERR_LAST_CLASS and MPICH_ERR_FIRST_MPIX because
      sock is currently using these values for some of its internal error codes.
      Someday in the future, we could consider removing this gap if sock goes away.
      This commit also does some minor reordering of the error codes within the file
      (not their values) for readability reasons.
      Signed-off-by: Pavan Balaji's avatarPavan Balaji <balaji@anl.gov>
  5. 18 Jul, 2014 1 commit
  6. 07 Jul, 2014 2 commits
  7. 22 May, 2014 1 commit
    • Junchao Zhang's avatar
      Revise impl of MPI_IN_PLACE and MPI_BOTTOM · 9008c2f7
      Junchao Zhang authored
      Since Fortran forbids passing a disassociated (e.g., NULL) pointer to a non-pointer dummy argument
      (e.g., an assumed-type, assumed-rank argument), we can not use the same MPI_BOTTOM value in C from Fortran.
      So we use another approach.
      See implementation details at the EuroMPI-2014 paper "Implementing the MPI-3.0 Fortran 2008 Binding"
      No review since F08 binding is experimental now.
  8. 30 Apr, 2014 2 commits
    • Junchao Zhang's avatar
      Add an almost complete F08 binding with dir re-arranged · 4b0e4744
      Junchao Zhang authored
      Redesigned the binding infrastructer and gave an almost complete F08 binding.
      Remaining tasks include :
      1) supporting non-contiguous subarray on the C wrapper side.
      2) Use a script to autoset the now hard-coded compile time constants.
      The directory structure is as following:
      use_mpi_f08/                      --- To put F08 binding header files
      use_mpi_f08/wrappers_f/           --- To put Fortran wrapper files
      use_mpi_f08/wrappers_f/profiling/ --- To put PMPI Fortran wrapper files
      use_mpi_f08/wrappers_c/           --- To put C wrapper files (auto-gen'ed or not)
      Note we use *.F90 suffix instead of *.f90, since .F90 supports macro preprocess.
      This leaves room for future revision. Additionally, the tests directory is removed
      since it should not be there.
      No review since F08 binding is experimental now.
    • Junchao Zhang's avatar
      Add an example f08 binding · c00d4008
      Junchao Zhang authored
      The code is provided by Steve Oyanagi and Bill Long from Cray.
      No review since F08 binding is experimental now.
  9. 01 Jan, 2014 1 commit
    • Junchao Zhang's avatar
      Disable Clang's type checking for MPI_2INT · fb17d2b0
      Junchao Zhang authored
      Type checking for MPI_2INT is commented out because Clang 3.3 flags
      struct {int i1; int i2;} as different from int[2]. But actually these
      two types are of the same layout. Clang gives a type mismatch warning
      for a definitely correct code like the following:
       int in[2], out[2];
       MPI_Reduce(in, out, 1, MPI_2INT, MPI_MAXLOC, 0, MPI_COMM_WORLD);
      So, we disable type checking for MPI_2INT until Clang fixes this bug.
      Fixes #1993
      Signed off by Rajeev Thakur <thakur@mcs.anl.gov>
  10. 29 Oct, 2013 1 commit
  11. 26 Oct, 2013 1 commit
  12. 18 Oct, 2013 1 commit
  13. 22 Sep, 2013 1 commit
  14. 21 Sep, 2013 1 commit
  15. 01 Aug, 2013 1 commit
  16. 05 Mar, 2013 3 commits
  17. 09 Jan, 2013 2 commits
  18. 31 Dec, 2012 1 commit
  19. 15 Dec, 2012 1 commit
  20. 09 Dec, 2012 1 commit
  21. 07 Nov, 2012 7 commits