Under the Puma operating system (for distributed memory
architectures) here at Sandia, we support the 0 increment
and the 1 increment with minimal overhead. Since the
kernel is handling the increment, it is fast and can easily
be done on a per message basis. It also requires no
additional "field" in the message header indicating how
much to increment by. (Here, "message header" refers to
the actual message header that goes across the backplane.
It is a resource limited by size and structure.)
In order to support an arbitrary counter increment, we would
have to 1) reserve 4 bytes in the message header (a limited
resource) strictly for MPI-2 semantics, or 2) run a handler
to do the increment. Neither of these is an attractive option.
In addition, I'm not sure I like the idea of having N/2
MPI_Puts completed, while the counter only gets incremented
after N puts. This provides a performance improvement for
handler based incrementing, at the cost of a counter that
correctly indicates the number of puts completed at any
given point in time. In this scenario, the window owner
could be stalled from doing work by a sender that waits too
long to increment the window counter.
The arbitrary increment supports protocols that want to do
a sequence of MPI_Put's followed by a final MPI_Put which
does an increment that indicates "I'm done". This could
easily be achieved within the protocol itself by doing a
final MPI_Put to a known location that indicates "I'm
done". This solution would actually be faster than a
handler based increment. If there are other scenario's
where this type of solution will not work, please post
them. Currently, I haven't heard a good motivating reason
for supporting arbitrary counter increments.
These are just a couple reasons why SNL would just assume
see the counter increment options be only 0 or 1.
Lance Shuler W: (505) 844-2159
Parallel Computing Sciences Department, 9223 Fax: (505) 845-7442
Sandia National Labs
Albuquerque, NM 87185-1109 firstname.lastname@example.org