Chris Pelkie:
 |>     I'm faced with a 3000 module DX network used in a production app which
 |>must be sped up (too slow).
 |
 |You inherited Mark's Mother of All Nets, I'm guessing? (:-)

Oh, you've heard of it?  ;-)  Guess it's reached urban legand status (and
it's still growing).

 |I think I understand that it's the final playback that's the bottleneck
 |from the user's point of view, correct? How about writing multiple frames
 |out to MIFF (on the first pass)

That may be the way to go if the first pass times can't be improved much.

 |So there's definitely hope if you want to locate loops and rewrite them as
 |modules.

Thanks for the suggestions.  In addition to what you've suggested, I've got
a number of other speed-up options to explore in mind:

    1) Profiling/optimizing dxexec

       Results show that locking, pixel packing, and malloc'ing appear to
       be the biggest CPU hogs for "all-cached" net executions.

    2) Semi-automatic translation to pure C (no DXLink)

       Swapping mail with Mike Zeleznik sold me that a C-only dataflow would
       solve this net's performance problems (with trade-offs).

    3) The Switch/Route problem

       DX apparently has to touch all of these on cached executions, for
       reasons I don't appreciate.  Address this, or reduce the number of
       Switches and Routes in the main flow.

    4) DXLink

       Much of the network bulk associated with interactor scalar/string/
       error processing can move into a client.  Also this may make it
       possible to segment the net into separately-executable nets.

    5) Macros

       Hide modules from the main flow.

And as you mentioned:

    6) Custom modules

       To handle loops and network chunks requiring a large number of
       native DX modules.

    7) Second-pass optimizations


Thanks again for the advice.

Randall

-- 
Randall Hopper (mailto:[EMAIL PROTECTED])
EPA Scientific Visualization Center
US EPA MD/24 ERC-1A; RTP, NC 27711

Reply via email to