[Mpi3-tools] Current Version of the MPIR document

John DelSignore jdelsign at totalviewtech.com
Mon Jun 28 19:25:47 CDT 2010

Hi Ashley,

Look here:


Line 138:

Totalview also needs the debug information for the MPIR_PROCDESC type,
since it uses that to work out the size and fields in the procedesc

And if you don't believe me, ask your father-in-law! ;-)

Cheers, John D.

Ashley Pittman wrote:
> On 28 Jun 2010, at 22:35, John DelSignore wrote:
>>> Like the original work this document specifies a definition for MPIR_PROCDESC, it however then goes on to say that the definition isn't fixed but rather is up to the implementation.
>>> typedef struct {
>>>  char *host_name;
>>>  char *executable_name;
>>>  int pid;
>>> Section 9.2 paragraph 4:
>>> The pid member is the integer process identifier of the MPI process. Note that historically pid was defined as a C language int, which is an integer of an unknown size, which might be smaller than the size of a process identifier for the target system. Implementations should define pid as an integer size that is large enough to hold a process identifier for the target system. For example, implementations should use pid_t as the type of pid provided that pid_t is an integer type.
>> I believe that that paragraph is accurate. The intent of MPIR has always been that the layout and sizes of the fields in MPIR_PROCDESC and the size of MPIR_PROCDESC itself are communicated through the debug information, and that the offsets and sizes were not hard-coded into the debugger. It was done this way for portability and to allow MPI implementations to rearrange the fields or toss extra fields into the structure.
> I have to disagree based on the contents of the original header file.  This information is repeated on the ANL webpage where the header file is hosted, apologies for formatting here:
> http://www.mcs.anl.gov/research/projects/mpi/mpi-debug/attach.h.html
> /* A little struct to hold the target processor name and pid for
>  * each process which forms part of the MPI program.
>  * We may need to think more about this once we have dynamic processes...
>  *
>  * DO NOT change the name of this structure or its fields. The debugger knows
>  * them, and will be confused if you change them.
>  */
> typedef struct
>  {
>   char * host_name;           
> /* Something we can pass to inet_addr */
>   char * executable_name;     
> /* The name of the image */
>   int    pid;		      
> /* The pid of the process */
> http://www.mcs.anl.gov/research/projects/mpi/mpi-debug/
> MPIR_proctable
> This is an array of structures with type
> typedef struct {
>   char * host_name;           /* Something we can pass to inet_addr */
>   char * executable_name;     /* The name of the image */
>   int    pid;		      /* The pid of the process */
>>> Are there MPI librarys in existence which don't use int as the type for pid?
>> I don't know, but I'd guess there could be. I have some vague recollection that on Cray Catamount, pids were 64-bit and MPI was supported, so it's likely that MPI used 64-bit pids. Also, I think that IRIX has 64-bit pids, but SGI MPI didn't use the MPIR interface, they used "array services".
>>> I've certainly not seen any and never seen it necessary to read the type of MPIR_PROCDESC because it's type is well specified.
>> Just because you haven't seen any doesn't mean that they don't exist. You've been cheating and getting away with it.
> Obviously the rest of my argument rests on the initial premise being true.
> Ashley,

More information about the mpiwg-tools mailing list