Copy link to clipboard
Copied
While trying to optimize my workflow, found an interesting thing - order of filters/effects heavily affects rendering speed.
CUDA render enabled:
option #1
- CUDA-accelerated and non-accel effects are placed in the same adj layer
- render time ~70min (as slow as Mercury "Software only" renderer)
option #2
- CUDA-accelerated and non-accel effects are placed in separate layers
- "GPU layer" is on top of "CPU-layer"
- render time ~7min (yes, 10 times faster!)
option #3 same as #2, but the order of adj layers are reversed: "CPU layer" is on top of "GPU-layer"
- render time ~70min again
In case of the effects applied directly to the clip, without adj layers, behavior is similar: rendering is fast only if all accel effects placed after non-accel effects. If they are mixed in any ways - the speed drops to "Software only" level again.
So, I'm wondering - is it a bug or a hidden / undocumented "feature"?
Also would be interesting to know, is it works the same way on different Hardware & Software configs.
I checked CC2015.3 and CC2018, both work this way, for both 4k and 1080p.
Test system:
Win7 x64
Core 2 Quad 3Ghz
8GB RAM
GTX 1060 3GB, driver 419.67
1920x1080 display
It took a bit of digging but as it turns out you are correct! An adjustment layer itself is treated as a CPU (non-accelerated) effect if any of the effects in it are non-accelerated, even if the effect order within the layer should allow GPU processing of some of the effects in the layer. As a workaround you can separate the accelerated effects into their own adjustment layer, which will allow them to be processed on the GPU as expected.
Obviously this isn't ideal and I'll open a bug for it.
Kyle
Copy link to clipboard
Copied
Fascinating post. I don't use AL's much so I'll set up a test for this next week.
Neil
Copy link to clipboard
Copied
Folks, has anyone tested the issue, any results, positive or negative? If it's a bug, the more statistics the better.
Meanwhile, I've tested OpenCL renderer instead of CUDA (all on GTX1060). Sure, absolute numbers are different, but relative performance is the same - about 10 times difference on my setup.
Copy link to clipboard
Copied
Haven't had a chance yet, will try to test this today or tomorrow.
Neil
Copy link to clipboard
Copied
Premiere will process all effects on the CPU up to the last CPU effect in the effect stack. This was done to prevent frequent copying to and from GPU memory (which has been traditionally slow and can quickly saturate the PCI-E bus). This may be something that gets revisited in the future.
Kyle
Copy link to clipboard
Copied
Kyle, thanks for the insight. That explains a lot. But I can see one inconsistency in the adjustment layer processing.
Seems, it is processed soley by CPU regardless of where in the effect stack a "cpu-effect" is placed. At the beginning or at the end - no difference, adj layer always renders at SW-only speed.
But, if the same stack is applied to the clip itself, we have an expected speed difference (~10 times for my case).
Could it be a bug or it's just another flaw in architecture? What do you think?
Copy link to clipboard
Copied
It took a bit of digging but as it turns out you are correct! An adjustment layer itself is treated as a CPU (non-accelerated) effect if any of the effects in it are non-accelerated, even if the effect order within the layer should allow GPU processing of some of the effects in the layer. As a workaround you can separate the accelerated effects into their own adjustment layer, which will allow them to be processed on the GPU as expected.
Obviously this isn't ideal and I'll open a bug for it.
Kyle
Copy link to clipboard
Copied
So, as a summary, until Adobe will fix the bug (or change the processing logic in one way or another),
below are recommendations how to get maximum use of a dedicated GPU and thus make the rendering faster:
- Ideally don't use CPU-effects at all (keep a timeline "yellow"). This is maximum speed mode.
If you can't avoid using CPU-effects:
- Don't mix CPU and GPU effects in the same adjustment layer. Doing so will cause rendering in "software only" mode (very slow). Instead separate GPU and CPU effects in two different layers. Put "GPU-layer" on top of a "CPU-layer".
This way GPU-acceleration will be actually working.
- In case of applying effects directly to a clip without adjustment layers: organize effects in a way that all GPU-effects are applied after CPU-effects.
Here "GPU-effect" means GPU-accelerated effect, when added it makes a timeline "yellow",
"CPU-effect" - any that makes a timeline "red".
Copy link to clipboard
Copied
Cool post! Thanks.
A couple of documenting screen shots would be great, and can you specify which effects you test with? Also media.
thanks very much
pj