Skip to content

RMA Test Cases

Simon Schwitanski requested to merge rma into main

LocalConcurrency test cases

Combines different operations with different RMA sync modes to cover all possible conflict/sync variants for local concurrency problems / local buffer races.

Operations / Calls covered:

  • Buffer accesses: buffer read, buffer write
  • Local buffer write: MPI_Get, MPI_Rget
  • Local buffer read: MPI_Put, MPI_Rput, MPI_Accumulate, MPI_Raccumulate, MPI_Get_accumulate, MPI_Rget_accumulate, MPI_Fetch_and_op, MPI_Compare_and_swap (Note: MPI_Get_accumulate and others may also write results in another local buffer, but we only consider the reading accesses here.)

Synchronization modes covered:

  • Fences: MPI_Win_fence
  • Lockall + Flush_all + Unlock_all
  • Lockall + Flush_local_all + Unlock_all
  • Lock + Flush + Unlock: MPI_Win_(lock|flush|unlock)
  • Lock + Unlock
  • Requests: MPI_R(put|get|accumulate|get_accumulate) + MPI_Wait
  • PSCW
  • Currently missing: Lock_all + Unlock_all

Currently missing compared to MBI (for LocalConcurrency):

  • Conflict between MPI RMA operation and (non-)blocking P2P, e.g. MPI_Get + MPI_Isend/Send on the same buffer
  • The conflicting access could be on a separate buffer or on the window itself (i.e., the window memory itself could be target of a local buffer access).

GlobalConcurrency test cases

Operations / Calls covered:

  • Buffer accesses: buffer read, buffer write
  • Local buffer read/write: MPI_Put / MPI_Get (we do not consider all other possibilities of local buffer accesses to avoid a test case explosion)
  • Remote read: MPI_Get, MPI_Put
  • Remote write: MPI_Put, MPI_Rput, MPI_Accumulate, MPI_Raccumulate, MPI_Get_accumulate, MPI_Rget_accumulate, MPI_Fetch_and_op, MPI_Compare_and_swap

Synchronization modes covered:

  • Fences: MPI_Win_fence
  • Lockall + Flush_all + Barrier + Unlock_all
  • Lock + Unlock: Exclusive vs. Shared
  • Requests: MPI_R(put|get|accumulate|get_accumulate) + MPI_Wait
  • PSCW
  • Optional (currently missing): Lock + Unlock, Lock_all + Unlock_all

Invalid Argument test cases

  • Invalid target rank (-1, >= nranks, ...)
  • Invalid buffer (NULL)
  • Invalid Datatype (MPI_DATATYPE_NULL, freed data type)
  • Invalid window (no window initialized, window freed to early)

Epoch Lifecycle

  • RMA access before epoch is opened
  • RMA access without closing epoch
  • Double open of access epoch (double lock, non-collective fence)
  • Mixing RMA access modes (fence + lock)
Edited by Simon Schwitanski

Merge request reports

Loading