Why doesn't enabling both CPU & GPU increase rendering speed by a significant amount? (DAZ)
Why doesn't enabling both CPU & GPU increase rendering speed by a significant amount? (DAZ STUDIO)
This is so bizarre. I did some tests, and if I enable both CPU & GPU rendering, the increase in speed is not even noticeable.
I have an i7-9900k and a GTX 980 TI. You're telling me that an i7-9900k cpu would offer NO improvement in rendering speed, if used on top of a GTX 980? That's absurd.
Post edited by vozolgant on

Comments
Not enough that would be noticeable, no. Are you familiar with how long it takes to render a complex scene on CPU only?
It is not. Parallel processing never leads to a linear increase in performances. To use a real life analogy, if 1 person needs one hour to dig a hole, will 3600 persons dig it in 1 second? The two "processors" have to exchange information, to synchronize, they are competing to access the data, etc, and using two "processors" will never half the time. Depending on the problem, it may even may lead to worst performances.
The maximum you could gain by using both a CPU and a GPU is a factor 2 (if initially the processing times on GPU and CPU are identical, which is obviously not true), but most probably it will be much lower and possibly the gain will be null or negative.
So people probably did not try to program a rendering using both GPU and CPU (and this is quite reasonnable).
I measured this when I had a 750ti and a Phenom II X6: The CPU contributed a significant 15%. (compared to GPU only) (N.B. This was a much earlier version of Iray)
With a 3060RTX and an AMD 5800X: The CPU contributes around 4% at best and is highly scene dependent. (There are some scenes where the CPU/GPU renders were the same as the GPU only render times.)
Rendering on GPU and CPU are two totally different beasts. The GPU consists of a LOT of matrix cores. The can do matrix operations extremely fast, but that's basically it. Ray tracing is, mathematically, a set of matrix operations, that can also be parallelized a lot (each light ray is one "process", so e.g. a RTX3090 can process 10496 rays in parallel). A typical desktop CPU has about six to eight cores, that are also not optimized for the mathematics behind ray tracing.
In addition, the light rays interact, with materials and the geometry having that materials. Geometry, lights, materials all have to be loaded into memory. On an NVidia card, all is loaded into the VRAM of the card. With CPU renders, these informations have to be kept in main memory. So if you run CPU plus GPU renders, you would then need to keep those data twice. Plus, CPU and GPU will have to talk to each other who is doing what. An additional speed limit is the memory bandwidth. On a typical 64bit CPU, the memory connection is 64bit or 128bit (on some boards and chipsets). On a typical GPU, the memory is connected with a lot more parallel "lanes". A RTX3090 is connected with 384 bits in parallel, so transfer from/to memory is 3 to 6 times faster.
All the CPU is usually contributing is the preparation of the scene for the GPU, i.e. sorting out the geometry, lights, materials, ambient occlusions etc. It kind of does a rough optimization, then sends the data to the GPU and stays idle until receiving the result.
What would really be a nice feature is an IRay mode where the rendering process is not limited to the GPU VRAM, but can also utilize the main memory (at a price, because of the different speed limits). But I suppose that is not in the (commercial) interest of NVidia.
All of these are great explanations.
There's also the scheduling algorithm the renderer uses, which is not like a full-fledged OS scheduling algorithm that generates "affinity" for the faster hardware. So the GPU threads end up waiting a significant amount of time waiting for the CPU threads to finish, so a pixel can be averaged. It's like when you were a kid and the job takes longer because your mom made you let your little brother "help".
Redacted