You have probably noticed that the CPU consumption in Usine can be different than those indicated by the system. In fact the CPU in Usine is calculated as time amount not the average of all CPU cores.
Usine calculate patches by “Blocs” (you can choose in the setup). For example every 128 samples (by default) which is equivalent to 3 millisecond. The CPU consumption is set as the total calculation time of patches x100 divide by the total available time (here 128 samples = 3ms).
Here is an example:
1) We have a single big patch which takes 1ms to be calculated. The Usine’s CPU will indicate (1ms x 100)/3ms = 33%. On the other hand, if on a 4 cores CPU your system will calculate something like 33%/4 = 8%. But it has no sense because only one core is working and 3 are sleeping.
2) Imagine now we have a huge patch and a slow machine. The patch takes 4ms to be calculated, so more time than the bloc duration (3ms). Usine will indicate 100% CPU (133% in fact) which is totally normal because the patch takes more than 3ms available. A contrary, your system will indicate, on 4 cores CPU, something like 100%/4 = 25%. One more time it has no sense because because even if the CPU average is 25% the patch itself can’t be calculated in the bloc duration (3ms). The CPU indicates 25% but the audio chain is totally overloaded… The system indicator doesn’t reflect the real CPU available.
3) We take 4 big patches on 4 racks. Each patch takes 1ms to be calculated but they are dispatched on 4 cores in parallel, so the total calculation time will be equal to 1ms. Usine will indicate (1ms x 100)/3ms = 33%. The total CPU load is exactly the same than in the example 1). In other words, 4 patches will take the same amount of CPU than 1 patch because of the 4 CPU cores and the parallel calculation.
Finally, in Usine the CPU indicates the real time you use to calculate patches, not the average including sleeping cores. It’s more like in DSP card (ie Universal Audio UAD) and much more helpful to know the real state of your system.
Hollyhock seems to charge the CPU much more than Usine 5. Most of the CPU load is used for graphic rendering which is hardware accelerated. So a good graphic card can reduce CPU significantly. The new graphic engine is greedy, because of the new zoom, scale features and all layouts are drawn as vectorized pictures unlike bitmap in most of other softs. Now, and it’s the most important, it doesn’t affect the audio chain because the graphic consumption is adapted permanently to audio charge: the more you have audio to process, the less you have graphic quality and refresh rate.
Lets make a small test: Take the demo patch Physics.pat in the library and put 2 instances of the patch in 2 different racks. Turn the audio engine ON and take a look in the resources monitor. You’ll notice that Usine takes quite a large quantity of available CPU (30% on my machine). But if you look more precisely you’ll notice that the charge is distributed equally on all the available core of the CPU. It’s a very good point: Usine takes advantage of the CPU power to give the best render quality. Why have a huge CPU if we only use 5% of it ? Usine does its job, use the maximum power of the CPU to give you the maximum of visual quality without affect the audio core.
Now hide all the racks, and all panels like master and synchro, the consumption will decrease to let say 2% (on my machine). So the audio engine only use 2% of the CPU and you realize that Usine’s audio engine is not greedy at all: 2% for 2 physical engine… which is not so much?
Finally, if you encounter some troubles try to hide some controls to reduce the CPU load.
Buffer size: The buffer size of your Sound Card , in simple words, this buffer is the small amount of memory that is used to store audio data in your stream, before it is processed by the digital to analog converters in your audio hardware and outputted though your speakers.
Bloc size: Usine calculate patches by “Blocs” . For example every 128 samples (by default) which is equivalent to 3 millisecond.
Circular routings: rack 1 go in rack 2 and rack 2 go back in rack 1: Usine add a latency of 1 bloc-size, but only for one of the rack, not the both. In all cases, the latency added will not exceed a bloc size.
The buses: Usine add a latency of 1 bloc size. In all cases, the latency added will not exceed a bloc size.