11-172 To: J3 From: Van Snyder Subject: Stuff about "pending input/output transfer" Date: 2011 June 07 Ref: 10-007r1 1. Introduction. Discussion of the Interop TR illustrated a need to apply the ASYNCHRONOUS attribute to pending data transfers initiated and completed by means other than Fortran. This came out of discussions involving MPI, but the problem is actually much broader. The strategy here is to replace "pending input/output transfer" by "pending data transfer," and define "data transfer by means other than Fortran." With those wording changes and that definition, essentially nothing else needs change of substance. Most of the remaining edits are to move things to better places or delete redundant words. Even if "data transfer by means other than Fortran" is not defined and exploited, the remaining changes are worth doing, to regularize terminology (use "pending data transfer" throughout instead of using that in some places and "pending input/output" in others), to move some material to more logical places, and to remove a few redundant words. 2. Edits to 10-007r1 [13:39+] Editor: Insert definition subclauses {define otherwise undefined term used in 9.6.4.1} 1.3.107a <> o data transfer initiated by an asynchronous input/output statement (9.6.2.5) and not yet completed by a Fortran wait operation (9.7.1) o asynchronous data transfer initiated by means other than Fortran and not yet completed {replace 9.6.2.6p5; definition needed by 1.3.107c} 1.3.107b <> o set of storage units specified by the item list, NML= specifier, or SIZE= specifier, in an asynchronous input/output statement (9.6.2.5) o set of storage units to which or from which data are being transferred asynchronously by means other than Fortran NOTE 1.5a A pending data transfer storage sequence is not necessarily a contiguous set of storage units. {replace 9.6.2.5p6; should be here instead of 9.6.2.5 because it is used in 5.3.4p2} 1.3.107c <> any variable of which any part is associated with a storage unit in a pending data transfer storage sequence [90:13 5.3.4p1] Editor: Replace "input/output" by "data transfer". [90:16-17 5.3.4p2 second bullet] Editor: Replace "I/O" by "data transfer". Delete "(9.6.2.5)" or replace it by "(1.3.107c)". [90:24+2-3 NOTE 5.4] Editor: Replace "input/output" by "data transfer" twice. [210:28 9.5.7.1p3] Editor: Remove "asynchronous" since "pending" means "asynchronous". [215:11-15 9.6.2.5p5-6, NOTE 9.30] Editor: Delete; replaced by definitions 1.3.107a-c above. [219:14 9.6.4.1p2(3)] Editor: Replace "input/output" by "data transfer" [219:32 9.6.4.1p3(3)] Editor: Replace "input/output" by "data transfer" [220:8-15 9.6.4.1p4-6] Editor: Delete. Replaced by more general definition in 9.6a below. This material isn't part of "execution of a data transfer input/output statement" anyway. [220:16-22 9.6.4.1p7] Editor: Move to [240:33+ 9.11.1p4+]. This material isn't part of "execution of a data transfer input/output statement." [230:4- 9.7-] Editor: Add subclauses: 9.6a Pending data transfers {Restate 9.6.4.1p4-6 more generally. This material isn't part of "execution of a data transfer statement" so it ought to be in a subclause of its own. The subclause number is 9.6a instead of 9.6.5a because it is not part of "data transfer _statements_.} Asynchronous data transfers may occur during execution of the statement that initiates them, during execution of the corresponding wait operation, or at any time between those two events. The data transfer operation is considered to be pending until a corresponding wait operation is performed. During a pending input data transfer operation, a pending data transfer storage sequence affector shall not be referenced, become defined or undefined, become associated with a dummy argument that has the VALUE attribute, or have its pointer association status changed. During a pending output data transfer operation, a pending data transfer storage sequence affector shall not become defined or undefined, or have its pointer association status changed. 9.6b Data transfer by means other than Fortran {New material. The subclause number is 9.6b instead of 9.6.5b because it is not part of "data transfer _statements_.} Input data transfer by means other than Fortran causes values to be transferred to entities from sources not specified by Fortran. Output data transfer by means other than Fortran causes values to be transferred from entities to destinations not specified by Fortran. [230:9 9.7.1p1] Editor: After "operation" insert "initiated by execution of a Fortran statement". [230:10 9.7.1p1] Editor: Append a sentence: "A wait operation for a pending data transfer operation initiated by means other than Fortran may be performed by means other than Fortran." [230:23 9.7.2p1] Editor: Remove "asynchronous" since "pending" means "asynchronous". After "operations" insert "initiated by execution of Fortran statements". [231:35 9.8.1p3] Editor: Remove "asynchronous" since "pending" means "asynchronous". [233:21 9.9p4] Editor: Remove "asynchronous" since "pending" means "asynchronous". [238:2 9.10.2.21p1] Editor: Remove "asynchronous" since "pending" means "asynchronous". After "transfers" insert "initiated by execution of Fortran statements". 3. Which edits above are for "means other than Fortran?" {define otherwise undefined term used in 9.6.4.1} 1.3.107a <> o asynchronous data transfer initiated by means other than Fortran and not yet completed {replace 9.6.2.6p5; definition needed by 1.3.107c} 1.3.107b <> o set of storage units to which or from which data are being transferred asynchronously by means other than Fortran [230:4- 9.7-] Editor: Add subclauses: 9.6b Data transfer by means other than Fortran {New material. The subclause number is 9.6b instead of 9.6.5b because it is not part of "data transfer _statements_.} Input data transfer by means other than Fortran causes values to be transferred to entities from sources not specified by Fortran. Output data transfer by means other than Fortran causes values to be transferred from entities to destinations not specified by Fortran. [230:10 9.7.1p1] Editor: Append a sentence: "A wait operation for a pending data transfer operation initiated by means other than Fortran may be performed by means other than Fortran."