[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [mpi-21] ABI (was: Call for MPI 2.2 and 3.0...)



On Dec 4, 2007, at 4:14 PM, Erez Haba wrote:

1. Calling convention

I'm not sure what you mean by this...? The MPI API is the same in all MPI implementations.

[erezh] __cdecl vs __stdcall vs __fastall vs your parameter passing convention.

Are those Microsoft-specific conventions? I don't recognize them. In POSIX, there's only one way to call the C MPI API functions.


2. Size of input parameters (e.g., what's the size of MPI_Comm)

Isn't that kinda useless without standardized values for the pre- defined constants? :-)

[erezh] Yes, you need the predefined constants and defining the size of the parameters.
This is a significant issue for customers. I think we can do that for "C" without limiting implementations.

This is where the MPI implementors start having religious debates... :-)


(e.g., int vs. pointer)

No they don't! This is the Big Lie of an ABI. ISV's *STILL* need to
test against every MPI implementation.  Fine; you don't have to
compile the application against each MPI implementation, and ISV's can
have one executable that supports multiple MPI's -- I see the "win" in
this.  But ISV's still have to *test* the application against each MPI
implementation.  And that's the much more time-consuming step (vs.
recompiling against each MPI).

[erezh] Yes, I agree. They still need to test against different MPI implementations. However, they don't have to test their code "marshaling" the interface for every different flavor of MPI implementation.

[erezh] The barrier to move to another MPI implementation on a tested platform is much lower. Authoring a new adaptation layer with new bugs, re-compile and test is a high barrier.

What adaption layer? <mpi.h> and 'mpif.h' is all you need.

Are you referring to something else, such as how to compile and link MPI applications?

2. provide a mechanism for MPI applications to optionally identify (at
run-time) which MPI they are using (e.g., so that they can choose not
to run, or display a warning that this MPI implementation has not been
QA tested with the application, etc.)

[erezh] I think that this is already achieved today by identifying the binary that you're dynamically binding to.

Can you explain how to do that? Remember that you have to be able to do it from Fortran, too.


I was thinking something simple, like a new MPI constant with an implementation-specific string (e.g., vendor name and/or version number).

and support ISV's that are trying to dynamically bind to multiple
MPI implementations.

I didn't hear any ISV ask for unified binary name, and think that
this would be unwise to do so. Having binaries clash with each other
is a deployment nightmare.

This is my own ignorance here, but can you dynamically change the name of a shared library dependency in an executable? E.g., if MPI implementation A provides libmpi.so and MPI implementation B provides libAmpi.so, can you have a single executable that can shift between the two at run-time?

[erezh] Yes you can. Using dynamically linked libraries (DLL's).

Can you explain how to do that? Please re-read my example: I cited 2 DLLs with different names -- how do you get one executable with explicit shared library dependencies to switch linking between them without needing system-level intervention (e.g., creating a sym link to make one DLL have the same filename as the other [but it must be in a different directory])?


Am I missing something obvious?

--
Jeff Squyres
Cisco Systems