Chapter 3 |
3
|
Linking and Running HP Fortran Programs
|
3.1
|
Linker Overview
|
3.2
|
LINK Command Qualifiers and Messages
|
3.2.1
|
Linker Output File Qualifiers
|
3.2.1.1
|
Image File Qualifiers
|
3.2.1.2
|
/NATIVE_ONLY Qualifier
|
3.2.1.3
|
Map File Qualifiers
|
3.2.2
|
/DEBUG and /TRACEBACK Qualifiers
|
3.2.3
|
Linker Input File Qualifiers
|
3.2.4
|
Linker Symbol Table Qualifier
|
3.2.5
|
Linker Options File Qualifier
|
3.2.6
|
Other Linker Qualifiers
|
3.2.7
|
Linker Messages
|
3.3
|
Running HP Fortran Programs
|
3.3.1
|
RUN Command
|
3.3.2
|
System Processing at Image Exit
|
3.3.3
|
Interrupting a Program
|
3.3.4
|
Returning Status Values to the Command Interpreter
|
3.4
|
Symbol Table and Traceback Information: Locating Run-Time Errors
|
3.4.1
|
Effects of Error-Related Command Qualifiers
|
3.4.2
|
Sample Source Program and Traceback
|
Chapter 4 |
4
|
Using the OpenVMS Debugger
|
4.1
|
Debugger Overview
|
4.2
|
Getting Started with the Debugger
|
4.2.1
|
Compiling and Linking a Program to Prepare for Debugging
|
4.2.2
|
Establishing the Debugging Configuration and Interface
|
4.2.3
|
Invoking the Debugger
|
4.2.4
|
Debugger Commands Used Often
|
4.2.5
|
Debugger Breakpoints, Tracepoints, and Watchpoints
|
4.2.6
|
Ending a Debugging Session
|
4.2.7
|
Notes on Debugger Support for HP Fortran
|
4.3
|
Sample Debugging Session
|
4.4
|
Displaying HP Fortran Variables
|
4.4.1
|
Accessing HP Fortran Common Block Variables
|
4.4.2
|
Accessing HP Fortran Derived-Type Variables
|
4.4.3
|
Accessing HP Fortran Record Variables
|
4.4.4
|
Accessing HP Fortran Array Variables
|
4.4.5
|
Accessing HP Fortran Module Variables
|
4.5
|
Debugger Command Summary
|
4.5.1
|
Starting and Terminating a Debugging Session
|
4.5.2
|
Controlling and Monitoring Program Execution
|
4.5.3
|
Examining and Manipulating Data
|
4.5.4
|
Controlling Type Selection and Symbolization
|
4.5.5
|
Controlling Symbol Lookup
|
4.5.6
|
Displaying Source Code
|
4.5.7
|
Using Screen Mode
|
4.5.8
|
Editing Source Code
|
4.5.9
|
Defining Symbols
|
4.5.10
|
Using Keypad Mode
|
4.5.11
|
Using Command Procedures and Log Files
|
4.5.12
|
Using Control Structures
|
4.5.13
|
Additional Commands
|
4.6
|
Locating an Exception
|
4.7
|
Locating Unaligned Data
|
Chapter 5 |
5
|
Performance: Making Programs Run Faster
|
5.1
|
Software Environment and Efficient Compilation
|
5.1.1
|
Install the Latest Version of HP Fortran and Performance Products
|
5.1.2
|
Compile Using Multiple Source Files and Appropriate FORTRAN Qualifiers
|
5.1.3
|
Process Environment and Related Influences on Performance
|
5.2
|
Analyzing Program Performance
|
5.2.1
|
Measuring Performance Using LIB$xxxx_TIMER Routines or Command Procedures
|
5.2.1.1
|
The LIB$xxxx_TIMER Routines
|
5.2.1.2
|
Using a Command Procedure
|
5.2.2
|
Performance and Coverage Analyzer (PCA)
|
5.3
|
Data Alignment Considerations
|
5.3.1
|
Causes of Unaligned Data and Ensuring Natural Alignment
|
5.3.2
|
Checking for Inefficient Unaligned Data
|
5.3.3
|
Ordering Data Declarations to Avoid Unaligned Data
|
5.3.3.1
|
Arranging Data Items in Common Blocks
|
5.3.3.2
|
Arranging Data Items in Derived-Type Data
|
5.3.3.3
|
Arranging Data Items in Compaq Fortran 77 Record Structures
|
5.3.4
|
Qualifiers Controlling Alignment
|
5.4
|
Using Arrays Efficiently
|
5.4.1
|
Accessing Arrays Efficiently
|
5.4.2
|
Passing Array Arguments Efficiently
|
5.5
|
Improving Overall I/O Performance
|
5.5.1
|
Use Unformatted Files Instead of Formatted Files
|
5.5.2
|
Write Whole Arrays or Strings
|
5.5.3
|
Write Array Data in the Natural Storage Order
|
5.5.4
|
Use Memory for Intermediate Results
|
5.5.5
|
Defaults for Blocksize and Buffer Count
|
5.5.6
|
Specify RECL
|
5.5.7
|
Use the Optimal Record Type
|
5.5.8
|
Enable Implied-DO Loop Collapsing
|
5.5.9
|
Use of Variable Format Expressions
|
5.6
|
Additional Source Code Guidelines for Run-Time Efficiency
|
5.6.1
|
Avoid Small or Large Integer and Logical Data Items (Alpha only)
|
5.6.2
|
Avoid Mixed Data Type Arithmetic Expressions
|
5.6.3
|
Use Efficient Data Types
|
5.6.4
|
Avoid Using Slow Arithmetic Operators
|
5.6.5
|
Avoid EQUIVALENCE Statement Use
|
5.6.6
|
Use Statement Functions and Internal Subprograms
|
5.6.7
|
Code DO Loops for Efficiency
|
5.7
|
Optimization Levels: /OPTIMIZE=LEVEL=n Qualifier
|
5.7.1
|
Optimizations Performed at All Optimization Levels
|
5.7.2
|
Local (Minimal) Optimizations
|
5.7.2.1
|
Common Subexpression Elimination
|
5.7.2.2
|
Integer Multiplication and Division Expansion
|
5.7.2.3
|
Compile-Time Operations
|
5.7.2.4
|
Value Propagation
|
5.7.2.5
|
Dead Store Elimination
|
5.7.2.6
|
Register Usage
|
5.7.2.7
|
Mixed Real/Complex Operations
|
5.7.3
|
Global Optimizations
|
5.7.4
|
Additional Global Optimizations
|
5.7.4.1
|
Loop Unrolling
|
5.7.4.2
|
Code Replication to Eliminate Branches
|
5.7.5
|
Automatic Inlining and Software Pipelining
|
5.7.5.1
|
Interprocedure Analysis
|
5.7.5.2
|
Inlining Procedures
|
5.7.5.3
|
Software Pipelining
|
5.7.6
|
Loop Transformation
|
5.8
|
Other Qualifiers Related to Optimization
|
5.8.1
|
Loop Transformation
|
5.8.2
|
Software Pipelining
|
5.8.3
|
Setting Multiple Qualifiers with the /FAST Qualifier
|
5.8.4
|
Controlling Loop Unrolling
|
5.8.5
|
Controlling the Inlining of Procedures
|
5.8.6
|
Requesting Optimized Code for a Specific Processor Generation (Alpha only)
|
5.8.7
|
Requesting Generated Code for a Specific Processor Generation (Alpha only)
|
5.8.8
|
Arithmetic Reordering Optimizations
|
5.8.9
|
Dummy Aliasing Assumption
|
5.9
|
Compiler Directives Related to Performance
|
5.9.1
|
Using the cDEC$ OPTIONS Directive
|
5.9.2
|
Using the cDEC$ UNROLL Directive to Control Loop Unrolling
|
5.9.3
|
Using the cDEC$ IVDEP Directive to Control Certain Loop Optimizations
|