Open MPI logo

Open MPI Development Mailing List Archives

  |   Home   |   Support   |   FAQ   |   all Development mailing list

Subject: [OMPI devel] non-blocking collectives, SPARC, and alignment
From: Eugene Loh (eugene.loh_at_[hidden])
Date: 2012-07-16 15:50:16

The NBC functionality doesn't fare very well on SPARC. One of the
problems is with data alignment. An NBC schedule is a number of
variously sized fields laid out contiguously in linear memory (e.g.,
see nbc_internal.h or nbc.c) and words don't have much natural
alignment. On SPARC, the "default" (for some definition of that word)
is to sigbus when a word is not properly aligned. In any case (even
non-SPARC), one might argue misalignment and subsequent exception
handling is nice to avoid.

Here are two specific issues.

*) Schedule layout uses single-char delimiters between "round
schedules". So, even if the first "round schedule" has nice alignment,
the second will have single-byte offsets for its components.

*) 8-byte pointers can fall on 4-byte boundaries. E.g., say a schedule
starts on some "nice" alignment. The first words of the schedule will be:

     int total size of the schedule
     int number of elements in the first round schedule
     enum type of function
     void * pointer to some buffer

So, with -m64, that 8-byte pointer is on a 12-byte boundary.

Any input/comments on how to proceed?