High Performance Fortran Programming - Detailed Notes
by
Dr. A C Marshall
Notes
Introduction
Introduction
The Course
Fortran Evolution
A Brief History of F
ORTRAN
77
Drawbacks of F
ORTRAN
77
New Fortran 90 Features
Language Obsolescence
Language Obsolescence
Language Obsolescence
Obsolescent Features
Arithmetic
IF
Statement
ASSIGN
Statement
ASSIGN
ed
GOTO
Statement
ASSIGN
ed
FORMAT
Statement
Hollerith Format Strings
PAUSE
Statement
REAL
and
DOUBLE PRECISION
DO
-loop Variables
Shared
DO
-loop Termination
Alternate
RETURN
Branching to an
END IF
Undesirable Features
Fixed Source Form
Implicit Declaration of Variables
COMMON
Blocks
Assumed Size Arrays
EQUIVALENCE
Statement
ENTRY
Statement
Object Oriented Programming
Object Oriented Programming
Fortran 90 's Object Oriented Facilities
Data Abstraction
Data Hiding
Encapsulation
Inheritance and Extensibility
Polymorphism
Reusability
Comparisons with C++
Fortran 90 Programming
Example of a Fortran 90 Program
Language Elements
Source Form
Free Format Code
Character Set
Significant Blanks
Names
Comments
Statement Ordering
Data Objects
Intrinsic Types
Literal Constants
Implicit Typing
Numeric and Logical Declarations
Character Declarations
Constants (Parameters)
Initialisation
Expressions and Assignment
Expressions
Assignment
Intrinsic Numeric Operations
Intrinsic Character Operations
Character Substrings
Concatenation
Relational Operators
Intrinsic Logical Operations
Operator Precedence
Precedence Example
Control Flow
Control Flow
IF
Statement
IF
Construct
Nested and Named
IF
Constructs
Conditional Exit Loops
Conditional Cycle Loops
Named and Nested Loops
Indexed
DO
Loop
Examples of Loop Counts
Scope of
DO
Variables
SELECT
CASE
Construct
Example Of
SELECT
CASE
Construct
Simple Input / Output
PRINT
Statement
READ
Statement
Mixing Objects of Different Types
Mixed Numeric Type Expressions
Mixed Type Assignment
Integer Division
Intrinsic Procedures
Intrinsic Procedures
Type Conversion Functions
Mathematical Intrinsic Functions
Numeric Intrinsic Functions
Arrays
Array Terminology
Declarations
Array Element Ordering
Array Syntax
Whole Array Expressions
Array Conformance
Array Sections
Visualising Array Sections
Array Inquiry Intrinsics
Array Constructors
The
RESHAPE
Intrinsic Function
Array Constructors in Initialisation Statements
Allocatable Arrays
Deallocating Arrays
Printing Arrays
Input of Arrays
Array I/O Example
Masked Assignment - Where Statement
Masked Assignment - Where Construct
Vector-valued Subscripts
Selected Intrinsic Functions
Random Number Intrinsic
Vector and Matrix Multiply Intrinsics
Maximum and Minimum Intrinsics
Array Location Intrinsics
Array Reduction Intrinsics
Program Units
Program Units
Procedure Classes
Main Program Syntax
Main Program Example
Procedures
Subroutine Syntax
Subroutine Example
External Subroutine Example
Function Syntax
Function Example
Scope
Local Data
Host Association
Example of Scoping Issues
SAVE
Statement
Implicit
SAVE
Attribute
Procedure Interfaces
Interface Example
Argument Intent
Procedures and Array Arguments
Procedures and Array Arguments
Assumed-shape Arrays
Automatic Arrays
Array-valued Functions
Modules
Modules - General Form
Modules - Global Data
Module Global Data Example
Module Global Data Example
Visualisation of Global Storage
Modules - Interface Declaration
Modules Interface Declaration Example
Modules - Procedure Declaration
Encapsulation Example
Encapsulation - Stack example
The
USE
Renames Facility
USE
ONLY
Statement
Intrinsics
Bit Manipulation Intrinsic Functions
Array Construction Intrinsics
MERGE
Intrinsic
SPREAD
Intrinsic
PACK
Intrinsic
UNPACK
Intrinsic
TRANSFER
Intrinsic
Introduction to Parallel Processing
Parallel Processing
Processor Configurations
Parallel Programs
High Performance Fortran
The Concept of HPF
SPMD Model
Processor Communications
Data Distribution
HPF and Data Parallelism
Subset HPF
Common Extensions to Subset HPF
HPF Directives
Declarative Directives
Executable Directives
PROCESSORS
Declaration
DISTRIBUTE
Directive
BLOCK
Distribution
CYCLIC
Distribution
2D Distribution Example
Visualisation of
*
Distribution
Commentary
Distribution of Allocatables
The Owner-Computes Rule
Scalar Variables
Examples of Good Distributions
Successive Over Relaxation Example
Other Mappings
HPF Programming Issues
HPFacts
Liverpool HPC Home Page
HPFF Home Page
HPF Library
HPF Book
More Distributions
Alignment
Alignment Syntax
Alignment Example
Simple 2D Alignment Example
Transposed Alignment Example
Strided Alignment Example
Reverse Strided Alignment Example
Practical Example of Alignment
Aligning Allocatable Arrays
Collapsing Dimensions
Replicating Dimensions
Example: 2D Gaussian Elimination
New HPF System Intrinsics
Template Syntax
Simple Template Example
Combined Directive
Another Template Example
Further Examples of Template Alignment
Aligning to a Template Section
Aligning Scalars
Explicit Replication Using Templates
Data Parallel Execution
Data Parallel Execution
Forall Statement
Forall Examples
Execution Process
Do-loops and Forall Statements
Forall Construct
Pure Procedures
Pure Function Example
Pure Subroutine Example
MIMD Example
The
INDEPENDENT
Directive
Independent
DO
Loops - Conditions
Independent Example 1
Independent Example 2
INDEPENDENT
NEW
Loops
New Variables Example 1
New Variables Example 2
Input and Output
Print and Read
HPF and Procedures
HPF Procedure Interfaces
Procedures and Mapping
Prescriptive Distribution
Descriptive Distribution
Examples of Dummy Distributions
Consequences
Templates and Modules
Interfaces
Aligning to Dummy Arguments
Mapping Function Results
Argument Remapping
Explicit Intent
Passing Array Sections
Array Arguments Example 1
Array Arguments Example 2
Collapsing Dimensions
Scalar Arguments
Processors Problem
Extrinsic Procedures
Extrinsic Example
Rules for Extrinsic Procedures
Uses of Extrinsics
Extrinsic instead of
INDEPENDENT
Calls to the NAG Library
New HPF Intrinsics
HPF Library Module
Mapping Inquiry Subroutines
Example of Mapping Inquiry Procedures
New HPF Reduction Functions
Example of New Reduction Functions
Bit Manipulation Functions
Array Combining Scatter Functions
Prefix and Suffix Functions
Array Sorting Functions
Example of Array Sorting Functions
Storage and Sequence Association
Dual Fortran 90 and HPF Codes
Full HPF
HPF-2
HPF Kernel
References
Adam Marshall ©University of Liverpool, 1996
Wed Oct 9 17:57:29 BST 1996