J3/14-129
To: J3
From: Dan Nagle
Subject: repairing forall to concurrent
Date: 2014 February 12
This paper is an attempt to deprecate forall and move
the text still needed to the do-concurrent section.
Edits against 14-007
{make the following global changes}
<> change to <>
<> change to <>
<> change to <>
<> change to <>
{line-by-line edits}
{add a comment in the Intro}
[Intro] add to the new features list
"FOARLL has not been as effective as had been hoped
and so has been specified to be obsolescent."
{repair branch target}
{no need to specify forall-stmt because its an action-stmt}
[4:34] set in obs font "<>"
[31:23] set in obs font "<>"
[31:43] set in obs font "<>"
[47:23+] in the table, set in obs font "END FORALL"
[141:7] Also obs font for
", or the \si{forall-limit}s and \si{forall-step}s
in a FORALL statement (7.2.4)"
{move the renamed <> and friends
to the do concurrent section}
{replace the forall stuff with a pointer to the D-C stuff}
[167:17-26] replace with
The values of the index variables are determined
as they are for the DO CONCURRENT statement
(reference DO CONCURRENT here).
[167:30-168:2+] {the note moves with the rest}
replace with
The mask expression is evaluated as it is
for the DO CONCURRENT statement (reference DO CONCURRENT statement).
[166:31-167:4] move to [177:10+] and renumber as needed
{now go back and clobber the old forall stuff}
[166:8-170:16] set in obs font section 7.2.4
{add and reword the forall header description to do concurrent}
[178:2-3] replace with {the names have already been changed}
The forall-limit and forall-step expressions
in the forall-triplet-spec-list are evaluated. These expressions may be
evaluated in any order. The set of values that a particular
index-name variable assumes is determined as follows.
(1) The lower bound m1, the upper bound m2, and the step m3 are
of type integer with the same kind type parameter as the index-name.
Their values are established by evaluating the first forall-limit,
the second forall-limit, and the forall-step expressions,
respectively, including, if necessary, conversion to the kind type
parameter of the index-name according to the rules for numeric
conversion (Table 7.9). If forall-step does not appear, m3 has the
value 1. The value m3 shall not be zero.
(2) Let the value of max be (m2 m1 + m3)/m3. If max 0 for some
index-name, the execution of the construct is complete. Otherwise,
the set of values for the index-name is
m1 +(k1)m3 where k = 1, 2, ..., max.
The set of combinations of index-name values is the Cartesian product
of the sets defined by each triplet specification. An index-name becomes
defined when this set is evaluated.
The scalar-mask-expr, if any, is evaluated for each combination
of index-name values. If there is no scalar- mask-expr, it is as if it
appeared with the value true. The index-name variables may be primaries
in the scalar-mask-expr .
The set of active combinations of index-name values is the subset
of all possible combinations (7.2.4.2.2) for which
the scalar-mask-expr has the value true.
The range of a DO CONCURRENT construct is executed for every
active combination of the index-name values. Each execution
of the range is an iteration. The executions may occur in any order.
{obs and repair forall stmt target thingie}
[188:15] set in obs font "<>,"
before the above, add <>,
[317:1-] in Note 12.49, change
safe to reference in constructs such as DO CONCURRENT
to
"safe to reference in constructs such as DO CONCURRENT
\obs{and FORALL}"
and much later "FORALL statements"
[317:1-] set in obs font
in Note 12.50 FORALL <>s"
[448:15-16] set in obs font "or as an index-name in a FORALL statement"
and "FORALL or".
[448:32] Change "FORALL statement or FORALL or"
to "\obs{FORALL statement, FORALL construct, or}".
[448:35-37] set in obs font "FORALL or" twice
and "FORALL statement or" once
[448:40-41] set in obs font
"FORALL statement, FORALL construct, or" twice.
[448:41] set in obs font "FORALL or"
[460:5] set in obs font "or FORALL assignment statement"
[460:7] set in obs font "or FORALL assignment statement"
[461:21] set in obs font "FORALL or"
{add to list of obsolescent features in B.2}
[474:20+] add
"B2.9+ FORALL construct and statement
The FORALL construct and statement were added to the language in the
expectation that they would enable highly efficient execution, especially
on parallel processors. However, experience indicates that they are too
complex and have too many restrictions for compilers to take advantage of
them. They are redundant with the DO CONCURRENT loop, and many of the
manipulations for which they might be used can be done more effectively
using pointers, especially using pointer rank remapping."