[Mpiwg-large-counts] A perfect trick in C with similar API as with Fortran overloading - instead of the many new _l functions in C

Jeff Squyres (jsquyres) jsquyres at cisco.com
Mon Oct 21 14:00:32 CDT 2019


I agree with Hammy.

I think we all agree that adding a bunch of new _x and/or _l symbols sucks.  But it's unfortunately the least evil solution.  :-\

C11 was our best hope to avoid that (from the user perspective at least), but that didn't work out.

[Image result for sad panda needs a hug gif]


On Oct 21, 2019, at 2:43 PM, Jeff Hammond <jeff.science at gmail.com<mailto:jeff.science at gmail.com>> wrote:

If users want such a preprocessor solution, they should get it from a third-party implementation. I do not think it belongs in the MPI standard.

Jeff

On Oct 21, 2019, at 11:40 AM, Rolf Rabenseifner <rabenseifner at hlrs.de<mailto:rabenseifner at hlrs.de>> wrote:

Dear all,

Yes, I understand.

And providing the new API in a new module mpi_x.h, but with same function names
MPI_Send ... is then also an evil.
Especially because the two MPI_Send(..,int count,..) from mpi.h
and MPI_Send(..,MPI_Count count,..) from mpi_x.h cannot be together
within the same lib because C does not allow to define an ABI-function-Name
that is not identical to the API-function-name.

Therefore next proposal:

We do what we planned, but can additionally provide an mpi_l.h header file
containing only a set of aliases
#define MPI_Send(...) MPI_Send_l(...)
...

User who changed somehow all their 4 byte integer in into 8 byte integer
can then directly use the new routines without changing all the MPI function calls.

As far as I understand, wouldn't this add-on proposal fall into the evil category,
or would it?

Best regards
Rolf


----- Original Message -----
From: "Jeff Squyres" <jsquyres at cisco.com<mailto:jsquyres at cisco.com>>
To: "mpiwg-large-counts" <mpiwg-large-counts at lists.mpi-forum.org<mailto:mpiwg-large-counts at lists.mpi-forum.org>>
Cc: "Rolf Rabenseifner" <rabenseifner at hlrs.de<mailto:rabenseifner at hlrs.de>>, "Jeff Hammond" <jeff.science at gmail.com<mailto:jeff.science at gmail.com>>
Sent: Monday, October 21, 2019 3:41:53 PM
Subject: Re: [Mpiwg-large-counts] A perfect trick in C with similar API as with Fortran overloading - instead of the
many new _l functions in C

I agree: breaking ABI in this way is truly evil.

Specifically: compile your app with implementation version X.  Then run your app
with same implementation, but version Y (this is not uncommon for commercial
ISV MPI apps).  Things fail in weird, non-obvious ways (or worse, they *don't*
fail, but silently give you wrong results).

Speaking as someone who writes code for a living, changing the signature of an
existing, well-established function is evil.  Changing it in ways that a
compiler may not even warn you about (in forward- and backward-compatility
scenarios) is TRULY evil.




On Oct 21, 2019, at 9:35 AM, Jeff Hammond via mpiwg-large-counts
<mpiwg-large-counts at lists.mpi-forum.org<mailto:mpiwg-large-counts at lists.mpi-forum.org>> wrote:

ABI is very much a user problem. We are not breaking ABI for this.

What is being done now is five years in the making. I’m not sure why you didn’t
comment until recently.

Jeff

Sent from my iPhone

On Oct 20, 2019, at 10:49 PM, Rolf Rabenseifner via mpiwg-large-counts
<mpiwg-large-counts at lists.mpi-forum.org<mailto:mpiwg-large-counts at lists.mpi-forum.org>> wrote:

Dear Tony and all,

the group has labored over each area... 1 sided has had the least attention so
far... All of MPI is to be made 64 bit clean not parts.

My proposal ia for whole MPI.
Only for few routines we need some additional _x versions.

