Compilers and libraries
Linux on POWER is the union of two worlds: the best of open source development and enterprise-class hardware. It's only fitting to provide a choice of C, C++, and Fortran compilers that reflect this union.
GNU Compiler Collection (GCC)
GNU GCC is the most widely used compiler on Linux across all
architectures and is the compiler used by both Red Hat and SUSE to
compile the binaries distributed with their products. Capable of
generating both 32- and 64-bit binaries, GCC 3.2 is offered on both RHEL3
and SLES8. The RHEL3 implementation utilizes a
"biarch" style twin compiler, with which a compiler flag (
-m64) is used to
enable 64-bit compilation.
SLES8, alternatively, uses a separate toolchain for 64-bit GCC, stored by default in /opt/cross. In order to enable the 64-bit GCC compiler in SLES8, developers should ensure that their configure scripts and Makefiles are aware of this compiler. You can accomplish this by assigning the CC environment variable to the 64-bit GCC compiler's location.
Currently, the GNU Compiler Collection is undergoing a massive renovation regarding performance optimization for the POWER architecture. In the upcoming 3.3 and 3.4 releases, GCC will have improved scheduling and signal handling. In addition, architecture-specific optimizations (such as VMX/Altivec support on PPC970 chips featured in the IBM JS20 BladeCenter) will deliver a dramatic performance advantage to compiled code. However, both SLES8 and RHEL3 currently employ GCC 3.2 versions, and a review of performance optimization for these versions of GCC is provided here.
GCC 3.2 lacks architecture-specific optimizations for POWER processors.
Therefore, it is not recommended to compile with architecture-specific
flags, such as
-mpower. These options are available, but often offer no
performance advantage. In contrast to GCC implementations on x86, the
-fPIC flag is not implied. In order to generate dynamically linked
-fPIC in all Makefiles. This is especially
key if you are porting a codebase from Linux on Intel, since this
flag may not be explicitly used in existing Makefiles.
In addition to awareness of flags not utilized by current releases of GCC
for POWER architecture, you should be aware of common flags
available to both x86 and POWER architecture. These include compile flags
dealing with relocation, table of contents sizes, floating point options,
bit alignment, and so on. For example, large TOC support (greater than 8K
entry) requires multiple TOCs, specified with the
flag. For a review of these, see standard GCC documentation packaged with
IBM VisualAge Compiler Set
In addition to GCC, IBM has made available for both RHEL3 and SLES8 a release of the high-performance VisualAge Compiler Set. These compilers for C, C++, and Fortran, are pinnacles of performance optimization technology; they are also custom crafted to exploit the POWER architecture to the fullest extent. High Performance Computing developers often see upwards of 30 percent performance improvements just by recompiling their code with these compilers!
Optimization with VisualAge can be as easy as using the preset
optimization levels, which will incorporate various categories of
algorithm. In general, significant performance improvements are seen with
-O3 -qtune=auto and
-qarch=auto. Third-level optimization will
offer chip- (but not architecture-) independent optimization with
autodetection of the chip model. Stepping up to the
flag will buy incremental performance derived from chip-specific
optimizations, interprocedural analysis, and high-order transformation
routines. High-performance code should first be optimized at
then attempted at
-O4 will likely add performance, it is also
more selective about the code structure and more restrictive to binary
compatibility within the POWER microprocessor line.
To avoid nightmarish scenarios of library incompatibility, the VisualAge compilers for Linux on POWER have been designed to use the glibc packaged with each distribution respectively, and they even use the native Linux linker. Applications that are thirsty for performance have an obvious ally with this unique offering for Linux on POWER.
Extensive documentation on compile-time optimization is available for both the GCC and VisualAge compiler set for Linux on POWER. Freely available technical resources any Linux on POWER developer should have on the desktop are listed in Resources.
IBM SDK 1.4.1
IBM has poured development resources into the refinement of a customized SDK, available in both 32- and 64-bit for Linux on POWER. Both RHEL3 and SLES8 are packaged with the IBM SDK 1.4.1, and can be used in combination with the Eclipse Integrated Development Environment for Linux on POWER.
Many Linux developers are happy with traditional development environments like vi or Emacs. Naturally, these are available, along with kernel-level debugging tools common to Linux such as gdb. However, in addition to these tools, Linux on POWER also features support for development tools like the Eclipse IDE. The VisualAge compilers have detailed code analysis options to assess endianness and 64-bit compatibility in source code, and the comfortable KDE and Gnome desktop environments make the graphically inclined developer feel right at home. High Performance Computing (HPC) and Life Science developers will benefit from the availability of common applications, for example NCBI applications. IBM's advanced mathematics and scientific libraries ESSL and P/ESSL are also available to aid HPC applications for Linux on POWER. Grid computing comes to life for Linux on POWER with respected solutions such as the Globus Toolkit combined with clustering tools like Cluster Systems Management (CSM).