the current status of fortran 90 and fortran 95 - new … · the current status of fortran 90 and...
TRANSCRIPT
The Current Status ofFortran 90 and Fortran 95
John Reid
CISD, Rutherford Appleton Laboratory
16 January 1996
Abstract
Fortran 90 replaced Fortran 77 (F77) as theInternational (ISO) and American (ANSI) Fortranstandard in 1991. It is an upward-compatible extensionof Fortran 77, which will preserve the vast investmentin existing codes. Of particular benefit for scientificcomputing are dynamic storage, assumed-shape arrays,optional arguments, structures, and pointers. Softwarecan be better engineered with interfaces that are muchmore user friendly.
I tell you something of my personal experience inusing compilers (I have access to the Nag, EPC,Fujitsu, DEC, IBM, and CRAY compilers), and explainthe design of two packages that exploit the newfeatures and are part of the latest release of the HarwellSubroutine Library. One is for automaticdifferentiation and the other for frontal solution offinite-element equations.
Fortran 95 is a minor extension of Fortran 90. Itsdesign was finalized in November 1995 and it is now inits final stages of acceptance as a standard. I willexplain the differences between Fortran 95 and Fortran90.
1
History
1966 First computer language standard
1978 Fortran 77 standard
1987 First draft 400 letters
1988 ISO Paris meeting breaks deadlock
1989 Second draft 150 letters
1990 Third draft 29 letters
1991 ISO standard
1995 Fortran 95 design finalized
1996 (Oct) Fortran 95 ISO standard
2000 Fortran 2000 design finalized
2001 Fortran 2000 ISO standard
2
Present situation re compilersNag: Versions for most Unix platforms, VMS,
PCs (with Salford).IBM: For RS/6000. HPF coming.EPC: Optimizing compiler for SUN, RS/6000,
MIPS, ICL DRS6000, SGI.Cray: For Crays and SUNsSun: From Cray.DEC: Optimizing compiler, with HPF.Fujitsu: For SUNs.Lahey: For PCs.SGI: For SGI.HP: with EPC for HP and Convex.NaSoftware: For PCs and SPARC, with HPF.Microsoft: Uses Nag front end.+ More
3
Books
ISO, Fortran 90 (standard), ISO Publications Dept.,Case Postale 56, 1211 Geneva 20, [email protected].
Metcalf and Reid, Fortran 90 explained, OUP (alsoavailable in French, Japanese and Russian).
Counihan, Fortran 90, Pitman.
Adams, Brainerd, Martin, Smith, and Wagener,Fortran 90 handbook, McGraw Hill.
Brainerd, Goldberg, and Adams, Programmer’s guideto Fortran 90, second edition, Unicomp.
Morgan and Schonfelder, Programming in Fortran 90,Alfred Waller.
Kerrigan, Migrating to Fortran 90, O’ReillyAssociates.
Wille, Advanced Scientific Fortran 90, Wiley.
Meissner, Fortran 90, PWS Kent, Boston.
Schick and Silverman, Fortran 90 and EngineeringComputation, Wiley.
Chamberland, Fortran 90, A Reference Guide,Prentice Hall.
4
Hahn, Fortran 90 for Scientists and Engineers,Edward Arnold.
Gehrke, Fortran 90 Language Guide, Springer.
Ellis, Philips, Lahey, Fortran 90 Programming,Addison Wesley.
Adams, Brainerd, Martin and Smith, Fortran Top90-Ninety Key Features of Fortran 90, Unicomp.
Chivers and Sleightholme, Introducing Fortran 90,Springer-Verlag.
Vowels, Introduction to Fortran 90, Algorithms, andStructured Programming, Vol. 1 Vowels.
Ortega, Introduction to Fortran 90 for ScientificComputing, Saunders College Publishing.
Smith, Programming in Fortran 90, Wiley.
Mayo and Cwiakala, Schaum’s Outline of Theory andPraxis – Programming in Fortran 90, McGraw Hill.
Redwine, Upgrading to Fortran 90, Springer-Verlag.
More in other languages.
5
comp-fortran-90
Bernd Eggen, formerly of University of Sussex,has established an email platform for discussionof Fortran 90 and HPF.
To join, send a message to
containing as its only line:
join comp-fortran-90 joe bloggs
World Wide Web
For information on Fortran 90 products:
http://www.fortran.com/fortran
6
Libraries
Nag: A collection of modules, based on theirFortran 77 library
Visual Numerics (IMSL): A collection ofmodules, emphasizing use of definedoperators
7
Tools
Nag: A collection of simple tools, including averifier and a source-form translator.
PSR: VAST-90 – converts to and fromFortran [email protected]
APR: FORGE [email protected]
Parasoft: Converts to Fortran [email protected]
Metcalf: Fortran 90 program that convertsFortran 77 program to new source form,tidies, makes interfaces.ftp: jkr.cc.rl.ac.uk pub/MandR
8
Plan for this talk
(a) Summary of Fortran 90
(b) Ex 1. Automatic differentiation
(c) Ex 2. Frontal solutions
(d) Experience with compilers
(e) Fortran 95
9
Design objectives
greater expressive power – arrays.
enhanced safety – implicit none.
enhanced regularity – real/double.
extra fundamental features –dynamic storage.
fix Fortran 77 problems –nonadvancing i/o.
better hardware exploitation – arrays.
improve portability –parameterized types.
10
Language evolution
No deleted featuresMoving to a f90 compiler is like movingto a f77 compiler with extensions.
The following are obsolescent andmight be deleted from the nextstandard:
Arithmetic IFNoninteger DO index *DO termination other than CONTINUEor END DOShared DO terminationAlternate returnPAUSE *ASSIGN and assigned GO TO *Assigned FORMAT specifiersBranching to END IF *H edit descriptor *
* Planned for deletion in Fortran 95
11
Source form
A = B; C = C + D ! This is a commentCase insignificant except in character contextNames up to 31 chars, including _" and ’ for character delimitersCharacter set includes: ! " % & ; ? [ ]
New form only:
Cols 1, 6, 72 of no significance& for continuation:
a = b &+ c
No blanks in tokens, except END IF, etc.Lines up to 132 charsStatements up to 40 lines
12
Dynamic storage
(a) AutomaticSUBROUTINE F90(N)
INTEGER NREAL W(N)
(b) AllocatableREAL, ALLOCATABLE :: A(:)
READ(*,*) NALLOCATE (A(N)). . .
DEALLOCATE (A)
(c) PointersREAL, POINTER :: A(:)
13
Array features
Whole array expressions and assignments
Elemental intrinsics
Transformational intrinsics
Array constants
Array-valued functions
Zero-sized arrays
Array constructors
Array sections
WHERE
Assumed-shape dummy arguments
14
Example
a cos(x )∑ i ii=1,n
SUM ( A * COS(X))
Notes:
(i) SUM is transformational
(ii) * and COS are elemental
15
Procedures
May be recursive
May be internal (one level)
Keyword calls
Optional arguments
Intent
Generic name
Assumed-shape array arguments
Interface blocks for external and dummyprocedures
16
Structures and derived types
Structures allow all the data pertinent to aparticular problem to be collected in oneobject.
Derived types allow existing code (with +, –,/, *, ...) to be reused for
intervals
values and their derivatives (automaticdifferentiation)
strings
etc.
17
Type parameters
All intrinsic types have a ‘kind’ parameter
Precision can be parameterized
Intrinsics to enquire about the environment
Intrinsics to manipulate reals
Complex no longer second class
18
Pointers
Automatic dereferencing
Notation for pointer assignment:POINTER => TARGET
Targets must be other pointers or have thetarget attribute
Type and rank agreement
Pointer dummy arguments and functionresults
Allocate and deallocate
19
ModulesCollections of
datatypesproceduresprocedure interfaces
Definitions made once and then used:USE JKR
Libraries likely to become libraries of modules.Advantages:
name hidingprivate datainterface checkssingle definitiongeneric names
Note: modules must be visible at compile time.
20
Automatic differentiation
Joint work with John Pryce and David Cowey ofRMCS.
If b and b are variables that depend on theindependent variables x , i = 1, 2,..., n, and theiri
derivatives are known, we can calculate thederivatives of
a = b ∗ c
by the chain rule,
∂a ∂b ∂c= ∗ c + b ∗∂x ∂x ∂xi i i
Define a derived type that holds values andderivatives. Overload all the operators withfunctions that apply the chain rule.
21
How to use HSL_AD01
(i) add USE statement
(ii) declare all independent and dependentvariables to be of type AD01_REAL withinitial value AD01_UNDEFINED
(iii) initialize the module, specifying theindependent variables x and their values
(iv) compute values of the dependentvariables
(v) subroutine calls yield the requiredderivatives
22
Language supported
(i) +, –, *, /, **, ==, /=, >=, >, <=, <ad ad, ad r, ad i, r ad, i ad
(ii) atan2, max min, signad ad, ad r, r ad
(iii) –, abs, acos, asin, atan, cos, cosh, exp, log,log10, sin, sinh, sqrt, tan, tanhad
(iv) aint, anint: ad => r
(v) int, nint: ad => i
(vi) =: ad = ad, ad = r, ad = i, i = adNB r = ad omitted
No array operations at present
23
Fortran 90 version ofHSL frontal code MA42
Joint work with Jennifer Scott
Motivation: Nested use of MA42, e.g.:
Subdivide problem in 4,
use MA42 to produce Schur complementsfor each on interfaces,
apply MA42 to the interface problem.
Very complicated because of the need forworkarrays, direct-access files, long argumentlists.
24
Solution: collect everything about a problemin one object
USE HSL_MA42TYPE(MA42_DATA) DATACALL MA42_INITIALIZE (DATA)I = 1DO
READ . . .CALL MA42_ANALYSE (LIST(1:LEN),DATA)IF(FINAL) EXIT
END DODO J = 1,I
READ . . .CALL MA42_FACTORIZE (LIST(1:LEN), &
REALS(1:LEN,1:LEN),DATA)END DOREAD . . .CALL MA42_SOLVE (B,X,DATA)
The module looks after everything in DATA,except a few control or informative variables.
25
Options obtained by:
Extra calls, e.g.CALL MA42_FILES(LENBUF,LENFILE,DATA)
Optional arguments, e.g.CALL MA42_SOLVE(B,X,DATA,TRANS)
Setting components of the data structureDATA%ALPHA = 0.001
accessing componentsFLOP_COUNT = DATA%FLOPS
26
Personal experience with compilers
Comment: Since I am developing software, Iwant good diagnostics and good compile speed.Less interested in run speed.
Also, it is not my practice to use interactivedebugging.
27
1. EPC – epcf90 on SPARC 10, SunOS
This is my ‘workhorse’.
fast compilation
checks unassigned variables, subscripts,interfaces
optimized object code
marvellous ‘dumps’ that show the valuesof all variables accessible at the point oftermination and up the call chain
interactive debugger (Solaris) said to beexcellent
28
2. Nag – f90 on SPARC 10, SunOS
quite fast compilation
checks subscripts, interfaces
execution speed improving
user is unaware of C intermediate code,but it is sometimes helpful to look at it.
29
3. Fujitsu – frt on SPARC 10, SunOS
most robust of them all
marvellous checks on unassignedvariables, subscripts, interfaces
pretty printing
checks on which statements executed
poor compilation speed
wide range of optimization choices
very slow execution with full checks
30
4. CRAY – f90 on Y-MP
robust
good optimization of Fortran 77 code
using modules awkward
5. IBM – xlf on RS/6000
robust
good optimization
6. Digital – f90 on unix alpha
profiling feature very useful
wide range of optimization choices
31
Plans for Fortran 95
Minor revision that incorporates items in thecorrigenda and editorial improvements, andthese new features:
FORALLNested WHEREPure proceduresElemental proceduresPointer initializationAutomatic component initializationAllocation status always definedUser procedures in specificationsCPU_TIMEMinor changes
32
New obsolescent features
Computed GO TO
Statement functions
DATA among executables
Assumed-length character functions
Fixed source form
Character * declarations
33
Forall
It is essentially an array assignment expressedwith the help of indices. Some examples:
FORALL (I=1:N) A(I, I) = X(I)
FORALL (I=1:N, J=1:M) A(I, J) = I+J
FORALL(I=1:N, J=1:N, Y(I, J)/=0.) &X(J, I) = 1.0/Y(I, J)
The FORALL construct also exists.
34
Pure procedures
Free of side effects:
(i) if a function, does not alter any dummyargument;
(ii) does not alter any part of a variableaccessed by host or use association;
(iii) contains no local variable with the SAVEattribute;
(iv) performs no operation on an external file;(v) contains no STOP statement.
Needed for procedures called in a FORALL.
Very strict rules to ensure that purity can bechecked at compile time.
Suitable for specification expressions.
35
Elemental procedures
Written for scalars, but may be called for arrays.Must satisfy the requirements for a pureprocedure.
In addition, all dummy arguments and functionresults must be scalar variables without thepointer attribute.
36
Pointer initialization
REAL, POINTER :: VECTOR(:) => NULL()
Automatic object initialization
Values declared in the type specification, e.g.,TYPE ENTRY
REAL :: VALUE = 2.0INTEGER INDEXTYPE(ENTRY), POINTER :: NEXT=>NULL()
END TYPE ENTRY
Dearly needed for HSL_AD01.
37
Allocation status always defined
The undefined status, which cannot even betested for, is abolished, though the status issometimes processor defined.
38
Technical reports
Technical reports are being developed for
Handling floating point exceptions
Calls to C
Allocatable dummy arguments, functionresults, and structure components
It is intended that these be completed in 1996and for the features to be adopted as part ofFortran 2000 unless snags are found.
A ‘beta test’ for new language features.
39
Fortran 2000
Plans are still fluid. Likely to include:
Exception handling
Enhancements to allocatable arrays
Calling C
Parameterized data types
Derived type I/O
Minor enhancements
Will probably be a small revision (IMHO)
40
Conclusions
Fortran 90 is here:
compilers widely available
plenty of books
tools appearing
evolving (Fortran 95, Fortran 2000)