A P P E N D I X  D

Fortran Directives Summary

This appendix summarizes the directives recognized by f95 Fortran compiler:


D.1 General Fortran Directives

General directives accepted by f95 are described in Chapter 2.

TABLE D-1 Summary of General Fortran Directives

Format

 

C$PRAGMA keyword ( a [ , a ] ... ) [ , keyword ( a [ , a ] ... ) ] ,...

C$PRAGMA SUN keyword ( a [ , a ] ... ) [ , keyword ( a [ , a ] ... ) ] ,...

C$PRAGMA SPARC keyword ( a [ , a ] ... ) [ , keyword ( a [ , a ] ... ) ] ,...

 

Comment-indicator in column 1 may be c, C, !, or *. (We use C in these examples. f95 free-format must use !.)

C Directive

C$PRAGMA C(list)

Declares a list of names of external functions as C language routines.

IGNORE_TKR Directive

C$PRAGMA IGNORE_TKR {name {, name} ...}

The compiler ignores the type, kind, and rank of the specified dummy argument names appearing in a generic procedure interface when resolving a specific call.

UNROLL Directive

C$PRAGMA SUN UNROLL=n

 

Advises the compiler that the following loop can be unrolled to a length n.

WEAK Directive

C$PRAGMA WEAK(name[=name2])

 

Declares name to be a weak symbol, or an alias for name2.

OPT Directive

C$PRAGMA SUN OPT=n

 

Set optimization level for a subprogram to n.

NOMEMDEP Directive

C$PRAGMA SUN NOMEMDEP

 

Assert there are no memory dependencies in the following loop.

(Requires -parallel or -explicitpar.)

PIPELOOP Directive

C$PRAGMA SUN PIPELOOP=n

 

Assert dependency in loop between iterations n apart.

PREFETCH Directives

C$PRAGMA SPARC_PREFETCH_READ_ONCE (name)

C$PRAGMA SPARC_PREFETCH_READ_MANY (name)

C$PRAGMA SPARC_PREFETCH_WRITE_ONCE (name)

C$PRAGMA SPARC_PREFETCH_WRITE_MANY (name)

 

Request compiler generate prefetch instructions for references to name. (Requires -xprefetch option.)

ASSUME Directives

C$PRAGMA [BEGIN} ASSUME (expression [,probability])

C$PRAGMA END ASSUME

Make assertions about conditions at certain points in the program that the compiler can assume are true.



D.2 Special Fortran 95 Directives

The following directives are only available with f95. See Section 4.8.2, FIXED and FREE Directives for details.

TABLE D-2 Special Fortran 95 Directives

Format

!DIR$ directive : initial line

!DIR$& ... : continuation line

With fixed-format source, C is also accepted as a directive-indicator: CDIR$ directive... ; the line must start in column 1.
With free-format source, the line may be preceded by blanks.

FIXED/FREE Directives

!DIR$ FREE
!DIR$ FIXED

These directives specify the source format of the lines following the directive. They apply to the rest of the source file in which they appear, up to the next FREE or FIXED directive.



D.3 Fortran 95 OpenMP Directives

The Sun Fortran 95 compiler supports the OpenMP 2.0 Fortran API. The -openmp compiler flag enables these directives. (See Section , -openmp[={parallel|noopt|stubs|none}]).

See the OpenMP API User's Guide for complete details.


D.4 Sun Parallelization Directives

OpenMP parallelization is the preferred parallelization model with Fortran 95. Sun-style parallelization directives are described here for legacy applications, and are detailed in the chapter on parallelization in the Fortran Programming Guide.

TABLE D-3 Sun-Style Parallelization Directives Summary

Format

C$PAR directive [optional_qualifiers] : initial line
C$PAR& [more_qualifiers] : continuation line

 

Fixed format, the directive-indicator may be C (as shown), c, *, or !.
Separate multiple qualifiers with commas. Characters beyond column 72 ignored unless -e compiler option specified.

TASKCOMMON Directive

C$PAR TASKCOMMON block_name

Declares variables in common block block_name as thread-private: private to a thread, but global within the thread. Declaring a common block TASKCOMMON requires that this directive appear after every common declaration of that block.

DOALL Directive

C$PAR DOALL [qualifiers]

Parallelize DO loop that follows. Qualifiers are:

PRIVATE(list) declare names on list PRIVATE
SHARED(list) declare names on list SHARED
MAXCPUS(n) use no more than n threads
READONLY(list) listed variables not modified in loop
SAVELAST save last value of all private variables
STOREBACK(list) save last value of listed variables
REDUCTION(list) listed variables are reduction variables
SCHEDTYPE(type) use scheduling type: (default is STATIC)
STATIC
SELF(nchunk)
FACTORING[(m)]
GSS[(m)]

DOSERIAL Directive

C$PAR DOSERIAL

Disables parallelization of the loop that follows.

DOSERIAL* Directive

C$PAR DOSERIAL*

Disables parallelization of the loop nest that follows.



D.5 Cray Parallelization Directives

Cray-style parallelization directives are detailed in the chapter on parallelization in the Fortran Programming Guide. Requires -mp=cray compiler option.

TABLE D-4 Cray Parallelization Directives Summary

Format

CMIC$ directive qualifiers : initial line
CMIC$& [more_qualifiers] : continuation line

Fixed format. Directive-indicator may be C (as shown here), c, *, or !. With f95 free-format, leading blanks can appear before !MIC$.

DOALL Directive

CMIC$ DOALL SHARED(list), PRIVATE(list) [, more_qualifiers]

Parallelize loop that follows. Qualifiers are:

Scoping qualifiers are required (unless list is empty)--all variables in the loop must appear in a PRIVATE or SHARED clause:
PRIVATE(list) declare names on list PRIVATE
SHARED(list) declare names on list SHARED
AUTOSCOPE automatically determine scope of variables

The following are optional:

MAXCPUS(n) use no more than n threads
SAVELAST save last value of all private variables
Only one scheduling qualifier may appear:
GUIDED equivalent to Sun-style GSS(64)
SINGLE equivalent to Sun-style SELF(1)
CHUNKSIZE(n) equivalent to Sun-style SELF(n)
NUMCHUNKS(m) equivalent to Sun-style SELF(n/m)
The default scheduling is Sun-style STATIC, for which there is no Cray-style equivalent. Interpretations of these scheduling qualifiers differ between Sun and Cray style. Check the Fortran Programming Guide for details.

TASKCOMMON Directive

CMIC$ TASKCOMMON block_name

Declares variables in the named common block as thread-private-- private to a thread, but global within the thread. Declaring a common block TASKCOMMON requires that this directive appear immediately after every common declaration of that block.

DOSERIAL Directive

CMIC$ DOSERIAL

Disables parallelization of the loop that follows.

DOSERIAL* Directive

CMIC$ DOSERIAL*

Disables parallelization of the loop nest that follows.