High Performance Fortran Programming
by
Dr. A C Marshall
Slides
Course Philosophy
Fortran Evolution
Drawbacks of F
ORTRAN
77
Fortran 90 New features
Language Obsolescence
Obsolescent Features
Undesirable Features
Object Oriented Facilities
Example
Source Form
Character Set
Significance of Blanks
Names
Comments
Statement Ordering
Intrinsic Types
Literal Constants
Implicit Typing
Numeric and Logical Declarations
Character Declarations
Constants (Parameters)
Initialisation
Expressions
Assignment
Intrinsic Numeric Operations
Intrinsic Character Operations - Substrings
Intrinsic Character Operations - Concatenation
Relational Operators
Intrinsic Logical Operations
Operator Precedence
Precedence Example
Control Flow
IF
Statement
IF
Construct
Nested and Named
IF
Constructs
Conditional Exit Loops
Conditional Cycle Loops
Named and Nested Loops
Indexed
DO
Loops
Examples of Loop Counts
Scope of
DO
Variables
SELECT
CASE
Construct
Example Of
SELECT
CASE
Construct
PRINT
Statement
PRINT
Statement
READ
Statement
Mixed Type Numeric Expressions
Mixed Type Assignment
Integer Division
Intrinsic Procedures
Type Conversion Functions
Mathematical Intrinsic Functions
Numeric Intrinsic Functions
Array Terminology
Visualisation of Arrays
Declarations
Array Element Ordering
Array Syntax
Whole Array Expressions
Array Conformance
Array Sections
Array Sections - Visualisation
Array Inquiry Intrinsics
Array Constructors
The
RESHAPE
Intrinsic Function
Array Constructors in Initialisation Statements
Allocatable Arrays
Deallocating Arrays
Array I/O
Array I/O Example
Masked Array Assignment - Where Statement
Where Construct
Vector-valued Subscripts
Random Number Intrinsic
Vector and Matrix Multiply Intrinsics
Maximum and Minimum Intrinsics
Array Location Intrinsics
Array Reduction Intrinsics
Array Reduction Intrinsics (Cont'd)
Program Units
Procedure Classes
Main Program Syntax
Program Example
Introduction to Procedures
Subroutine Syntax
Subroutine Example
External Subroutine Example
Function Syntax
External Function Example
Scoping Rules
Host Association
Scope of Names
SAVE
Statement
Implicit
SAVE
Attribute and the
SAVE
Statement
Procedure Interfaces
What Appears in an Interface?
Interface Example
Argument Intent
Dummy Array Arguments
Assumed-shape Arrays
Automatic Arrays
Array-valued Functions
Modules - An Overview
General Form
Modules - Global Data
Stack Simulation
Implementation of a Stack
Module Global Data Example
Visualisation of Global Storage
Modules - Interface Declaration
Modules Interface Declaration Example
Modules - Procedure Declaration
Modules - Procedure Encapsulation
Encapsulation - Stack example
The
USE
Renames Facility
USE
ONLY
Statement
Bit Manipulation Intrinsic Functions
Array Construction Intrinsics
MERGE
Intrinsic
SPREAD
Intrinsic
PACK
Intrinsic
UNPACK
Intrinsic
TRANSFER
Intrinsic
Parallel Processing
Processor Configurations
Parallel Programs
The Concept of HPF
SPMD Model
Processor Communications
HPF and Data Parallelism
Subset HPF
Subset HPF
Common Extensions
HPF 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
HPF Programming Issues II
HPFacts
More Distributions
2D Example
Alignment
Alignment Syntax
Example and Visualisation
Simple 2D Alignment Example
Visualisation of Simple Alignment Example
Transposed Alignment Example
Visualisation of Transposed Alignment Example
Strided Alignment Example
Reverse Strided Alignment Example
Practical Example of Alignment
Aligning Allocatable Arrays
Example
Other Pitfalls
Collapsing Dimensions
Replicating Dimensions
Gaussian Elimination - 2D Grid
Visualisation of 2D Gaussian Elimination
New HPF Intrinsics
Template Syntax
Simple Template Example
Alternative Template Syntax
Another Template Example
Visualisation
Alignment and Distribution of Templates
Aligning to a Template Section
Aligning Scalars
Explicit Replication Using Templates
Data Parallel Execution
Forall Statement
Forall Examples
Execution Process
Do-loops and Forall Statements
Forall Construct
Pure Procedures
Pure Procedures
Pure Function Example
Pure Subroutine Example
MIMD Example
The
INDEPENDENT
Directive
Independent Loops - Conditions
Independent Example 1
Visualisation of Independent Loop
Independent Example 2
INDEPENDENT
NEW
Loops
New Variables - Conditions
New Variables Example 1
Visualisation of New Variables Example 1
New Variables Example 2
Input and Output
HPF Procedure Interfaces
Mapping and Procedures
Prescriptive Distribution
Descriptive Distribution
Examples of Dummy Distributions
Consequences
Templates and Modules
Problems with 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
A Possible Solution
The Next Problem
Extrinsic Procedures
Extrinsic Procedure Example
Extrinsic Example Continued
Extrinsic Example Continued
Extrinsic Example Continued
Rules for Extrinsic Procedures
Uses of Extrinsics
Extrinsic instead of
INDEPENDENT
Calls to the NAG Library
New Intrinsics in HPF
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
Array Combining Scatter Functions II
Prefix and Suffix Functions
Prefix and Suffix Functions II
Prefix and Suffix Functions III
SEGMENT
and
EXCLUSIVE
Array Sorting Functions
Example of Array Sorting Functions
Further Example of Array Sorting Functions
Storage and Sequence Association
Dual Fortran 90 and HPF Codes
Full HPF
HPF 2
HPF Kernel
Adam Marshall ©University of Liverpool, 1996
Wed Oct 9 18:39:09 BST 1996