Partial answer to your earliest question in the note: Changing the meaning of
existing APIs was disallowed some time ago.  Certainly, for in arguments of
count , replacing int with MPI_Count is a partial solution.  But it changes the
APIs ...

The goal is backward compatibility.
And this one is provided.

In C, a program written for the assumption of big count and compiled
accidentally with an MPI-3 compliant MPI will silently build and fail at
runtime ... rounding of integers ...

Let's recommend to the users of the long coutnt feature that they should at a
check of the version. In C, in can be tested at compile time with cpp.

and changing the AbI violates the ABI for tools and such  — two  possible
reasons why not chosen ... but we will have to go refresh on all the reasons .

Not a user problem ...

I am sure you will get extensive feedback on these questions from the whole
group ? :-)

And also by the plenum.

Best regards
Rolf

----- Tony Skjellum <skjellum at gmail.com<mailto:skjellum at gmail.com>> wrote:
Rolf, the group has labored over each area... 1 sided has had the least
attention so far... All of MPI is to be made 64 bit clean not parts.

Partial answer to your earliest question in the note: Changing the meaning of
existing APIs was disallowed some time ago.  Certainly, for in arguments of
count , replacing int with MPI_Count is a partial solution.  But it changes the
APIs ...

In C, a program written for the assumption of big count and compiled
accidentally with an MPI-3 compliant MPI will silently build and fail at
runtime ... rounding of integers ... and changing the AbI violates the ABI for
tools and such  — two  possible reasons why not chosen ... but we will have to
go refresh on all the reasons .

I am sure you will get extensive feedback on these questions from the whole
group ? :-)

Tony

Anthony Skjellum, PhD
205-807-4968


On Oct 20, 2019, at 2:25 PM, Rolf Rabenseifner via mpiwg-large-counts
<mpiwg-large-counts at lists.mpi-forum.org<mailto:mpiwg-large-counts at lists.mpi-forum.org>> wrote:

Dear all,

a participant in my latest course asked me, whether we not
substituting in by MPI_Count in all "int xxxxx" input arguments.
The compiler automatically would cast to MPI_Count which may be a fast
instruction. Then we need the new _x or _l functions only for those
rare functions with MPI_Count as output or array argument.

Was this ever discussed?

Second question:
Does the large Count roup plan, only to use MPI_Count for data,
i.e., only in communication, I/O, and derived type routines?

Is it correct, that we keep the number of
- request handles in request arrays,
- ranks an size in/of communicator and group handles,
will stay int?

How do we handle disp in 1-sided communication?

With this approach, it seems that explicit MPI_Count versions of
a subroutine is needed only for
MPI_[I][NEIGHBOR_]{ALLTOALL|ALLGATHER}{V|W}
MPI_[I]{GATHER|SCATTER}V
MPI_[I]REDUCE_SCATTER
(18 routines)
MPI_WIN_SHARED_QUERY --> *disp
(1 Routine)
MPI_[UN]PACK
MPI_PACK_SIZE _x/_l version should have MPI_Aint (same as for
MPI_...PACK..._external)
(3 routines)
MPI_GET_COUNT
MPI_GET_ELEMENTS (has already an _X version)
MPI_TYPE_SIZE (has already an _X version)

Which solution exists for MPI_CONVERSION_FN_NULL?

All other 100 routines with "int count" and "int size" seems
to be solved with directly changing it into "MPI_Count count" and "MPI_Count
size".

Best regards
Rolf

----- Original Message -----
From: "mpiwg-large-counts" <mpiwg-large-counts at lists.mpi-forum.org<mailto:mpiwg-large-counts at lists.mpi-forum.org>>
To: "mpiwg-large-counts" <mpiwg-large-counts at lists.mpi-forum.org<mailto:mpiwg-large-counts at lists.mpi-forum.org>>
Cc: "Jeff Squyres" <jsquyres at cisco.com<mailto:jsquyres at cisco.com>>
Sent: Saturday, October 19, 2019 10:26:23 PM
Subject: [Mpiwg-large-counts] Pythonizing instructions

As discussed in our last meeting, I've written a first take at instructions for
Chapter Authors for how to write Pythonized functions.

