This document outlines the steps necessary to port an application from an IRIX system to the SGI Altix platform. We define platform as the set of software interfaces resting on a set of particular hardware, as shown in Figure 1-1. The hardware platform consists of the microprocessor and various other system devices, including disk drives, network connections, and system interconnects. Usually an application gains access to these devices through the operating system and system libraries which are called through a programming language. Other higher level services are provided by the layer called middleware.
Table 1-1 provides an outline of two SGI platforms, the Origin3000 and the Altix. We can see that for the most part these systems have different sets of interfaces. We define porting as the act of adapting an application from one platform to another.
Table 1-1. Platform Comparison
System | Origin3000 | Altix |
|---|---|---|
Processor | ||
System HW | NUMAlink | |
OS | IRIX | ALE/ProPack (Linux) |
System Libraries | libc, MPI, other | libc, MPI, other |
Programming Languages | C, C++, Fortran, other | C, C++, Fortran, other |
Middleware | various | various |
Given the large number of differences between the platforms, one might think that porting is essentially a rewrite of the application. Luckily, many of the differences between platforms are abstracted under standard programming languages and system libraries. At each level of the hierarchy there is a set of development tools that can aid in the process. For example, a C or Fortran program written for the Origin already has a lot of the porting issues solved through the use of standard compliance and features in the programming languages and library interfaces. A Java program (if written in100% pure Java) has even fewer porting issues to resolve.
Table 1-2 gives a comparison of various development tools and utilities available on Origin and Altix platforms.
Table 1-2. Development Tools Comparison
System | Origin3000 | Altix (Prop) | Altix (Open Source) |
|---|---|---|---|
C/C++ Compiler | MIPSpro (cc) | ecc/icc | gcc |
Fortran77 Compiler | (f77) | efc/ifort | g77 |
Fortran90/95 Compiler | (f90) | efc/ifort | N/A |
Text Debugger | (dbx) | idb | gdb |
Kernel Debugger | kdb | kdb | kdb |
GUI Debugger | ProDev Workshop | TotalView, various | ddd |
App Perf Tools | SpeedShop | VTune | gprof |
System Perf Tools | PCP | VTune/SGI Histx | PCP |
Java Virtual Machine | 1.4.1 | 1.4.2 (BEA, Sun) | gjv |
Array Services | 3.6 | 3.6 |
|
Table 1-3 gives a comparison of various development libraries available on Origin and Altix platforms.
Table 1-3. Development Libraries Comparison
System | Origin 3000 | Altix (Prop) | Altix (Open Source) |
|---|---|---|---|
Scientific Libraries | SCSL | SCSL, MKL, Goto BLAS |
|
MPI | MPT | MPT | MPICH, LAM |
FFIO | Full support | Subset of IRIX support |
|
threads | sproc, pthreads | pthreads | pthreads |
At each level of the platform hierarchy there are possible porting issues. Table 1-4 summarizes the main ones at each level.
Table 1-4. Platform Layer Porting Issues
Platform Layer | Porting Issues |
|---|---|
Processor | Assembly language, endianness |
Other HW | Device drivers |
OS | Differences in system calls and APIs |
System libraries | Differences in APIs |
Languages | Differences in ABIs, standards, adherence |
Middleware | Existence of different packages, different APIs |
Development tools | Differences in the features and user interfaces |
This manual attempts to outline each of the issues and explain what it is and how to deal with it. It is best viewed online as many of items have hyperlinks into other SGI manuals and Internet web sites. It is by no means an exhaustive set, but it does highlight the major areas in some detail.
This remainder of this document is organized as follows:
Chapter 2, “Endian Order” describes endian order, and summarizes the differences in the byte order of a word in big-endian and little-endian systems.
Chapter 3, “64-bit ABI Porting Issues” discusses the issues that arise when trying to port 32-bit applications on the IRIX platform to the IPF 64-bit ABI on the Altix platform.
Chapter 4, “Compiler and Development Tools” describes the similarities and differences between the development tools environments found on IRIX and ProPack (Linux), concentrating on the compilation process and tools available for Altix.
Chapter 5, “Additional Development Tools” outlines additional development tools which are mainly used after an application has been built (or to automate the build process).
Chapter 6, “Message Passing on IRIX and Linux” discusses the differences in Message Passing Toolkit (MPT) support between IRIX and Linux systems.
Chapter 7, “POSIX Threads (pthreads) Implementations” outlines differences between the POSIX threads (Pthreads) implementations on IRIX 6.5 and the latest version of ProPack.
Chapter 8, “Miscellaneous Porting Concerns” provides a list of issues that you may need to address when porting an application from an IRIX to a Linux system.
Chapter 9, “Frequently Asked Questions” gathers some frequently asked questions regarding application porting and provides the answers.
Appendix A, “Application Programming Interface (API) Differences: libc” notes the standard C libraries (libc) that are available on IRIX but missing on Linux.