For the list archives, I was able to work around the executive timing
message buffer limitation by patching a DXPrintTimes() call into the end of
src/exec/libdx/timing.c::mark(), which works after I fixed a bug in
DXPrintTimes (attached).  Though, a more efficient way to clear the message
buffer is:

     for (i=0, p=ti->procs; i < DXProcessors(0);  i++, p++)
       p->n = p->printed = 0;

     As-is, this does slow down the exec and the ui with all the socket and
GUI traffic to the Message Window, but this can be alieviated by commenting
out the exec->ui send call (e.g. _dxf_ExQMessage [1 processor mode],
_dxf_ExDistributeMsg [multiproc], _dxfExportBin_FP [outboard]) in
src/exec/dpexec/log.c::DXqmessage(), and then turning on dxexec logging (-l
option; saves to dx.log).

     This still does more work than needed, but I don't need millisecond-
accurate timings -- just ballpark numbers for where most of the effort is
tied up.  Combined with -trace on (which gives the needed module instance
numbers), the output is still pretty useful.

Randy

Nancy Collins:
 |the problem with the buffer filling up with other timing info other than
 |module entry & exit points is unfortunate.  there are lots of flags for
 |selecting which debugging/trace info to print, but i think timing is
 |either on or off and there are only 2 timing routines - a global timer
 |and a per/processor local timer for parallel sections.  any code which
 |calls the "mark this time" routine uses up a slot.  it would be useful to
 |implement some sort of selection for which timers actually are recorded,
 |something like the trace messages.

-- 
Randall Hopper (mailto:[EMAIL PROTECTED])
Lockheed Martin Operation Support
EPA Scientific Visualization Center
US EPA N127-01; RTP, NC 27711
--- src/exec/libdx/ORIG/timing.c        Mon Jun 12 01:45:39 2000
+++ src/exec/libdx/timing.c     Wed Mar  6 10:23:29 2002
@@ -282,6 +282,8 @@
     event->global = global;
     strncpy(event->label, s, sizeof(event->label)-1);
     event->label[sizeof(event->label)-1] = '\0';
+
+    DXPrintTimes();
 }
 
 
@@ -346,5 +348,5 @@
     DXEndLongMessage();
 
     /* reset all per-processor information to 0 */
-    memset(ti->procs, 0, sizeof(ti->procs));
+    memset(ti->procs, '\0', DXProcessors(0) * sizeof(*ti->procs));
 }

Reply via email to