NVIDIA's LLVM CUDA Compiler: Open-Source, 10% Faster

Written by Michael Larabel in NVIDIA on 26 January 2012 at 01:58 PM EST. 10 Comments
NVIDIA
Back in December there was an announcement from NVIDIA that they would open-source their CUDA compiler based upon the LLVM back-end. NVIDIA today released their new CUDA implementation that's based upon LLVM. Besides being open-source, which will allow it to be ported to new (non-NVIDIA) architectures/hardware, there's also a measurable speed boost in the switch over to LLVM.

NVIDIA announced its "major new NVIDIA CUDA release" this morning with promotingthat that this release makes it faster and easier to accelerate scientific research with GPUs. The three highlights of this major release is a re-designed visual profiler, a new compiler based upon LLVM, and hundreds of new imaging / signal processing functions.

NVIDIA's new visual profiler for CUDA allows for automated performance analysis and other benefits to those wanting to profile their CUDA applications. The new imaging / signal processing functions results in the size of the NVIDIA Performance Primitives library being doubled. But what's really exciting is the switch to the LLVM compiler infrastructure and NVIDIA open-sourcing the resulting compiler (they aren't required to per the LLVM BSD-style license).

The NVIDIA press release announcing this new work mentions that the new LLVM-based compiler for CUDA can offer immediate performance improvements by simply recompiling the Compute Unified Device Architecture code under this new compiler. Without any code/tuning changes, the new CUDA compiler can offer up performance improvements in some cases by around 10%. "New compiler, based on the widely-used LLVM open-source compiler infrastructure, delivering up to 10 percent speed up in application performance."

Within the NVIDIA press release from today, they also make it quite clear they are happy seeing the open-source CUDA ported to other architectures/devices. "LLVM's modular design allows third-party software tool developers to provide a custom LLVM solution for non-NVIDIA processor architectures, enabling CUDA applications to run across NVIDIA GPUs, as well as those from other vendors."

With optimizations toward the new compiler, it's possible to see an even greater impact from this Low-Level Virtual Machine compiler. The earlier code compiler used by NVIDIA within CUDA was Open64.

Besides the performance improvements and the new CUDA compiler being open-source (and it being allowed to port this NVIDIA compute architecture to new platforms), it's nice to see all the major vendors centering their GPU compute efforts on LLVM. AMD is using LLVM for its OpenCL support within the binary Catalyst graphics driver; they also open-sourced their IL code generator for LLVM. AMD is also working on a Gallium3D driver back-end for their open-source Radeon graphics driver as an intermediate representation. All of the Linux graphics drivers will be using LLVM in providing open-source OpenCL compute support. There's also the LLVM-using LunarGLASS implementation for Mesa that uses LLVM IR rather than TGSI.

Besides the DragonEgg plug-in that pairs the LLVM optimizers with the GCC compiler front-end, and the Clang compiler as a native C/Objective-C/C++ compiler front-end to LLVM, there continues to be a number of other growing uses for this open-source compiler infrastructure outside of OpenCL. LLVM is being used by the Mono project as part of it's JIT (Just-In-Time) engine, various scripting languages, an extension to the IcedTea-OpenJDK that enables the open-source Java implementation to run on any architecture where LLVM is supported, a D language compiler, Adobe is using LLVM for various projects, and various other uses. One of the more unique projects as of late is the LLVM-based EmScripten, which can turn LLVM bitcode into JavaScript. This allows translating most C/C++ code (or anything else that can be translated down into LLVM's bit-code) to be converted into JavaScript and executed within the web browser.

The latest CUDA (v4.1) release can be downloaded from NVIDIA's CUDA web-site for Linux, Mac OS X, and Windows platforms. Under Linux, NVIDIA offers up easy 32/64-bit packages for Fedora, Red Hat Enterprise Linux (RHEL5/RHEL6), Ubuntu, openSUSE, and SUSE Linux Enterprise Server. This is quite an exciting release with the switch to LLVM, the speed improvements, and open-source base just being part of the release highlights. Nice job, NVIDIA.
Related News
About The Author
Michael Larabel

Michael Larabel is the principal author of Phoronix.com and founded the site in 2004 with a focus on enriching the Linux hardware experience. Michael has written more than 20,000 articles covering the state of Linux hardware support, Linux performance, graphics drivers, and other topics. Michael is also the lead developer of the Phoronix Test Suite, Phoromatic, and OpenBenchmarking.org automated benchmarking software. He can be followed via Twitter, LinkedIn, or contacted via MichaelLarabel.com.

Popular News This Week