Compaq Fortran
Compaq Fortran
Release Notes for Compaq Tru64 UNIX Systems
December 1999
This document contains information about Compaq Fortran
for Compaq® Tru64tm UNIX® (formerly
DIGITAL® UNIX) Alpha Systems.
Software Version:
Compaq Fortran
Version 5.3
Compaq Computer Corporation
Houston, Texas
First release, June 1994
Last Revision, December 1999
Compaq Computer Corporation makes no representations that the use of
its products in the manner described in this publication will not
infringe on existing or future patent rights, nor do the descriptions
contained in this publication imply the granting of licenses to make,
use, or sell equipment or software in accordance with the description.
Possession, use, or copying of the software described in this
publication is authorized only pursuant to a valid written license from
Compaq or an authorized sublicensor.
© Compaq Computer Corporation 1999. All Rights Reserved
Compaq, the Compaq Logo, DEC, DIGITAL, VAX, and VMS are registered in
the U.S. Patent and Trademark Office.
AlphaGeneration, AlphaServer, Bookreader, DECchip, DEC Fortran,
DECwindows, DEC FUSE, DECwindows, OpenVMS, Tru64 UNIX, ULTRIX, and VAX
FORTRAN are trademarks of Compaq Computer Corporation.
Microsoft, PowerStation, NT, and Windows are either trademarks or
registered trademarks of Microsoft Corporation.
CRAY is a trademark of Cray Research, Inc.
IEEE is a registered trademark of the Institute of Electrical and
Electronics Engineers, Inc.
Linux is a trademark of Linus Torvalds.
OpenMP is a trademark of the OpenMP Architecture Review Board.
PostScript is a trademark of Adobe Systems, Inc.
Motif, OSF, and OSF/1 are trademarks of the Open Software Foundation,
Inc.
UNIX is a registered trademark in the United States and other countries
licensed exclusively through X/Open Company Ltd.
All other trademarks and registered trademarks are the property of
their respective holders.
This document is available on CD-ROM.
Chapter 1
Compaq Fortran Version 5.3 Release Notes
This chapter contains release notes for Compaq Fortran Version
5.3 (changes for this release are described in Section 1.5).
This chapter contains the following sections:
1.1 Product Terminology Changes
This document uses the following new or changed product names:
- "Compaq Fortran" was previously called "DIGITAL
Fortran 90".
- "Compaq Fortran 77" was previously called "DIGITAL
Fortran 77".
- "Compaq Fortran" refers to the combined packaging of the
Compaq Fortran 90 and Compaq Fortran 77 products. It also refers to the
Compaq Fortran language.
- Compaq Fortran 90 and Compaq Fortran 77 product version numbers are
now the same.
- The operating system formerly known as "DEC OSF/1" and
"DIGITAL UNIX" is now called "Compaq Tru64 UNIX".
- The Compaq Extended Math Libraries {CXML} was previously called the
DIGITAL Extended Math Libraries {DXML}.
1.2 Overview
Compaq Fortran conforms to the Fortran 95 Standard, Fortran 90
Standard, and previous Fortran standards. It also includes support for
High Performance Fortran (HPF), and contains many but not all of Compaq
Fortran 77's extensions to the FORTRAN-77 standard. Except in rare
instances, a valid FORTRAN-77 program is also a valid Fortran 95
program.
Compaq Fortran fully supports the Fortran 95 Standard (ISO/IEC
1539-1:1997(E)) and the multi-vendor OpenMPtm Fortran
Specification, including support for directed parallel processing using
OpenMP directives on shared memory multiprocessor systems.
The Compaq Fortran User Manual for Tru64 UNIX and Linux Alpha Systems contains a detailed description of Compaq Fortran 77
source language compatibility. Provided the types and shapes of the
actual and formal arguments agree, routines compiled with Compaq
Fortran 77 can call (or be called by) routines compiled with Compaq
Fortran.
1.3 Installation and Minimum Operating Systems Version
Compaq Fortran Version 5.3 requires Version 4.0 (or
later) of the Compaq Tru64 UNIX operating system. Use of parallel
features requires Version 4.0D (or later) of the Compaq Tru64 UNIX
system.
For a detailed description of the installation procedure, see the
Compaq Fortran Installation Guide for Tru64 UNIX Systems.
You may also send comments, questions and suggestions about the Compaq
Fortran product to the following mail address:
Please note that this address is for informational inquiries and is not
a formal support channel.
If you have Internet access and a World Wide Web (WWW) browser, you are
welcome to view the Compaq Fortran home page, located at:
http://www.compaq.com/fortran
1.4 Software Versions
1.4.1 Contents of the Version 5.3 kit
The Compaq Fortran Version 5.3 kit consists of the following
setld sets:
- DFABASE530---Compaq Fortran 90 and 77 V5.3 for Compaq Tru64 UNIX
Alpha Systems
- DFADOC530 ---Compaq Fortran V5.3 Release Notes and Man Pages
- DFACOM530 ---Compaq Fortran V5.3 Tools and their Manpages
- DFARTL388 ---Compaq Fortran Runtime Support for Compaq Tru64 UNIX
Alpha Systems
- OTABASE205---Compaq Compiled Code Support Library
- HPFLIBS170---High Performance Fortran Run-Time Libraries
- XMDCOM360 ---the CXML common subset files
- XMDLIB4360---the CXML archive and shared libraries (serial and
parallel) for EV4 systems
- XMDLIB5360---the CXML archive and shared libraries (serial and
parallel) for EV5 systems
- XMDLIB6360---the CXML archive and shared libraries (serial and
parallel) for EV6 systems
- XMDSCI360 ---the SCIPORT Cray compatibility library and manpages
- XMDMAN360 ---the CXML manpages
- XMDHTM360 ---the CXML manpages in HTML format
The Compaq Fortran DFABASE and DFACOM subsets include the Compaq
Fortran 95/90 and Compaq Fortran 77 compilers and associated
documentation.
The XMD subsets contain the CXML routines, included in the Compaq
Fortran kit as external routines.
CXML is distributed as a Development kit that allows you to link an
application program with the CXML library and then run the executable
image. No license is required. The CXML subsets are independent from
one another, except that the user must link in the CXML library (either
serial or parallel) after linking with the SCIPORT library.
1.4.2 Contents of High Performance Fortran in 5.3
The HPFLIBS subset contains High Performance Fortran (HPF) support and
contains:
- Both the nonparallel (serial) and parallel versions of the High
Performance Fortran (HPF) run-time library
- Associated reference pages for HPF_LIBRARY and HPF_LOCAL_LIBRARY,
including intro(3hpf)
In order to use the HPF Scalar libraries, the HPFLIBS subset must be
installed.
As in Fortran 90 Version 5.2, the HPFLIBS subset replaces the old
PSESHPF subset. If you previously installed the PSESHPF subset you do
not need to delete it. If you choose to delete it, delete it before you
install the Fortran 90 V5.3 HPFLIBS170 subset. If you delete the
PSESHPF subset after you install the Fortran HPFLIBS170 subset, you
need to delete the HPFLIBS170 subset and then reinstall it. For
information on using the
setld
command to check for and delete subsets, see the Compaq Fortran
Installation Guide for Tru64 UNIX Systems.
To execute HPF programs compiled with the
-wsf
switch you must have both PSE160 and Fortran 90 Version 5.3 with the
HPFLIBS170 subset installed. For this release the order of the
installation is important. You must first install PSE160 and then
install Fortran 90 Version 5.3 with the HPFLIBS170 subset. The
HPFLIBS170 subset must be installed last. If you do this it will be
properly installed.
If you also need to use the latest versions of MPI and PVM, you must
install PSE180. PSE180 contains only MPI and PVM support. The support
for HPF programs compiled with the
-wsf
switch is only found in PSE160. Therefore you must install both
versions of PSE and you must install PSE180 after PSE160.
To install Compaq Fortran with HPF and MPI and PVM, install them in the
following order. The order is very important.
- Delete any old versions that you wish to delete.
- Install PSE160.
- Install Compaq Fortran Version 5.3 including the HPFLIBS170 subset.
- Install PSE180.
The HPF runtime libraries in Compaq Fortran Version 5.3 are only
compatible with PSE Version 1.6. Programs compiled with this version
will not run correctly with older versions of PSE. In addition,
programs compiled with older compilers will no longer run correctly
when linked with programs compiled with this version. Relinking is not
sufficient; programs must be recompiled and relinked.
If you cannot install these in the order described, follow these
directions to correct the installation:
- If you have installed Fortran Version 5.3 but are missing PSE160,
then install PSE160. Delete the HPFLIBS170 subset of Fortran V5.3 and
then reinstall the HPFLIBS170 subset.
- If you installed Fortran Version 5.3 first and then PSE160, then
delete the HPFLIBS170 subset of Fortran V5.3. Next, reinstall the
HPFLIBS170 subset.
- If you already have Fortran Version 5.3 and PSE160 installed but
did not install the HPFLIBS170 subset of Fortran V5.3, then simply
install the HPFLIBS170 subset.
- If you deleted any old PSESHPF subset after installing Fortran
V5.3, this will also cause problems. In this case delete the HPFLIBS170
subset of Fortran Version 5.3 and then reinstall the HPFLIBS170 subset.
- If you installed PSE180 before PSE160, then delete PSE180 and
reinstall it now.
For more information about installing PSE160, see the Compaq
Parallel Software Environment Release Notes, Version 1.6.
For more information about installing PSE180, see the Compaq
Parallel Software Environment Release Notes, Version 1.8.
1.4.3 Miscellaneous Information about the Version 5.3 Kit
For more information including disk space requirements, see
Section 3.1.1.
If you need to delete an older version of the Compaq Fortran Run-Time
Library, delete the older subset before you install a new version. If
you have installed multiple versions of the Run-Time Library and you
delete one, you must reinstall the desired Run-Time Library version
before you can correctly link Fortran programs.
The Compaq Fortran kit again includes the OTABASE subset (Compaq
Compiled Code Support Library). The new OTABASE subset supports the use
of parallel directives.
The following changes occurred to the OSFCMPLRS operating system subset
starting with Compaq Tru64 UNIX (DIGITAL UNIX) Version 4.0:
- Beginning with DIGITAL UNIX Version 4.0, the OSFCMPLRS subset now
consists of multiple subsets: OSFCMPLRS (required for program
development), OSFSDE (profiling tools), OSFLIBA (archive libraries),
OSFINCLUDE (include files), OSFATOM (
atom
tools)
1.5 New Features, Corrections, and Known Problems in Version 5.3
Version 5.3 is a minor release that includes corrections to
problems discovered since Version 5.2 was released and certain new
features.
For the Version 5.3 subset numbers, see Section 1.4.
The following topics are discussed:
1.5.1 Version 5.3 New Features
The following new Compaq Fortran features are now supported:
- The following new features are now supported:
- You can now CALL a function, ie, a routine that is declared to be a
FUNCTION can be invoked by a CALL statement. The function's return
value is discarded.
- Compaq Fortran now supports COMPLEX(KIND=16), also spelled
COMPLEX*32. This is a complex number composed of two 128-bit extended
floating point numbers (ie, REAL(KIND=16)). Complete documentation is
in the updated Compaq Fortran Language Reference Manual as well as the
/usr/lib/cmplrs/fort90/decfortran90.hlp help file. Here are some
highlights:
- COMPLEX*32 or COMPLEX(KIND=16) declares a pair of REAL*16 128-bit
reals as a complex pair. It is 32 bytes big.
- COMPLEX*32 constants are (x,y) where at least one of x and y is a
REAL*16 constant, eg, (1,2Q0).
- COMPLEX arithmetic supports + - * / ** . Mixed type arithmetic
converts everything up to COMPLEX*32 since COMPLEX*32 is the biggest.
- COMPLEX*32 can be read and written in all I/O forms.
- Command line option "-real_size 128" forces "COMPLEX" to be
COMPLEX*32and DOUBLE COMPLEX to be COMPLEX*32. "-double_size 128"
forces DOUBLE COMPLEX to be COMPLEX*32.
- Intrinsic generic functions that take COMPLEX now take COMPLEX*32.
New specific intrinsic functions for COMPLEX*32 are CQABS, QIMAG,
QCONJG, CQCOS, CQEXP, CQLOG, QREAL, CQSIN, CQSQRT, QCMPLX.
- Operations involving a COMPLEX*16 and a REAL*16 now produce a
COMPLEX*32 result. These used to produce a COMPLEX*16 result.
- The BUFFERED= keyword has been added to the OPEN and INQUIRE
statements. The default is BUFFERED='NO' for all I/O, in which case the
RTL empties its internal buffer for each WRITE. If BUFFERED='YES' is
specified and the device is a disk, the internal buffer will be filled,
possibly by many WRITEs, before it is emptied.
If the OPEN has
BUFFERCOUNT and BLOCKSIZE arguments, their product is the size in bytes
of the internal buffer. If these are not specified, the default size is
8192 bytes. This internal buffer will grow to hold the largest single
record but will never shrink.
- Character vector constructors may now have unequal length elements.
The length of each element is the maximum of the element lengths. For
example,
(/ 'ab', 'abc', 'a' /) == (/ 'ab ', 'abc', 'a ' /)
|
- The Compaq Extended Math Library (CXML) routines are updated in the
Compaq Fortran kit. See the CXML release notes in:
/usr/opt/XMDCOM360/docs/XMD360_release_note.txt
- The following new
f90
command options are now supported:
-
-arch ev67
and
-tune ev67
now provide instruction set support and performance tuning for the ev67
processor (21264A chip), which adds the count extension (CIX)
instructions POPCNT, LEADZ, and TRAILZ.
-
-align sequence
allows the components of a SEQUENCEd derived type to be aligned
according to the alignment rules set by the user. The default alignment
rules are to align components on natural boundaries. The default is
-align nosequence
which means components of a SEQUENCEd derived type will be packed,
regardless of the current alignment rules set by the user.
-
-fast
now sets
-align sequence
so that SEQUENCEd derived type components can be naturally aligned for
improved performance.
-
-fast
now sets
-arch host -tune host
.
-
-assume buffered_io
turns on buffered I/O for all Fortran logical units opened for
sequential writing. The default is
-assume nobuffered_io
.
-
-Dname=value
now allows a quoted string as
value
. For example,
-Ddate="nov 20, 1999"
passes the character string
nov 20, 1999
as the value of
date
to
cpp(1)
and to the Compaq Fortran 90 compiler.
-
-warn hpf
tells the compiler to do both syntactic and semantics checking on HPF
directives. The default is
-warn nohpf
unless
-wsf
is specified, in which case
-warn hpf
is assumed.
-
-f77rtl
tells the compiler to use the run-time behavior of Compaq Fortran 77
instead of Compaq Fortran 90. For example, this affects the output form
for NAMELIST. The default is
-nof77rtl
.
-
-mixed_str_len_arg
tells the compiler that the hidden length passed for a character
argument is to be placed immediately after its corresponding character
argument in the argument list. The default is
-nomixed_str_len_arg
, which places the hidden lengths in sequential order at the end of the
argument list.
- The file suffix
.F90
now tells the driver that the file contains Fortran 90 free-form source
that must be preprocessed by
cpp(1)
.
cpp(1)
produces a
.i90
file that is then compiled.
1.5.2 Version 5.3 Important Information
Some important information to note about this release:
- As of Compaq Fortran v5.3, the
f77
command executes the Compaq Fortran 90 compiler instead of the Compaq
Fortran 77 compiler. Use
f77 -old_f77
to execute the Compaq Fortran 77 compiler.
- There are four INCLUDE files in /usr/include that give definitions
of DFAO RTL symbols:
- for_fpe_flags.f - flags for for_set/get_fpe(3f)
- fordef.f - return values for the fp_class intrinsic
- foriosdef.f - values for STAT= IO status results
- forompdef.f - interface blocks to the omp_* routines
- PARAMETER constants ae now alloacted in a read-only PSECT.
- Files that contain declarations that will be INCLUDEd into source
code should declare data fully so that command line switches used to
compile the source code do not unexpectedly affect the INCLUDEd
declarations. For example, if I is declared INTEGER, then using the
-i2
changes I from INTEGER*4 to INTEGER*2. If I is declared INTEGER*4, then
its definition is not affected by
-i2
.
1.5.3 Version 5.3 Corrections
From version X5.2-829-4296F ECO 01 to FT1 T5.3-860-4498G, the following
corrections have been made:
- Fix problem with wrong generated code if an OPTIONAL and omitted
descriptor-based dummy argument is passed as an actual argument to a
routine which declares that argument as OPTIONAL.
- Fix problem where ASSOCIATED did not always return the correct
result for a pointer component that was transferred via pointer
assignment.
- Enable display of array bounds larger than 32 bits in listing
summary.
- Fix internal compiler error for certain uses of defined assignment
where multiple defined operators appeared in the right-hand side of the
assignment.
- Add /ALIGN=SEQUENCE (/ALIGN:SEQUENCE, -align sequence) which
specifies that SEQUENCE types may be padded for alignment.
- Make the default for BLANK= in OPEN match the documentation when
the -f66 (/NOF77) switch is specified, which is to default to
BLANK='ZERO'. Previously, BLANK='NULL' was used regardless.
- Allow array constructors to have scalar CHARACTER source elements
of varying size.
- Correct problem where a call to a routine with the C and VARYING
attributes generates incorrect code.
- Make sure that -g3 does not turn off optimization.
- Fix internal compiler error for statement function which uses the
function return variable of the host function.
- Fix internal compiler error for incorrect program which uses an
component of a derived type variable in an automatic array bounds
expression, the derived type is undefined and IMPLICIT NONE is used.
- Fix internal compiler error when RESULT variable has same name as a
previously seen FUNCTION.
- Fix problem with PUBLIC/PRIVATE attributes in a particular
complicated module usage.
- Eliminate spurious error message for valid generic procedure
reference.
- Fix problem with DATA initialization of zero-origin arrays.
- Fix problem where compiler would not allow "# linenum" to appear in
a source file if a !DEC$ or !MS$ directive was seen.
- Don't give "unused" warning for EQUIVALENCEd variable.
- Properly treat INT(n,KIND=) in an array constructor.
- Don't disable type checking for %LOC.
- Properly parse generic INTERFACE whose name begins with TO.
- When -align dcommons is used, make sure that POINTER objects in
COMMON are aligned on quadword boundaries.
- Correctly parse program with IF construct whose name begins with IF.
- Fix a case where two NaNs sometimes compared as equal.
- If an attempt is made to DEALLOCATE an item which is not
DEALLOCATEable, such as an array slice, a run-time error is now given.
Previously, the results were unpredictable.
From version FT1 T5.3-860-4498G to FT2 T5.3-893-4499U, the following
corrections have been made:
- Allocate all PARAMETER constants in a read-only PSECT.
- Ensure that locally-allocated derived-type arrays are naturally
aligned.
- Generate correct code for pointer assignment of an array generated
from a section of a derived type.
- Eliminate internal compiler error in certain cases with dummy
argument that has OPTIONAL and INTENT(OUT) attributes.
- Flag square-bracket array constructor syntax as an extension.
- Eliminate internal compiler error for certain uses of TRANSFER.
- Properly detect ambiguous generic reference when all distinguishing
arguments are OPTIONAL.
- Eliminate internal compiler error for a case involving a PRIVATE
POINTER in a module.
- Eliminate spurious "this name has already been used as an external
procedure" error for recursive function which returns a derived type.
- "Directive not supported on this platform" diagnostic is now
informational, not warning
- Allow array sections in DATA statement variable list
From version FT2 T5.3-893-4499U to V5.3-915-449BB, the following
corrections have been made:
- Eliminate access violation on some platforms for ALLOCATE of
pointer in derived type.
- Correct problem where compiler could omit putting out declaration
for a routine symbol.
- Handle non-present, optional dummy arguments as third argument to
INDEX, SPAN, and VERIFY.
- Generate correct code when passing character array slices as
arguments.
- Fix case of contiguous array slice as first argument to TRANSFER.
- Fix INQUIRE by IOLIST of ALLOCATABLE arrays.
- Correct problem involving pointer assignment with sections of a
derived type.
- Eliminate inappropriate error messages when overloading SIGN
intrinsic.
- Eliminate internal compiler error when "-" defined as both unary
and binary operators in separate modules.
- Eliminate spurious unused warning for pointer target.
- Implement OMP interpretation regarding DEFAULT(NONE).
- Eliminate spurious standards diagnostic for !DEC$ UNROLL.
- Correct problem with accessibility of NAMELIST names from module.
- When -real_size 64 and -double_size 128 are used, make sure DOUBLE
PRECISION gets REAL*16.
- Correct evaluation of FLOAT intrinsic with -real_size 64.
- Correct problem with array constructors in format expressions.
1.5.4 Version 5.3 Known Problems
The following known problems exist with Compaq Fortran Version
5.3:
- The following is a list of known problems for
-omp
and
-mp
parallel support in Version 5.3:
- Global variables referenced by statement functions inside parallel
regions should not reference local instances of those variable names.
The following example should print 42.0 {10 times} not 0.0:
real x,y(10)
statement(a) = a + x
x = 41.0
!$par parallel local(x)
x = -1.0
!$par pdo local(i)
do i=1,10
y(i) = statement(1.0)
end do
!$par end parallel
type *,y
end
|
- Nested parallel regions are not supported by
-omp
. A program that contains nested parallel regions will cause the
compiler to fail with an internal error.
- Please note that
-warn decl
gives an error level message, not a warning level message.
- When using Ladebug with certain versions of the UNIX operating
system, be aware that a trailing underscore may be needed to display
module variables. For example, to display variable X in module MOD, if
typing
print $mod$x$
does not display the variable's value, type:
1.6 Known Limitations
The following limitations exist in Version 5.3:
- When using the
-omp
or
-mp
options, if you declare a parallel DO loop which accesses an INTEGER*1
array (one element at a time), the results may not be correct unless
the user also specifies
-granularity byte
. In general, if a parallel loop tries to store things of "small" size
into packed spaces, the granularity needs to be set to that size.
However, while this "fixes" the program to do the right thing, it is a
dreadful performance slowdown. It would be better to execute such code
serially.
- If you specify the
-wsf
option to request parallel processing, the following Compaq Fortran
language features are not supported:
- REAL (KIND=16) (same as REAL*16) data type
- Compaq Fortran 77 implementation of CRAY-style pointers
- Variable format expressions (VFEs). For example:
- Initialization of Compaq Fortran 77 structures. For example:
STRUCTURE /S/
INTEGER I / 100 /
END STRUCTURE
|
1.7 New Features, Corrections, and Known Problems in Version 5.2
Version 5.2 is a minor release that includes corrections to problems
discovered since Version 5.1 was released and certain new features.
The following topics are discussed:
1.7.1 Version 5.2 ECO 01 New Features
The following new Compaq Fortran (DIGITAL Fortran 90) features are now
supported:
- IVDEP Directive
The IVDEP directive assists the compiler's
dependence analysis. It can also be specified as INIT_DEP_FWD
(INITialize DEPendences ForWarD). The IVDEP directive takes the
following form:
cDEC$ IVDEP
c Is one of the following: C (or c), !, or *.
|
The IVDEP directive is an assertion to the compiler's optimizer
about the order of memory references inside a DO loop.
The IVDEP
directive tells the compiler to begin dependence analysis by assuming
all dependences occur in the same forward direction as their appearance
in the normal scalar execution order. This contrasts with normal
compiler behavior, which is for the dependence analysis to make no
initial assumptions about the direction of a dependence.
The IVDEP
directive must precede the DO statement for each DO loop it affects. No
source code lines, other than the following, can be placed between the
IVDEP directive statement and the DO statement:
- An UNROLL directive
- A PARALLEL DO directive (TU*X only)
- A PDO directive (TU*X only)
- Placeholder lines
- Comment lines
- Blank lines
The IVDEP directive is applied to a DO loop in which the user knows
that dependences are in lexical order. For example, if two memory
references in the loop touch the same memory location and one of them
modifies the memory location, then the first reference to touch the
location has to be the one that appears earlier lexically in the
program source code. This assumes that the right-hand side of an
assignment statement is "earlier" than the left-hand side.
The
IVDEP directive informs the compiler that the program would behave
correctly if the statements were executed in certain orders other than
the sequential execution order, such as executing the first statement
or block to completion for all iterations, then the next statement or
block for all iterations, and so forth. The optimizer can use this
information, along with whatever else it can prove about the
dependences, to choose other execution orders.
Example
In the
following example, the IVDEP directive provides more information about
the dependences within the loop, which may enable loop transformations
to occur:
!DEC$ IVDEP
DO I=1, N
A(INDARR(I)) = A(INDARR(I)) + B(I)
END DO
|
In this case, the scalar execution order follows:
- Retrieve INDARR(I).
- Use the result from step 1 to retrieve A(INDARR(I)).
- Retrieve B(I).
- Add the results from steps 2 and 3.
- Store the results from step 4 into the location indicated by
A(INDARR(I)) from step 1.
IVDEP directs the compiler to initially assume that when steps 1
and 5 access a common memory location, step 1 always accesses the
location first because step 1 occurs earlier in the execution sequence.
This approach lets the compiler reorder instructions, as long as it
chooses an instruction schedule that maintains the relative order of
the array references.
- UNROLL Directive
The UNROLL directive tells the compiler's
optimizer how many times to unroll a DO loop. It takes the following
form:
cDEC$ UNROLL [(n)]
c Is one of the following: C (or c), !, or *.
n Is an integer constant. The range of "n" is 0 through 255.
|
The UNROLL directive must precede the DO statement for each DO loop
it affects. No source code lines, other than the following, can be
placed between the UNROLL directive statement and the DO statement:
- An IVDEP directive
- A PARALLEL DO directive (TU*X only)
- A PDO directive (TU*X only)
- Placeholder lines
- Comment lines
- Blank lines
If "n" is specified, the optimizer unrolls the loop "n" times. If
"n" is omitted, or if it is outside the allowed range, the optimizer
picks the number of times to unroll the loop.
The UNROLL directive
overrides any setting of loop unrolling from the command line.
Some important information to note about this release:
- -fast now implies "-arch host -tune host" as defaults. These can be
overridden with explicit switches. Note that this has an impact on
redistributed programs - if they are to run on older generation
processors than the compiling host, -arch, at least, must be overridden.
- The command line option "-source_listing" is not documented but it
produces a listing file with a file extension of ".lis" {as opposed to
"-V" which produces a .l file}.
- This ECO release includes the two subsets XMDLOA351 (DXML serial
libraries) and XMDPLL351 (DXML parallel libraries).
- Note that there is an installation order issue with PSE: PSE160
should be installed BEFORE Fortran, since the Fortran kit has newer HPF
libraries. If you are also using MPI and/or PVM, then there is also a
dependency with the latest MPI/PVM kits, which are in PSE V1.8
(PSE180): the installation order needs to be PSE160 then Fortran then
PSE180 OR PSE160 then PSE180 then Fortran.
From version V5.2-705-428BH to X5.2-829-4296F, the following
corrections have been made:
- Correct a problem with PACK when the first argument is a
two-dimensional slice of a three-dimensional array.
- Correct problem with ADJUSTL, ADJUSTR and COTAN with array element
arguments.
- Fix internal compiler error for certain uses of LL* intrinsics.
- Prevent internal compiler error when the size of a return value is
based on a call to a pure function with the argument to this function.
- Correct problems with nested uses of SPREAD intrinsic.
- Make ASSOCIATED return the correct result when the target is an
element of a deferred-shape array.
- Correct a problem with a USE..ONLY of some symbols from an
EQUIVALENCE group in a module. Previously, the compiler might generate
an external reference to the wrong symbol.
- Correct a problem with EOSHIFT of a structure array with a
multidimensional structure component.
- Eliminate the unnecessary use of temporary array copies in many
cases.
- Add support for specific names IMVBITS, JMVBITS and KMVBITS
(already documented).
- Correct a problem where calling an ELEMENTAL routine with a pointer
array may give incorrect results.
- Fix transfer intrinsic where the MOLD is a character substring with
non-zero base, e.g., TRANSFER(X, CH(I1:I2))
- Fix problem where CSHIFT of an array of derived type generated bad
code.
- Correct problem with pointer assignment when the right-hand-side is
an array of derived types.
- Correct problems involving function return value whose size depends
on properties of input arguments.
- Fix problem that caused internal compiler error with RESHAPE.
- Fix problem where IBCLR of mixed-kind arguments got wrong answer.
- When fpp is invoked, have it also look in the current directory for
include files.
- Correct problem with I/O of a slice of an assumed-size array.
- Issue error message for lexically nested parallel regions.
- In listing summary, list zero-length COMMON PSECTs.
- Eliminate spurious warning when passing a POINTER or assumed-shape
array in COMMON to a routine with a compatible dummy argument
declaration.
- Fix internal compiler error involving array-valued functions with
entry points.
- Generate correct code for unusual (and non-standard) dummy aliasing
case involving an EQUIVALENCEd variable passed as an argument.
- Fix problem with incorrect code for a call to ALLOCATE or
DEALLOCATE where STAT= is specified using an array element.
- -fast now implies -arch host -tune host as defaults. These can be
overridden with explicit switches. Note that this has an impact on
redistributed programs - if they are to run on older generation
processors than the compiling host, -arch, at least, must be overridden.
- Fix internal compiler error for certain programs which CALL a
function.
- Correct compiler abort with ASSOCIATED (X,(Y))
- Don't give standards warning for ELEMENTAL PURE.
- Consider FORALL index variables "used" for /warn=unused purposes.
- Disallow leading underscore in identifiers, as documented.
- Correct problem with implied DO loop in non-INTEGER array
constructors in initialization expressions.
- Allow expression involving array constructors in an initialization
expression.
- %LOC is treated the same as LOC for type checking purposes.
- Correct problem involving generic routine resolution.
- SEQUENCE now byte-packs fields, as the documentation says.
- Correct compiler abort with RESHAPE in initialization expression.
- Correct compiler abort for case with defined operators.
- Correct compiler abort for syntax error X(;,:)
- Give appropriate error if DO loop variable is too small for range.
- Correct compiler abort for LEN_TRIM(array) in initialization
expression.
- Correct compiler abort for SIZE(non-array).
- Correct problems with ISHFT(array) in initialization expression.
- Allow SHAPE in initialization expression.
- Don't give standards warning for use of INDEX in initialization
expression.
- Consider statement function dummy argument "used" for /warn=unused.
- Correct compiler abort for invalid syntax in a Variable Format
Expression
- Correct compiler abort for module procedure with ENTRY.
- Allow full set of F95-permitted intrinsic functions in
specification expressions.
- Correct compiler abort with invalid VFE in FORMAT.
- Correct problem with accessibility of MODULE symbols when two
modules define the symbol but one has marked it PRIVATE.
- Correct compiler abort for certain programs when -i8 and -wsf
specified.
- Correct problem with missing and duplicate alignment warnings.
- Allow repeated NULL() in DATA initialization when variables have
different types.
- Correct spurious "shapes do not conform" error.
- Correct compiler abort for invalid program using wrong component in
ASSOCIATED.
- When -names:as_is specified, don't make IMPLICIT case-sensitive.
- Give standards warning for Q exponent letter in floating literals.
- Generate correct code for generic which replaces MIN or MAX.
- Give more reasonable error message when variable used as control
construct name.
- Eliminate spurious message for vector-valued subscript in defined
assignment.
- Give error if INTENT not properly specified for defined assignment.
- Correct internal compiler error for overloaded MAX.
- Eliminate spurious warning for FORALL.
- Give warning when INTENT(IN) argument modified in PURE FUNCTION.
- Eliminate spurious error for valid DATA with array subscript.
- Allow ORDER in RESHAPE to be non-constant.
- Fix compiler abort with RESHAPE.
- Don't give unused warning for TARGET argument used in pointer
assignment.
- Properly distinguish STRUCTUREs with the same name in different
CONTAINed routines.
- Allow NULL() to initialize a pointer to derived type.
- Incorrect warning for variable IF when -omp specified.
- Don't give unused warning for array constructor implied-DO variable.
- Allow INTRINSIC :: name (new in F95)
- Eliminate spurious standards warning for certain obscure uses of
UNPACK.
- Eliminate compiler abort when transformational intrinsic used
(illegally) in statement function.
- Raise limit of number of items in a FORMAT from 200 to 2048.
- Disallow invalid INTENT keywords
- Allow CALL of a typed identifier (Compaq Fortran 77 extension)
- Correct problem where USE-associated identifiers aren't seen in
certain cases involving renaming.
- Correctly evaluate CEIL intrinsic when used in a specification
expression.
- Allow SIZE intrinsic to be overloaded.
- Don't issue spurious "function value has not been defined" warning
for case involving ENTRY and RESULT.
- Fix internal compiler error involving defined assignment.
- Fix problem with incorrect CHARACTER initialization values and CHAR
function.
- Disallow array constructor being used to initialize a scalar.
- Allow ALLOCATE/DEALLOCATE of argument to PURE SUBROUTINE.
- Fix problem for certain uses of period separators for derived type
fields.
- Eliminate spurious syntax error for use-associated variable in
NAMELIST.
- Eliminate spurious syntax error for certain uses of variable format
expression in FMT=.
- Allow as an extension the use of a name previously seen in a CALL
statement as an actual argument without an EXTERNAL statement or
explicit interface.
- Eliminate spurious overflow message for MS-style base-2 constant.
- Correct problem with generic routine matching.
- Correct internal compiler error when function return value used in
statement function expression.