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));
}