Continued from page 2
Adding It All Up
Getting back to GPU compute. The subject can be divided in three ways—on the APIs available. On the desktop market Nvidia has its proprietary CUDA parallel compute platform. AMD on the other hand has been strong in supporting OpenCL, which Apple invented and then shared as an open-standard. And now we have Vulkan. Here’s a way to characterize all three:
- CUDA — hardware proprietary (only works with NVIDIA GPUs), brings high performance parallel computing to a specific vendor’s GPUs across multiple platforms.
- OpenCL — fully open standard based API bringing high performance parallel computing to both GPUs, CPUs, DSPs, and other hardware. It’s strength is its heterogeneous capacity. A developer can write a program that uses OpenCL to avail itself across a mixture of both GPU and CPU for maximum parallel compute
- Vulkan — fully open standard based API for graphics and compute. At first glance it may appear Vulkan combines the attributes of OpenGL and OpenCL. But Vulkan isn’t heterogeneous and therefore can’t use or combine with CPUs alongside GPUs.
As Neil Trevett stated in our call, “the tight integration of graphics and compute under one API is very powerful for some types of applications.” The key word is “types” as each API above as a compute-capable API offer difference strengths and weaknesses. As Trevett explained, “Companies like Adobe using OpenCL can—for the first time—develop complex applications that have a single code tree that supports software only and accelerated versions.”
Of the three APIs above it will be CUDA, behind its walls, that likely will be least impacted by Vulkan, at least initially once Vulkan is on the market. CUDA has a wide base of professional application support and its own ecosystem. Additionally, CUDA can often innovate faster because it doesn’t need to go through standards groups and shares the benefit of “proprietary language plus proprietary hardware.”
This doesn’t mean Nvidia’s support of Vulkan is symbolic or compromised in any way. “From Nvidia’s point of view we are very supportive of open standards,” adds Trevett, “we do support OpenCL and we believe in giving developers choice.”
The Choice: Vulkan or OpenGL?
Back to graphics, the choice to support Vulkan as an app developer, OS maker, or other third party will vary.
“For some performance is what matters most, while for others…faster times to market maybe more important,” says Trevett. And it depends on the types of markets we are talking about. When Khronos tried to take OpenGL 3.0 in a more explicit direction allowing more direct connection to the hardware to maximize performance, a revolt erupted within the industry consortium by the CAD developers. Khronos ended up revising the 3.0 spec to appease the complaints.
What games need for 3D graphics and what CAD and DCC (digital content creation) need for 3D graphics are, generally speaking, quite different. Most CAD and DCC developers will continue to find OpenGL and OpenGL ES most useful for their software applications, while a minority of them will be quite interested in taking advantage of Vulkan. Game development has different needs than the CAD and DCC developer community; though their technologies overlap their users have vastly different concerns and priorities.
Vulkan has emerged as the fourth new GPU API system that is oriented at getting down to the metal (being low-level), with less hardware abstraction layers, unlike OpenGL. “For the first time the games engine community has come forward and been instrumental in steering the new Vulkan standard into the explicit direction,” says Trevett. The games community is painfully aware of how powerful GPUs have become and what they can actually do with them for their games.
In response to all of this pressure, AMD initially created Mantle, an explicit-oriented graphics API. After Mantle, Apple and Microsoft announced their explicit-oriented APIs in Metal and DirectX 12.²
Final Take Away
It’s as if the gaming community said, “enough is enough” and all the major players said “game on” and announced their low-level, explicit graphics APIs aimed at serious performance advancements. The CAD and DCC developer community was just going to have to deal with it. And yet it shouldn’t surprise anybody that the gaming world is driving the cutting edge in software (and hardware) graphics technologies.
With DirectX and Metal being OS-specific, and AMD deciding to contribute its Mantle to the Khronos Group (think, Apple’s OpenCL contribution), the rapid emergence of Vulkan is smart and timely. The market needs a truly open standard and for explicit graphics, and Vulkan more than addresses the challenge.
1 – While a short history lesson on why OpenGL has essentially risen to dominance and plurality is beyond this article, part of the key advantage of OpenGL was that it gave companies like Sony, Nintendo and others a graphics API system for their non-Windows OS game systems. It also was the natural choice for mobile with smartphones and tablets, where Windows was never strong and still isn’t.
2 – Throughout this article we have used the term DirectX 12, which is actually the umbrella category of visual and audio technologies for Microsoft’s API standards. Direct3D 12 is the actual graphics API piece within the DirectX 12 family technologies.