Understood. People have been using it like this for a while, and it's not earth shattering, so no need to rush it in. It just seems like a nice thing to have for debugger users, and it shouldn't have any harmful side effects that I can think of. Cheers, PeterT On 09/28/2015 09:52 AM, Rob Latham wrote:
On 09/22/2015 03:38 PM, Peter Thompson wrote:
This question came to me in my support role for TotalVIew. When you are debugging an MPI job, and attach after the job goes parallel, why don't you see the source for the main program? Instead you are usually located in the assembler code someplace, in some library above MPI_Init, and you have to go down the stack frame to see the source for your program.
We're trying our hardest to get a release out the door, so since this doesn't quite rise to the level of freeze-breaking worthy, I've stashed this in a ticket to help us not forget about it:
http://trac.mpich.org/projects/mpich/ticket/2305
==rob
There is a solution though. Way back when, when the MPIR_proctable interface was designed to help the debugger acquire processes automatically, there was a global variable defined MPIR_force_to_main. If this is defined in debugger.c as a global variable, then indeed, when you start up TotalView. Here's a diff of the change:
*** debugger.c~ 2015-07-22 17:59:51.000000000 -0400 --- debugger.c 2015-09-22 16:18:21.000000000 -0400 *************** *** 11,17 **** int MPIR_proctable_size = 0; int MPIR_i_am_starter = 0; int MPIR_partial_attach_ok = 0; ! volatile int MPIR_debug_state = 0; char *MPIR_debug_abort_string = 0;
--- 11,17 ---- int MPIR_proctable_size = 0; int MPIR_i_am_starter = 0; int MPIR_partial_attach_ok = 0; ! int MPIR_force_to_main = 0; volatile int MPIR_debug_state = 0; char *MPIR_debug_abort_string = 0;
The MPI being discussed was Intel MPI, but I've always understood that to be based on MPICH, and I thought this would be a good place to start. I had the same discussion in the Open MPI group a few years ago, and they had dropped the variable at one point since it did not appear to be used in any way. The code certainly doesn't make use of it, but when the debugger starts looking for it, that's when the magic happens. ;-) I tried just defining the variable in debugger.h, but I think it got optimized away since I just set up
extern int MPIR_force_to_main;
and didn't assign a value at that point.
Cheers, PeterT
-- Peter Thompson | Principal Technical Support Engineer | Rogue Wave Software, Inc. Accelerating Great Code | P 508-652-7734 | F 508-652-7701 | www.roguewave.com / [email protected] _______________________________________________ discuss mailing list [email protected] To manage subscription options or unsubscribe: https://lists.mpich.org/mailman/listinfo/discuss