These instructions are not yet intended for a wide audience -- they are intended
solely for the working group.  Let's iterate on them here in the WG and get
them to a good enough state before sharing them widely:

https://github.com/mpiwg-large-count/large-count-issues/wiki/pythonizing

Puri/Tony/Dan: please try to use these instructions to Pythonize a few bindings.
The PR for the Pythonization is
https://github.com/mpiwg-large-count/mpi-standard/pull/2.  All even-numbered
chapters are done, and a small number of odd-numbered chapters.  Grep for
`funcdef` in chapter *.tex files to find a chapter that hasn't been Pythonized
yet (funcdef is the LaTeX macro for hard-coded LaTeX macros).

Send your feedback here and/or we'll discuss on Wednesday.

--
Jeff Squyres
jsquyres at cisco.com

_______________________________________________
mpiwg-large-counts mailing list
mpiwg-large-counts at lists.mpi-forum.org
https://lists.mpi-forum.org/mailman/listinfo/mpiwg-large-counts

--
Dr. Rolf Rabenseifner . . . . . . . . . .. email rabenseifner at hlrs.de<mailto:rabenseifner at hlrs.de> .
High Performance Computing Center (HLRS) . phone ++49(0)711/685-65530 .
University of Stuttgart . . . . . . . . .. fax ++49(0)711 / 685-65832 .
Head of Dpmt Parallel Computing . . . www.hlrs.de/people/rabenseifner<http://www.hlrs.de/people/rabenseifner> .
Nobelstr. 19, D-70550 Stuttgart, Germany . . . . (Office: Room 1.307) .
_______________________________________________
mpiwg-large-counts mailing list
mpiwg-large-counts at lists.mpi-forum.org<mailto:mpiwg-large-counts at lists.mpi-forum.org>
https://lists.mpi-forum.org/mailman/listinfo/mpiwg-large-counts

--
Dr. Rolf Rabenseifner . . . . . . . . . .. email rabenseifner at hlrs.de<mailto:rabenseifner at hlrs.de> .
High Performance Computing Center (HLRS) . phone ++49(0)711/685-65530 .
University of Stuttgart . . . . . . . . .. fax ++49(0)711 / 685-65832 .
Head of Dpmt Parallel Computing . . . www.hlrs.de/people/rabenseifner<http://www.hlrs.de/people/rabenseifner> .
Nobelstr. 19, D-70550 Stuttgart, Germany . . . . (Office: Room 1.307) .
_______________________________________________
mpiwg-large-counts mailing list
mpiwg-large-counts at lists.mpi-forum.org<mailto:mpiwg-large-counts at lists.mpi-forum.org>
https://lists.mpi-forum.org/mailman/listinfo/mpiwg-large-counts
_______________________________________________
mpiwg-large-counts mailing list
mpiwg-large-counts at lists.mpi-forum.org<mailto:mpiwg-large-counts at lists.mpi-forum.org>
https://lists.mpi-forum.org/mailman/listinfo/mpiwg-large-counts


--
Jeff Squyres
jsquyres at cisco.com<mailto:jsquyres at cisco.com>

--
Dr. Rolf Rabenseifner . . . . . . . . . .. email rabenseifner at hlrs.de<mailto:rabenseifner at hlrs.de> .
High Performance Computing Center (HLRS) . phone ++49(0)711/685-65530 .
University of Stuttgart . . . . . . . . .. fax ++49(0)711 / 685-65832 .
Head of Dpmt Parallel Computing . . . www.hlrs.de/people/rabenseifner<http://www.hlrs.de/people/rabenseifner> .
Nobelstr. 19, D-70550 Stuttgart, Germany . . . . (Office: Room 1.307) .


--
Jeff Squyres
jsquyres at cisco.com<mailto:jsquyres at cisco.com>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mpi-forum.org/pipermail/mpiwg-large-counts/attachments/20191021/9ce485b3/attachment-0001.html>


More information about the mpiwg-large-counts mailing list