low fps with noise pop transformation

I just got the POPs alpha today so probably assume I’m doing something wrong :smile: I took one of the examples and added some chop logic to transform the z/w components of the 4d POP noise, which immediately tanked my performance down to like 6fps. Is there a better way to do this?

@snek have you scanned the cook times via Performance Analyzer to pinpoint the first/biggest cook time in the network?

Hi @snek, thanks for the report, what you’re doing looks ok from what I can see.

Can you share the toe file and your system specs (mostly interested in GPU)? wondering how dense sphere1 and sphere2 are, the copy could be resulting in a lot of geometry, it’s possible you might be low on memory. Rendering all the viewers (especially if adaptive homing is on) gets expensive as well depending on how much geometry.

If that’s the case and you don’t need to process further the geo using instancing on the geometry comp saves memory compared to doing a copy in POPs.

GPU is RTX 3050 Ti Laptop, CPU is i9-12900H. Task manager showed that I still had ram and vram to spare, so I don’t think it was running out. I don’t really have any particular goal with this though, I was just playing around with it, so if this is a bad way to do the instancing I can just learn from that and move on.

SprinkleColorNoiseVolume.5.toe (4.3 KB)

I tried turning off all the viewers and going through a render top, here’s the output from that:

                   frame  Start Frame
    0.081 ms    94 cook  Forcing nodes to cook at start of frame
    0.005 ms  76192 cook   Chain Start  /ui/local/time/clock (CHOP:null)
    0.010 ms  76192 cook     /ui/local/time/scrubber (CHOP:switch)
    0.006 ms  76192 cook      /ui/local/time/independent (CHOP:switch)
    0.010 ms  76192 cook       /ui/local/time/cframe (CHOP:speed)
    0.018 ms  76191 cook   Chain Start  /ui/dialogs/mainmenu/lock (DAT:chopexec)
    0.013 ms  76191 cook     /ui/dialogs/mainmenu/perform2 (CHOP:perform)
    0.007 ms  76191 cook   Chain Start  /ui/dialogs/menu_op/focusClose (DAT:chopexec)
    0.012 ms  76191 cook     /ui/dialogs/menu_op/combinedFocus (CHOP:logic)
    0.003 ms       misc   Frame Start Global Maintenance
    0.002 ms  76192 cook    Chain Start  /local/time/clock (CHOP:null)
    0.004 ms  76192 cook      /local/time/scrubber (CHOP:switch)
    0.004 ms  76192 cook       /local/time/independent (CHOP:switch)
    0.006 ms  76192 cook        /local/time/cframe (CHOP:speed)
    0.001 ms       misc   CHOP_Beat /local/master_beat (CHOP:beat)
    0.007 ms  76190 cook    Chain Start  /local/master_beat (CHOP:beat)
    0.004 ms       misc   Selective/Force Cook Check /ui/dialogs/mainmenu/fps1/null1 (CHOP:null)
    0.009 ms  76191 cook    Chain Start  /ui/dialogs/mainmenu/fps1/count1 (CHOP:count)
    0.002 ms       misc   Selective/Force Cook Check /ui/dialogs/mainmenu/null2 (CHOP:null)
    0.009 ms  76192 cook    Chain Start  /ui/dialogs/mainmenu/select2 (CHOP:select)
    0.006 ms  76193 cook      /ui/dialogs/mainmenu/perform1 (CHOP:perform)
    0.001 ms       misc   Selective/Force Cook Check /ui/dialogs/mainmenu/null3 (CHOP:null)
    0.003 ms  76192 cook    Chain Start  /ui/dialogs/mainmenu/select1 (CHOP:select)
    0.002 ms       misc   Selective/Force Cook Check /ui/dialogs/mainmenu/cookrate (CHOP:null)
    0.003 ms  76192 cook    Chain Start  /ui/dialogs/mainmenu/select3 (CHOP:select)
    0.002 ms       misc   Selective/Force Cook Check /ui/dialogs/mainmenu/gpuUsage/null1 (CHOP:null)
    0.003 ms  76192 cook    Chain Start  /ui/dialogs/mainmenu/gpuUsage/replace1 (CHOP:replace)
    0.003 ms  76192 cook      /ui/dialogs/mainmenu/gpuUsage/in1 (CHOP:in)
    0.012 ms       misc   CHOP_Beat /ui/dialogs/timeline/transport/musiccode/beat (CHOP:beat)
    0.012 ms  3844 cook    Chain Start  /ui/dialogs/timeline/transport/musiccode/beat (CHOP:beat)
    0.003 ms       misc   Selective/Force Cook Check /ui/dialogs/keyframer/timeline/attributes (CHOP:null)
    0.004 ms  76191 cook    Chain Start  /ui/dialogs/keyframer/timeline/replace1 (CHOP:replace)
    0.021 ms  76191 cook      /ui/dialogs/keyframer/timeline/constant2 (CHOP:constant)
    0.003 ms  76191 cook       /ui/dialogs/keyframer/timeline/merge1 (CHOP:merge)
    0.005 ms  76191 cook        /ui/dialogs/keyframer/timeline/merge2 (CHOP:merge)
    0.011 ms  76191 cook         /ui/dialogs/keyframer/timeline/select2 (CHOP:select)
    0.022 ms  76191 cook          /ui/dialogs/keyframer/timeline/info1 (CHOP:info)
    0.018 ms  76191 cook           /ui/dialogs/keyframer/local/animation1/keyframe (CHOP:keyframe)
    0.002 ms  76191 cook            /ui/dialogs/keyframer/local/animation1/in (CHOP:in)
    0.009 ms  76191 cook             /ui/dialogs/keyframer/local/animation1/index (CHOP:timeline)
    0.003 ms       misc   Selective/Force Cook Check /ui/dialogs/menu_op/family/active (CHOP:null)
    0.000 ms       misc   MIDI Event Check /sys/devices/midi/kaoss/mapmaster1/midiinmap (CHOP:midiinmap)
    0.000 ms       misc   MIDI Event Check /sys/devices/midi/peavey/mapmaster1/midiinmap (CHOP:midiinmap)
    0.000 ms       misc   MIDI Event Check /sys/devices/midi/bcf2000/mapmaster1/midiinmap (CHOP:midiinmap)
    0.000 ms       misc   MIDI Event Check /sys/devices/midi/bcr2000/mapmaster1/midiinmap (CHOP:midiinmap)
    0.000 ms       misc   MIDI Event Check /sys/devices/midi/oxygen8/mapmaster1/midiinmap (CHOP:midiinmap)
    0.000 ms       misc   MIDI Event Check /sys/devices/midi/motormix/mapmaster1/midiinmap (CHOP:midiinmap)
    0.000 ms       misc   MIDI Event Check /sys/devices/midi/xsession/mapmaster1/midiinmap (CHOP:midiinmap)
    0.000 ms       misc   MIDI Event Check /sys/devices/midi/eclernuo4/mapmaster1/midiinmap (CHOP:midiinmap)
    0.000 ms       misc   MIDI Event Check /sys/devices/midi/nanoKONTROL/mapmaster1/midiinmap (CHOP:midiinmap)
    0.001 ms       cook   Propagating changes to other nodes /local/midi/template/mapmaster1/midiout (CHOP:midiout)
    0.006 ms  76196 cook   Chain Start  /local/midi/template/mapmaster1/midiout (CHOP:midiout)
    0.000 ms       misc   MIDI Event Check /local/midi/template/mapmaster1/midiinmap (CHOP:midiinmap)
    0.000 ms       misc   Process Value Changes
    0.000 ms       misc   Process Value Changes
    0.000 ms       misc   Process Value Changes
    0.000 ms       misc   Process Value Changes
    0.000 ms       misc   Process Value Changes
    0.000 ms       misc   Process Value Changes
    0.000 ms       misc   Process Value Changes
    0.000 ms       misc   Process Value Changes
    0.000 ms       misc   Process Value Changes
    0.000 ms       misc   Process Value Changes
    0.000 ms       misc   Process Value Changes
    0.000 ms       misc   Process Value Changes
    0.000 ms       misc   Process Value Changes
    0.002 ms  76190 cook  Chain Start  /ui/dialogs/keyframer/timeline/timebar (CHOP:select)
    0.006 ms  76190 cook    /ui/dialogs/keyframer/timeline/mode (CHOP:switch)
    0.007 ms  76190 cook     /ui/dialogs/keyframer/timeline/timebar1 (CHOP:select)
    0.002 ms  76191 cook      /ui/dialogs/timeline/finalindex (CHOP:null)
    0.002 ms  76191 cook       /ui/dialogs/timeline/replace1 (CHOP:replace)
    0.007 ms  76191 cook        /ui/dialogs/timeline/getframe (CHOP:select)
    0.013 ms  76191 cook  Chain Start  /ui/dialogs/palette/palette/list/text/scrollbar (COMP:container)
    0.032 ms       panel   Update Panel /ui/dialogs/palette/palette/list/text/scrollbar (COMP:container)
    0.004 ms  76191 cook     /ui/dialogs/palette/palette/list/text/text/null1 (CHOP:null)
    0.005 ms  76191 cook      /ui/dialogs/palette/palette/list/text/text/constant1 (CHOP:constant)
    0.041 ms  76192 cook  Chain Start  /ui/dialogs/mainmenu/fps1/textbg (COMP:text)
    0.017 ms  76191 cook    /ui/dialogs/mainmenu/fps1/eval1 (DAT:eval)
    0.003 ms  76191 cook     /ui/dialogs/mainmenu/fps1/limit1 (CHOP:limit)
    0.002 ms  76191 cook      /ui/dialogs/mainmenu/fps1/lag1 (CHOP:lag)
    0.005 ms  76191 cook       /ui/dialogs/mainmenu/fps1/envelope1 (CHOP:envelope)
    0.004 ms  76191 cook        /ui/dialogs/mainmenu/fps1/select2 (CHOP:select)
    0.008 ms  76191 cook         /ui/dialogs/mainmenu/fps1/perform1 (CHOP:perform)
    0.009 ms       panel   Update Panel /ui/dialogs/mainmenu/fps1/textbg (COMP:text)
    0.008 ms  76215 cook  Chain Start  /ui/dialogs/timeline/currentframe (COMP:container)
    0.017 ms       panel   Update Panel /ui/dialogs/timeline/currentframe (COMP:container)
    0.004 ms  76192 cook     /ui/dialogs/timeline/framepixel (CHOP:null)
    0.003 ms  76192 cook      /ui/dialogs/timeline/limit2 (CHOP:limit)
    0.019 ms  76192 cook       /ui/dialogs/timeline/math3 (CHOP:math)
    0.005 ms  76217 cook  Chain Start  /ui/dialogs/timeline/framebar (COMP:container)
    0.005 ms       panel   Update Panel /ui/dialogs/timeline/framebar (COMP:container)
    0.093 ms  76189 cook  Chain Start  /ui/dialogs/timeline/transport/timecode/bg (TOP:text)
    0.012 ms  76189 cook    /ui/dialogs/timeline/transport/timecode/stream (DAT:eval)
    0.006 ms  76189 cook     /ui/dialogs/timeline/transport/timecode/select1 (DAT:select)
    0.018 ms  76189 cook      /ui/dialogs/timeline/transport/timecode/chopto1 (DAT:chopto)
    0.090 ms  76189 cook  Chain Start  /ui/dialogs/timeline/transport/frame/bg (TOP:text)
    0.008 ms  76189 cook    /ui/dialogs/timeline/transport/frame/stream (DAT:eval)
    0.014 ms  76189 cook     /ui/dialogs/timeline/transport/frame/eval1 (DAT:eval)
    0.079 ms   244 cook  Chain Start  /project1/render1 (TOP:render)
    0.027 ms       render   Prepping Nodes For Render /project1/render1 (TOP:render)
    0.006 ms    77 cook     /project1/geo1/out1 (POP:out)
    0.005 ms    77 cook      /project1/geo1/in1 (POP:in)
    0.050 ms  3276 cook       /project1/copy1 (POP:copy)
    0.073 ms  3285 cook        /project1/sprinkle1 (POP:sprinkle)
    0.119 ms  3281 cook         /project1/noise1 (POP:noise)
    0.008 ms  3330 cook          /project1/lookup2 (CHOP:lookup)
    0.006 ms  3329 cook           /project1/math1 (CHOP:math)
    0.007 ms  3329 cook            /project1/timeline1 (CHOP:timeline)
    0.002 ms  3330 cook          /project1/lookup1 (CHOP:lookup)
    0.008 ms       render   Rendering /project1/render1 (TOP:render)
    0.001 ms       render    Sorting Geometries /project1/render1 (TOP:render)
    0.001 ms       render    Updating Camera View /project1/render1 (TOP:render)
    0.093 ms       render    Pre-Render /project1/render1 (TOP:render)
    0.012 ms     1 render    Rendering a group of SOP(s) /project1/render1 (TOP:render)
    0.003 ms       render     Setting Up Material /project1/render1 (TOP:render)
    0.009 ms       gfx     Enabling Phong Shader
    0.012 ms     1 render     Rendering Primitive Batch(s) /project1/geo1/out1 (POP:out)
    0.000 ms       render   Post-Render /project1/render1 (TOP:render)
    0.282 ms       panel  Laying out panel /ui/dialogs/timeline (COMP:container)
    0.004 ms       misc  Draw All TouchDesigner Windows
    1.615 ms       misc   Rendering a Window
  173.692 ms       gfx    Preparing frame for presentation
    0.038 ms       misc  Presenting Windows
    0.009 ms    12 cook  Forcing nodes to cook at end of frame
    0.000 ms       misc   Garbage collecting GPU memory
    0.022 ms       misc   Frame End Global Maintenance
    0.000 ms       misc   Check For Redraws /sys/TDTox/popViewer/graph_/opview (TOP:opview)
    0.000 ms       misc   Check For Redraws /ui/dialogs/palette/palette/list/loader/tmp/icon (TOP:opview)
    0.009 ms       misc   Check Execute DAT /sys/TDResources/threadManager/ThreadManagerExecute (DAT:execute)
    0.007 ms  76191 cook    Chain Start  /sys/TDResources/local/time/clock (CHOP:null)
    0.017 ms  76191 cook      /sys/TDResources/local/time/scrubber (CHOP:switch)
    0.008 ms  76191 cook       /sys/TDResources/local/time/independent (CHOP:switch)
    0.016 ms  76191 cook        /sys/TDResources/local/time/cframe (CHOP:speed)
    0.556 ms       script    /sys/TDResources/threadManager/ThreadManagerExecute /sys/TDResources/threadManager/ThreadManagerExecute (DAT:execute)
    0.002 ms       misc   Check Execute DAT /sys/TDResources/TDAppLogger/execute1 (DAT:execute)
    0.007 ms       script    /sys/TDResources/TDAppLogger/execute1 /sys/TDResources/TDAppLogger/execute1 (DAT:execute)
    0.001 ms       misc   Check Execute DAT /sys/TDResources/TDSysLogger/execute1 (DAT:execute)
    0.004 ms       script    /sys/TDResources/TDSysLogger/execute1 /sys/TDResources/TDSysLogger/execute1 (DAT:execute)
    0.001 ms       misc   Check Execute DAT /sys/TDResources/threadManager/logger/execute1 (DAT:execute)
    0.003 ms       script    /sys/TDResources/threadManager/logger/execute1 /sys/TDResources/threadManager/logger/execute1 (DAT:execute)
    4.187 ms       frame  Total CPU Processing Time
  175.728 ms       frame  Total Window Redraw Time
    0.492 ms       frame  Unaccounted Frame Time
  178.146 ms       frame  Total Frame Time
                16 misc  Active Ops
                79 misc  Total Ops

Thanks for sharing the file, so taking a look at it, the very slow operation you’re doing is the sprinkle volume (in volume mode it’s currently tracing a lot of rays and similarly to the ray POP not very optimized, it’s on our list though), and since the sprinkle is after an animated POP, the noise, it’s being recomputed every frame.

The copy POP which was my initial guess is the second most expensive but not that expensive in comparison.

See attached for much better performance, swapping the order of the POPs.

SprinkleColorNoiseVolume_cheaper.toe (4.5 KB)

One way to troubleshoot issues/optimize, you can middle click on each POP and look at GPU cook time, you can also try the probe palette component (in tools) in GPU mode which will give you an overview, see screenshot

The performance monitor really only gives you information about CPU usage, not GPU, so won’t be super useful with POPs.

We’ll update Optimize - Derivative to emphasize the above

I hope that helps!

1 Like