Documentation Home
> Fortran Programming Guide
Fortran Programming Guide
Book Information
Preface
Chapter 1 Introduction
Standards Conformance
Features of the Fortran Compilers
Chapter 2 Fortran Input/Output
Accessing Files From Within Fortran Programs
Accessing Named Files
Opening Files Without a Name
Opened as Scratch
Already Open
Preconnected Units
Opening Files Without an OPEN Statement
Passing File Names to Programs
Via Runtime Arguments and GETARG
Via Environment Variables and GETENV
f77: Logical Unit Preattachment Using IOINIT
Command-Line I/O Redirection and Piping
f77: VAX / VMS Logical File Names
Direct I/O
Internal Files
Tape I/O (f77 Only)
Using TOPEN Routines
Fortran Formatted I/O for Tape
Fortran Unformatted I/O for Tape
Tape File Representation
The dd Conversion Utility
The getc Library Routine
End-of-File
Multifile Tapes
Fortran 90 I/O Considerations
Chapter 3 Program Development
Facilitating Program Builds With the make Utility
The Makefile
make Command
Macros
Overriding of Macro Values
Suffix Rules in make
Version Tracking and Control With SCCS
Controlling Files With SCCS
Making the SCCS Directory
Inserting SCCS ID Keywords
Creating SCCS Files
Checking Files Out and In
Chapter 4 Libraries
Understanding Libraries
Specifying Linker Debugging Options
Generating a Load Map
Listing Other Information
Consistent Compiling and Linking
Setting Library Search Paths and Order
Search Order for Standard Library Paths
Static Linking
Dynamic Linking
LD_LIBRARY_PATH Environment Variable
Library Search Path and Order--Static Linking
Command-Line Order for -llibrary Options
Command-Line Order for -Ldir Options
Library Search Path and Order--Dynamic Linking
Specifying Dynamic Libraries at Build Time
Specifying Dynamic Libraries at Runtime
Fixing Errors During Dynamic Linking
Creating Static Libraries
Tradeoffs for Static Libraries
Creation of a Simple Static Library
Replacement in a Static Library
Ordering Routines in a Static Library
Creating Dynamic Libraries
Tradeoffs for Dynamic Libraries
Position-Independent Code and -pic
Binding Options
-Bdynamic | -Bstatic
-dy | -dn
Binding in 64-Bit Environments
Naming Conventions
A Simple Dynamic Library
Libraries Provided with Sun Fortran Compilers
VMS Library
POSIX Library
Shippable Libraries
Chapter 5 Program Analysis and Debugging
Global Program Checking
GPC Overview
How to Invoke Global Program Checking
Screen Output
Default Output Features
File Types
Analysis Files (.fln Files)
Some Examples of --Xlist and Global Program Checking
Suboptions for Global Checking Across Routines
Suboption Syntax
--Xlist and its Suboptions
-Xlist Suboption Reference
-f77: -Xlistc -- Show call graphs and cross-routine errors
--XlistE - Show cross-routine errors
- -Xlisterr[nnn] - Suppress error nnn
f77: -Xlist-f - Produce faster output
f77: -Xlist-flndir - Put .fln files into dir directory
f77: -Xlist-h - Halt on errors
-Xlist-I - List and cross-check include files
-Xlist-L - Show listing and cross routine errors
-Xlist-ln - Set the page length for pagination to n lines
-Xlist-o name - Rename the -Xlist output report file
f77: -Xlist-s - Suppress unreferenced identifiers
f77: -Xlist-vn - Set level of checking strictness
-Xlist-w[nnn] - Set width of output line to n columns
-Xlist-war[nnn] - Suppress warning nnn in the report
-Xlist-X - Show cross-reference table and cross routine errors
Some Examples Using Suboptions
Special Compiler Options
Subscript Bounds (-C)
f77: Undeclared Variable Types (-u)
Version Checking (-V)
Interactive Debugging With dbx and Sun WorkShop
f77: Viewing Compiler Listing Diagnostics
Chapter 6 Floating-Point Arithmetic
Introduction
IEEE Floating-Point Arithmetic
-ftrap=mode Compiler Options
Floating-Point Exceptions and Fortran
Handling Exceptions
Trapping a Floating-Point Exception
SPARC: Nonstandard Arithmetic
IEEE Routines
Flags and ieee_flags()
Turning Off All Warning Messages With ieee_flags
Detecting an Exception With ieee_flags
IEEE Extreme Value Functions
Exception Handlers and ieee_handler()
Establishing an Exception Handler Function
Writing User Exception Handler Functions
Detecting an Exception by Handler
Locating an Exception by Handler
Disabling All Signal Handlers
Retrospective Summary
Debugging IEEE Exceptions
Further Numerical Adventures
Avoiding Simple Underflow
Continuing With the Wrong Answer
SPARC: Excessive Underflow
Chapter 7 Porting
Time and Date Functions
Formats
Carriage-Control
Working With Files
Porting From Scientific Mainframes
Data Representation
Hollerith Data
Nonstandard Coding Practices
Uninitialized Variables
Aliasing Across Calls
Obscure Optimizations
Strip-Mining
Loop Unrolling
Troubleshooting
Results Are Close, but Not Close Enough
Program Fails Without Warning
Chapter 8 Performance Profiling
The time Command
Multiprocessor Interpretation of time Output
The gprof Profiling Command
Overhead Considerations
The tcov Profiling Command
"Old Style" tcov Coverage Analysis
"New Style" Enhanced tcov Analysis
f77 I/O Profiling
Chapter 9 Performance and Optimization
Choice of Compiler Options
Performance Option Reference
-fast
-On
PRAGMA OPT=n
Optimization With Runtime Profile Feedback
-dalign
SPARC: -depend
-fsimple=2
-unroll=n
-xtarget=platform
Other Performance Strategies
Using Optimized Libraries
Eliminating Performance Inhibitors
Removing I/O From Key Loops
Eliminating Subprogram Calls
Rationalizing Tangled Code
Further Reading
Chapter 10 SPARC: Parallelization
Essential Concepts
Speedups--What to Expect
Steps to Parallelizing a Program
Data Dependency Issues
Recurrence
Reduction
Indirect Addressing
Data Dependent Loops
Parallel Options and Directives Summary
Number of Processors
Stacks, Stack Sizes, and Parallelization
Automatic Parallelization
Loop Parallelization
Arrays, Scalars, and Pure Scalars
Automatic Parallelization Criteria
f77: Apparent Dependencies
Inhibitors to Automatic Parallelization
Nested Loops
Automatic Parallelization With Reduction Operations
Recognized Reduction Operations
Numerical Accuracy and Reduction Operations
Explicit Parallelization
Parallelizable Loops
Scoping Rules: Private and Shared
Default Scoping Rules for Sun-Style Directives
Sun-Style Parallelization Directives
TASKCOMMON Directive
DOALL Directive
Subprogram Call in a Loop
DOALL Qualifiers
PRIVATE(varlist)
SHARED(varlist)
READONLY(varlist)
STOREBACK(varlist)
SAVELAST
REDUCTION(varlist)
SCHEDTYPE(t)
Multiple Qualifiers
DOSERIAL Directive
DOSERIAL* Directive
Interaction Between DOSERIAL* and DOALL
Inhibitors to Explicit Parallelization
I/O With Explicit Parallelization
Cray-Style Parallelization Directives
Cray Directive Syntax
Qualifiers (Cray Style)
Inhibitors to f90 Explicit Parallelization
Debugging Parallelized Programs
Debugging Without dbx
Using dbx
Chapter 11 C-Fortran Interface
Compatibility Issues
Function or Subroutine?
Data Type Compatibility
FORTRAN 77 and C Data Types
SPARC: Fortran 90 and C Data Types
Case Sensitivity
Underscores in Routine Names
Argument-Passing by Reference or Value
Argument Order
Array Indexing and Order
Array Indexing
Array Order
File Descriptors and stdio
File Permissions
Libraries and Linking With the f77 or f90 Command
Passing Data Arguments by Reference
Simple Data Types
COMPLEX Data
Character Strings
One-Dimensional Arrays
Two-Dimensional Arrays
Structures
Pointers
Passing Data Arguments by Value
Functions That Return a Value
Returning a Simple Data Type
Returning COMPLEX Data
Returning a CHARACTER String
Labeled COMMON
Sharing I/O Between Fortran and C
Alternate Returns
© 2010, Oracle Corporation and/or its affiliates