Performance Optimization in Heavy Patches

  • Hey all, apologies if a similar question is buried in the forum somewhere, but didn't find anything like it at a glance so here goes:

    I'm working on a really heavy patch for a new project - essentially it's a MIDI video mixer for Zoom performances that pulls video from Zoom, routes it through some MIDI controlled effects, and then sends it back to Zoom/OBS.   Can do some other stuff like save/recall presets through MIDI control as well.  I think I've done a pretty good job optimizing the patch but there are a LOT of actors between all of the different functions.  It's mostly calculators / control watchers + senders, and other (assumedly) low impact stuff.  Probably 3K or so actors in the patch right now.  So even with all effects bypassed the sheer volume of actors is causing me to drop frames...without disabling user actors altogether I'm hovering around 18-20 fps with a target of 30.   Unfortunately the save/recall preset function I've built doesn't work optimally unless all user actors are enabled, so if I were to disable unused actors to improve performance I think I'd have to drop the save/recall function which bums me out.

    With all that said, I don't think my CPU (Intel 10900k @ 5.1ghz all 10 cores) or GPU (AMD 5700xt 8gb) are operating at full capacity when running this patch.  Temps on the CPU are in the 40C range while running Izzy - 30C is idle and 80C is full-tilt on a benchmark tool, for reference.  The GPU is hardly taxed at all.  The load meter on Izzy is generally in the 40s as well - usually I notice that the frame rate starts to drop around 42-43% load.  So I'm wondering if there's a way to use more of my computer's bandwidth to keep my framerate up.  Here are some things I've tried:

    • Renice-ing Izzy to full priority, didn't seem to help (I'm using Catalina as my OS by the way).  
    • Cutting background applications, didn't help much either.  
    • Scaling resolution back, doesn't change much.  I'm fully convinced it's just the volume of control watchers / senders and the like.   As a test I made a user actor in a new scene with a control watcher + sender, copied it a few hundred times, and got a similar effect - frames dropped to 16fps or so with no video/image processing at all.

    I'm not savvy enough to know whether this is a wholly ignorant question, but I'm curious to know if it's possible at the hardware/software level to make Isadora utilize more of my computer's resources and improve performance.  When rendering files in DaVinci Resolve or Blender I know the CPU/GPU is working a lot harder, wondering if I could replicate that load in Isadora or if it would even make a difference in my case.  

    Or maybe the answer is just "stop putting 3K actors in a single scene you ********"

  • Tech Staff

    Sorry, I was writing a response to this yesterday and I thought I sent it off but I guess I rebooted to another partition without pressing send.

    @will said:

    stop putting 3K actors in a single scene

    Yes, I think putting thousands of actors in a single scene may be the culprit...

    That being said, if you open a ticket using the link in my signature and send us your gnarliest, most populated patch, I can take a look at it and see if I have any optimization ideas. Additionally, with your permission, we could use it internally as a test file and put in a feature request to see if there's anything that we can do code-wise to make patches with thousands of actors per scene more viable.

    Best wishes,


  • Tech Staff

    I will add, that you may be able to restructure some of your heavy User Actors, so that there is an light outer layer and an internal User Actor that contains a "User Actor On/Off" allowing the heavy part to be fully shut off when not in use, but the lighter outer level could still provide your preset save/recall functionality.
    You pass the on/off thru from the outer most level of the user actor into shutdown the inner heavy part, and also use this state to route/bypass any data that needs to run through.

    This is a quick example of the structure I am suggesting. (its just an example, and needs to be adjusted to the actual functionality you are encapsulating).
    Using this method I have been able to create huge files with unbelievable amounts of functionality that can be turned on/off as needed.