The leading open-source code compilers -- namely the GNU Compiler Collection (GCC) and LLVM/Clang -- now have maturing support for Intel's Sandy Bridge microarchitecture with further optimizations for the forthcoming Ivy Bridge successor. With the current and next-generation Intel support covered, open-source compiler developers have already moved onto beginning work for supporting Intel's Haswell microarchitecture that will not be launched until 2013.
It's not only the Sandy Bridge graphics driver that has been maturing (it can even outperform the Mac OS X Intel driver for some OpenGL workloads), but the compiler support has been moving in parallel. GCC and LLVM/Clang have been the primary targets for compiler coverage with this latest and greatest Intel hardware, but other code compilers have been advancing too.
When it comes to GCC 4.6, which is the latest GNU Compiler Collection series and was released last March just two months after the Sandy Bridge launch, there was initial AVX support. GCC 4.6 brought support for the Sandy Bridge processors with the AVX support via the march/mtune "corei7-avx" options. Advanced Vector Extensions (AVX) made their debut with Sandy Bridge as an x86 instruction set extension and designed to benefit floating-point-intensive workloads, increase parallelism and performance with floating-point SIMD instructions, and reduce register load. GCC 4.6 was the first release to support the AVX extensions, which then made their debut with AMD hardware later in 2011 when Bulldozer was finally launched.
With GCC 4.6 being the current stable series for this de facto Linux compiler, it's currently found in Ubuntu 11.10, Fedora 16, and will be used in the upcoming Ubuntu 12.04 LTS release. AVX support within the Linux kernel-side was introduced in the Linux 2.6.30 release some time ago. To be released in March/April will be GCC 4.7 with better Sandy/Ivy Bridge support and preliminary support for Intel's architecture of 2013, Haswell.
GCC 4.7 has added in two additional AVX vector conversion instructions (exposed via the "-mf16c" option) and support for the Intel rdrnd instruction (via "-mrdrnd"). The Intel rdrand is an x86 instruction for returning random numbers from a random number generator built into the processor itself. The Ivy Bridge optimizations within GCC can be tapped via the "core-avx-i" model (there's an "-i" prefix compared to the Sandy Bridge "core-avx" mode) for the march/mtune options. This hardware random number generator, which is codenamed "Bull Mountain", is one of the new additions to the Intel Ivy Bridge CPUs that GCC 4.7 will support. The Ivy Bridge optimizations also add in FSGSBASE and F16C instruction support.
GCC 4.7 also adds in support for Intel AVX2. The Advanced Vector Extensions 2 intrinsics, built-in functions, and code generation is exposed via the "-mavx2" option. AVX2 is not an Ivy Bridge feature (it's still AVX1), but a feature of Intel's Haswell microarchitecture for a year later. AVX2 / Haswell New Instructions builds upon Advanced Vector Extensions by expanding most integer AVX instructions to 256-bit, gather support, vector shifts, 3-operate fused multi-accumulate support, and other additions.
Beyond AVX2, there is also support for FMA, BMI1, BMI2, and LZCNT instructions for Haswell, which are other instruction set introduces to be introduced in 2013 with Haswell. The Intel Haswell support within GCC is being exposed by "core-avx2" for march/mtune. It's really great to see the AVX2/BMI2 support already coming to the Free Software Foundation's compiler more than a year before the first hardware using it is set to ship, which is much better than the original AVX compiler support that arrived after the Sandy Bridge hardware was shipping. By the time Intel Haswell processors are shipping, GCC 4.7 should already be widespread. The first distribution set to deploy GCC 4.7 by default is the Fedora 17 "Beefy Miracle" release in May while Ubuntu 12.10 and other Linux distributions should begin adopting this major compiler update in H2'2012.
Besides the greater Sandy/Ivy Bridge and Haswell support, there are also many other improvements to be found in GCC 4.7, but those other features will be saved for another article. Now let's see where LLVM / Clang is at in supporting this exciting Intel hardware.