On Dec 4, 2007, at 4:48 PM, Erez Haba wrote:
[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.
[erezh] see http://en.wikipedia.org/wiki/X86_calling_conventions
Ah, thanks!
As I said, this probably should be defined per processor type/os type
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)
[erezh] You don't define type, just the size of the parameter. For example, we can define it as 4 bytes on 32bit and 8 bytes on 64bit. The implementation can define the type as long as it matches the size.
No they don't! This is the Big Lie of an ABI. ISV's *STILL* need totest 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?
[erezh] Who's <mpi.h>?
Vendor A takes a pointer as MPI_Comm the other takes an int as MPI_Comm.
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.
[erezh] The application dynamically loads the library thus it specify the library name.
I'm not an expert on Fortran but I'm sure that the Fortran vendors provide a way to dynamically load an bind libraries.
-- Jeff Squyres Cisco Systems