Compilers
In the open source melee that is Linux, more than one option exists for re-compiling. The two primary compilers for Linux are the GNU Compiler Collection (GCC) and Intel's C++ compiler. Intel also provides a FORTRAN 95 compiler. The GNU Compiler Collection (GCC) is available for nearly all Linux and UNIX systems, and is portable across platforms. The Gelato Federation, a global technical community, dedicated to advancing Linux on Intel Itanium 2 microarchitecture, has a strong effort afoot (sponsored in part by the Itanium Solutions Alliance) to significantly improve the GCC for Itanium 2-based systems.
The Intel C++ Compiler is designed to be highly compatible with GCC, but adds a set of very aggressive optimizations like inlining of math library routines, interprocedural optimizations that inline functions across files, and Profile Guided Optimizations that provide reporting options for further code optimization based on profiling.
Migrating Windows applications from 32-bit RISC to 64-bit Intel Itanium 2 microarchitecture is straightforward. In addition to the Microsoft compilers, Intel offers C/C++ and FORTRAN compilers that groove to the unique qualities of the Intel Itanium 2 microarchitecture and integrate with Microsoft Visual Studio and Visual Studio .NET environments. The Intel compilers are switch-compatible with Microsoft compilers.
In both cases, code needs to be "cleaned" before porting. Tutorials on how to go about making sure your Windows or Linux code is 64-bit clean can be found all over the Web, including the Intel, HP, and Gelato web sites. Intel Itanium 2 processors also run a variety of other operating systems, each with unique portability issues which an organization must address before a porting project gets underway.
Drivers
Drivers require special consideration because of their intimate relationship with the hardware platform. This is yet another area in which the Intel Itanium 2 processor breaks new ground, this time with the Extensible Firmware Interface (EFI) which offers freedom from the decades-old shackles of PC BIOS.
With EFI, the ideal of platform independence for hardware devices is closer to reality. The standardized driver model means, for instance, that changing a keyboard bus from PCAT to a USB on Intel Itanium 2 microarchitecture does not require any application code changes if developers follow the EFI standard. Other features of EFI include a pre-OS boot point in system startup, meaning that actions can be triggered without booting an operating system. A libc utilities interface to the system prevents having to create stand-alone utilities. Best of all is the shorter learning curve compared to programming drivers for PC BIOS.
32-bit Support
In addition to compiling a fully native 64-bit application, the Intel Itanium 2 microarchitecture provides x86 compatibility via the IA-32 Execution Layer (EL), a software-based translator replacing the less-efficient, less-flexible, hardware-based 32-bit support of the original Intel Itanium processor. IA 32-EL is usually faster than hardware-based x86 support because it translates "live" frequently used code to native IA-64 instructions.
The IA-32 EL provides performance scaling as processor performance increases as well as the flexibility to add enhancements to the operation of 32-bit applications on Itanium 2-based systems. Both Windows and Linux operating systems running on Itanium 2-based systems support IA-32 EL, greatly broadening the range of IA-32 applications that run well on such systems. Operating systems that support IA-32 EL include:
- Asianux.
- Microsoft Windows Server 2003 Enterprise Edition and Datacenter Edition.
- Red Flag Advanced Server and DC Server.
- Red Hat Enterprise Linux.
- SUSE Linux Enterprise Server.
- SGI Advanced Linux Environment with ProPack.
While in nearly every case a fully native 64-bit port results in the greatest performance benefits, it's not always practical to port everything at once. Achieving near-native Itanium 2-based server performance while migration projects are in progress is possible with a hybrid approach in which primary software like drivers and major applications are ported first while secondary programs continue to run in 32-bit. The IA-32 EL also facilitates communication between 64- and 32-bit applications and may provide the ability to continue running programs for which source code is not available.