[MPICH] A doubt regarding the manner in the which MPI_init works

William Gropp gropp at mcs.anl.gov
Mon Jan 21 18:54:20 CST 2008


When debugging is enabled by configuring with the appropriate  
switches, it just causes the appropriate code to be compiled into  
MPICH2.  There are environment variables and command line options  
that update the value of MPIU_DBG_ActiveClasses, thus enabling some  
or all of the debug statements.  As the purpose of these debug  
statements is primarily to generate output that traces the execution,  
the ActiveClasses variable allows the user to select which types of  
debug messages are desired.

Object_set_ref is itself a macro that permits the use of assembly  
instructions when needed in a multithreaded environment (and one that  
uses fine-grain locking).  All that it is doing is setting the  
reference count on the object to the requested value (typically 1 or  
2, depending on the object).

Bill

On Jan 21, 2008, at 11:37 AM, Krishna Chaitanya wrote:

> Dear Sir,
> Sorry for the delay.
> I added a few print statements and took a closer look at the  
> functions MPIU_DBG_MSG_FMT() and  MPIU_DBG_Outevent (). It turns  
> out that the MPIU_DBG_ActiveClasses parameter remains at 0 for the  
> entire program execution, which means, the if() test fails and the  
> MPIU_DBG_Outevent function never gets called. So, the call to  
> MPIU_Object_set_ref()  that is being called from MPIR_Init_thread()  
> is not doing anything in terms of updating or maintaining the  
> internal data structures.Am I missing something,here?  Could some  
> one help me out  by explaining this? I hope I have explained my  
> doubt clearly.
>
> Thanks,
> Krishna Chaitanya
>
> On Jan 16, 2008 3:14 AM, William Gropp <gropp at mcs.anl.gov> wrote:
> Most of the operations that are used as macros are defined that way  
> so that they can be eliminated at compile time.  The MPIU_DBG  
> routines are a good example.  These are macros that are used to  
> enable various debugging options and are not core parts of the  
> communicator structure.  In fact, when MPICH2 is built for use in  
> production, these macros are defined as empty.
>
> To answer your other question, there are no universally used  
> routines for list management - instead, different modules make use  
> of the routines that they need.
>
> Bill
>
> On Jan 15, 2008, at 2:25 PM, Krishna Chaitanya wrote:
>
>> Dear All,
>>              I have been trying to understand the types of data  
>> structures used by MPICH2 and the way in which the various lists  
>> are maintained and how they are initialized. I happen to observe  
>> that most of such routines have been implemented as macros which  
>> has made my job slightly harder as they dont appear while  
>> debugging with gdb.( Is there a way to trace through them at run  
>> time?)
>>
>>              For example, I was keen on observing how MPICH2 deals  
>> with the MPI_COMM_WORLD data structure, which is of type MPID_COMM  
>> and it is a member of MPICH_PerProcess_t. So, at the time of  
>> populating  this structure , the library calls  [ from  
>> MPIR_Init_thread(...)    ]
>>          MPIU_Object_set_ref( MPIR_Process.comm_world, 1 );
>>          -- >   MPIU_DBG_MSG_FM ( .... )
>>                   -- > MPIU_DBG_MSG_FMT ( .. )
>>                          -- >  MPIU_DBG_Outevent ( ... )
>>                                  --> va_start and other such list  
>> related macros.
>>
>> However, when the MPIU_DBG_Outevent function is invoked, the  
>> paramater, int kind is hard-coded to be 0. When the kind value is  
>> zero, the library does not do any list related work.Instead, it  
>> prints some details into a file.  So, how does the MPICH library  
>> maintain reference to the  MPIR_Process.comm_world structure,  
>> without the invocation of macros like va_start, va_arg etc.
>>
>> Its quite possible that I have got things wrong as I am jumping  
>> from one function to another using the ctags and I havent actually  
>> seen the code behave as above during run-time as we are dealing  
>> with macros. So, please correct me if I have got something wrong.
>>
>> And, I am trying to draw an analogy between the OPEN-MPI and the  
>> MPICH2 when it comes to the way the internal data structures are  
>> handled. In Open-MPI, the OPAL library maitains such lists and has  
>> routines to manipulate them. Does MPICH have any other way of  
>> working with the lists of objects other than using the va_start  
>> and other related macros?
>>
>> NOTE :  I am using the mpich2-1.0.6 version.
>>
>> Thanks,
>> Krishna Chaitanya K,
>> National Institute of Technology,Karnataka ( NITK)
>> India.
>> -- 
>> In the middle of difficulty, lies opportunity
>
> William Gropp
> Paul and Cynthia Saylor Professor of Computer Science
> University of Illinois Urbana-Champaign
>
>
>
>
>
> -- 
> In the middle of difficulty, lies opportunity

William Gropp
Paul and Cynthia Saylor Professor of Computer Science
University of Illinois Urbana-Champaign


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/mpich-discuss/attachments/20080121/75ba2066/attachment.htm>


More information about the mpich-discuss mailing list