1 / 6

#349: Dynamic Window Displacements

#349: Dynamic Window Displacements. RMA WG Plenary Presentation June 6, 2013 https:// svn.mpi-forum.org / trac / mpi -forum-web/ticket/349. What’s the problem?. Dynamic windows require arithmetic on MPI_Aint values that represent addresses Indexing into an array

caelan
Download Presentation

#349: Dynamic Window Displacements

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. #349: Dynamic Window Displacements RMA WG Plenary Presentation June 6, 2013 https://svn.mpi-forum.org/trac/mpi-forum-web/ticket/349

  2. What’s the problem? • Dynamic windows require arithmetic on MPI_Aint values that represent addresses • Indexing into an array • Accessing a field in a struct • Arithmetic on MPI_Aints that represent addresses cannot be done portably • MPI_Aints are signed integers, but addresses ain’t (are not) • Value is relative to MPI_BOTTOM, which varies across processes and language bindings (e.g., F*****N) • MPI_BOTTOM is address of a variable in a common block • Arithmetic can overflow! • Arithmetic overflow behavior is not specified

  3. Dynamic Window Displacement Arithmetic Example Rank p Rank q MPI_Aintarray_disp; … MPI_Bcast(&array_disp,p); … MPI_Get(array_disp +i*sizeof(double), …); double array[1000]; MPI_Aintarray_disp; … MPI_Win_attach(array); MPI_Get_address(array, &array_disp); MPI_Bcast(&array_disp,p); This can overflow!

  4. Proposed Solution • Add a function that can “safely” add an address and a displacement • Implementation: • Must correctly handle overflows • Just add them, if system is two’s complement

  5. Proposed Text (draft) MPI_AintMPI_Aint_add(MPI_Aintbase, MPI_Aintdisp) This function produces a new MPI_Aint value that is equivalent to the sum of the base and disparguments, where base represents an address and disp represents a signed integer displacement. The value of base may be relative to a non-zero value of MPI_BOTTOM that is unknown at the process performing the call to MPI_Aint_add. The addition is performed in a manner that results in the correct MPI_Aint representation of the output address, as if the process that originally produced base had called: MPI_Get_address((char *) base + disp, &out_addr)

  6. Straw Polls • How would you vote for this proposal? • (14) yes, (0) no, (4) abstain • Can we handle this as an erratum? • (9) yes, (0) no, (10) abstain

More Related