Threads and Substeps
Simulation threads, substeps, frame rate, CPU load, and simulation speed are important variables in conjunction with RealFlow. Let's clear up the relations between all these terms.
Simulation Threads
This number represents your computer's number of CPU's or cores:
- If your computer supports hyper-threading you will see a higher value.
- Threads can be adjusted for each scene individually under → Simulation Options > General.
Â
Â
Under some circumstances you will notice that RealFlow uses only a fraction of the available cores and CPU load is just around 10%. This is typically the case with low-resolution fluid simulations:
- RealFlow requires some time to split the simulation into threads.
- With just a few thousands of particles it is normally better to reduce the number of threads.
- The more particles, the better the computer's performance.
- In simulations with several millions of particles, all threads are used and CPU load is around 95%.
Â
Another thing you will observe is a performance drop at the beginning of a simulation or between two frames:
- When a simulation starts RealFlow prepares lots of things and these processes are all single-threaded.
- Saving simulation data is also single-threaded and hardly uses any CPU power.
Â
With more than 32 threads you will hardly see any performance boosts, because computer systems do not scale linearly and there is always a limit.
FPS Rate and Substeps
A common question is why simulations with a high FPS rate require less substeps? The answer is precision. The length of a single substep is calculated as
lengthsubstep = 1 / ( FPS rate * substeps )
In RealFlow, time is not a continuous stream, but subdivided into chunks. Between these chunks, a particle's or object's velocity is considered constant. This gives a very good approximation and the more substeps (= time chunks), the better the representation of the real behaviour.
An example:
- Let's assume you have a FPS rate of 25 and 300 substeps.
- According to the formula the length of a single substep is 0.0001333 s.
- This is a very accurate subdivision and gives precise results.
Â
Now, let's use a FPS rate of 400 and see what happens:
lengthsubstep = 1 / ( 400 * 300 )
lengthsubstep = 0.0000083 s
- So we have a much higher precision:
0.0000083 s vs. 0.0001333 s
Â
In order to get the same precision as before, substeps can be decreased:
- In this example, the FPS rate has been increased by a factor of 16.
- Therefore, the number of substeps can be calculated as
300 / 16 = 19
- So with 19 substeps and 400 fps we get the same level of precision as with 300 substeps and 24 fps.