Compaq Fortran
Release Notes for Compaq Tru64 UNIX Systems
April 2001
This document contains information about Compaq Fortran
for Compaq® Tru64tm UNIX® (formerly
DIGITAL® UNIX) Alpha Systems.
Software Version:
Compaq Fortran
Version 5.4A
Compaq Computer Corporation
Houston, Texas
First release, June 1994
Revision, September 1994 Revision,
December 1994 Revision, March 1995 Revision, May 1995 Revision, March
1996 Revision, December 1996 Revision, September 1997 Revision, March
1998 Revision, December 1998 Revision, July 1999 Revision, December
1999 Revision, July 2000 Revision, September 2000 Revision, January
2001 Revision, April 2001
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 shall not be liable for technical or editorial errors or
omissions contained herein. The information in this document is subject
to change without notice.
© 2001 Compaq Computer Corporation. All Rights Reserved.
COMPAQ, the Compaq Logo, DEC, DECnet, 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, 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 trademark in the United States and other countries of The
Open Group.
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.4A Release Notes
This chapter contains release notes for Compaq Fortran Version
5.4A (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.4A requires Version 4.0 (or
later) of the Compaq Tru64 UNIX operating system. Use of non-NUMA
parallel features requires Version 4.0D (or later) of the Compaq Tru64
UNIX system. Use of NUMA (Non-Uniform Memory Access) parallel features
requires Version 5.1 (or later) of the Compaq Tru64 UNIX operating
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
This section describes the contents of Compaq Fortran Version 5.4.
1.4.1 Contents of the Version 5.4A kit
The Compaq Fortran Version 5.4A kit consists of the following
setld sets:
- DFABASE541---Compaq Fortran 90 and 77 v5.4A for Compaq Tru64 UNIX
Alpha Systems
- DFADOC541 ---Compaq Fortran v5.4A Release Notes and Man Page
- DFACOM541 ---Compaq Fortran v5.4A Tools & their Man Pages
- DFARTL394 ---Compaq Fortran RTL #394 for Compaq Tru64 UNIX Alpha
Systems
- OTABASE212---Compaq Compiled Code Support Library #212
- HPFLIBS185---Compaq Fortran V5.4 High Performance Fortran Runtime
Libraries
- XMDCOM500 ---the CXML common subset files
- XMDLIB4500---the CXML archive and shared libraries (serial and
parallel) for EV4 systems
- XMDLIB5500---the CXML archive and shared libraries (serial and
parallel) for EV5 systems
- XMDLIB6500---the CXML archive and shared libraries (serial and
parallel) for EV6 systems
- XMDSCI500 ---the SCIPORT Cray compatibility library and manpages
- XMDMAN500 ---the CXML manpages
- XMDHTM500 ---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 DFADOC subset contains the compiler command manpages
and release notes.
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 Version 5.4A
The following new Compaq Fortran features are now supported for HPF
programs:
- HPF Programs with MPI
HPF programs can execute with the support
of Message Passing Interface (MPI) software. Before Version 5.3 ECO 01
of Compaq Fortran, HPF programs executed with the support of the HPF
component of Version 1.6 of the Parallel Software Environment (PSE).
The HPF/MPI connection enables development of programs that use
both HPF and MPI together in the same application. In addition, MPI
supports additional hardware configurations, some of which are faster
than any supported by PSE. Finally, there are many tools available for
debugging, profiling, and visualizing the execution of MPI programs.
The Parallel Software Environment (PSE) runtime system is no longer
available. Consequently, all HPF programs must now be run with the new
HPF runtime system that uses MPI, instead of PSE, to perform its
message passing. Section 1.7.3 (Version 5.3 ECO 01 HPF New Features) explains how to use the
new runtime system.
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.
1.4.3 Miscellaneous Information about the Version 5.4A 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 (formerly 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.4A
Version 5.4A is a minor release that includes corrections to
problems discovered since Version 5.4 was released and certain new
features.
For the Version 5.4A subset numbers, see Section 1.4.
The following topics are discussed:
1.5.1 Version 5.4A New Features
The following new Compaq Fortran features are now supported:
- The following new features are now supported:
- When
-fast -std
is specified {using any of the
-std*
options, the
-align
options
dcommon
and
sequence
will not be set.
-
-hpf n
is now the preferred spelling for
-wsf n
.
From DFA540 V5.4-1265-46ABA to DFA541 V5.4A-1472-46B2F, the following
corrections have been made:
- Allow Sequence/Nosequence directives on fields of derived types
with -hpf, whether or not numa switch is set.
- Add diag :"The NOSEQUENCE directive may not be specified for a
component of a derived type which has the SEQUENCE attribute.",
- Issue diag if NOSEQUENCE directives are applied to fields of
'sequence' derived types.
- Use new rtl routine, for_check_mult_overflow(), to calculate the
size of an array to be allocated, passing flag returned to
for_allocate().
- Fix obscure bug with OPTIONAL mask for intrinsics MAXLOC et al. The
mask has an expression for the dimension bound(s).
- Allow, without assertion violation - subroutines generated by
transform to be ignored during export.
- When a psect becomes too big, give a better error message:
ME_STOREQEXC "Psect !AD is too large. Reduce array sizes or make arrays
AUTOMATIC or ALLOCATABLE."
- Allow character substring assignment in forall.
- Export intrinsic function which is a module generic if it is
referenced.
- Make -fast set the align_dcommons bit. The effect is ONLY on the
listing (the code was already doing correct alignment; only the listing
was incorrect).
- Make much better locators when debugging programs with adjustably
dimensioned arrays.
- Deal with PRIVATE fields of a type that is not PRIVATE.
- Fix several problems with nested modules with rename and only.
- When exporting function/subroutines, walk 'used' parameter list and
collect those derived types which are needed, i.e. add to export list.
(Similar to collecting types of dummy args for export).
- Fix regression in inline_sizeof.
- Call foo(NINT) should pass JNINT instead of ININT.
- Add support for passing KIDNNT, KNINT and IQNINT as actual
arguments on Unix platforms.
- Passing IDINT should use integer*4 instead of integer*2 routine
names.
- Issue diagnostic for character string as arg to RECL= in OPEN
statement.
- If substring index in a FORALL assignment stmt uses one of the
indexing variables, need to calculate size differently, otherwise get
used before defined problems.
- Walk dummy arguments as well function result, parameters and
globals used as bound variables to pick up for export 'record types'
which are not otherwise used in module procedure.
- Fix problem with -warn truncated.
- If the argument to DFOR$PREFETCHxxx is any real or complex type,
use that type on the PREFETCH tuple. All other types continue to use
INT32.
- Diagnose prefetch arguments which are not variables, array element
references or structure component references.
- Diagnose missing intent attributes on pure (explicitly or
implicitly if elemental) subroutine args which are neither pointers nor
procedures.
- Diagnose mask expressions with incompatible shapes in where
constructs and contained where/elsewheres.
- Relax strict statement/token construction if errors encountered
while processing cdec directive 'if' or 'elseif' .
- When terminating nested do loops/constructs, recognize and process
OMP END DO.
- Impose standard restriction that defined-operator names consist
only of letters.
- Correctly pass complex by value on Alpha platforms. This fix makes
us follow the Alpha calling standard. Note: This is an INCOMPATIBLE
change.
- Allow -fpscomp [no]ldio_spacing.
- -fpscomp:general => -fpscomp:ldio_spacing.
- Handle leading 0s in subscript constants.
- Fix problem with dot as field separator.
- For default complex, special case ccos, cexp, clog, csin, csqrt to
be type of arg; similarly for default real type, special case alog,
alog10
- Fix inquire with IOLENGTH=FIELD%NAME or array element.
- Array in derived type and explicit-shaped array slices now avoids
temp creation and copy-in/copy-out when passing arrays.
- Do not diagnose fields of private types as inaccessible within the
defining module, just outside the module.
- Disallow ALLOW_NULL/REFERENCE attributes with assumed shape arrays.
- Make fields having a PRIVATE derived type invisible.
- Allow dummy args to be used as args to inquiry intrinsics in
specification statements without requiring intent IN. Force private
module variables used in specification statements of a procedure, even
as args to inquiry intrinsics, to be exported.
- Allow NUM_THREADS clause in a PARALLEL directive. This already was
handled properly in a PARALLELDO directive.
- Fix problem with FORALL masks with -integer_size 64.
- Alphabetize annotations, fpscomp options.
- When putting out a null for a not present optional argument, get
the arg position corect.
- Fix code in forall/elsewhere processing.
- Alphabetize show, warnings options. Restrict -warn hpf to unix.
- If /fpscomp:general, and STATUS omitted from OPEN, supply "default"
code rather than "new" or "unknown", because FPS had its own rule for
this that doesn't match what
- If not 'renamed' force the loading of generic/specific declaration
record whose generic name appears in source; resulting in the
collecting of individual specifics from different modules.
- Detect and diagnose illegal value in octal/hex/binary constant when
used as operand to unary operator
- Accept '$' at the end of a range of letters in the implicit
statement.
- Allow -hpf [n] on unix; treat like -wsf [n].
- Speed up compiling DATA initialization statements.
- For -assume dummy_alias, make all COMMON block variables and Module
variables always work.
- Change error code for edit 1396. Make 1813. 'ALLOW_NULL and
REFERENCE attribute pair is disallowed with assumed shape arrays.'
- When detecting end of statement function acceptibility, and sitting
on array element/section assignment, conclude function result-variable
processing to make variable available to statement in progress.
- Consider duplicate if 'optional arg' specs match and if all
non-optional arg specs match.
- Fix PACK when the MASK is .FALSE. (or when the MASK is a scalar
expression whose value is not known at compile time).
- Fix "mapped" pointee checking problem. The code which attempts to
deliver an error when a pointee is HPF "mapped" cannot handle array
pointees.
- Fix INTEGER x(10), y(10); DATA x(1:10) /1/; DATA y/10*0/; END
- Integer*8 fixes for selected_xx_kind, passing integers, and added
for_kdate entry point.
- Within a procedure in a 'contain' scope, identify
<type-function-name> strings as type statements and not as
function definitions.
- To conditionally diagnose non-standard, calculable, recursive use
in type-parameter specification, of symbol being defined . CHARACTER ::
C(10)*(SIZE(C,1))
- Detect and diagnose the assignment to a function result of external
procedure, and not to function result of current
- Diagnose instead of generating assertion violation, non-calculable,
recursive use in bounds specification, of symbol being defined. INTEGER
:: A(KIND(A)),G(BIT_SIZE(G)),I(DIGITS(I)).
- Allow recursive reference to parameter by inquiry functions in
initialization expression if query is about known property. TYPE
PARAMETER :: EP = BIT_SIZE(EP), HP = DIGITS(HP), XP = EPSILON(XP) .
- Cause front end to generate warning diagnostics for integer
overflow, i.e. when I4 computation exceeds I4 capacity.
- Issue error for previously undiagnosed VOLATILE/PARAMETER
declaration.
- If -fast is set *and* -standard (however it's spelled) is set,
don't set the non-standard switches such as -align dcommons and -align
sequence.
- Improve instructiojn scheduling {SLOT4}.
1.5.2 Version 5.4 New Features
The following new Compaq Fortran features are now supported:
- The following new features are now supported:
-
-pipeline
is now the default at optimization level
-o4
(the default).
- Nested parallel regions are now supported by
-omp
.
- Parallel programs running on Non-Uniform Memory Access (NUMA)
machines have initial support using the following directives, compiler
options, and environment variables:
- !DEC$ MIGRATE_NEXT_TOUCH
- !DEC$ MIGRATE_NEXT_TOUCH_NOPRESERVE
- !DEC$ OMP NUMA
- !DEC$ DISTRIBUTE - same as !HPF$ DISTRIBUTE
- !DEC$ ALIGN - same as !HPF$ ALIGN
-numa Fortran 90 only. Enables NUMA parallel processing and the NUMA
command line options -numa_memories and -numa_tpm. NUMA paral-
lel processing is indicated by inserting certain !DEC$ direc-
tives in your source code. Option -omp must also be specified.
The default is -nonuma.
-numa_memories num
Fortran 90 only. Specifies the number of memories (RADs) to be
used for NUMA parallel processing. Option -numa must also be
specified. If -numa_memories does not appear on the command
line or if num is 0, the number of memories will be chosen at
run-time either from the NUMA_MEMORIES environment variable (if
it is set) or by the system.
-numa_tpm num
Fortran 90 only. Specifies the number of threads per memory to
be used for NUMA parallel processing. Option -numa must also
be specified. num is the number of threads per physical memory
that will execute NUMA parallel features in the program. If
-numa_tpm does not appear on the command line or if num is 0,
the number of threads per memory will be chosen at run-time
either from the NUMA_TPM environment variable (if it is set) or
by the system.
|
- The following new
f90
command options are now supported. See the f90(1) man page for details.
-
-arch ev67
-
-ccdefault
fortran
|
list
|
none
|
default
-
-annotations
-
-assume noprotect_constants
-
-check arg_temp_created
- The following new run-time features are now supported:
- The Fortran RTL has been changed so that it now processes the [.m]
(the minimum number of digits) portion of the edit descriptor when w
(the width field) is Zero for I, B, O, and Z editing.
- An end-of-file or end-of-record status is no longer treated as an
error status. This change was done to adhere to the Fortran 90 language
standard. Prior to this change, if there was an ERR= specified and no
END=|EOR= for a READ operation and the READ encountered an end-of-file
or end-of-record situation, the ERR= path would be followed. With this
change, this situation would now result in a fatal message being
generated.
- The runtime library now contains support for a new environment
variable, FORT_CONVERT_ext that allows a user to associate a foreign
data conversion option with files of a particular file extension. The
values of FORT_CONVERT_ext are the same as FOR_CONVERTn.
- The runtime library has been changed to perform more thorough edit
checking on list directed input. Previously, the RTL was liberal in
what it accepted for input to integer and real values. In accordance
with the F95 Standard, the RTL no longer accepts "+", "-",
".", "D", "E", or "Q" without expressing at least
1 digit. For example, the RTL
used to allow a single "+" to convert to a 0, but now the RTL will
return a FOR$IOS_LISIO_SYN error. In addition, ambiguous expressions
such as "+-" and "--" will be rejected.
- Support for the -fpscomp options are now implemented in the Fortran
RTL on UNIX:
- -fpscomp all
- -fpscomp general
- -fpscomp ioformat
- -fpscomp logicals
- -fpscomp filesfromcmd
This support includes the six Microsoft PowerStation compatible
file types as described in the Visual Fortran Programmer's Guide:
- MS Unformatted Sequential Access
- MS Unformatted Direct Access
- MS Formatted Sequential Access
- MS Formatted Direct Access
- MS Binary Sequential Access
- MS Binary Direct Access
This includes all fpscomp behavior that does not involve
Windows-specific features. There is no QuickWin-like support. The
'Filenames from Command Line' option looks in the command line
arguments for unspecified filenames in an OPEN(...,FILE='',...)
statement and will also prompt for filenames at the terminal, but does
not implement the equivalent of a Windows Dialog box, like a QuickWin
application would in the PC Windows environment. Windows-specific
physical device names used as filenames are given no special
consideration or handling.
- Support for reading nondelimited character strings as input for
character NAMELIST items has been added.
A character string does
not need delimiting apostrophes or quotation marks if the corresponding
NAMELIST item is of type default character, and the following is true:
- The character string does not contain a blank, comma, slash,
exclamation point (!), ampersand (&), dollar sign ($), left
parenthesis, equal sign (=), percent sign (%), or period (.).
- The character string is not continued across a record boundary.
- The first nonblank character in the string is not an apostrophe or
a quotation mark.
- The leading character is not a string of digits followed by an
asterisk.
A nondelimited character string is terminated by the first blank,
comma, slash, end-of-record, exclamation point, ampersand, or dollar
sign encountered. Apostrophes and quotation marks within nondelimited
character strings are transferred as is.
Should an equal sign,
percent sign, or period be encountered while scanning for a
nondelimited character string, the string will be treated as a variable
name (or part thereof) and not as a nondelimited character string.
Be forewarned that nondelimited character strings that are written out
by using a NAMELIST write may not be read in as expected by a
corresponding NAMELIST read.
Given the following example code:
NAMELIST/TEST/ CHARR
CHARACTER*3 CHARR(4)
DATA CHARR/'AAA', 'BBB', 'CCC', 'DDD'/
OPEN (UNIT=1, FILE='NMLTEST.DAT')
WRITE (1, NML=TEST)
END
|
The output file NMLTEST.DAT will contain:
&TEST
CHARR = AAABBBCCCDDD
/
|
Should an attempt be made to read the data in NMLTEST.DAT back in
with a NAMELIST read using nondelimited character strings:
NAMELIST/TEST/ CHARR
CHARACTER*3 CHARR(4)
DATA CHARR/4*' '/
OPEN (UNIT=1, FILE='NMLTEST.DAT')
READ (1, NML=TEST)
PRINT *, 'CHARR read in >', CHARR(1),'< >',CHARR(2),'< >',
1 CHARR(3), '< >', CHARR(4), '<'
END
|
This will result in:
CHARR read in >AAA< > < > < > <
|
- New run-time jacket routines provided for Fortran 3f lgamma, erf,
erfc, short and long functions in libUfor. See the appropriate 3f man
page for details.
- The run-time now supports unlimited record sizes for writes, reads,
backspaces of variable length unformatted files. Records greater than
2.1 giga-bytes use a new scheme that may not be portable to another
vendor's Fortran.
- When the DATE, TIME, or ZONE arguments to the DATE_AND_TIME
intrinsic routine are not large enough to hold the required
information, a fatal run-time error will now be generated.
- The run-time support was enhanced to allow a REWIND operation to be
performed on a direct access file. This is allowed without having to
specify any command line options.
- New bits were defined in the for_set_fpe routine interface to allow
the compiler to specify counting and messages for floating point
inexact traps (fpe:6). The runtime handler is updated to provide this
service.
- New run-time jacket routines provided for Fortran 3f lgamma, erf,
erfc, short and long functions in libUfor. New entry point interfaces
are:
float lgamma_ ( float *x ) ;
double dlgamma_ ( double *x ) ;
float erf_ ( float *x ) ;
double derf_ ( double *x ) ;
float erfc_ ( float *x ) ;
double derfc_ ( double *x ) ;
short short_ ( int *x ) ;
int long_ ( short *x ) ;
|
- Support for generating traceback information has been added to the
run-time support. Traceback will be produced for all severe errors.
Traceback output can be disabled by setting the environment variable
FOR_DISABLE_STACK_TRACE to true. All diagnostic output, which includes
traceback, can be redirected to a file defined by the FORT0 environment
variable, which was already supported.
- Namelist input was not handling slices and strides of arrays, array
segments with zero and negative positions, and character substrings of
arrays. Note: this implementation adheres to the F90 Standard, so
nested array slices are illegal.
- Support for the environment variable FORT_BUFFERED was added. When
it is set to TRUE, the run-time library will assume that buffered I/O
will be used for output to all I/O units, except those whose output is
to the terminal. This provides a run-time mechanism to support the
behavior enabled by the
-assume buffered_io
option.
- See the new features listed in Section 1.7.2 (Version 5.3 ECO 01 New Features)
- The Compaq Extended Math Library (CXML) routines are updated in the
Compaq Fortran kit. See the CXML release notes in:
/usr/opt/XMDCOM410/docs/XMD410_release_note.txt
1.5.3 Version 5.4 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.
- Object files created by Fortran 95 contain information about when
they were compiled and by what version of the compiler. Use the command
strings -a xxx.o | grep "@(.)"
|
where
xxx.o
is the name of the object file. The strings generated by the compiler
are
- "(#)tttt" is a what(1) string with the text from a cDEC$ IDENT
directive if present.
- "@(c)Compaq Fortran Vn.n-eeee" is the version number of the Fortran
95 compiler that generated this object file.
- "@(m)xxx" is the name of the first program unit in the source used
to produce this object file.
- "@(d)dd-mmm-yyyy hh:mm:tt" is the date and time this object file
was created.
1.5.4 Version 5.4 Corrections
From DFA531 ECO 01 final X5.3-1120 -44A7B to DFA540 FT1
T5.4-1130-46A7R, the following corrections have been made:
- Eliminate internal compiler error for character function whose
length expression includes LEN_TRIM of a dummy argument.
- Eliminate internal compiler error for SIZE of a derived type
component pointer array.
- Software pipelining is now enabled at the default optimization
level (-O4)
- Eliminate more unnecessary copies of contiguous array arguments.
- Correct parsing error for certain record component references using
dots.
- Eliminate internal compiler error for particular use of RESHAPE.
- Do not give an unused variable warning where the only reference to
a variable is as the argument to LOC.
- Eliminate internal compiler error for particular use of nested
STRUCTURE.
- Disallow illegal ALLOCATED(A(:))
- Allow, as an extension for compatibility with our Fortran 77
compilers, a LOGICAL value as an argument to intrinsics which accept
INTEGER, such as ABS.
- Diagnose ambiguous generic routine reference.
- When an integer constant is assigned to a variable whose KIND is
smaller, don't change the KIND of the constant for future references.
- Allow IMPLICIT REAL with $.
- Eliminate internal compiler error for RESHAPE of array constructor
From DFA540 FT1 T5.4-1130-46A7R to DFA540 FT2 T5.4-1170-46A97, the
following corrections have been made:
- Speed up processing of EQUIVALENCE groups in COMMON blocks.
- Properly handle SIZE(A(:)(I:J))
- Implement INT8 intrinsic (already documented)
- Implement !DEC$ PSECT NOWRT for COMMON blocks on UNIX.
- Allow omitted OPTIONAL arguments to be passed as optional arguments
to intrinsics.
- If "too many errors", suppress informational/warning messages as
well.
- Allow keyword specification of arguments A10, A20, etc. to MAX/MIN.
- Eliminate internal compiler error for case of ADJUSTL with array
argument.
- Implement nested LASTPRIVATE for COMMON.
- Where DATA initializations initialize the same array element (not
allowed according to the standard, but supported by Compaq Fortran),
preserve the order in which initializations were specified, so that the
last one takes precedence.
- Fix parsing error for typed function declaration with MS-style
argument passing specification in argument list.
- Resolve incorrect generic resolution between subroutine with no
arguments (but () specified as argument list) and routine with one
required argument.
- Allow named constant to be used in specification expression later
in same statement where it was defined.
- Give error instead of compiler abort for IF (expr) SELECT CASE
- For F90 standards checking, warn about I0, etc. in FORMAT.
- Warn about variables in BLOCK DATA subprogram that are not in a
COMMON.
- Fix problem with continuation in free-form source when OpenMP
conditional compilation is used.
- Eliminate internal compiler failure for incorrect ". AND." in
free-form source.
- Fix a case where two NaNs sometimes compared as equal.
- Fix assertions caused by instruction scheduling at -fpe1.
From DFA540 FT2 T5.4-1170-46A97 to DF540 FT3 T5.4-1195-46AAC, the
following corrections have been made:
- Support the full range of format width specifiers as documented.
- Correct problem with page-alignment for POINTER objects.
- Improve detection of contiguous array slices.
- Allow EOSHIFT to work on REAL*16 and COMPLEX*32 arrays.
- Correct support for SIZE with argument being array with vector
subscripts.
- Eliminate internal compiler failure for incorrect ". AND." in
free-form source.
- Correct problem with fixed form continuation with -assume cc_omp.
- Improve handling of continued C-string escape sequences.
- Preserve order of data initializations where the same location is
initialized multiple times. While this is not allowed by the standard,
we do support it.
- Eliminate spurious warnings for use of some intrinsics when
-double_size 128 is used.
- Correct problem with module visibility and ONLY.
- Eliminate internal compiler error for certain use of POINTER and
nested structures.
- Eliminate inappropriate error about multiple matching procedures
when generic operators are used.
- Correct parsing error of certain variable names in an assignment
following a logical IF.
- Eliminate inappropriate shape mismatch for certain use of RESHAPE
in a PARAMETER initialization expression.
From DFA540 FT3 T5.4-1195-46AAC to DFA540 V5.4-1265-46ABA, the
following corrections have been made:
- Add support for -mixed_str_len_arg switch on UNIX, which puts
character argument lengths next to their addresses in the argument list
(this is the default Windows method). Add support for
[NO]MIXED_STR_LEN_ARG attribute in !DEC$ ATTRIBUTES.
- Eliminate spurious error for declaration of RECORD array in a
COMMON block in a MODULE.
- Correct handling of generics where several routines have an
optional argument at the same position.
- In C strings, allow octals of the form \ooo to have 1, 2 or 3 octal
digits and hex objects of the form \Xxx to have 1 or 2 hexadecimal
characters.
- Add support for -check arg_temp_created.
- Annotations now are displayed on a per-routine basis.
- Put out type information to the debugger for module functions
From DFA540 V5.4-1265-46ABA to DFA540 V5.4-1283-46ABA, the following
corrections have been made:
- Allow Sequence/Nosequence directives on fields of derived types
with -hpf, whether or not numa switch is set.
- Add diagmostic "The NOSEQUENCE directive may not be specified for a
component of a derived type which has the SEQUENCE attribute.".
- Issue diagnostic if NOSEQUENCE directives are applied to fields of
'sequence' derived types.
- When calculating the size of an array to be allocated, check the
size computation for integer overflow.
- Fix obscure bug with OPTIONAL mask for intrinsics MAXLOC et al. The
mask has an expression for the dimension bound(s).
- When a psect becomes too big, give a better error message: "Psect
xxx is too large. Reduce array sizes or make arrays AUTOMATIC or
ALLOCATABLE."
1.5.5 Version 5.4 Known Problems
The following known problems exist with Compaq Fortran Version 5.4:
- The following is a list of known problems for
-omp
and
-mp
parallel support in Version 5.4:
- 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} instead of 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
|
- 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.4A:
- 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
you also specify
-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
-hpf
(or
-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.3
Version 5.3 is a minor release that includes corrections to problems
discovered since Version 5.2 was released and certain new features.
The following topics are discussed:
1.7.1 Version 5.3 ECO 02 New Features
The following new Compaq Fortran features are now supported:
- COMMON blocks can be marked read-only using the NOWRT PSECT
attribute.
From DFA531 ECO 01 X5.3-1120-44A7B to DFA532 ECO 02 X5.3-1155-44A8I,
the following corrections have been made:
- Eliminate internal compiler error for SIZE of a derived type
component pointer array.
- Eliminate more unnecessary copies of contiguous array arguments.
- Speed up processing of EQUIVALENCE groups in COMMON blocks.
- Properly handle SIZE(A(:)(I:J))
- Implement INT8 intrinsic (already documented) - UNIX)
- Implement !DEC$ PSECT NOWRT for COMMON blocks on UNIX.
- Allow omitted OPTIONAL arguments to be passed as optional arguments
to intrinsics.
- If "too many errors", suppress informational/warning messages as
well.
- Allow keyword specification of arguments A10, A20, etc. to MAX/MIN.
- Eliminate internal compiler error for case of ADJUSTL with array
argument.
- Eliminate internal compiler error for particular use of nested
STRUCTURE.
- Disallow illegal ALLOCATED(A(:))
- Allow, as an extension for compatibility with our Fortran 77
compilers, a LOGICAL value as an argument to intrinsics which accept
INTEGER, such as ABS.
- Diagnose ambiguous generic routine reference.
- When an integer constant is assigned to a variable whose KIND is
smaller, don't change the KIND of the constant for future references.
- Allow IMPLICIT REAL with $.
- Eliminate internal compiler error for RESHAPE of array constructor.
- Fix parsing error for typed function declaration with MS-style
argument passing specification in argument list.
- Resolve incorrect generic resolution between subroutine with no
arguments (but () specified as argument list) and routine with one
required argument.
- Allow named constant to be used in specification expression later
in same statement where it was defined.
- Give error instead of compiler abort for IF (expr) SELECT CASE
- For F90 standards checking, warn about I0, etc. in FORMAT.
- Warn about variables in BLOCK DATA subprogram that are not in a
COMMON.
- Fix several compiler assertions including one from instruction
scheduling at -fpe1.
1.7.2 Version 5.3 ECO 01 New Features
The following new Compaq Fortran features are now supported:
- The new INT_PTR_KIND() intrinsic returns the kind of an integer
pointer (ie, 8 for Tru64 UNIX/Alpha).
- An optional KIND argument is now allowed on the intrinsics LEN,
SHAPE, SIZE, UBOUND, LBOUND, MAXLOC, MINLOC, INDEX, LEN_TRIM, SCAN, and
VERIFY. This allows these intrinsics to return a result that is other
than default integer kind.
The following new
f90
command options are now supported:
-
-wsf_target
for use with
-wsf
.
Notice the change in spelling of both
-wsf_target
and the environment variable
DECF90_WSF_TARGET
.
-
-assume [no]cc_omp
[dis]allows the use of OpenMP conditional compilation separate from
-omp
.
- Compiling
-omp -non_shared
now adds
-qlpset_r -lpset
to the link line.
Some important information to note about this release:
- An end-of-file condition on READ no longer triggers an ERR= branch
- this is to conform with clearer wording in the recent standard. If an
EOF condition occurs and there is no END= or IOSTAT=, an error is
signalled.
- Add a NUL to the end of non-C character literals. This will not be
reflected in the "length" of the constant.
- %VAL/%REF now overrides any mechanism specified in an explicit
interface.
- The Compaq Extended Math Library (CXML) routines are not updated in
this ECO 01 Compaq Fortran kit.
From released version V5.3-915-449BB to ECO 01 FT1 X5.3-953-44A17, the
following corrections have been made:
- Improve compile time performance when USEing a module which
contains a large COMMON block with many (thousands) of EQUIVALENCEd
variables.
- Allow general CHARACTER expressions for the MOLD argument of the
TRANSFER intrinsic.
- Correct problem that prevented scalar numeric variables and array
elements which appeared in the iolist of an output statement (WRITE,
etc.) from participating in uninitialized variable analysis.
- Add support for -ccdefault switch.
- In OPEN statement, if STATUS is not specified, default to UNKNOWN
unless -f66 is specified, in which case default to NEW.
- Eliminate internal compiler error for case involving EQUIVALENCEd
POINTER variables not in COMMON.
- Missing !DEC$ ENDIF no longer causes compiler abort.
- Correct rules for when SAVE in a PURE procedure is allowed or not.
- Correct parsing of assignment to field of RECORD whose name begins
with TYPE.
- Eliminate E-level error when a BLOCK DATA subprogram name is the
same as that of a COMMON block. A future revision will cause an
appropriate diagnostic to appear.
- Issue clearer error message when a module name is repeated in a USE
statement.
- Eliminate problem where UBOUND gave wrong value in certain cases.
- Allow substrings in left hand side of FORALL.
- Give proper error when a PARAMETER constant is CALLed.
- Give proper error when a variable is CALLed.
- In assignment statements, make sure that real constants are
evaluated using the precision appropriate for their syntax
(single/double/quad).
From DFA531 ECO 01 FT1 X5.3-953-44A17 to FT2 T5.3-1034-44A3V, the
following corrections have been made:
- Fix problem which could cause incorrect code to be generated for
certain uses of PACK, RESHAPE and UNPACK, primarily with CHARACTER
arguments.
- Correct f77 driver problems, such as invalid syntax passed to cpp
when a .F file was compiled.
- Speed up compilation of initialized nested structures.
- Fix problem with incorrect code generated for use of nested SPREAD
intrinsic.
- Driver now understands shorter "-ieee" switch name.
- Eliminate internal compiler errors for use of defined assignment in
FORALL.
- Speed up compilation where very large MODULEs are repeatedly used.
Further work in this area remains.
- Correct problem with PACK intrinsic where array is array of
structures with an array field with constant subscript/substring values.
- Improve generated code for SPREAD intrinsic.
- Improve generated code for array reductions.
- Improve generated code for UBOUND, LBOUND, SELECTED_INT_KIND, and
SELECTED_REAL_KIND when the argument(s) are constants.
- Improve generated code for SIZEOF when bounds are constants.
- Fix UNIX driver to pass ld's position-specific qualifier within
lib_list rather than cc_list.
- Eliminate internal compiler error for certain cases of integer (not
F90) POINTER as a module variable.
- Reduce severity of "variable has not been used" diagnostic to
"informational".
- Improve generated code for MINVAL/MAXVAL.
- Improve generated code for SIZE(A(:)).
- Improve generated code for SIZE with array argument that has vector
subscripts.
- Add new INT_PTR_KIND() intrinsic which returns the kind of an
integer pointer (either 4 or 8).
- Eliminate internal compiler error for use of allocatable array
reference in a variable format expression.
- Improve generated code for ILEN.
- An end-of-file condition on READ no longer triggers an ERR= branch
- this is to conform with clearer wording in the recent standard. If an
EOF condition occurs and there is no END= or IOSTAT=, an error is
signalled.
- Add a NUL to the end of non-C character literals. This will not be
reflected in the "length" of the constant. This matches the Compaq
Fortran 77 behavior, which was undocumented.
- %VAL/%REF now overrides any mechanism specified in an explicit
interface.
- Generate much better code for certain array constructors (such as
(/0,I=1,500000/) and allow lowerbound, upperbound and stride to have
different KINDs.
- If -warn declarations is specified, do not issue diagnostic for use
of IMPLICIT NONE.
- Eliminate internal compiler error for EOSHIFT with constant array
argument.
- Eliminate internal compiler error for program fragment that is
"ifdef-ed out".
- Report error for kind mismatch where an ac-value in an array
constructor is an expression of a different kind than the other literal
ac-values.
- Report error for assumed-size array passed as actual to
deferred-shape array.
- Eliminate compiletime error for use of AIMAG in initialization
expression when -real_size 128 is specified.
- Eliminate internal compiler error for format in a PRINT statement
being an expression with concatenation.
- DFOR$PREFETCH, DFOR$PREFETCH_MODIFY, and DFOR$PREFETCH_EVICT_NEXT
intrinsics now supported for Alpha processors.
- Generate correct values for a PARAMETER array whose element values
are computed in an implied DO loop involving indexing into another
PARAMETER array.
- Correct bad parse of .NE. as record field name.
- Allow a dummy argument that has an INTENT attribute specified to be
specified in a NAMELIST list.
- Give standards warning for kind mismatch between source and pad
arguments in RESHAPE.
- Long source lines are now correctly compiled when standards
checking is requested (warning is still given).
- Correct problem with incorrect error given for a particular complex
module renaming case.
- Allow as an extension (as does Compaq Fortran 77) a LOGICAL
argument to an intrinsic which expects INTEGER.
- Correctly parse format which contains ">" characters and a
variable format expression.
- Eliminate internal compiler error for a particularly complex and
deeply nested structure reference in an IF.
- Don't give error for passing section of an assumed size array to a
deferred shape array.
- Improve compilation speed for certain large DATA statements.
- Eliminate internal compiler error for a certain complicated FORALL.
- Correct problem with PUBLIC/PRIVATE attributes of a COMMON block in
a MODULE.
- Allow (A .EQ. .NOT. B) (an extension).
- Correct problem with some COMPLEX*32 initialization expressions.
- Eliminate spurious unused variable diagnostic for variable used in
pointer assignment.
- Correct problem where asking for standards checking disabled -D
(/define)
- Fix a case where two NaNs sometimes compared as equal.
From DFA531 ECO 01 FT2 T5.3-1034-44A3V to final X5.3-1120 -44A7B, the
following corrections have been made:
- Eliminate many unnecessary copies of assumed-shape arrays, when
passed as arguments to explicit shape arrays, by keeping track of
whether or not the array is known to be contiguous.
- Automatically force the alignment of a COMMON block to be at least
as large as that required by the widest variable in the COMMON block.
- Fix a number of problems with WHERE inside of FORALL.
- Make defined assignment in FORALL work properly.
- Generate correct code for CSHIFT of a non-contiguous array slice.
- Allow user-defined types to be named BYTE and DOUBLECOMPLEX.
- Improve generated code for mixed COMPLEX-REAL multiplication and
division.
- In array constructors with only one implied-DO, and nothing else,
avoid creating an unnecessary temp.
- Allow SIZEOF(allocatable-array)
- Improve generated code for SIZEOF(array)
- Allow directory names specified with -module to be longer than 23
characters.
- Prevent incorrect collapsing of implied-DO loop in an I/O statement
where there are nested loops and the implied-DO variable of one loop is
used as a bound of an inner loop.
- When the error limit has been exceeded (default 30), simply
suppress further messages rather than exiting the compiler. This means
that the object file will get deleted appropriately, the listing file
created, and subsequent source files on the command line will be
processed.
- Re-allow complex constants to be passed by value. The real and
imaginary parts are passed as separate arguments.
- Allow character array valued function as a format specifier.
- Allow debugging of a character function whose length is computed
based on the length of a passed-length character argument.
- Solve a set of problems where the length of a character function is
computed using a dummy array argument.
- The use of an INTENT(OUT) argument with LOC is now considered a
"definition" for the purpose of uninitialized variable checking. Also,
the use of LOC(ARRAY(N)) is now considered a "use" of ARRAY for unused
variable checking.
- Eliminate internal compiler error for structure with %FILL
component in module procedure.
- When standards checking is requested, do not give a warning for
fixed-form source line exactly 72 columns long.
- Eliminate internal compiler error for assignment statement with
variable whose name starts with an underscore. (Such names are not
allowed, but a reasonable error should have been given.)
- Correct the problem where if a program unit contains two internal
subroutines which both use host-association to access the same
variable, the second one gets an inappropriate error.
- Eliminate internal compiler error for declaration of a derived type
array with an initializer that is an implied-DO array constructor.
- Eliminate inappropriate error message for initialization expression
of an implied-DO array constructor of length zero.
- When standards checking is enabled, give one warning, not three,
for a !DEC$ ATTRIBUTES directive.
- Generate correct code for certain cases involving overloading of
the .AND. and .OR. operators.
- Allow Variable Format Expression in a character literal when the
I/O list has a subscripted array element.
- Eliminate compiler abort with incorrect program that names the
enclosing program unit in an ONLY clause.
- Allow the extension syntax '101'B for a binary literal.
- Correctly handle whitespace in -omp conditional compilation lines.
- Fix problem where $INTEGER directive was not being properly handled.
- Add support for KIND= keyword in MINLOC/MAXLOC.
- Add suppprt for KIND= keyword in various string intrinsics.
- Prevent compiler abort for incorrect attempt to pass unsupported
datatypes by value.
- Properly report invalid declaration EXTERNAL, INTEGER and recover
so that remainder of program is properly parsed.
- Give standards warning for non-standard placement of NAMELIST.
- Eliminate internal compiler error for particular type of
concatenation of substrings when Fortran 95 standards checking is
requested.
- When converting a negative REAL value to COMPLEX, use +0.0 as the
imaginary part rather than -0.0.
- Allow PARAMETER constant in ALIGN= specification of !DEC$ PSECT.
- Don't give shape mismatch for correct-shape RESHAPE in
initialization expression.
- Don't give inappropriate alignment warnings for certain convoluted
EQUIVALENCE/COMMON combinations.
- Eliminate internal compiler error for initialization expression
which contains a constant expression in a structure constructor.
- Allow EXTERNAL :: FOO
1.7.3 Version 5.3 ECO 01 HPF New Features
The following information pertains to HPF using MPI.
Overview of HPF and MPI
The Compaq Fortran compiler now generates code that uses MPI as its
message-passing library instead of PSE's HPF-specific support. The
compiler provides a choice of three different variants of MPI: one for
Compaq's SC supercomputer systems, one that supports shared-memory and
Memory Channeltm interconnects, and public domain MPI for
other interconnects that include Ethernet and FDDI.
It is now possible to write HPF programs that also call or use MPI
(such as distributed-memory libraries that invoke MPI). The compiler's
MPI runtime library uses its own private MPI "communicator"
so it won't interfere with other MPI code. A new example program,
/usr/examples/hpf/call_mpi.f90, illustrates this.
You enable the new MPI-based runtime library, that supports Compaq
Fortran's HPF directives, by adding the
-wsf_target
option. This option, which requires an argument, belongs in the
compilation and link commands.
Compiling HPF Programs for MPI
You must now specify which variant of MPI support you wish to use for
HPF programs by including the option
-wsf_target
with an MPI selection (argument
target
) in the command to the f90 compiler. An example is next that selects
Compaq MPI.
% f90 -wsf 2 -wsf_target cmpi -c lu.f90
|
An expansion of this example is next that invokes both the compiler and
linker.
% f90 -wsf 2 -wsf_target cmpi -o lu lu.f90
|
The values of
target
in the option
-wsf_target target
appear next with their explanations.
target |
Explanation |
smpi
|
SC (Quadrics) MPI
This MPI comes installed on SC-series systems. It works with the
SC's RMS software that provides a set of commands for launching MPI
jobs, scheduling these jobs on SC clusters, and performing other
miscellaneous tasks.
|
cmpi
|
Compaq MPI
This MPI is a version that is specifically tuned for Alpha
systems. It is distributed as a Compaq layered product. Compaq MPI
supports only Memory Channel clusters and shared-memory (SMP) machines.
|
gmpi
|
Generic MPI
This target is for use with MPICH V1.2.0 or other compatible
libraries. MPICH is a public domain implementation of the MPI
specification that is available for many platforms. You can obtain this
implementation from http://www-unix.mcs.anl.gov/mpi/mpich/. MPICH
V1.2.0 supports many interconnection networks including Ethernet, FDDI,
and other hardware. Using Compaq Fortran and HPF with this MPI is,
officially, not supported. Compaq does not guarantee support of
problems caused by specifying
-wsf_target gmpi
. However, Compaq remains quite interested in receiving problem reports
and will attempt to respond to them.
|
If the command to the f90 compiler includes
-wsf_target target
, then the command must also include
-wsf
.
Another way of specifying the version of MPI to the compiler, instead
of using the option
-wsf_target
, is to set the environment variable DECF90_WSF_TARGET to a value in
the first column of the previous table. For example, the command
% f90 -wsf 2 -wsf_target cmpi -c lu.f90
|
is equivalent to the commands
% setenv DECF90_WSF_TARGET cmpi
% f90 -wsf 2 -c lu.f90
|
If an f90 command contains
-wsf_target with a value (such as
cmpi) and environment variable DECF90_WSF_TARGET is set to a
different value, then the value in the f90
command overrides the value of the environment variable.
Using the environment variable to select the desired MPI variant is the
recommended method. This will require the fewest changes to existing
scripts for building HPF programs, and will allow users generating code
for more than one MPI variant to do so more easily. Compaq additionally
recommends setting the environment variable in your shell
initialization file (e.g. .cshrc if you use 'csh'), particularly if you
usually use only one MPI variant.
A table, showing all changes to HPF-related compiler options between
Fortran V5.3 and V5.3 ECO 01, is next.
Fortran V5.3 |
Fortran V5.3 ECO 01 |
-assume bigarrays
|
No change
|
-assume nozsize
|
No change
|
-hpf_matmul
|
Deleted
|
-nearest_neighbor
|
No change
|
-nowsf_main
|
No change (but currently does not work)
|
-pprof
|
Use only with
-wsf_target pse
|
-show hpf*
|
No change
|
-show wsfinfo
|
No change
|
-wsf
|
No change
|
---
|
-wsf_target
target
|
Linking HPF Programs with MPI
You must now specify which variant of MPI support you wish to use for
HPF programs by including the option
-wsf_target
with an MPI selection (argument
target
) in the link command. An example is next.
% f90 -wsf 2 -wsf_target cmpi -o lu lu.o
|
The values of
target
come from the table in the section "Compiling HPF Programs for
MPI".
If you specified generic MPI at compilation time, either by including
the
-wsf_target gmpi
option or by setting the environment variable DECF90_WSF_TARGET to
gmpi, you must specify a path to the desired generic MPI library during
linking. Do this in one of these ways:
- Set the environment variable DECF90_GMPILIB to the path of the
desired generic MPI library to link with
- In the link command line, include
-l
(possibly along with
-l
) with the path of the desired generic MPI library to link with. Or,
explicitly add the library to the link command line.
An example of a link command for a generic MPI library is next.
% f90 -wsf 2 -wsf_target gmpi -o lu lu.o /usr/users/me/libmpich.a
|
In addition, you must have the Developer's Tool Kit software installed
on your computer to link properly with the option
-wsf_target gmpi
.
Finally, programs linked with
-wsf_target
and an MPI target must be linked with
-call_shared
(which is the default); the
-non_shared
option does not link correctly.
Running HPF Programs Linked with MPI
The
dmpirun
command executes program files created with the
-wsf_target cmpi
option. Include the
-n n
option in the command line where
n
is the same value of
-wsf n
in the compilation command line. Or, if no value was given with the
-wsf
option, then set
n
to the desired number of peers. Also include the name of the program
file.
An example is next where the compilation command line included
-wsf 4
and the name of the program file is heat8.
If your AlphaServer SC system is running with Revision A of the
Quadrics switch, your boot log will contain the message:
elan0: Rev A Elite network detected - disabling adaptive routing (1)
|
To make MPI programs (including HPF programs generated with the
"-wsf_target smpi" option) run properly with Revision A hardware, you
need to set the LIBELAN_GROUP_HWBCAST environment variable to DISABLE;
for example, from csh:
% setenv LIBELAN_GROUP_HWBCAST DISABLE
|
The manpage
dmpirun
contains a full description of this command.
The
prun
command executes program files created with the
-wsf_target smpi
option. Include the
-n n
option in the command line where
n
is the same value of
-wsf n
in the compilation command line. Or, if no value was given with the
-wsf
option, then set
n
to the desired number of peers. Also include the name of the program
file.
An example is next where the compilation command line included
-wsf 4
and the name of the program file is heat8.
The
mpirun
command executes program files created with the
-wsf_target gmpi
option. Include the
-np n
option in the command line where
n
is the same value of
-wsf n
in the compilation command line. Also include the name of the program
file. The
mpirun
command varies according to where you installed the generic MPI.
An example is next where the compilation command line included
-wsf 4
and the name of the program file is heat8.
% /usr/users/me/mpirun -np 4 heat8
|
In the
/usr/examples/hpf
directory, there is a sample script that will launch an HPF program for
any variant of MPI. This script, called "hpfrun", will even determine
the number of processors a source program was compiled for (if that was
specified at compile time), and invoke the proper MPI run command with
the number of processors specified. Portions of the script, or the
entire script, may be useful for users automating the building and
running of HPF programs.
Cleaning up After Running HPF Programs Linked with MPI
Execution of the
dmpirun
command (but not the
prun
and
mpirun
commands) may leave various system resources allocated after the
program has completed. To free them, give the
mpiclean
with no arguments. An example is next.
Changing HPF Programs for MPI
There two changes you should make to Fortran source files before
compiling them for MPI. If a module contains an EXTRINSIC (HPF_LOCAL)
statement and it executes on a system different from peer 0, then its
output intended for stdout may (depending on the variant of MPI used)
go instead to /dev/null. Change such modules or your execution commands
to have the extrinsic subroutine do input/output only from peer 0.