Параллельное программирование на языке Fortran DVM (1158280), страница 6
Текст из файла (страница 6)
| iteration-align-subscript | is int-expr |
| or do-variable-use | |
| or * | |
| do-variable-use | is [ primary-expr * ] do-variable [ add-op primary-expr ] |
Редукционные операции и переменные. Спецификация REDUCTION
| reduction-clause | is REDUCTION ( reduction-op-list ) |
| reduction-op | is reduction-op-name ( reduction-variable ) |
| or reduction-loc-name ( reduction-variable , location-variable, int-expr) |
| reduction-variable | is array-name |
| or scalar-variable-name |
| location-variable | is array-name |
| reduction-op-name | is SUM |
| or PRODUCT | |
| or MAX | |
| or MIN | |
| or AND | |
| or OR |
Ограничения:
-
Редукционными переменными не могут быть распределенные массивы.
-
Редукционные переменные вычисляются и используются только в операторах определенного вида - редукционных операторах.
Спецификация массива с теневыми гранями
| shadow-directive | is SHADOW dist-array ( shadow-edge-list ) |
| dist-array | is array-name |
| shadow-edge | is width |
| or low-width : high-width |
| width | is int-expr |
| low-width | is int-expr |
| high-width | is int-expr |
Ограничения:
-
Размер левой теневой грани (low-width) и размер правой теневой грани (high-width) должны быть целыми константными выражениями, значения которых больше или равны 0.
-
Задание размера теневых граней как width эквивалентно заданию width : width.
-
По умолчанию, распределенный массив имеет теневые грани шириной 1 с обеих сторон каждого распределенного измерения.
Спецификация SHADOW_RENEW
| shadow-renew-clause | is SHADOW_RENEW ( renewee‑list ) |
| renewee | is dist-array-name [ ( shadow-edge-list ) |
Ограничения:
-
Размер теневых граней, заполняемых значениями, не должен превышать максимального размера, описанного в директиве SHADOW.
-
Если размеры теневых граней не указаны, то используются максимальные размеры.
Спецификация AСROSS
| across-clause | is ACROSS ( dependent-array-list ) |
| dependent-array | is dist-array-name ( dependence-list ) |
| dependence | is flow-dep-length : anti-dep-length |
| flow-dep-length | is int-constant |
| anti-dep-length | is int-constant |
Ограничение:
-
В каждой ссылке на массив может существовать зависимость по данным только по одному распределенному измерению.
Директива REMOTE_ACCESS
| remote-access-directive | is REMOTE_ACCESS ( regular-reference-list) |
| regular-reference | is dist-array-name [( regular-subscript-list )] |
| regular-subscript | is int-expr |
| or do-variable-use | |
| or : | |
| remote-access-clause | is remote-access-directive |
Директива ASYNCID
| asyncid-directive | is ASYNCID async-name-list |
Директива F90
| f90-directive | is F90 copy-statement |
| copy-statement | is array-section = array-section |
| array-section | is array-name [( section-subscript-list )] |
| section-subscript | is subscript |
| or subscript-triplet | |
| subscript-triplet | is [ subscript ] : [ subscript ] [ : stride] |
| subscript | is int-expr |
| stride | is int-expr |
Директивы ASYNCHRONOUS и END ASYNCHRONOUS
| asynchronous-construct | is asynchronous-directive |
| f90-directive [ f90-directive ] … copy-loop [ copy-loop ] … | |
| end-asynchronous-directive | |
| asynchronous-directive | is ASYNCHRONOUS async-name |
| end-asynchronous-directive | is END ASYNCHRONOUS |
Директива ASYNCWAIT
| asyncwait-directive | is ASYNCWAIT async-name |
Процедуры
| inherit-directive | is INHERIT dummy-array-name-list |
Приложение 2. Сообщения компилятора Fortran DVM
Если компилятор обнаруживает в исходной программе ошибку, то он выдает сообщение следующего вида
тип-сообщения номер-сообщения on line номер-строки of имя-файла : текст‑сообщения
где:
| тип-сообщения | - Warning | предупреждающее сообщение, не препятствующее генерации выходной программы. |
| - Error | ошибка, при которой невозможна генерация программы. | |
| номер-строки | - целое число, которое указывает номер строки в файле имя-файла, при анализе которой обнаружена ошибка. | |
| текст-сообщения | -текст сообщения на английском языке. | |
Ниже приведены номера ошибок, тексты сообщений и пояснения к ним.
| 000 | Compiler bug |
| 001 | Unknown option option is ignored |
| 002 | Invalid option argument arg is ignored |
| 003 | No source file specified |
| 004 | Illegal command line format |
| 005 | Can't open file filename |
| 006 | Can't open file filename for write |
| 007 | Null program |
| 008 | Missing final end statement or unclosed construct |
| 009 | Illegal continuation card ignored |
| 010 | Unclassifiable statement |
| 011 | Non digit in statement number field |
| 012 | Unbalanced quotes; closing quote supplied |
| 013 | Unbalanced parentheses, statement skipped |
| 014 | Syntax error |
| 015 | Comment too long. Truncated to 160 characters |
| 016 | Inconsistent declaration of identifier identifier |
| 017 | Inconsistent constant declaration identifier |
| 018 | Inconsistent array declaration of identifier identifier |
| 019 | Inconsistent function identifier |
| 020 | Inconsistent procedure identifier |
| 021 | Inconsistent subroutine identifier |
| 022 | Inconsistent program declaration identifier |
| 023 | Inconsistent common declaration identifier |
| 024 | Function has the same name as a common block identifier |
| 025 | Common block has the same name as a function identifier |
| 026 | Inconsistent operands to boolean operation |
| 027 | Inconsistent operands to arithmetic operation |
| 028 | Non-logical expression in IF statement |
| 029 | Statement order error: declaration after DATA or function statement |
| 030 | Declaration among executables |
| 031 | ELSEIF out of place |
| 032 | ELSE out of place |
| 033 | Misplaced PROGRAM statement |
| 034 | Misplaced SUBROUTINE statement |
| 035 | Misplaced ENTRY statement |
| 036 | Statement cannot be reached |
| 037 | IMPLICIT item must be single letter |
| 038 | Label out of range |
| 039 | Label already that of a format |
| 040 | Label label already defined |
| 041 | Non character entity identifier has length specification |
| 042 | No dimensions in DIMENSION statement |
| 043 | Too many dimensions |
| 044 | can't subscript identifier |
| 045 | can't take substring of identifier |
| 046 | No backward DO loops |
| 047 | Symbolic constant not allowed as DO variable |
| 048 | Must go to assigned variable |
| 049 | Missing DVM directive prefix |
| 050 | Explicit shape specification is required |
| 051 | Distribution format list is omitted |
| 052 | Unexpected END statement read |
| 053 | Illegal use of PROCESSORS name identifier |
| 054 | A distributee may not have the ALIGN attribute: identifier |
| 055 | Distribution format BLOCK(n) is not permitted in FDVM |
| 056 | Illegal shadow width specification |
| 057 | An alignee may not have the DISTRIBUTE attribute: identifier |
| 058 | The alignee identifier isn't an array |
| 059 | 'identifier' hasn't the DYNAMIC attribute |
| 060 | 'identifier' hasn't the ALIGN attribute |
| 061 | The align-target identifier isn't declared as array |
| 062 | The align-dummy identifier isn't a scalar integer variable |
| 063 | Illegal combination of attributes |
| 064 | 'identifier' has the DISTRIBUTE and ALIGN attribute |
| 065 | No shape specification |
| 066 | 'identifier' isn't array |
| 067 | 'identifier' is not processor array |
| 068 | 'identifier' is not remote group name |
| 069 | 'identifier' is not declared as reduction group |
| 070 | Illegal reduction operation name |
| 071 | Illegal use of task array name identifier |
| 072 | 'identifier' isn't distributed array |
| 073 | Multiple declaration of identifier 'identifier' |
| 074 | 'identifier' isn't declared as group |
| 075 | No dimensions in TASK directive |
| 076 | Illegal rank of 'identifier' |
| 077 | 'identifier' is not task array |
| 078 | Illegal interval number |
| 079 | Template 'identifier' is in COMMON |
| 080 | Template may not be a dummy argument: identifier |
| 081 | ENTRY among specification statements |
| 082 | Duplicate aligning of the array 'identifier' |
| 083 | POINTER 'identifier' is not integer variable |
| 084 | POINTER may not have SAVE attribute: identifier |
| 085 | POINTER 'identifier' is not distributed object |
| 086 | Object 'identifier' has neither TEMPLATE nor PROCESSORS attribute |
| 087 | Illegal shape specification in DIMENSION attribute |
| 088 | Length of shadow-edge-list is not equal to the rank of array 'identifier' |
| 089 | attribute attribute appears more than once in the combined-directive |
| 090 | The number of BLOCK/GENBLOCK elements of dist-format-list is greater than the rank of PROCESSORS 'identifier' |
| 091 | Missing HEAP declaration |
| 092 | Alignment tree root 'identifier' is not distributed |
| 093 | PAUSE statement is not permitted in FDVM |
| 094 | Illegal statement in the range of parallel loop |
| 095 | Only a value of ALLOCATE function or other POINTER may be assigned to a POINTER |
| 096 | Nested PARALLEL directives are not permitted |
| 097 | PARALLEL directive must be followed by DO statement |
| 098 | The directive is inside the range of PARALLEL loop |
| 099 | Misplaced REMOTE_ACCESS directive |
| 100 | Nested TASK_REGION are not permitted |
| 101 | Statement is outside of on-block |
| 102 | No matching TASK_REGION |
| 103 | Misplaced directive |
| 104 | Nested ON-blocks are not permitted |
| 105 | ON directive is outside of the task region |
| 106 | No matching ON directive |
| 107 | Parallel-task-loop directive is outside of the task region |
| 108 | Missing END TASK_REGION directive |
| 109 | Missing END ON directive |
| 110 | Rank of array identifier is not equal to the length of the dist‑format-list |
| 111 | Saved object may not have the DYNAMIC attribute: identifier |
| 112 | Object in COMMON may not have the DYNAMIC attribute: identifier |
| 113 | 'identifier' hasn't the DYNAMIC attribute |
| 114 | 'identifier' does not appear in DISTRIBUTE/INHERIT directive |
| 116 | Template 'identifier' appears as an alignee |
| 117 | Dummy argument 'identifier' is aligned with local array |
| 118 | Aligned array 'identifier' is in COMMON but align-target is not |
| 119 | Aligned array 'identifier' has SAVE attribute but align-target has not |
| 120 | 'identifier' does not appear in ALIGN and INHERIT directive |
| 121 | 'identifier' is a duplicate dummy argument |
| 122 | Descriptor array error |
| 123 | Rank of pointer identifier is not equal to the length of the dist‑format-list |
| 124 | Array 'identifier' may not be allocated |
| 125 | Array 'identifier' may not be aligned |
| 126 | Illegal aligning of 'identifier' |
| 127 | Distributed object 'identifier' is not array |
| 128 | Rank of aligned array identifier isn't equal to the length of align-source-list |
| 129 | GEN_BLOCK and WGT_BLOCK in format-list |
| 130 | Wrong align-subscript expression |
| 132 | Rank of align-target 'identifier' isn't equal to the length of align-subscript-list |
| 133 | More one occurenсe of do-variable 'identifier' in iteration-align-subscript-list |
| 134 | More one occurence of align-dummy 'identifier' in align subscript list |
| 135 | More one occurence of a do-variable in do-variable-use expression |
| 136 | More one occurence of an align-dummy in align-subscript expression |
| 137 | Illegal group name use: 'identifier' |
| 138 | Illegal POINTER reference: 'identifier' |
| 139 | Owner-computes rule |
| 140 | Wrong number of subscripts specified for identifier |
| 141 | Illegal type of 'identifier' |
| 142 | Low shadow width of 'identifier' is greater than the corresponding one specified in SHADOW directive |
| 143 | High shadow width of 'identifier' is greater than the corresponding one specified in SHADOW directive |
| 144 | Low shadow width of 'identifier' is greater than 1 |
| 145 | High shadow width of 'identifier' is greater than 1 |
| 146 | NEW_VALUE directive must be followed by REDISTRIBUTE or REALIGN directive |
| 147 | Illegal operand list of MAXLOC/MINLOC |
| 148 | 'identifier' is distributed array |
| 149 | Wrong operand of MAXLOC/MINLOC: identifier |
| 150 | Illegal clause |
| 151 | Wrong reduction variable 'identifier' |
| 152 | Wrong type of reduction variable 'identifier' |
| 153 | Double NEW clause |
| 154 | Double REDUCTION clause |
| 155 | Double SHADOW_RENEW clause |
| 156 | Double REMOTE_ACCESS clause |
| 157 | Double ACROSS clause |
| 158 | Length of do-variable list in PARALLEL directive is greater than the number of nested DO statements |
| 159 | Illegal do-variable-list in PARALLEL directive |
| 160 | Wrong iteration-align-subscript in PARALLEL |
| 161 | Rank of array 'identifier' isn't equal to the length of iteration-align-subscript-list |
| 162 | Assumed-size array: identifier |
| 163 | Reverse is not supported |
| 164 | Wrong regular subscript expression |
| 165 | Length of remote-subscript-list is not equal to the rank of remote variable |
| 166 | HEAP limit is exceeded |
| 167 | Illegal template reference: 'identifier' |
| 168 | Illegal variable in new-clause: identifier |
| 169 | ENTRY of program unit distributed arrays are in |
| 170 | Name 'identifier' too long, truncated to 29 |
| 171 | No subscripts: identifier |
| 172 | POINTER 'identifier' in left part of assign statement has DISTRIBUTE or ALIGN attribute |
| 173 | Pointers are of different rank |
| 174 | Pointers are of different type |
| 175 | Wrong number of subscripts specified for 'identifier' |
| 176 | 'identifier' hasn't PROCESSORS/TASK attribute |
| 177 | Associated actual arguments must be aligned |
| 178 | Illegal type of do-variable 'identifier' |
| 179 | Wrong dependence length of distributed array 'identifier' |
| 180 | Wrong dependence length list of distributed array 'identifier' |
| 181 | Illegal fragment number |
| 182 | Unmatched directive |
| 183 | Buffer limit is exceeded |
| 184 | Illegal I/O statement in the range of parallel loop |
| 185 | Illegal elements in control list |
| 186 | END= and ERR= specifiers are illegal in FDVM |
| 187 | IOSTAT= specifier is illegal in I/O of distributed array |
| 189 | Invalid format specification |
| 190 | Illegal I/O list |
| 191 | I/O of distributed array controlled by format specification or NAMELIST is not supported in FDVM |
| 192 | Illegal I/O list item: identifier |
| 193 | Array shape declaration error: identifier |
| 194 | Can't calculate array length: identifier |
| 195 | Can’t find the corresponding MAP directive |
| 196 | Incorrect call of ALLOCATE function |
| 197 | Can’t use pointers in HPF1 |
| 222 | Can’t find a descriptor for POINTER |
| 250 | Illegal nesting INDEPENDENT directive |
| 251 | More one occurеnce of do-variable 'identifier' in subscript list |
| 252 | More one occurеnce of a do-variable in subscript expression |
| 254 | No target for independent loop |
| 255 | Reduction statement inside the range of INDEPENDENT loop, 'identifier' is reduction variable |
Приложение 3. Диагностические сообщения динамического отладчика
Общая структура сообщения об ошибке динамического отладчика:















