FORTRAN Compiler Options
This is a description of some of the more useful f77 compiler options.
A complete list of compiler options may be read from the man pages by
typing
man f77
or in the SPARCompiler FORTRAN User's Guide.
f77 Option Description Example
---------- ----------- -------
-a This causes code to be f77 -a main.f -a sub.f
inserted which counts the a.out
times each basic block is tcov main.f
executed. After the program tcov sub.f
is executed, the tcov cat main.tcov
utility can be run on the cat sub.tcov
source file to generate
statistics about the
program. Thus, while
the -p option allows you
to get a profile of routine
usage, the -a option
provides a means of
profiling within a program
unit (i.e.., the number of
times each line within a
unit is executed). See
Note 3 below.
-Bstatic This causes the loader to f77 -Bstatic main.f
use static bindings (i.e.,
non-shared libraries).
The resultant executable
program file therefore
contains all of the
routines required for
execution. Such a file
will run on other Sun
computers (e.g., your
Sun workstation) running
the same operating
system.
-c Compile only. Suppress f77 -c sub.f
linking by the loader. (This command will
Produces a binary ".o" produce the binary
file. See FORTRAN tip output file
sheet "Compiling and "sub.o").
Executing FORTRAN Programs
Requiring Subprograms"
for additional information.
-C Check subscripts. f77 -C main.f
If your program, at run
time, attempts to access
an array element that is
out of bounds, an error
message will be printed
and the program aborted.
-fast Selects the combination of f77 -fast main.f
compilation options that
optimizes for speed of
execution and should
provide the maximum per-
formance for most
applications. Selects
-O2 for optimization.
See Note 1 below.
-fast -O3 Same as -fast but changes f77 -fast -O3 main.f
the optimization level to
-O3. This may be a better
choice than -fast for some
critical routines. See
Note 1 below.
-g Generates information for f77 -g main.f
dbx or debugger. See the dbx a.out
FORTRAN tip sheet .
"Debugging FORTRAN .
Programs".
-help Prints and defines the f77 -help
f77 compiler options. or
f77 -help | less
-lx The loader will link with f77 main.f -L/opt/lib -lnag
object library libx.a, (on Strauss)
where x is a string.
See Note 2 below.
Note that an -lx option
must appear after any .f
or .o files. When in
doubt, place this option
at the end of the f77
command.
-o file Set the name of the f77 main.f -o main.exe
executable output file.
Without this option,
the default name of the
output file is "a.out".
-O Generate optimized code. f77 -O main.f
This is equivalent to
-O3. See Note 1 below.
Also see the man pages
for a description of
other levels of
optimization.
-p Prepare to collect data f77 -p main.f sub1.f
for the prof program. The a.out
prof program produces an prof
execution profile of a
program. See Note 3
below.
-xld For debugging. Compile f77 -xld main.f
statements with a "d"
or "D" in column 1.
-Xlist Use this option to get f77 -Xlist main.f one.f
cross-references and
line-numbered listings (produces the file
of your source. This output main.lst).
is written to a file with
suffix ".lst" and prefix
identical to the prefix of
the first file appearing
in the compilation statement.
See the FORTRAN User's Guide or
the man pages for a
complete description
including its numerous
suboptions. Note that if
syntax errors occur during
the compilation, the .lst
file is not produced.
Note 1: When a floating-point arithmetic operation has no
result that is universally acceptable, the system
"raises an exception". By default, these exceptions
are handled according to choices provided by the IEEE
Standard 754. Thus, for example when two large
numbers are multiplied together to produce a result
that causes overflow, rather than the program
aborting, the default result is "+Inf" or "-Inf".
Likewise, the result of 0/0 is "NaN" (not a number).
In such cases the program is not aborted. When the
-fast compiler option is used, these default actions
are switched off. You can get different numerical
results or premature program termination. Therefore,
do not use the -fast option for programs that depend
on IEEE standard exception handling. However, this
should not be misconstrued as advising not to use the
-fast option. Usually, but not always, you will get
the fastest running program with the -fast -O3 option
combination, and in many instances you may not need to
have the IEEE exception handling anyway. When in doubt
test your program using -fast -O3 and also -O3 alone.
You may also want to try -fast -O4 versus -O4. In one
test case where 600 x 600 matrices were multiplied,
the program compiled with -O3 actually ran slightly
faster than the program compiled with -fast -O3 while
in other cases the reverse was true. When in doubt,
test it out!
Note 2: Under Sun OS 5.x (i.e., on Strauss), the loader searches
the directories /opt/SUNWspro/lib, /opt/SUNWspro/
SC2.0.1, /opt/ccs/lib and /usr/lib in that order.
The FORTRAN libraries are in the /opt/SUNWspro/SC2.0.1
directory and the IMSL and NAG libraries are in
directory /opt/lib. Therefore,you must provide the IMSL
and/or NAG directory
information to the compiler. This can be done either
using the switch "-L/opt/lib" or by adding /opt/lib
to the definition of the environment variable
LD_LIBRARY_PATH. See the tip sheet, "Using IMSL and
NAG FORTRAN Subroutine Libraries " for further
details on using LD_LIBRARY_PATH.)
Note 3: When improving run-time performance of large programs,
it is often helpful to focus your task to those
routines that are using a major proportion of the
cpu. Profiling with prof (or with gprof) can assist
you in this endeavor. After compiling with the
-p option and executing your program, running prof
will produce a listing which will include all of the
subprograms and the percentage of cpu each of these
used during the execution. After this is accomplished,
you can recompile those routines which have been shown
to utilize large proportions of the total cpu with the
-a option and then use tcov to locate the code lines
responsible for the large cpu usage. Alternatively,
the options -p and -a can be used at the same time
(see the summary chart below: "Print an Execution
Profile".)
Alternative procedures for profiling exist under Sun
OS 5. See the tip sheet: "Introduction to the
SPARCworks Analyzer".
*****************************************************************
* *
* Correspondence to VS FORTRAN *
* *
*****************************************************************
* *
* VS FORTRAN UNIX *
* ========== ==== *
* *
* *
* Compiling in Link Mode *
* ====================== *
* *
* global vsf2link cmslib *
* fortvs2 main *
* fortvs2 sub f77 -Bstatic main.f sub.f -o main.exe *
* *
* Binary File without Linking *
* =========================== *
* *
* fortvs2 sub f77 -c sub.f *
* *
* *
* Checking Array Bounds *
* ===================== *
* *
* fortvs2 main sub f77 -C main.f sub.f *
* *
* where at the top of *
* the FORTRAN files for *
* main fortran and sub *
* fortran are the lines: *
* *
* debug subchk *
* enddebug *
* *
* *
* Compile with Optimization *
* ========================= *
* *
* fortvs2 main (opt(3) f77 -O main.f sub.f *
* fortvs2 sub (opt(3) *
* *
* Interactive Debugging *
* ===================== *
* *
* filedef affout disk ..... *
* fortvs2 main *
* load main (clear f77 -g main.f -o main.exe *
* start * debug dbx main.exe *
* or *
* debugger main.exe *
* (For further information *
* on debugging see the tip *
* sheet: "Debugging a *
* FORTRAN Program Using *
* debugger/dbx") *
* *
* *
* Linking Libraries *
* ================= *
* *
* global txtlib .. nagvlib .. *
* fortvs2 main *
* load main (clear start On Strauss: *
* f77 main.f -o main.exe -L/opt/lib -lnag *
* (Strauss) *
* main.exe *
* *
* See the tip sheet "Compiling and *
* Executing Programs Requiring *
* Subprograms" for special option and *
* environment variable requirements *
* when linking in routines from the *
* IMSL library. *
* *
* *
* *
* Print an Execution Profile *
* ========================== *
* *
* filedef affout disk .... *
* fortvs2 main f77 -p -a main.f -o main.exe *
* load main (clear main.exe *
* start * debug prof *
* enddebug sample called tcov main.f *
* listsamp * summary cat main.tcov *
* listsamp main. (also see the tip sheet: *
* "Introduction to the *
* SPARCworks Analyzer") *
* *
* *
* Produce a Listing with Cross-References *
* ======================================= *
* *
* fortvs2 main (xref f77 -Xlist main.f *
* *
*****************************************************************

Last updated March 18, 1998