CUDA, OpenCL, Mercury Playback Engine, and Adobe Premiere Pro
[UPDATE: For details of what was new regarding CUDA and OpenCL processing in Adobe Premiere Pro CS6, see this page. If you’re using Premiere Pro CS6 and later, note that nearly everything said below about CUDA also applies to OpenCL.]
[UPDATE: For details of what was new regarding CUDA processing in Adobe Premiere Pro CS5.5, see this page.]
A few weeks ago, I wrote a forum post to try to clarify some things about CUDA, the Mercury Playback Engine, and what it all means for Adobe Premiere Pro. I wrote this as a forum post because I wanted to invite questions and conversation. But, as forum threads do, it got a little messy, so I thought that I should consolidate the information here.
If you want to ask a question about this subject, please do so on the forum thread, not on this blog post. It’s very difficult to have a conversation in the comments of a blog post.
What is the Mercury Playback Engine, and what are CUDA and OpenCL?
Mercury Playback Engine is a name for a large number of performance improvements in Adobe Premiere Pro CS5 and later. Those improvements include the following:
- 64-bit application
- multithreaded application
- processing of some things using CUDA (and OpenCL in Premiere Pro CS6)
Everyone who has Premiere Pro CS5 or later has the first two of these. Only the third one depends on having a specific graphics card.
CUDA is a technology (architecture, programming language, etc.) for a certain kind of GPU processing. CUDA is an Nvidia technology, so only Nvidia cards provide it. OpenCL is a technology that is similar in purpose to CUDA. OpenCL features are provided by many graphics cards, including ATI/AMD cards.
Confusingly—because of one of our own early videos that was unclear—a lot of people think that Mercury just refers to CUDA/OpenCL processing. This is wrong. To see that this was not the original intent, you need look no further than the project settings UI strings Mercury Playback Engine GPU Acceleration and Mercury Playback Engine Software Only, which would make no sense if Mercury meant “hardware” (i.e., CUDA/OpenCL).
What is required for Premiere Pro to use CUDA/OpenCL processing?
The official and up-to-date list of the cards that provide the CUDA/OpenCL processing features is here:
Adobe Premiere Pro system requirements
Some of the cards on that list are only enabled if you have the recent updates. Go here to read about the most recent updates for your version.
If you don’t have one of these cards, you can still use Premiere Pro; you just won’t get the advantages of processing with CUDA/OpenCL.
On Mac OS, OpenCL processing features of Premiere Pro CS6 require Mac OSX v10.7 or later.
Dennis Radeke gives the results of side-by-side tests with various Quadro cards in an article on his blog.
What does Premiere Pro accelerate with CUDA/OpenCL?
Here’s a list of things that Premiere Pro CS5 and later can process with CUDA:
- some effects (complete list at the bottom of this post)
- scaling (details here)
- blending modes
- color space conversions
Premiere Pro CS5.5 and later can process even more things, listed on this page.
Premiere Pro CS6 can use OpenCL to process the same features, with the exception of four effects: Basic 3D, Gaussian Blur, Fast Blur, and Directional Blur.
It’s worth mentioning one set of things that Premiere Pro doesn’t process using CUDA/OpenCL: encoding and decoding.
A common misconception is that CUDA/OpenCL processing is only used for rendering for previews. That is not true. CUDA/OpenCL processing can be used for rendering for final output, too. See this page for details about what rendering is.
Whether a segment of a sequence gets a red or yellow render bar is influenced by whether the project is set to use CUDA/OpenCL processing (i.e, whether the project’s Renderer setting is Mercury Playback Engine GPU Acceleration or Mercury Playback Engine Software Only). See this page for details.
Note that whether a frame can be processed by CUDA/OpenCL depends on the size of the frame and the amount of RAM on the graphics card (VRAM). This article gives details about that, toward the bottom.
Processing with CUDA/OpenCL doesn’t just mean that things are faster. In some cases, it can actually mean that results are better, as with scaling. See this article for details.
For export, scaling with CUDA/OpenCL is always at maximum quality, regardless of quality settings. (This only applies to scaling done on the GPU.) Maximum Render Quality can still make a difference with GPU-accelerated exports for any parts of the render that are processed on the CPU. Over time, we are working on reducing the list of exceptions to what can be processed on the GPU. For an example of a limitation that can cause some rendering to fall back to the CPU, see this article: “Maximum dimensions in Premiere Pro CS5”.
When rendering is done on the CPU with Maximum Render Quality enabled, processing is done in a linear color space (i.e., gamma = 1.0) at 32 bits per channel (bpc), which results in more realistic results, finer gradations in color, and better results for midtones. GPU-accelerated processing is always performed in a 32-bpc linear color space. To have results match between CPU rendering and GPU rendering, enable Maximum Render Quality.
Note: There are two places to enable or disable Maxium Render Quality—in the sequence settings and in the export settings. The sequence setting only applies to preview renders; the export setting (which defaults to the sequence setting) overrides the sequence setting.
Why are only some video cards supported?
There’s a lot of testing work that goes into making sure that a given card works without problems and actually provides the features in a way that we can support. We don’t want to say that people can use any card and then have some cards cause problems. We learned this the hard way on the After Effects side, where a lot of problems arise from people trying to use the OpenGL features with cards that we haven’t been able to test against and verify.
If there’s a specific card that you want us to add to the list of cards that Premiere Pro can use for CUDA/OpenCL processing, then let us know with a feature request.
What about OpenCL?
As we were beginning the work for Premiere Pro CS5, OpenCL wasn’t far enough along for us to use it for the Mercury Playback Engine.
Premiere Pro CS6 added the ability to process many features with OpenCL. See this page for details.
What about OpenGL?
OpenGL is a different technology that is implemented through GPUs. It is not exclusive of CUDA/OpenCL; it’s a different thing altogether, and a card that uses CUDA/OpenCL will also use OpenGL for some things. OpenGL is used to do such things as render 3D and accelerate drawing of items to the screen. After Effects uses it some. Premiere Pro, not so much.
What about Mercury in After Effects?
The term Mercury Playback Engine refers to Premiere Pro. It has nothing to do with After Effects. After Effects CS5 and later is a 64-bit application, and it has been multithreaded for a long time, so those improvements are there. Only the ray-traced 3D renderer in After Effects CS6 uses CUDA (as do a few third-party plug-ins).
How can I make Premiere Pro faster?
This page is a good place to start.
What effects are GPU-accelerated in Premiere Pro?
To show in the Effects panel only effects that can be accelerated by CUDA/OpenCL, click the Accelerated Effects icon at the top of the Effects panel.
Here’s a list of the effects and transitions that can be accelerated by CUDA in Adobe Premiere Pro CS5 (5.0.3):
- Alpha Adjust
- Basic 3D
- Black & White
- Brightness & Contrast
- Color Balance (RGB)
- Color Pass
- Color Replace
- Drop Shadow
- Fast Color Corrector
- Feather Edges
- Gamma Correction
- Garbage Matte (4, 8, 16)
- Gaussian Blur
- Horizontal Flip
- Luma Corrector
- Luma Curve
- Proc Amp
- RGB Curves
- RGB Color Corrector
- Three-way Color Corrector
- Track Matte
- Ultra Keyer
- Video Limiter
- Vertical Flip
- Cross Dissolve
- Dip to Black
- Dip to White
For a list of additional GPU-accelerated effects in Premiere Pro CS5.5, see this page.