the current status of fortran 90 and fortran 95 - new … · the current status of fortran 90 and...

42
The Current Status of Fortran 90 and Fortran 95 John Reid CISD, Rutherford Appleton Laboratory 16 January 1996

Upload: truonglien

Post on 03-Jul-2018

296 views

Category:

Documents


13 download

TRANSCRIPT

Page 1: The Current Status of Fortran 90 and Fortran 95 - new … · The Current Status of Fortran 90 and Fortran 95 John Reid ... Fortran 95 is a minor extension of Fortran 90. Its ... Fortran

The Current Status ofFortran 90 and Fortran 95

John Reid

CISD, Rutherford Appleton Laboratory

16 January 1996

Page 2: The Current Status of Fortran 90 and Fortran 95 - new … · The Current Status of Fortran 90 and Fortran 95 John Reid ... Fortran 95 is a minor extension of Fortran 90. Its ... Fortran

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.

Page 3: The Current Status of Fortran 90 and Fortran 95 - new … · The Current Status of Fortran 90 and Fortran 95 John Reid ... Fortran 95 is a minor extension of Fortran 90. Its ... Fortran

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

Page 4: The Current Status of Fortran 90 and Fortran 95 - new … · The Current Status of Fortran 90 and Fortran 95 John Reid ... Fortran 95 is a minor extension of Fortran 90. Its ... Fortran

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

Page 5: The Current Status of Fortran 90 and Fortran 95 - new … · The Current Status of Fortran 90 and Fortran 95 John Reid ... Fortran 95 is a minor extension of Fortran 90. Its ... Fortran

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.

Page 6: The Current Status of Fortran 90 and Fortran 95 - new … · The Current Status of Fortran 90 and Fortran 95 John Reid ... Fortran 95 is a minor extension of Fortran 90. Its ... Fortran

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.

Page 7: The Current Status of Fortran 90 and Fortran 95 - new … · The Current Status of Fortran 90 and Fortran 95 John Reid ... Fortran 95 is a minor extension of Fortran 90. Its ... Fortran

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

[email protected]

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

Page 8: The Current Status of Fortran 90 and Fortran 95 - new … · The Current Status of Fortran 90 and Fortran 95 John Reid ... Fortran 95 is a minor extension of Fortran 90. Its ... Fortran

6

Libraries

Nag: A collection of modules, based on theirFortran 77 library

Visual Numerics (IMSL): A collection ofmodules, emphasizing use of definedoperators

Page 9: The Current Status of Fortran 90 and Fortran 95 - new … · The Current Status of Fortran 90 and Fortran 95 John Reid ... Fortran 95 is a minor extension of Fortran 90. Its ... Fortran

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

Page 10: The Current Status of Fortran 90 and Fortran 95 - new … · The Current Status of Fortran 90 and Fortran 95 John Reid ... Fortran 95 is a minor extension of Fortran 90. Its ... Fortran

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

Page 11: The Current Status of Fortran 90 and Fortran 95 - new … · The Current Status of Fortran 90 and Fortran 95 John Reid ... Fortran 95 is a minor extension of Fortran 90. Its ... Fortran

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.

Page 12: The Current Status of Fortran 90 and Fortran 95 - new … · The Current Status of Fortran 90 and Fortran 95 John Reid ... Fortran 95 is a minor extension of Fortran 90. Its ... Fortran

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

Page 13: The Current Status of Fortran 90 and Fortran 95 - new … · The Current Status of Fortran 90 and Fortran 95 John Reid ... Fortran 95 is a minor extension of Fortran 90. Its ... Fortran

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

Page 14: The Current Status of Fortran 90 and Fortran 95 - new … · The Current Status of Fortran 90 and Fortran 95 John Reid ... Fortran 95 is a minor extension of Fortran 90. Its ... Fortran

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(:)

Page 15: The Current Status of Fortran 90 and Fortran 95 - new … · The Current Status of Fortran 90 and Fortran 95 John Reid ... Fortran 95 is a minor extension of Fortran 90. Its ... Fortran

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

Page 16: The Current Status of Fortran 90 and Fortran 95 - new … · The Current Status of Fortran 90 and Fortran 95 John Reid ... Fortran 95 is a minor extension of Fortran 90. Its ... Fortran

14

Example

a cos(x )∑ i ii=1,n

SUM ( A * COS(X))

Notes:

(i) SUM is transformational

(ii) * and COS are elemental

Page 17: The Current Status of Fortran 90 and Fortran 95 - new … · The Current Status of Fortran 90 and Fortran 95 John Reid ... Fortran 95 is a minor extension of Fortran 90. Its ... Fortran

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

Page 18: The Current Status of Fortran 90 and Fortran 95 - new … · The Current Status of Fortran 90 and Fortran 95 John Reid ... Fortran 95 is a minor extension of Fortran 90. Its ... Fortran

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.

Page 19: The Current Status of Fortran 90 and Fortran 95 - new … · The Current Status of Fortran 90 and Fortran 95 John Reid ... Fortran 95 is a minor extension of Fortran 90. Its ... Fortran

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

Page 20: The Current Status of Fortran 90 and Fortran 95 - new … · The Current Status of Fortran 90 and Fortran 95 John Reid ... Fortran 95 is a minor extension of Fortran 90. Its ... Fortran

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

