Параллельное программирование на языке C-DVM (1158283), страница 7
Текст из файла (страница 7)
SL, PL или TR | <номер конструкции> (<номер объемлющей конструкции>) [<размерность конструкции>] {<имя файла>, <номер строки>} = <уровень накопления трассировки>, (<измерение> : <первая итерация> , <последняя итерация> , <шаг трассируемых итераций>) | |
# Trace size = <размер трассировки в байтах данной конструкции для указанного уровня накопления трассировки> | ||
# String count = <число строк трассировки данной конструкции для указанного уровня накопления трассировки > | ||
# Count of traced iterations = <число трассируемых итераций цикла или задач> |
EL: <номер конструкции>
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SL, PL или TR | <номер конструкции> (<номер объемлющей конструкции>) [<размерность конструкции>] {<имя файла>, <номер строки>} = <уровень накопления трассировки>, (<измерение> : <первая итерация> , <последняя итерация> , <шаг трассируемых итераций>) | |
# Trace size = <размер трассировки в байтах данной конструкции для указанного уровня накопления трассировки> | ||
# String count = <число строк трассировки данной конструкции для указанного уровня накопления трассировки > | ||
# Count of traced iterations = <число трассируемых итераций цикла или задач> |
EL: <номер конструкции>
4. Структура трассировки вычислений
При трассировке вычислений накапливаемая трассировочная информация состоит из двух частей:
-
заголовка трассировки;
-
тела трассировки (может отсутствовать).
Заголовок присутствует в трассировке даже тогда, когда накопление трассировки отключено для всей программы. Его структура напоминает структуру конфигурационного файла трассировки, но без вычисляемых значений объемов трассировки для всей программы и для отдельных циклов:
MODE = <уровень накопления трассировки для всей программы>,
SL, PL или TR | <номер конструкции> (<номер объемлющей конструкции>) [<размерность конструкции>] {<имя файла>, <номер строки>} = <уровень накопления трассировки>, (<измерение> : <первая итерация> , <последняя итерация> , <шаг трассируемых итераций>) |
EL: <номер конструкции>
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SL, PL или TR | <номер конструкции> (<номер объемлющей конструкции>) [<размерность конструкции>] {<имя файла>, <номер строки>} = <уровень накопления трассировки>, (<измерение> : <первая итерация> , <последняя итерация> , <шаг трассируемых итераций>) |
EL: <номер конструкции>
Тело трассировки отсутствует, когда накопление трассировки отключено для всей программы. Иначе тело трассировки состоит из множества записей следующих типов:
-
Обращение к переменной на чтение.
RD: [<тип переменной>] <имя переменной> = <значение>; {<имя файла>, <номер строки>}
-
Обращение к переменной на запись (перед вычислением выражения).
BW: [<тип переменной>] <имя переменной>; {<имя файла>, <номер строки>}
-
Результат записи в переменную.
AW: [<тип переменной>] <имя переменной> = <значение>; {<имя файла>, <номер строки>}
-
Обращение к редукционной переменной на чтение.
RV_RD: [<тип переменной>] <имя переменной> = <значение>; {<имя файла>, <номер строки>}
-
Обращение к редукционной переменной на запись (перед вычислением выражения).
RV_BW: [<тип переменной>] <имя переменной>; {<имя файла>, <номер строки>}
-
Результат записи в редукционную переменную.
RV_AW: [<тип переменной>] <имя переменной> = <значение>; {<имя файла>, <номер строки>}
-
Результат вычисления редукции.
RV: [<тип переменной>] <значение>; {<имя файла>, <номер строки>}
-
Пропуск операторов при обращении к элементу распределенного массива в последовательной части программы.
SKP: {<имя файла>, <номер строки>}
-
Начало выполнения параллельного цикла.
PL: <номер цикла> (<номер родительской конструкции или пусто>) [<размерность цикла>] = <уровень трассировки: FULL, MODIFY, MINIMAL, NONE>, (<диапазон трассируемых итераций (может отсутствовать)>); {<имя файла>, <номер строки>}
-
Начало выполнения последовательного цикла.
SL: <номер цикла> (<номер родительской конструкции или пусто>) [<размерность цикла>] = <уровень трассировки: FULL, MODIFY, MINIMAL, NONE>, (<диапазон трассируемых итераций (может отсутствовать)>); {<имя файла>, <номер строки>}
-
Начало выполнения области задач.
TR: <номер области> (<номер родительской конструкции или пусто>) [<размерность области>] = <уровень трассировки: FULL, MODIFY, MINIMAL, NONE>, (<диапазон трассируемых задач>); {<имя файла>, <номер строки>}
-
Начало итерации (помещается в трассировку только при изменении самой вложенной итерации цикла) или параллельной задачи.
IT: <абсолютный индекс итерации (вычисляется из значений всех итерационных переменных) или номер задачи>, (<значение итерационной переменной>,< значение итерационной переменной >,…).
-
Конец выполнения параллельного цикла или области задач.
EL: <номер конструкции>; {<имя файла>, <номер строки>}
Приложение 4. Сообщения об ошибках системы поддержки
Сообщения об ошибках, возникающих в процессе функционирования системы поддержки, делятся (по степени серьезности последних) на предупреждения и сообщения об ошибках, прерывающих выполнение программы. Ошибки, прерывающие выполнение программы, могут быть обычными, ответственность за которые лежит (скорее всего) на пользователе, и фатальными, требующими, возможно, участия разработчика или его представителя.
В соответствии с этим сообщения об ошибках имеют один из следующих видов:
*** RTS warning | <номер класса ошибки> . <номер ошибки внутри класса> : <текст сообщения об ошибке> |
*** RTS err | <номер класса ошибки> . <номер ошибки внутри класса> : <текст сообщения об ошибке> |
*** RTS fatal err | <номер класса ошибки> . <номер ошибки внутри класса> : <текст сообщения об ошибке> |
Класс ошибки определяется функциональной и модульной структурой системы поддержки.
Каждое сообщение об ошибке завершает вывод имени файла и номера строки, в которой произошла ошибка, как пользовательской программы, так и системы поддержки:
USRFILE=<имя файла программы пользователя>; USRLINE=<номер строки>;
SYSFILE=<имя файла системы поддержки>; SYSLINE =<номер строки>;
По характеру возникновения ошибки делятся на две группы. Первую группу составляют ошибки, возникающие только на всех процессорах сразу. Сообщения об этих ошибках выводит процессор ввода/вывода. Вторая группа состоит из ошибок, которые могут происходить не на всех процессорах "одновременно". Сообщения о таких ошибках выводит каждый процессор самостоятельно, сопровождая каждое сообщение своими внутренним и внешним номерами. При работе на одном процессоре все сообщения об ошибках выводятся без его номеров.
Все сообщения об ошибках с их тематическим разбиением и в порядке возрастания номеров классов и номеров ошибок внутри класса рассмотрены в документе "Система поддержки DVM-программ. Детальный дизайн" [5].
Ниже перечислены номера сообщений, сгруппированных по возможным причинам их возникновения. Номера сообщений "fatal error" опущены.
1. Ошибки запуска и завершения
Эти ошибки диагностируются сообщениями с номерами 01x.xxx и 02x.xxx.
Среди них:
-
сообщения об ошибке открытия входных и выходных файлов (файлы параметров, файлы вывода информационных сообщений, файлы перенаправления stdout и stderr, файлы трассировки); они могут быть вызваны недоступностью или отсутствием файлов (директорий) или неправильными правами доступа для создания файлов;
-
сообщения о несоответствии версий системы и файлов параметров;
-
сообщения о синтаксических ошибках в файлах параметров (в т.ч. неправильные ключевые слова, значения индексов, неверное или не задано значение параметра);
-
сообщения о нехватке памяти для системных буферов;
-
сообщения об ошибке записи файла трассировки.
Кроме того, при завершении программы возможны также сообщения с номерами 022.002 и 022.003, свидетельствующие о неверной контрольной сумме памяти команд или данных, т.е. об изменении памяти, которая не должна была изменяться ("затирание памяти").
Во время выполнения программы о "затирании" памяти могут говорить также сообщения со следующими номерами: 230.000, 230.001, 230.002, 230.003, 230.004, 250.000, 250.001.
2. Ошибки вида "... is not a DVM object"
"Объект, заданный при обращении к функции, не является DVM-объектом".
Возможная причина: объект используется до его создания/инициализации или когда объект уже уничтожен.
Номера сообщений:
030.000, 030.010, 030.020, 032.000, 032.010, 032.015, 032.020, 032.030, 032.050, 032.070, 032.080, 032.085, 036.000, 036.010, 036.060, 036.066, 037.000, 037.010, 037.020, 038.000, 038.010, 038.012, 038.014, 038.032, 038.038, 038.040, 038.050, 044.000, 044.040, 046.011, 046.014, 046.050, 046.054, 046.090, 060.010, 060.065, 060.075, 060.115, 065.000, 065.003, 065.020, 069.020, 070.000, 070.002, 070.010, 070.016, 070.030, 070.040, 070.050, 070.060, 070.070, 070.080, 080.000, 080.020, 080.040, 080.050, 080.060, 080.070, 080.080, 080.150, 080.160, 080.200, 080.250, 120.006, 130.065, 132.010, 132.030, 132.040, 132.050, 144.010, 144.030, 144.040, 144.050, 219.000.
3. Ошибки вида "[the object] is not a/the …"
"Объект, заданный при обращении к функции, не является объектом нужного вида".
Соответствие вида объекта и выполняемой операции как правило контролируется компилятором. Возникновение такой ошибки при выполнении программы скорее всего вызвано "затиранием" [дескриптора] объекта.
Номера сообщений:
030.001, 030.011, 030.021, 032.001, 032.011, 032.016, 032.021, 032.031, 032.051, 032.071, 032.081, 032.086, 036.001, 036.011, 036.061, 036.067, 037.001, 037.011, 037.021, 038.001, 038.011, 038.013, 038.015, 038.033, 038.039, 038.041, 038.051, 040.005, 040.008, 040.010, 044.001, 044.002, 044.041, 044.042, 044.060, 046.000, 046.010, 046.012, 046.015, 046.051, 046.052, 046.055, 046.091, 060.011, 060.012, 060.013, 060.050, 060.051, 060.060, 060.061, 060.066, 060.070, 060.071, 060.076, 060.080, 060.081, 060.090, 060.091, 060.100, 060.116, 060.200, 065.001, 065.004, 065.021, 069.021, 070.001, 070.003, 070.008, 070.014, 070.031, 070.041, 070.051, 070.061, 070.071, 070.081, 080.001, 080.002, 080.021, 080.022, 080.041, 080.051, 080.061, 080.071, 080.081, 080.151, 080.161, 080.201, 080.202, 080.251, 080.252, 090.000, 090.001, 090.010, 090.011, 090.020, 090.030, 090.040, 090.050, 090.051, 090.060, 092.000, 092.001, 092.010, 092.011, 092.020, 094.000, 096.000, 110.000, 110.003, 110.009, 110.012, 120.000, 120.001, 120.002, 120.003, 120.005, 130.001, 130.004, 130.005, 130.031, 130.035, 130.061, 130.066, 131.000, 131.001, 131.020, 131.022, 131.040, 131.042, 132.011, 132.014, 132.016, 132.031, 132.041, 132.051, 133.001, 133.004, 133.005, 140.001, 140.020, 140.021, 140.030, 141.001, 141.030, 143.000, 143.001, 143.020, 143.022, 143.040, 143.042, 144.011, 144.014, 144.016, 144.031, 144.041, 144.051, 219.001, 219.010, 219.011, 219.020, 219.021.
4. Ошибки вида "…has not been aligned/mapped" и "…has already been aligned/mapped"; "…does not exist" и "…already exists"
Вероятная причина таких ошибок нарушение порядка создания/использования массивов и других DVM-объектов.
Номера сообщений:
032.017, 032.088, 036.002, 036.003, 036.014, 036.051, 038.002, 038.020, 038.021, 038.024, 038.031, 040.000, 040.006, 044.005, 044.006, 044.047, 046.001, 046.019, 046.020, 046.061, 060.014, 060.015, 060.052, 060.062, 060.072, 060.082, 060.101, 060.201, 065.007, 065.009, 065.022, 070.009, 070.015, 080.005, 080.024, 080.205, 080.254, 090.002, 090.003, 090.012, 090.013, 090.021, 090.022, 090.041, 090.031, 090.052, 090.053, 090.061, 092.002, 092.003, 092.012, 092.013, 092.021, 092.022, 094.004, 094.005, 096.004, 096.005, 101.000, 101.010, 110.001, 110.004, 110.010, 110.013, 130.000, 130.002, 130.006, 130.030, 130.032, 130.036, 130.060, 130.062, 133.000, 133.002, 133.006, 140.000, 140.002, 140.022, 140.032, 141.000, 141.002, 141.032, 219.012, 219.022.
5. Ошибки индексации и значений
Ошибки данного типа возникают при выходе индекса за граница некоторой размерности DVM-объекта (например, при выравнивании массива или описании параллельного цикла), индексировании по несуществующей размерности, неправильном соотношении между индексами (например, начальный индекс больше конечного), неверной размерности DVM-объекта и т.п.. Некорректные значения могут передаваться системе поддержки как размеры теневых граней (или в результате "затирания" памяти). Сообщения системы поддержки могут содержать выражение вида (<равенство или неравенство>) нарушенное соотношение. Описание величин, включенных в каждое такое сообщение, можно найти в документе "Система поддержки DVM-программ. Детальный дизайн" [5].
Номера сообщений:
030.022, 030.023, 032.019, 032.022, 032.035, 032.036, 032.037, 032.038, 032.039, 032.055, 032.056, 032.057, 032.090, 032.091, 032.092, 036.020. 036.021, 036.022, 036.023, 036.024, 036.025, 036.026, 037.002, 037.003, 037.012, 037.022, 038.016, 038.017, 038.044, 038.045, 040.001, 040.002, 040.003, 044.019, 044.020, 044.021, 044.022, 044.023, 044.024, 044.025, 044.026, 044.027, 044.028, 046.013, 046.016, 046.030, 046.031, 046.056, 046.057, 060.000, 060.001, 060.019, 060.020, 060.021, 060.022, 060.023, 060.024, 060.025, 060.026, 060.027, 060.028, 060.029, 060.030, 069.000, 069.001, 069.002, 069.003, 069.024, 080.014, 080.015, 080.031, 080.032, 080.033, 080.034, 080.035, 080.214, 080.215, 080.216, 080.220, 080.225, 080.226, 080.227, 080.230, 080.235, 080.236, 080.237, 080.261, 080.264, 080.265, 080.266, 080.270, 080.275, 080.276, 080.277, 080.280, 080.285, 080.286, 080.287, 080.290, 080.291, 094.001, 094.002, 094.003, 096.001, 096.002, 096.003, 110.006, 110.015, 120.004, 120.200, 130.010, 130.011, 130.012, 130.013, 130.014, 130.015, 130.016, 130.017, 130.018, 130.019, 130.040, 130.041, 130.042, 130.043, 130.044, 130.045, 130.046, 130.047, 130.070, 140.010, 140.011, 140.023, 140.031. 140.036, 140.037, 140.038, 140.041, 140.042, 140.043, 140.044, 141.010, 141.011, 141.031, 141.036, 141.037, 141.038, 219.015, 219.016, 219.017, 219.025, 219.026, 219.027.
6. Другие семантические ошибки
Перераспределение или переотображение массива или темплейта, которое не было разрешено при его создании или невозможно.