Jobs: Compilers
Home > User Info > Jobs > Compilers
Several compilers are available across TeraGrid systems, including C, C++, and
Fortran compilers. Resource Providers who offer the CTSS Application Development
& Runtime Support Capability Kit register their compilers and can be searched from
the CTSS Overview Page. Third party
compilers are also available on individual systems. To determine if a third party compiler
exists for your system, see the TeraGrid Software Repository.
MPI compilers are also available for parallel applications. Resource Providers who offer the CTSS
Parallel Application Support Capability Kit register their MPI-based compilers and can be found
from the CTSS Overview Page, as well. Some additional
information can be found on the MPICH-G2 and
MPICH-VMI pages.
For additional help on specific compilers, you can find the documentation for your system on the Compute & Visualization Resources page. User guides are linked from the Resource Name and Platform.
Intel Compilers on TeraGrid LINUX clusters
The Intel 8 compilers are available on all IA-64 and IA-32 TeraGrid LINUX clusters. For Intel 8 versions, the commands were changed to icc and ifort. See below for more details.
Intel 8 Compiler Changes
A number of changes that will affect users' programs have been implemented
in the new version 8 compiler. Notably, the Intel 8 compiler commands have
changed to icc and ifort. The old commands will generate a warning.
Also, significant gcc compatibility has been added to the Intel compiler, so
that it better mimics the gcc environment. Some programs, especially those with
inline assembly, do not port smoothly from earlier versions. As a result,
in rare cases, the -no-gcc option is necessary when compiling.
Note that the use mpi option now works with fortran90.
The following are excerpts from the Intel 8 compiler release notes:
For complete release notes, see the Intel site:
C/C++
- Compiler name change from ecc to icc, from ecpc to icpc
- The Intel Debugger idb now offers an optional GUI
- A high level of binary compatibility with gcc 3.2 with the new -cxxlib-gcc
option
- Source compatibility with gcc 3.2
- Support for GNU environment variables that influence the preprocessor
- Support for both automatic and manual precompiled header processing
- Better debug support is now provided for -ip and the -ipo options
- New diagnostic switches:
- libguide can only be dynamically linked for performance reason
- Dimensioned const data placed in a read only data section and string
literals will be placed in the read-only section by default
- The option -fwritable-strings is a gcc compatible option that will
cause string literals to be places in a writable data section
- Limitation in stack size in posix-threaded programs and openmp programs
Fortran

- Compiler name change from efc to ifort
- Intel compilers code-coverage tool
- Full language compatibility with Compaq Visual Fortran 6.6
- Support for the Fortran 2003 feature Allocatable Components of Derived
Types
- Traceback option to help locate source of run-time errors and
- TRACEBACKQQ routine to request a traceback from an application
- Numeric representation of true and false in LOGICAL expressions
changed from that used in earlier versions of Intel Fortran (In previous
versions of Intel Fortran, when an integer expression was interpreted
as
LOGICAL, zero was considered .FALSE. and non-zero values considered
.TRUE. In Intel Fortran Compiler 8.0, even integer values are
considered .FALSE. and odd values are considered .TRUE. Furthermore,
the logical constant .TRUE. has the value -1 rather than 1 as in
previous versions of Intel
Fortran. This behavior matches that of Compaq Visual Fortran and can
be
changed by using the -fpscomp logicals compiler option
- The command line inquiry routines GETARG, IARGC and NARGS, which
were formerly library routines, are now treated as intrinsic procedures
by the compiler and are documented in the Language Reference Manual.
If your application contains declarations of these routines as EXTERNAL,
or provides an explicit interface for them, you will need to remove
those declarations in order to build successfully
- The -vms compiler option, which specifies compatibility with HP*
OpenVMS* Fortran compilers, has additional effects in this release as
compared to Intel Fortran 7.1. In previous versions of Intel Fortran,
the option disabled the recognition of \n in character literals as a
newline and set the default unit size for RECL of unformatted files
to four bytes. These options now have separate switches (-assume [no]bscc
and -assume [no]byterecl). Please consult the description of -vms in
the Intel Fortran Compiler User's Guide for details on the new effects
of -vms
- In previous versions of Intel Fortran, the default RECL= unit for
UNFORMATTED files was bytes. Version 8.0 adopts the Compaq Fortran default
unit of four bytes (a numeric storage unit.) You can specify one-byte
units by adding the compiler option -assume byterecl
- Previous versions of Intel Fortran inserted up to seven bytes of
padding between variables in COMMON to ensure that 8-byte numeric variables
were
aligned on natural boundaries. However, this violated the Fortran standard's
rules on common association. The default behavior in version 8.0 is
to not insert padding between variables in a COMMON block. The compiler
will issue warning messages (unless suppressed by -warn noalign) if
an unaligned numeric variable is seen. This change should be invisible
to most applications, except for those that access variables in COMMON
other than by their names; for example, if the COMMON is shared with
a C extern. If you wish to have variables in COMMON padded, specify
-align commons to align on up to four-byte boundaries, or -align dcommons
to align on up to eight-byte boundaries (same as version 7.1.)
- The implementation of the RANDOM_NUMBER intrinsic has changed; the
new implementation uses a key length of 2. Properly written programs
which set the seed using RANDOM_SEED should not notice a difference
- A call to RANDOM_SEED with no arguments sets the seed to a value
based
on the current time-of-day, so that multiple runs of a program that
calls RANDOM_NUMBER will see a different sequence of values. If you
require the same set of values on each run, use RANDOM_SEED to set the
seed(s) to a fixed value
- If you are building a mixed-language application where the main program
is not in Fortran, you may need to add the -nofor_main switch to the
Fortran build commands in order to avoid an ld error message about "doubly
defined symbol main"
- Applications built with libpthreads.a statically linked, (libpthreads.a
is used by default when -static is used), may fail with a segmentation
violation on some versions of Linux when the applications use more than
2MB of stack space
- On Itanium systems, when the -shared switch is used to specify that
a Dynamic Shared Object (.so) is to be created, ld may issue diagnostic
messages referring to "@gprel relocation against dynamic symbol".
To correct this problem, add the -i_dynamic and -nofor_main switches
to the command line used to build the .so
- The size of a common block overall can be larger than 2 gigabytes.
However, no individual object in a common block can be larger than 2
gigabytes
- Static objects can be larger than 2 gigabytes, except for temporaries
on the stack. Temporaries on the stack are still limited to 2 gigabytes
- If a common block is declared as "THREADPRIVATE " with
an OpenMP
directive, the common block must have the same length in all the source
files in which it is declared
- Following features are missing: -CA, -CS, -CU, -CV, -WB, -zero
- Following libraries are missing: libBINF90, libCEPCF90, libF90,
libIEPCF90, libintrins, libPEPCF90 and libPOSF90.
- Following libraries are added: libifcore, libifcoremt and libifort.
- The use mpi option now works with fortran90.