Page 21: The Current Status of Fortran 90 and Fortran 95 - new … · The Current Status of Fortran 90 and Fortran 95 John Reid ... Fortran 95 is a minor extension of Fortran 90. Its ... Fortran

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.

Page 22: The Current Status of Fortran 90 and Fortran 95 - new … · The Current Status of Fortran 90 and Fortran 95 John Reid ... Fortran 95 is a minor extension of Fortran 90. Its ... Fortran

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.

Page 23: The Current Status of Fortran 90 and Fortran 95 - new … · The Current Status of Fortran 90 and Fortran 95 John Reid ... Fortran 95 is a minor extension of Fortran 90. Its ... Fortran

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

Page 24: The Current Status of Fortran 90 and Fortran 95 - new … · The Current Status of Fortran 90 and Fortran 95 John Reid ... Fortran 95 is a minor extension of Fortran 90. Its ... Fortran

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

Page 25: The Current Status of Fortran 90 and Fortran 95 - new … · The Current Status of Fortran 90 and Fortran 95 John Reid ... Fortran 95 is a minor extension of Fortran 90. Its ... Fortran

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.

Page 26: The Current Status of Fortran 90 and Fortran 95 - new … · The Current Status of Fortran 90 and Fortran 95 John Reid ... Fortran 95 is a minor extension of Fortran 90. Its ... Fortran

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.

Page 27: The Current Status of Fortran 90 and Fortran 95 - new … · The Current Status of Fortran 90 and Fortran 95 John Reid ... Fortran 95 is a minor extension of Fortran 90. Its ... Fortran

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

Page 28: The Current Status of Fortran 90 and Fortran 95 - new … · The Current Status of Fortran 90 and Fortran 95 John Reid ... Fortran 95 is a minor extension of Fortran 90. Its ... Fortran

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.

Page 29: The Current Status of Fortran 90 and Fortran 95 - new … · The Current Status of Fortran 90 and Fortran 95 John Reid ... Fortran 95 is a minor extension of Fortran 90. Its ... Fortran

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

Page 30: The Current Status of Fortran 90 and Fortran 95 - new … · The Current Status of Fortran 90 and Fortran 95 John Reid ... Fortran 95 is a minor extension of Fortran 90. Its ... Fortran

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.

Page 31: The Current Status of Fortran 90 and Fortran 95 - new … · The Current Status of Fortran 90 and Fortran 95 John Reid ... Fortran 95 is a minor extension of Fortran 90. Its ... Fortran

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

Page 32: The Current Status of Fortran 90 and Fortran 95 - new … · The Current Status of Fortran 90 and Fortran 95 John Reid ... Fortran 95 is a minor extension of Fortran 90. Its ... Fortran

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

Page 33: The Current Status of Fortran 90 and Fortran 95 - new … · The Current Status of Fortran 90 and Fortran 95 John Reid ... Fortran 95 is a minor extension of Fortran 90. Its ... Fortran

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

Page 34: The Current Status of Fortran 90 and Fortran 95 - new … · The Current Status of Fortran 90 and Fortran 95 John Reid ... Fortran 95 is a minor extension of Fortran 90. Its ... Fortran

32

New obsolescent features

Computed GO TO

Statement functions

DATA among executables

Assumed-length character functions

Fixed source form

Character * declarations

Page 35: The Current Status of Fortran 90 and Fortran 95 - new … · The Current Status of Fortran 90 and Fortran 95 John Reid ... Fortran 95 is a minor extension of Fortran 90. Its ... Fortran

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.

Page 36: The Current Status of Fortran 90 and Fortran 95 - new … · The Current Status of Fortran 90 and Fortran 95 John Reid ... Fortran 95 is a minor extension of Fortran 90. Its ... Fortran

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.

Page 37: The Current Status of Fortran 90 and Fortran 95 - new … · The Current Status of Fortran 90 and Fortran 95 John Reid ... Fortran 95 is a minor extension of Fortran 90. Its ... Fortran

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.

Page 38: The Current Status of Fortran 90 and Fortran 95 - new … · The Current Status of Fortran 90 and Fortran 95 John Reid ... Fortran 95 is a minor extension of Fortran 90. Its ... Fortran

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.

Page 39: The Current Status of Fortran 90 and Fortran 95 - new … · The Current Status of Fortran 90 and Fortran 95 John Reid ... Fortran 95 is a minor extension of Fortran 90. Its ... Fortran

37

Allocation status always defined

The undefined status, which cannot even betested for, is abolished, though the status issometimes processor defined.

Page 40: The Current Status of Fortran 90 and Fortran 95 - new … · The Current Status of Fortran 90 and Fortran 95 John Reid ... Fortran 95 is a minor extension of Fortran 90. Its ... Fortran

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.

Page 41: The Current Status of Fortran 90 and Fortran 95 - new … · The Current Status of Fortran 90 and Fortran 95 John Reid ... Fortran 95 is a minor extension of Fortran 90. Its ... Fortran

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)

Page 42: The Current Status of Fortran 90 and Fortran 95 - new … · The Current Status of Fortran 90 and Fortran 95 John Reid ... Fortran 95 is a minor extension of Fortran 90. Its ... Fortran

40

Conclusions

Fortran 90 is here:

compilers widely available

plenty of books

tools appearing

evolving (Fortran 95, Fortran 2000)