Отладка DVM–программ
Руководство пользователя
* Октябрь, 2009 *

DVM-система (на русском)
Документация

- дата последнего обновления 21.06.11 -


 

Оглавление

1     Введение

2     Что такое DVM-программа?

3     Типы ошибок в DVM-программе.

4     Динамический контроль DVM-указаний

5     Сравнение результатов выполнения

6     Средства накопления и анализ системной трассировки

7     Настройка DVM-системы

8     Опции конверторов

8.1       Опции конверторов, управляющие режимами работы программ

8.2       Опции конверторов для DVM-отладчика

8.3       Опции конверторов для анализа производительности

9     Команды DVM-системы

10   Протоколы DVM-отладчика

10.1     Протокол с сообщениями об ошибках

10.1.1   Протокол динамического контроля корректности

10.1.2   Протоколы сравнительной отладки

10.2     Протокол с различиями, обнаруженными в процессе сравнения и скачками в значениях переменных и элементах массивов

10.2.1   Протокол со скачками

10.2.2   Результирующий протокол со скачками

10.3     Kонфигурационный файл трассировки

10.4     Файл трассировки

11   Cообщения DVM-отладчика на стандартный вывод

11.1     Динамический контроль корректности

11.2     Сравнительная отладка

12   Диагностические сообщения DVM-отладчика в протоколах

12.1     Сообщения при динамическом контроле корректности

12.2     Сообщения при сравнительной отладке

12.2.1   Ошибки при выполнении программы

12.2.2   Ошибки в трассе

12.2.3   Ошибки при сравнении трасс

13   Методика отладки DVM-программ

13.1     Оценка объема трассировки

13.2     Управление объемом файла трассировки

13.2.1   Сокращение файла трассировок при помощи установки контроля на граничных итерациях циклов (для DVM-программ на F-DVM)

13.2.2   Сокращение файла трассировки при помощи установки разной степени подробности трассируемых данных

13.2.3   Сокращение файла трассировки при помощи параметра

13.3     Последовательность команд для отладки DVM- программ

13.4     Команда  комплексного прогона одной программы последовательно через все шаги отладки

13.5     Запуск программ с нестандартным набором параметров

14   Параметры DVM-системы

14.1     Параметры динамического контроля

14.2     Параметры накопления и сравнения трассировки вычислений

14.3     Параметры перенаправления стандартных выходных потоков и управления выводом информационных сообщений системы поддержки

14.4     Параметры управления системной трассировкой

14.4.1   Включение и выключение трассировки

14.4.2   Задание открытых (включенных) потоков трассировки

14.4.3   Задание режимов трассировки

14.4.4   Управление формой накапливаемой информации

14.4.5   Управление механизмами внутреннего самоконтроля системы поддержки, функционирующими при накоплении трассировки

14.4.6   Управление выводом дополнительной информации при трассировке некоторых функций системы поддержки в расширенном режиме

15   Сообщения об ошибках системы поддержки

15.1     Ошибки запуска и завершения

15.2     Ошибки вида "... is not a DVM object"

15.3     Ошибки вида "[the object] is not a/the …"

15.4     Ошибки вида "… is not a subsystem of the current/parental PS"

15.5     Ошибки вида "…was not created by the current subtask" и "…was not started by the current subtask"

15.6     Ошибки вида "…has not been aligned/mapped"  и  "…has already been aligned/mapped";     "…does not exist"  и  "…already exists"

15.7     Ошибки вида  "… has already been started/inserted …",  "… has not been started/completed"  и  "… the reduction group is empty"

15.8     Ошибки индексации и значений

15.9     Другие семантические ошибки

15.10   Ошибки запроса памяти и количества объектов

15.11   Ошибки нижнего уровня передачи сообщений

16   Структура файла системной трассировки

 


1  Введение

Языки C-DVM и Fortran-DVM (в дальнейшем F-DVM) предназначены для разработки мобильных и эффективных параллельных программ для ЭВМ различной архитектуры. Они являются расширениями стандартных языков C и Fortran 90. Параллельная программа представляет собой обычную последовательную программу, в которую вставлены DVM-указания, определяющие ее параллельное выполнение. DVM-указания прозрачны для стандартных компиляторов, поэтому DVM-программа обрабатывается ими как обычная последовательная программа.

Для отладки DVM-программ предлагается следующий подход.

Сначала программа отлаживается на рабочей станции как обычная последовательная программа (в режиме игнорирования DVM-указаний) с использованием привычных средств отладки. Затем на рабочей станции программа запускается в специальном режиме динамического контроля DVM-указаний, что позволяет выявить их правильность и полноту. На следующем этапе программа может быть запущена на параллельной машине или кластере рабочих станций (или на рабочей станции с имитацией параллельного выполнения) в режиме сравнения ее промежуточных результатов с эталонными, полученными, например, при ее последовательном выполнении. Кроме того, для локализации ошибок при параллельном выполнении программы служат средства накопления трассировочной информации.

2  Что такое DVM-программа?

DVM-программа – это один или несколько файлов с исходными текстами на языках C-DVM или F-DVM, имеющими соответственно расширения .cdv и .fdv.

Получение готовой программы (выполняемого файла) осуществляется в три этапа:

3  Типы ошибок в DVM-программе

DVM-программа может содержать ошибки разного рода. Эти ошибки можно разбить на несколько классов по степени их влияния на работоспособность программы, по легкости выявления и т.д.

В общем случае можно выделить следующие пять классов ошибок:

  1. Ошибки в последовательной программе.

  2. Синтаксические ошибки в DVM-указаниях (неправильная запись оператора, отсутствие скобки и т.д.), а также нарушение статической семантики.

  3. Неправильная последовательность выполнения DVM-указаний или неправильные параметры DVM-указаний.

  4. Неправильное выполнение вычислений из-за некорректности DVM-указаний и ошибок, не проявляющихся при последовательном выполнении программы.

  5. Аварийное завершение параллельного выполнения программы (авосты, зацикливания, зависания) из-за некорректности DVM-указаний и ошибок, не проявляющихся при последовательном выполнении программы.

Ошибки первого класса диагностируются:

Ошибки второго класса диагностируются при конвертации C-DVM или F-DVM программ (см.п.8 и п.9). Список диагностических сообщений приведен в руководствах по использованию компиляторов (конверторов) C-DVM и Fortran-DVM.

Ошибки третьего класса диагностируются системой поддержки при параллельном выполнении программы: функции библиотеки проверяют корректность порядка выполнения DVM-указаний и передаваемых параметров (об ошибках, диагностируемых функциями Lib-DVM, см. в п.15.1).

Ошибки четвертого класса выявляются DVM-отладчиком при:

Ошибки пятого класса могут быть выявлены при:

4  Динамический контроль DVM-указаний

Динамический контроль DVM-указаний позволяет проверить корректность распараллеливания программы посредством DVM-указаний, и основан на моделировании параллельного выполнения DVM-программы во время ее последовательного выполнения на одном процессоре.

Для динамического контроля программы ее следует сначала скомпилировать в режиме получения отладочного варианта параллельной программы (см.п.8 и п.9).

Однако использование данного метода существенно замедляет выполнение программы и требует больших объемов дополнительной памяти. Поэтому, его следует применять только для программы со специально подобранными тестовыми данными.

Динамический контроль позволяет обнаружить следующие ошибки:

  1. Обращение к неинициализированной переменной.

  2. Обращение к неинициализированному элементу распределенного массива.

  3. Обращение к нелокальному элементу массива.

  4. Обращение к редукционной переменной до завершения операции редукции;

  5. Запись в теневой элемент массива.

  6. Зависимость параллельного цикла по данным.

  7. Использование теневого элемента  распределенного массива во время выполнения операции обновления теневых граней.

  8. Использование нелокального элемента  распределенного массива в последовательной части программы.

  9. Ожидание завершения редукции без ее фактического запуска.

  10. Обращение к элементу массива за пределами его границ.

  11. Отсутствие операции ожидания завершения асинхронной редукции для соответствующей операции старта асинхронной редукции.

  12. Отсутствие операции старта асинхронной редукции при спецификации редукционной переменной.

Сравнение результатов выполнения

Отсутствие ошибок при динамическом контроле не гарантирует правильной работы параллельной программы по следующим причинам:

Для поиска таких ошибок используется метод накопления и сравнения трассировок вычислений, который позволяет определить место в программе и момент, когда появляются расхождения в результатах вычислений.

При трассировке вычислений выполняется сбор информации обо всех чтениях и модификациях переменных, о начале выполнения каждого витка цикла, о начале и конце выполнения параллельного цикла, о начале выполнения каждой параллельной задачи, о начале и конце выполнения группы задач.

Трассировка вычислений, как и динамический контроль, требовательна к ресурсам вычислительной системы. Поэтому рекомендуется сначала трассировать программы с тестовыми данными, а затем уже переходить к реальным данным. Однако при выполнении программ с реальными данными не всегда можно собрать трассировку в полном объеме из-за ее больших размеров. В этом случае перед накоплением трассировки следует оценить ее объем как для всей программы в целом, так и для отдельных ее частей.

Степенью подробности (а значит и объемом) трассировки можно управлять:

6  Средства накопления и анализ системной трассировки

Системная трассировка (трассировка вызовов функций системы поддержки) позволяет проследить последовательность вызовов функций, их параметры (см.п.13.2) и времена выполнения. Имеется два основных способа сбора системной трассировки (см.п.14.4):

Степень подробности трассировки управляется параметрами (см.п.14.4). При этом следует помнить, что для трассировки некоторых часто вызываемых функций системы поддержки она должна быть скомпилирована в специальном режиме, задаваемом переменными периода компиляции. Полный список трассируемых событий приведен в файле events.def в директории dvm_sys/rts/src DVM-системы, в котором имени каждого события сопоставлен его номер.

Трассируются также все информационные сообщения системы поддержки и все сообщения об обнаруженных ею ошибках.

Файлы с системной трассировкой имеют текстовый формат (см.п.16) и могут анализироваться с помощью обычных редакторов и визуализаторов.

7  Настройка DVM-системы

DVM-система настраивается на окружение пользователя в два этапа:

В файле запуска dvm-команд определены следующие переменные окружения, которые могут быть изменены пользователем:

dvmdir

-

полное имя (с путем) директории, в которой расположена DVM-система (настраивается автоматически при инсталляции);

dvmpar

-

директория и расширение файлов базового набора параметров DVM-системы;

usrpar

-

директории и имена (с расширениями) файлов параметров DVM-системы, в которых пользователь может корректировать базовый набор параметров (переменная может содержать несколько значений, разделенных пробелами);

optcconv

-

опции C-DVM конвертора;

optfconv

-

опции F-DVM конвертора;

optccomp

-

вызов и опции стандартного C-компилятора;

optfcomp

-

вызов и опции стандартного Fortran-компилятора;

optclink

-

опции линковщика C программ;

optflink

-

опции линковщика Fortran программ;

dvmlib

-

библиотеки системы поддержки DVM-программ;

usrlib

-

библиотеки, используемые в программе пользователя;

Pred_sys

-

имя конфигурационного файла, описывающего целевую машину (для предиктора);

Pred_vis

-

имя визуализатора html-файлов (результатов работы предиктора);

Doc_vis

-

имя визуализатора документации;

dvmout

-

включение (on) и отключение (off) вывода сообщений:

 - C-DVM и F-DVM компиляторов,

 - стандартных C и Fortran компиляторов,

 - системы поддержки (устанавливает параметр SysInfoPrint = 1 | 0) (см.п.14.3);

dvmoutfile

-

имя файла, в который направляется вывод задачи пользователя (если не задан, то вывод идет на экран);

dvmlog

-

включение (1) и отключение (0) протоколирования сеанса работы пользователя (если не задан dvmoutfile, то вывод идет в файл dvm.log);

dvmshow

-

включение (1) и отключение (0) вывода на экран всех выполняемых dvm-команд;

dvmsave

-

включение (1) и отключение (0) сохранения промежуточных файлов (конвертации, компиляции и т.д.).

В своей рабочей директории (там, где запускается задача) пользователь может иметь несколько заранее подготовленных вариантов файла запуска dvm-команд c различными именами, содержащих различные значения переменных окружения. Тогда при запуске dvm-команд используется соответствующий префикс (см.п.9).

8   Опции конверторов

Опции C-DVM и F-DVM конверторов управляют:

Ниже приводится краткое описание основных опций конверторов, (полное описание всех опций содержится в руководствах по использованию компиляторов C-DVM и F-DVM).

8.1        Опции конверторов, управляющие режимами работы программ

-p

-

(по умолчанию) получение параллельного варианта программы: обрабатываются все DVM-указания.

-s

-

получение последовательного варианта программы:
обрабатываются только те DVM-указания, которые необходимы для трассировки вычислений и анализа производительности. Обращения к данным при этом остаются без изменений, что позволяет отлаживать такую программу обычными средствами.

-o<file>

-

имя выходного или .f файла.

-v

-

вывод номера версии, имени выходного файла, и т.д.

8.2        Опции конверторов для DVM-отладчика

-d1

-

обеспечивается трассировка только модификаций распределенных массивов.

-d2

-

обеспечивается трассировка чтений и модификаций распределенных массивов.

-d3

-

обеспечивается трассировка модификаций всех данных.

-d4

-

обеспечивается трассировка чтений и модификаций всех данных.

-dbif1

-

обеспечивается контроль данных на граничных итерациях цикла. Ширина грани может быть задана при помощи параметров:

TraceOptions.LocIterWidth- для параллельных циклов, по умолчанию 1;

TraceOptions.RepIterWidth-для последовательных циклов, по умолчанию 1 ( для DVM-программ на F-DVM).

8.3        Опции конверторов для анализа производительности

-e1

-

интервалами становятся все параллельные циклы и объемлющие их последовательные циклы.

-e2

-

интервалами становятся объявленные пользователем последовательности операторов (INTERVAL).

-e3

=

e1 + e2.

-e4

=

e3 + интервалами становятся все последовательные циклы.

9         Команды DVM-системы

Команды DVM-системы имеют следующий формат:

dvm <имя_DVM-команды> [<параметры_команды>] <имя_DVM-программы>

где:

dvm

-

префикс (имя файла запуска DVM-команд);

<параметры_команды>

-

параметры, специфичные для разных команд, такие как опции конверторов или компиляторов, матрица процессоров и т.д.;

<имя_DVM-программы>

-

имя файла с исходным текстом программы без расширения.

Команды DVM-системы можно разделить на базовые и производные.

Ниже перечисляются базовые команды, с помощью которых можно выполнять различные операции, необходимые для отладки DVM-программ.

  1. Команды конвертации DVM-программы.

dvm cdv [<опции C-DVM конвертора>] <имя_С-DVM-программы>
dvm fdv [<опции F-DVM конвертора>] <имя_F-DVM-программы>
 

Результат работы: файлы <имя_DVM-программы>.с или <имя_DVM-программы>.f. Опции конверторов сначала берутся из переменных окружения (см.п.7), а затем добавляются опции из командной строки. Если опции конверторов нигде не заданы, команды формируют рабочий параллельный вариант программы.

  1. Команды стандартной компиляции и связывания С-программы и Fortran-программы.

dvm cc   [<опции C-компилятора>] <имя_C-DVM-программы>
dvm f77 [<опции F- компилятора>] <имя_F-DVM-программы>
 

Результат работы: готовая программа (выполняемый файл <имя_DVM-программы>).

Опции компиляторов сначала берутся из переменных окружения (см.п.7), а затем добавляются опции из командной строки.

  1. Команда запуска готовой программы на выполнение.

dvm run [матрица процессоров] [<опции_кластера>] <имя_DVM-программы>

матрица процессоров задается матрица логических процессоров, например: 2 3 или 5 1 3.

опции_кластера

задаются только при запуске параллельных программ на кластере рабочих станций под управлением UNIX-подобных операционных систем.

 К опциям относятся:

-mf  <список_машин>

-

<список_машин> - это имя файла со списком имен машин в кластере рабочих станций; общее количество процессоров в матрице процессоров не должно превышать количество имен машин в этом списке;

-m

-

в качестве имени файла со списком имен машин используется $dvmdir/user/machinelist;

-cp

-

копирование выполняемого файла в разделяемую (определенную в файле dvmwork и доступную для всех рабочих станций) директорию;

-h

-

помощь.

Если опции -mf и -m не заданы, программа выполняется на локальной рабочей станции.

Результат работы: выполнение подготовленного пользователем варианта программы.

Производные команды – это некоторая последовательность базовых команд, облегчающая выполнение тех или иных действий пользователя, например, в процессе отладки DVM-программ (см.п.13). Существуют следующие производные команды:

  1. Команды конвертации и компиляции DVM-программ.

dvm c [<опции C-DVM конвертора>] <имя_C-DVM-программы>
dvm f  [<опции F-DVM конвертора>] <имя_F-DVM-программы>

Результат работы: готовая программа (выполняемый файл <имя_DVM-программы>).

Опции конверторов сначала берутся из переменных окружения (см.п.7), а затем добавляются опции из командной строки. Если опции конверторов нигде не заданы, команды формируют рабочий параллельный вариант программы.

  1. Команды получения отладочного последовательного варианта DVM-программ (с подключением DVM-отладчика для сбора эталонной трассировки).

dvm csdeb [<опции C-DVM конвертора>] <имя_C-DVM-программы>
dvm fsdeb  [<опции F-DVM конвертора>] <имя_F-DVM-программы>

Результат работы: готовая программа (выполняемый файл <имя_DVM-программы>_s).

Опции конверторов сначала берутся из переменных окружения (см.п.7), а затем добавляются опции из командной строки. Если опции конверторов нигде не заданы, команды формируют последовательный вариант программы с опцией d4 (см.п.8).

  1. Команды получения отладочного параллельного варианта DVM-программ (с учетом всех DVM-указаний и с подключением DVM-отладчика для осуществления динамического контроля DVM-указаний, либо сбора или сравнения трассировки).

dvm cpdeb [<опции C-DVM конвертора>] <имя_C-DVM-программы>
dvm fpdeb  [<опции F-DVM конвертора>] <имя_F-DVM-программы>

Результат работы: готовая программа (выполняемый файл <имя_DVM-программы>_p).

Опции конверторов сначала берутся из переменных окружения (см.п.7), а затем добавляются опции из командной строки. Если опции конверторов нигде не заданы, команды формируют параллельный вариант программы с опцией d4 (см.п.8).

  1. Команда запуска отладочного параллельного варианта DVM-программ, осуществляющего динамический контроль DVM-указаний.

dvm err <имя_DVM-программы>

Результат работы: ошибки, обнаруженные в DVM-указаниях (при их наличии).

  1.  Команда запуска отладочного последовательного варианта DVM-программ, осуществляющая накопление эталонной трассировки на одном процессоре.

dvm trc <имя_DVM-программы>

Результат работы: файл с накопленной трассировкой или при наличии ошибок сбора трассировки – сообщения об ошибках.

  1. Команда запуска отладочного параллельного варианта DVM-программ, осуществляющая сравнение результатов вычислений, полученных при запуске программы на одном процессоре, с накопленной ранее эталонной трассировкой.

dvm red <имя_DVM-программы>

Результат работы: ошибки, обнаруженные в процессе сравнения трассировок (при их наличии).

  1.  Команда запуска отладочного параллельного варианта DVM-программ, осуществляющая сравнение трасс, полученных при запуске программы на нескольких процессорах, с результатами выполнения на одном процессоре или результатами выполнения последовательного варианта программы.

dvm dif [матрица процессоров] <имя_DVM-программы>

Результат работы: ошибки, обнаруженные в процессе сравнения трассировок (при их наличии).

  1. Команда запуска отладочного параллельного варианта DVM-программ, осуществляющая накопление трассировки на нескольких процессорах.

dvm ptrc [матрица процессоров] <имя_DVM-программы>

Результат работы: файлы с накопленной трассировкой или при наличии ошибок сбора трассировки – сообщения об ошибках.

  1.  Команда запуска отладочного последовательного варианта DVM-программ, осуществляющая оценку объема накапливаемой трассировки.

dvm size <имя_DVM-программы>

Результат работы: конфигурационный файл трассировки (см.п.10.3).

  1.  Команда запуска анализатора производительности, которую следует выполнять после завершения выполнения параллельной программы на рабочей станции или на кластере рабочих станций (на рабочей станции – только на одном процессоре, иначе временные характеристики будут некорректными).

dvm pa <statistics file name> <file name> [-l <level>] [-n <list>] [-c <compression level>]

где:

<statistics file name>

-

имя файла со статистической информацией;

<file name>

-

имя файла вывода;

<level>

-

номер уровня вложенности интервалов;

<list>

-

список номеров процессоров, 0 – без характеристик по процессорам

<compression level>

-

уровень упаковки файла вывода (0-9), -1 – без упаковки.

Параметры могут задаваться в произвольном порядке, только имя файла со статистикой и имя файла вывода должны стоять первыми и в указанном порядке. Ограничить размер файла вывода можно с помощью необязательных параметров, если этот способ не подходит, то уменьшить размер файла можно с помощью увеличения уровня упаковки файла вывода.

Запуск команды

dvm pah

выдаст описание параметров команды.

  1. Команда запуска DVM-программы, осуществляющая накопление трассировки для предиктора.

dvm runpred  <имя_DVM-программы>

Результат работы: файл <имя_DVM-программы>.ptr с накопленной трассировкой.

  1. Команда запуска предиктора.

dvm pred  [матрица процессоров] <имя_DVM-программы>

Выполнение команды управляется переменными окружения:

Pred_sys – имя конфигурационного файла, описывающего целевую машину;
Pred_vis  - имя визуализатора html-файлов.

Для работы предиктора необходимо наличие файла <имя_DVM-программы>.ptr с трассировкой, полученной командой dvm runpred.

Результат работы: директория <имя_DVM-программы>.prd с html-файлами. Если в файле запуска команд задан визуализатор html-файлов, то он автоматически вызывается.

  1.  Команда вызова визуализатора документации.

dvm  doc [тип документации]

где тип документации может принимать следующие значения:

ur

-

документация пользователя на русском языке;

ue - документация пользователя на английском языке;
sr - документация разработчика на русском языке;
se - документация разработчика на английском языке.

Выполнение команды управляется переменной окружения:

Doc_vis  -  имя визуализатора документации.

  1. Команды комплексного прогона одной программы последовательно через все шаги отладки (см.п.13).

          Данные команды работают на платформах, которые обеспечивают интерактивный режим выполнения программ.

dvm ctest [матрица процессоров] <имя_DVM-программы>
dvm ftest [матрица процессоров] <имя_DVM-программы>

Результат работы: конкатенация результатов работы команд, объединенных в команду комплексного прогона.

Замечание. Если программа использует в своей работе библиотеки последовательных программ, имена этих библиотек должны быть перечислены в переменной окружения usrlib файла запуска dvm-команд (см.п.7).

10    Протоколы DVM-отладчика.

10.1    Протокол с сообщениями об ошибках

При динамическом контроле корректности в случае обнаружения ошибок в текущей директории появляется файл еrror.dbg.

При накоплении и сравнении трассы в случае обнаружения ошибок в текущей директории появляются файлы <имя задачи>.err.trd и <имя задачи>.finerr.trd

В этих файлах содержится информация для локализации места ошибки и диагностика ошибки. Тексты диагностик и возможные причины ошибок приведены в п.12 данного документа.

Замечание.

 На машинах с системами очередей:

<имя задачи>       -  это <имя программы>.<число процессоров, используемых при запуске><номер запуска>.

 <номер запуска>  -  это число запусков программы на данном числе процессоров из текущей директории.

10.1.1  Протокол динамического контроля корректности

Протокол с ошибками динамического контроля корректности содержится в файле еrror.dbg. Он состоит из двух частей. Первая его часть содержит записи об ошибках, происходящих в процессе выполнения программы. При многократном обнаружении одной и той же ошибки в разных витках цикла, ошибка выдается только в первый раз. Вторая часть протокола также содержит записи об ошибках, но для каждой записи выводится строка с информацией о том, сколько ошибок в этом месте программы было обнаружено.

В протоколе содержится строка с информацией о числе обнаруженных ошибок и ограничении на число ошибок. Ограничение на число ошибок является параметром работы DVM-отладчика. Этот параметр определяет максимальное число ошибок, после которого динамический контроль отключается.  Строка имеет формат:

*** Processor <N>: total errors: <N1>; Limit per CPU: <N2>

Сообщения об ошибке имеет вид:

*** DYNCONTROL *** :<context>

                                          <error message>

                                          (<count> times)

                                          File: <file>, Line: <line>

где:

<context>

контекст, в котором произошла ошибка. Контекст может иметь одну из следующих форм:

Sequential branch – ошибка произошла в последовательной части программы;

Loop( No(N1), Iter(I1,I2,…) ), …, Loop( No(Nm), Iter(I1,I2,…) ) – ошибка произошла при выполнения цикла m-степени вложенности.

<file>

имя файла, где произошла ошибка.

<line>

номер строки

<count>

число повторений данной ошибки в данном контексте. Выводится при итоговой выдаче всех найденных ошибок.

<error message>

описание произошедшей ошибки.

Пример. Протокол error.dbg  

*** DYNCONTROL *** : Sequential branch.

                               Using non-initialized variable b

                               File: dc1.fdv  Line: 2

*** Processor 0: total errors: 1; Limit per CPU: 1000

*** DYNCONTROL *** : Sequential branch.

                               Using non-initialized variable b

                               File: dc1.fdv  Line: 2 

10.1.2  Протоколы сравнительной отладки.

Протоколы с ошибками сравнительной отладки содержится в файлах  <имя задачи>.err.trd и <имя задачи>.finerr.trd.

Протокол  <имя задачи>.err.trd состоит из двух частей. Первая его часть содержит записи об ошибках, происходящих в процессе выполнения программы в том порядке, в котором они происходили. При этом синхронизации при открытии файла не производится. Из-за этого посередине одной записи может вклиниваться другая, если это не обеспечивается на низком уровне. Вторая часть протокола содержит записи об ошибках по процессорам. Для каждого отдельно взятого процессора записи упорядочены по мере их возникновения (дублирования записей не производится, указывается их число в первой записи об ошибке). Записи, относящиеся к разным процессорам,  разделяются строкой с информацией о числе обнаруженных ошибок и ограничении на число ошибок. Смысл ограничений аналогичен подобным ограничениям для DVM-отладчика корректности.

Формат строки:

*** Processor <N>: total errors: <N1>; Limit per CPU: <N2>

Записи файла имеют следующий вид:

<N1>:TrcFile <name file>; TrcRec(<N2>); <context>

                       <error message>

                         (<count> times)

                          Var. name=<name>  File: <file>, Line: <line>

                         val1=<value1>

                          val2=<value2>

где:

N1

номер процессора, на котором произошла ошибка;

name file

имя файла с эталонной трассой;

N2

номер строки в файле c эталонной трассой;

<context>

контекст, в котором произошла ошибка. Контекст может иметь одну из следующих форм:

Sequential branch – ошибка произошла в последовательной части программы;

Loop( No(N1), Iter(I1,I2,…) ), …, Loop( No(Nm), Iter(I1,I2,…) ) – ошибка произошла при выполнения цикла m-степени вложенности.

<file>

имя файла, где произошла ошибка;

<line>

номер строки;

<count>

число повторений данной ошибки в данном контексте. Выводится при итоговой выдаче всех найденных ошибок;

<error message>

описание произошедшей ошибки;

<name>

имя переменной;

<file>

имя файла;

<line>

номер строки в файле;

<value1>

значение переменной в эталонной трассе;

<value2>

значение переменной при выполнении программы.

Поле count выводится, если ошибка повторилась более 1 раза.

В случае, если сообщение об ошибке не содержит значений переменных, параметр count выводится после сообщения об ошибке, в отдельной строке перед именем файла и номером строки.

Значения val1 и val2 выводятся при обнаружении различных значений переменной для текущего события и события эталонной    трассировки.

В первой строке протокола  <имя задачи>.err.trd содержится информация о числе обнаруженных ошибок и ограничении на число ошибок. Далее выводятся записи об ошибках, собранных со всех процессоров. Записи об ошибках упорядочены по времени их возникновения (одинаковые ошибки с разных процессоров группируются в одну). Если времена процессоров не были синхронизованы, порядок ошибок может не соответствовать реальному порядку их возникновения (на многопроцессорной системе), но порядок первых ошибок с каждого отдельно взятого процессора должен соответствовать порядку их возникновения на этом процессоре.

Формат записей об ошибках не отличается от формата записей в протоколе *.err.trd, однако после поля записи count в скобках указываются номера процессоров, на которых эта ошибка также происходила, помимо номера процессора, который указывается первым в самой первой строке записи в круглых скобках.

Пример. Протокол so2_1.err.trd

: TrcFile(0.trd); TrcRec(294); Sequential branch.

                Different INT values (reduction)

                Var. name = <reduct.var>  File: so2_1.fdv  Line: 51

                val1= 2107342848

                val2=-2147483648

*** Processor 0: total errors: 1; Limit per CPU: 1000

: TrcFile(0.trd); TrcRec(294); Sequential branch.

                Different INT values (reduction)

                Var. name = <reduct.var>  File: so2_1.fdv  Line: 51

                val1= 2107342848

                val2=-2147483648.

Пример. Протокол so2_1.finerr.trd

*** Total errors: 1; Limit per CPU: 1000

: TrcFile(0.trd); TrcRec(294); Sequential branch.

                Different INT values (reduction)

                Var. name = <reduct.var>  File: so2_1.fdv  Line: 51

                val1= 2107342848

                val2=-2147483648

10.2    Протокол с различиями, обнаруженными в процессе сравнения и скачками в значениях переменных и элементах массивов

10.2.1  Протокол со скачками

Протокол имеет имя <имя задачи>.< N proc>.prot.trd

Замечание.

 На машинах с системами очередей:

<имя задачи>      -  это <имя программы>.<число процессоров, используемых при запуске><номер запуска>.

<номер запуска>  -  это число запусков программы на данном числе процессоров из текущей директории.

Протокол можно разделить на разделы:

1.      Версия отладчика

DVM debugger version <version info>

2.      Параметры сравнительной отладки и номер процессора, на котором составлен протокол

В этом разделе содержатся значения параметров важных для ручного анализа протокола.

3.      Информация о сравненных событиях

В этом разделе указывается количество успешно сравненных чтений/записей переменных (matched events), включая подменённые редукционные переменные, если установлен соответствующий флаг и количество различий без учета кратности (differences), то есть несколько различий с одним и тем же контекстом считаются как одно.

4.      Сообщение о прекращении работы отладчика

В случае, если отладчик не дошел до конца эталонной трассы     ( неполная трасса, авост),  то появляется сообщение, начинающееся так:

*** Warning: debugger did not reach the end of trace:……………

5.      Записи вида:

                               Var. name=<name>  File: <file>, Line: <line>

                     Hit count    <N>

 First dif          TrcFile <name file>                     TrcRec=<N2>

        val1=<value1>  dif_r=<value3>

                          val2=<value2>  d if_a=<value4>

Max relative diff   TrcFile <name file>                     TrcRec=<N2>

        val1=<value1>  dif_r=<value3>

                          val2=<value2>  d if_a=<value4>

 Max relative leap  TrcFile <name file>                     TrcRec=<N2>

        val1=<value1>  dif_r=<value5>

                          val2=<value2>  d if_a=<value6>

Max absolute diff   TrcFile <name file>                     TrcRec=<N2>

        val1=<value1>  dif_r=<value3>

                          val2=<value2>  d if_a=<value4>

Max absolute leap   TrcFile <name file>                     TrcRec=<N2>

        val1=<value1>  dif_r=<value5>

                          val2=<value2>  d if_a=<value6>

где:

Var. name

имя переменной;

<file>

имя файла, где произошла ошибка;

<line>

номер строки;

N

количество выявленных различий для данного ключа - Var. Name, file, line;

First dif

первое выявленное различие для данного ключа;

name file

имя файла с трассой;

N2

номер записи в трассе;

<value1>

значение переменной в эталонной трассе;

<value2>

значение переменной при выполнении программы;

<value3>

максимальное значение относительного различия;

<value4>

максимальное значение абсолютного различия;

<value5>

максимальное значение относительного скачка;

<value6>

максимальное значение абсолютного скачка.

Параметр сравнительной отладки  (TraceOptions.ExpIsAbsolute) устанавливает точность - относительная или абсолютная. Записи упорядочиваются по убыванию величины различия, соответствующей установленной точности. Данные по второй (не выбранной) точности заполняются только тогда, когда различие выявляется по выбранной точности.

Поле Max absolute diff / dif_a определяет максимальное значение абсолютной погрешности, значения переменных (val1, val2), значение относительной погрешности (dif_r) и привязку к трассе (TrcRec, TrcFile) в момент достижения максимальной абсолютной погрешности (dif_a).

Поле Max relative diff / dif_r определяет максимальное значение относительной погрешности, значения переменных (val1, val2), значение абсолютной погрешности (dif_a) и привязку к трассе (TrcRec, TrcFile) в момент достижения максимальной относительной погрешности (dif_r).

Поле Max absolute leap / leapa - определяет максимальное значение скачка абсолютной погрешности, значения переменных (val1, val2), значение скачка относительной погрешности (leapr) и привязку к трассе (TrcRec, TrcFile) в момент достижения максимального скачка абсолютной погрешности (leapa).

Поле Max relative leap / leapr - определяет максимальное значение скачка относительной погрешности, значения переменных (val1, val2), значение скачка абсолютной погрешности leapa и привязку к трассе (TrcRec, TrcFile) в момент достижения максимального скачка относительной погрешности (leapr).

 Замечание. При первом выявленном различии для данного ключа (Var. name, File, Line) значения погрешностей запоминаются и скачки (leapa, leapr) устанавливаются равными нулю.

Пример. Протокол  so2_1.< 0>.prot.trd

DVM debugger version 03.05.2008@00:00

==============================================

TraceOptions.Exp = 0.0001

TraceOptions.ExpIsAbsolute = 1

TraceOptions.SRCLocCompareMode = 3

CPU number = 0

Found 70 matched events and 1 errors (so2_1.err.trd).

 ----------------------------------------------------------------------------------------

              Var. name = <reduct.var>, File = so2_1.fdv, Line = 51.

Hit count          1

First dif          TraceFile(0.trd)                   TrcRec= 294

                   val1= 2107342848             dif_r= 1.98130798339843750E+000

                   val2=-2147483648             dif_a= 4.25482649600000000E+009

 

Max relative diff  TraceFile(0.trd)             TrcRec= 294

                   val1= 2107342848             dif_r= 1.98130798339843750E+000

                   val2=-2147483648             dif_a= 4.25482649600000000E+009

 

Max relative leap  TraceFile(0.trd)             TrcRec= 294

                   val1= 2107342848             leapr= 0.00000000000000000E+000

                   val2=-2147483648             leapa= 0.00000000000000000E+000

 

Max absolute diff  TraceFile(0.trd)             TrcRec= 294

                   val1= 2107342848             dif_r= 1.98130798339843750E+000

                   val2=-2147483648             dif_a= 4.25482649600000000E+009

 

Max absolute leap  TraceFile(0.trd)             TrcRec= 294

                   val1= 2107342848             leapr= 0.00000000000000000E+000

                   val2=-2147483648             leapa= 0.00000000000000000E+000

 

10.2.2  Результирующий протокол со скачками

Протокол имеет имя <имя задачи>.finprot.trd

Разделы 1 и 2 этого протокола аналогичны протоколу со скачками за исключением того, что не выводится поле с номером процессора.  Далее, как и в предыдущем протоколе идут записи с ключами – тройками (Var. name, File, Line)  Записи обобщают протоколы со скачками по ключам и содержат максимальные значения полей по всем протоколам, содержащим аналогичный ключ. Исключение составляет поле Hit count Sum. Если максимальное значение достигнуто на нескольких процессорах, то привязка к трассе берется с процессора с меньшим номером. При этом в конце строки указывается список номеров процессоров в круглых скобках, на которых было достигнуто соответствующее значение (максимума или суммы). Для подчеркивания того, по какой точности ведется обработка, в поле Max first dif список процессоров указывается рядом со значением той точности, на которую указывает параметр TraceOptions.ExpIsAbsolute. В остальных полях список процессоров указывается рядом с той точностью, по которой ведется сбор информации в этом поле.    

10.3    Kонфигурационный файл трассировки

Конфигурационный файл трассировки имеет имя loops.trd. Этот файл служит не только для задания степени подробности трассировки для каждой конструкции программы, но и для выдачи программисту объемов трассировки при заданных уровнях ее подробности. Запуская программу в режиме формирования конфигурационного файла (без реального накопления трассировки) и корректируя каждый раз получаемый файл, программист имеет возможность добиться наиболее подходящей степени подробности трассировки.

Существуют следующие уровни подробности трассировки:

Кроме того, для каждого цикла можно указать диапазон витков, по которым будет накапливаться трассировка, а для области задач – диапазон трассируемых задач.

Уровень подробности трассировки всей программы задается при запуске программы в файле параметров. Уровень подробности трассировки для каждой конструкции программы задается в конфигурационном файле. Если уровень подробности для конструкции не задан, то он наследуется от объемлющей конструкции. Если объемлющей конструкции не существует, то принимается уровень всей программы.

Для всей программы и для конструкции программы отдельно конфигурационный файл содержит следующую информацию: число строк в файле трассировки, размер трассировки в байтах и общее число выполненных витков цикла. Если конструкция выполняется несколько раз, то по ней дается суммарная информация.

Дополнительно, для каждой конструкции приводится ее номер, номера строк начала и конца конструкции в исходном файле, уровень подробности трассировки и множество трассируемых витков или задач. Пользователь может менять только уровень подробности трассировки и множество трассируемых витков или задач.

Структура конфигурационного файла трассировки следующая:

# Trace size   =

<размер всего файла трассировки в байтах>

# String count =

<число строк всего файла трассировки>

 

SL, PL или TR

<номер конструкции> (<номер объемлющей конструкции>) [<размерность конструкции>] {<имя файла>, <номер строки>} = <уровень накопления трассировки>, (<измерение> : <первая итерация> , <последняя итерация> , <шаг трассируемых итераций>)

 

# Trace size = <размер трассировки в байтах данной конструкции для указанного уровня накопления трассировки>

 

# String count = <число строк трассировки данной конструкции для указанного уровня накопления трассировки >

 

# Count of traced iterations = <число трассируемых итераций цикла или задач>

     

EL: <номер конструкции>

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Все параметры исполняющихся конструкций задаются после символа ‘=’. Запись SL соответствует обычному последовательному циклу, запись PL соответствует параллельному циклу а запись TR – области параллельных задач.

Трассируемые итерации и задачи задаются следующим образом:

(<измерение> : [<первая итерация>] , [<последняя итерация>] , [<шаг итераций>])

<измерение>

-

измерение цикла (начиная с нуля), по которому задаются ограничения. Обязательный параметр. Для областей задач всегда должен быть 0.

<первая итерация>

-

задает номер итерации цикла или задачи, начиная с которой трассируются итерации или задачи. Если номер не задан, то трассируются итерации или задачи, начиная с первой.

<последняя итерация>

-

задает номер итерации цикла или задачи, по которую будет собираться трассировка. Если номер не задан, то трассируются итерации или задачи по последнюю включительно.

<шаг итераций>

-

задает шаг, с которым итерации или задачи будут записываться в трассировку.

Если множество трассируемых витков не задано, то будут трассироваться все витки или задачи.

При задании специального режима в файле параметров, информация о пустых витках (для которых никаких других записей в трассировку не пишется) не будет помещаться в файл трассировки.

10.4    Файл трассировки

При трассировке вычислений накапливаемая трассировочная информация состоит из двух частей

Заголовок присутствует в трассировке даже тогда, когда накопление трассировки отключено для всей программы. Его структура напоминает структуру конфигурационного файла трассировки, но без вычисляемых значений объемов трассировки для всей программы и для отдельных циклов:

MODE = <уровень накопления трассировки для всей программы>,

SL, PL или TR

<номер конструкции> (<номер объемлющей конструкции>) [<размерность конструкции>] {<имя файла>, <номер строки>} = <уровень накопления трассировки>, (<измерение> : <первая итерация> , <последняя итерация> , <шаг трассируемых итераций>)

EL: <номер конструкции>

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

SL, PL или TR

<номер конструкции> (<номер объемлющей конструкции>) [<размерность конструкции>] {<имя файла>, <номер строки>} = <уровень накопления трассировки>, (<измерение> : <первая итерация> , <последняя итерация> , <шаг трассируемых итераций>)

EL: <номер конструкции>

Тело трассировки отсутствует, когда накопление трассировки отключено для всей программы. Иначе тело трассировки состоит из множества записей следующих типов:

·        Обращение к переменной на чтение.

RD: [<тип переменной>] <имя переменной> = <значение>; {<имя файла>, <номер строки>}

·        Обращение к переменной на запись (перед вычислением выражения).

BW: [<тип переменной>] <имя переменной>; {<имя файла>, <номер строки>}

·        Результат записи в переменную.

AW: [<тип переменной>] <имя переменной> = <значение>; {<имя файла>, <номер строки>}

·        Обращение к редукционной переменной на чтение.

RV_RD: [<тип переменной>] <имя переменной> = <значение>; {<имя файла>, <номер строки>}

·        Обращение к редукционной переменной на запись (перед вычислением выражения).

RV_BW: [<тип переменной>] <имя переменной>; {<имя файла>, <номер строки>}

·        Результат записи в редукционную переменную.

RV_AW: [<тип переменной>] <имя переменной> = <значение>; {<имя файла>, <номер строки>}

·        Результат вычисления редукции.

RV: [<тип переменной>] <значение>; {<имя файла>, <номер строки>}

·        Пропуск операторов при обращении к элементу распределенного массива в последовательной части программы.

SKP: {<имя файла>, <номер строки>}

·        Начало выполнения параллельного цикла.

PL: <номер конструкции> (<номер объемлющей конструкции>) [<размерность цикла>] (<начальная итерация по измерению 1>, <конечная итерация по измерению 1>, <шаг по измерению 1>) … (<начальная итерация по измерению R>, <конечная итерация по измерению R>, <шаг по измерению R>); {<имя файла>, <номер строки>}

LOCAL: (<начальная итерация локальной части по измерению 1>, <конечная итерация локальной части по измерению 1>, <шаг по измерению 1>) … (<начальная итерация локальной части по измерению R>, <конечная итерация локальной части по измерению R>, <шаг по измерению R>)

·    Информация о подмножествах итераций, на которые было поделено исходное множество итераций цикла на данном процессоре.
Значение VTR в конце записи означает, является ли указанное множество итераций внутренним (значение 0) или     граничным (значение 1).

CHUNK: (<начальная итерация подмножества по измерению 1>, <конечная итерация подмножества по измерению 1>, <шаг    по измерению 1>) … (<начальная итерация подмножества по измерению R>, <конечная итерация подмножества по измерению R>, <шаг по измерению R>) VTR = <1|0> 

·        Начало выполнения последовательного цикла.

SL: <номер конструкции> (<номер объемлющей конструкции>) [<ранг цикла (всегда равен единице)>] ; {<имя файла>, <номер строки>}

·        Начало выполнения области задач.

TR: <номер конструкции> (<номер объемлющей конструкции>) [<ранг области (всегда равен единице)>] ;

{<имя файла>, <номер строки>}

·        Начало витка или параллельной задачи.

IT: <абсолютный индекс витка (вычисляется из значений всех индексных переменных цикла) или номер задачи>, (<значение индексной переменной1>,< значение индексной переменной2>,…).

·        Конец выполнения параллельного цикла или области задач.

EL: <номер конструкции>; {<имя файла>, <номер строки>}

11    Cообщения DVM-отладчика на стандартный вывод

11.1    Динамический контроль корректности

DVM-отладчик при наличии ошибок динамического контроля корректности выдает на стандартный вывод сообщение о числе обнаруженных ошибок:

*** Dynamic control found <N> error(s)

При отсутствии ошибок ничего не выдается.

11.2    Сравнительная отладка

При накоплении трассы на экран выдается сообщение о начале и окончании сбора трассы.

Сообщение имеет вид:

<N процессора> *** DVM debugger:Trace writing started

<N процессора> *** DVM debugger:Trace writing finished

При обнаружении ошибок во время сбора трассы Dvm-отладчик на стандартный вывод сообщение о числе обнаруженных ошибок:

*** Found <N> error(s)

При сравнении трасс DVM-отладчик выдает сообщении об отсутствии ошибок сравнения :

***  DVM debugger: No errors detected 

 либо сообщение о числе обнаруженных  ошибок:

*** Found <N> error(s)

При завершении работы отладчика по ошибке он выдает одно из двух следующих информационных сообщений:

             ***DVM debugger warning: Fatal error was detected, debugger was disabled

если программа была скомпилирована в  отладочном режиме.

*** DVM debugger: Fatal error was detected in -dbif* instrumentation mode, program was terminated,

если программа была скомпилирована в  отладочном режиме с опцией dbif1.

Замечание. При выполнении программ в отладочном режиме возможны появления сообщений с префиксом “***RTS err”,”*** RTS fatal err”, ”*** RTS warning”. Это сообщения об ошибках, возникающих в процессе функционирования системы поддержки. Классификация этих сообщений приведена в п.15.

12    Диагностические сообщения DVM-отладчика в протоколах

12.1    Сообщения при динамическом контроле корректности

Сообщение об ошибке

Описание

Using non-initialized variable <var>

Обнаружено обращение к неинициализированной переменной.

Using non-initialized element <elem>

Обнаружено обращение к неинициализированному элементу распределенного массива.

Using variable <var> before asynchronous reduction competed

Обращение к редукционной переменной до завершения операции редукции.

Access to non-local element <elem>

Обращение к нелокальному элементу массива.

Writing to shadow element <elem> of array

Запись в теневой элемент массива.

Data dependence in loop due to access to element <elem>

Обнаружена зависимость параллельного цикла по данным.

Using shadow element <elem> before asynchronous shadow renew competed

Использование теневого элемента <elem> распределенного массива во время выполнения операции обновления теневых граней.

Reading remote element <elem> in sequential branch

Использование нелокального элемента <elem> распределенного массива в последовательной части программы.

Reduction operation was not started

Ожидание завершения редукции без ее фактического запуска.

Using an element outside of array limits: <elem>

Обращение к элементу массива за пределами его границ.

START for reduction without WAIT

Отсутствие операции ожидания завершения асинхронной редукции для соответствующей операции старта асинхронной редукции.

Reduction operation was not started

Специфицирована редукционная переменная, но соответствующее вычисление редукционной операции никогда не было стартовано.

12.2    Сообщения при сравнительной отладке

12.2.1  Ошибки при выполнении программы

Сообщение об ошибке

Описание

NAN or INF value is found during the execution

При вычислении обнаружен NAN или INF

Terminated by signal <val> at <point ID

При выполнении программы получен сигнал с номером val

12.2.2  Ошибки в трассе

Сообщение об ошибке

Описание

Bad file structure 

Выдается при любом несоответствии трассировки или описания циклов

Undefined keyword 

Выдается при обнаружении неизвестного ключевого слова в трассировке или в файле описания циклов

Bad command syntax 

Выдается при неверном параметре после ключевого слова

No trace (fatal)

Файл с трассировкой существует, но не содержит данных

Bad trace structure (missing current program construct) 

Выдается при наступлении события начала витка цикла или события завершения цикла без соответствующего события начала цикла

12.2.3  Ошибки при сравнении трасс

Сообщение об ошибке

Описание

Different <type> values: <standard value> != <current value>

Различные значения переменной для текущего события и события эталонной трассировки

Different INT values (reduction)

Различные значения результата редукционной операции для текущего события и события эталонной трассировки

Unexpected task or iteration of loop

Выдается при наступлении события начала витка цикла, для которого нет соответствующей записи в эталонной трассировке

Unexpected use of variable

Выдается при наступлении события доступа к переменной, для которого нет соответствующей записи в эталонной трассировке

NAN or INF value is found during the execution

При вычислении обнаружен NAN или INF

13    Методика отладки DVM-программ

Отладку программ рекомендуется проводить сначала на тестовых, а затем на реальных данных. Если нет ограничений на ресурсы памяти и времени, то можно  воспользоваться комплексным прогоном через все шаги отладки или выполнить все шаги отдельно. При наличии ограничений нужно выбрать один из возможных вариантов сокращения трассы.

13.1    Оценка объема трассировки

Для этого необходимо выполнить команды:

dvm fsdeb<опции компилятора F-DVM> <имя  DVM-программы>

            dvm csdeb<опции компилятора C-DVM> <имя  DVM-программы>

dvm size <имя DVM-программы>

По умолчанию запуск управляется параметрами сбора пользовательской трассировки, из базового файла usrdebug (см.п.14.2) скорректированными следующими параметрами из файла deb_size.par:

EnableDynControl = 0;

-

отключение динамического контроля;

EnableTrace = 1;

-

подключение накопления трассировки;

TraceOptions.TraceMode = 0;

-

режим генерации конфигурационного файла трассировки.

Команда создает так называемый конфигурационный файл трассировки, в котором, в частности, приводятся предполагаемые объемы трассировки, исходя из заданных опций DVM-конверторов (см.п.8) и уровней ее сбора (см.п.14.2). Фактически, объемом трассировки управляют только два параметра из базового набора: TraceOptions.TraceLevel и TraceOptions.WriteEmptyIter.

13.2    Управление объемом файла трассировки

13.2.1  Сокращение файла трассировок при помощи установки контроля на граничных итерациях циклов (для DVM-программ на F-DVM).

Для использования метода граничных итераций необходимо использовать опцию компилятора –dbif1 при  получении отладочного варианта программы. По умолчании задана отладка на “уголках”. Для задания отладки на гранях нужно задать значение параметра TraceOptions.IterTraceMod=2. Ширина уголков и граней задается при помощи параметров TraceOptions.LocIterWidth и TraceOptions.RepIterWidth. Начинать отладку рекомендуется с граничными итерациями типа “уголки”  ширины 1.

13.2.2  Сокращение файла трассировки при помощи установки разной степени подробности трассируемых данных.

Задавая различные опции компилятора при получении отладочных вариантов программы можно существенно сократить трассы.

-d1

-

обеспечивается трассировка только модификаций распределенных массивов.

-d2

-

обеспечивается трассировка чтений и модификаций распределенных массивов.

-d3

-

обеспечивается трассировка модификаций всех данных.

-d4

-

обеспечивается трассировка чтений и модификаций всех данных.

По умолчании для получения отладочных вариантов программы используется опция  -d4.

13.2.3  Сокращение файла трассировки при помощи параметра.

Управлять объемом файла трассировки можно при помощи параметра TraceOptions.TraceLevel, который задает степень подробности трассировки. Параметр используется только в режиме сбора трассировки. Возможны следующие значения:

0

отсутствие трассировки (уровень NONE);

1

трассировка начала и завершения циклов или областей задач и начала витков или задач (уровень MINIMAL);

2

предыдущий уровень, плюс трассировка модификаций переменных и результатов вычисления редукции (уровень MODIFY);

3

трассировка всех событий (уровень FULL).

По умолчанию значение параметра равно 3.

13.3    Последовательность команд для отладки DVM- программ

1.      Получение отладочных вариантов DVM-программы для последовательного и параллельного выполнения

Получение варианта для последовательного выполнения:

dvm fsdeb [<опции компилятора F-DVM>] <имя DVM_программы>

           dvm csdeb [<опции компилятора C-DVM>] <имя DVM_программы>

Получение варианта для параллельного выполнения:

dvm fpdeb [<опции компилятора Fortran-DVM>] <имя DVM программы>

dvm cpdeb [<опции компилятора C-DVM>] <имя DVM_программы>

2.      Выполнение программы в режиме динамического контроля DVM-указаний

Для выполнения DVM- программы служит команда:

dvm err <имя DVM-программы>

По умолчанию запуск управляется параметрами динамического контроля из базового файла usrdebug (см. п.7 и п.14.1) скорректированными следующими параметрами из файла deb_err.par (оба файла находятся в поддиректории, \PAR директории DVM-системы, заданной в переменной окружения dvmpar):

EnableDynControl = 1;

-

подключение динамического контроля;

EnableTrace = 0;

-

отключение накопления трассировки вычислений.

В случае обнаружения неверных DVM-указаний в поток stderr выдается диагностика о наличии ошибок динамического контроля. Этот поток может быть направлен либо на экран, либо в файл (см.п.7 и п.14.3).

Сообщения о типе ошибки, строке исходного текста и номерах итераций всех объемлющих циклов так же можно направить либо на экран, либо в файл (см.п.14.1). Структуру и перечень сообщений об ошибках динамического контроля см. в п.12.1.

Отсутствие ошибок при динамическом контроле не гарантирует правильной работы параллельной программы. Поэтому отладку программы следует продолжить, воспользовавшись командами накопления и сравнения трассировок.

3.      Накопление эталонного файла трассировки DVM-программы

Для этого служит команда:

dvm trc <имя DVM-программы>

По умолчанию запуск управляется параметрами сбора трассировки вычислений из базового файла usrdebug (см.п.14.2) скорректированными следующими параметрами из файла deb_trc.par:

EnableDynControl = 0;

-

отключение динамического контроля;

EnableTrace = 1;

-

подключение накопления трассировки;

TraceOptions.TraceMode = 1;

-

режим накопления трассировки.

В случае обнаружения ошибок при накоплении трассировки в поток stderr выдается диагностика о наличии таких ошибок. Этот поток может быть направлен либо на экран, либо в файл (см.п.7 и п.14.3).

Сообщения о типе ошибки, строке исходного текста и номерах итераций всех объемлющих циклов также можно направить либо на экран, либо в файл (см.п.14.2). Структуру накапливаемой трассировки см. в п.10.4.

Структуру и перечень сообщений об ошибках сбора трассировок см. п.12.

4.      Сравнение эталонной трассировки с результатами выполнения параллельной программы на одном процессоре

При сравнении эталонной трассировки с результатами выполнения параллельной программы на одном процессоре производится контроль корректности описания редукционных операций. Этот контроль осуществляется посредством специального режима выполнения параллельной программы на одном процессоре, при котором вычисление редукционных переменных производится в соответствии с описаниями редукционных операций, заданными программистом. Редукционные переменные вычисляются так, как если бы каждый виток цикла, в котором она подсчитывается, размещался бы на отдельном процессоре. В начале каждого витка редукционной переменной присваивается начальное значение, которое запоминается при входе в цикл. По окончании витка производится обращение к библиотеке Lib-DVM для вычисления конечного результата в соответствии с заданной программистом редукционной функцией. Если редукционная функция задана программистом неправильно, то должно возникнуть расхождение в трассировках при разных режимах вычисления редукции.

Для сравнения трассировок служит команда:

dvm red <имя DVM-программы>

 По умолчанию запуск управляется параметрами сравнения трассировки, из базового файла usrdebug (см.п.14.2) скорректированными следующими параметрами, из файла deb_red.par:

EnableDynControl = 0;

-

отключение динамического контроля;

EnableTrace = 1;

-

подключение накопления трассировки;

TraceOptions.TraceMode = 3;

-

режим сравнения трассировок;

ManualReductCalc = 1;

-

вычисление редукционных переменных в соответствии с указаниями пользователя.

В случае обнаружения ошибок сравнения трассировок в поток stderr выдается диагностика о наличии ошибок сравнения. Этот поток может быть направлен либо на экран, либо в файл (см.п.7 и п.14.3).

Сообщения о типе ошибки, строке исходного текста и номерах итераций всех объемлющих циклов так же можно направить либо на экран, либо в файл (см.п.14.2).

Структуру и перечень сообщений об ошибках сравнения трассировок см. п.12.

5.      Накопление трассировки параллельной программы

Для этого служит команда:

dvm ptrc N1 [N2 [N3]] [<опции_кластера>] <имя DVM-программы>

где N1, N2, N3 - размеры матрицы процессоров (по умолчанию – 1 1 1).

 По умолчанию запуск управляется параметрами сбора пользовательской трассировки, из базового файла usrdebug (см.п.14.2) скорректированными следующими параметрами из файла deb_trc.par:

EnableDynControl = 0;

-

отключение динамического контроля;

EnableTrace = 1;

-

подключение накопления трассировки;

TraceOptions.TraceMode = 1;

-

режим накопления трассировки.

В случае обнаружения ошибок при накоплении трассировки в поток stderr выдается диагностика о наличии таких ошибок. Этот поток может быть направлен либо на экран, либо в файл (см.п.7 и п.14.3).

Сообщения о типе ошибки, строке исходного текста и номерах итераций всех объемлющих циклов так же можно направить либо на экран, либо в файл (см.п.14.2). Трассировка накапливается для каждого процессора в отдельном файле, например с именами: 0.trd, 1.trd, 2.trd и т.д.

Структуру накапливаемых файлов трассировки см. в п.10.4.

6.      Сравнение трассировки параллельного выполнения с эталонной

Производится сравнение трасс, полученных при запуске программы на нескольких процессорах, с результатами выполнения на одном процессоре или результатами выполнения последовательного варианта программы .

dvm dif  N1 [N2 [N3]] [<опции_кластера>] <имя DVM-программы>

где N1, N2, N3 - размеры матрицы процессоров (по умолчанию – 1 1 1).

По умолчанию запуск управляется параметрами сравнения трассировки из базового файла usrdebug (см.п.14.2), скорректированными следующими параметрами из файла deb_dif.par:

EnableDynControl = 0;

-

отключение динамического контроля;

EnableTrace = 1;

-

подключение накопления трассировки;

TraceOptions.TraceMode = 3;

-

режим сравнения трассировок;

ManualReductCalc = 0;

-

вычисление редукционных переменных по стандартному алгоритму.

Редукционные переменные вычисляются обычным способом. Все вычисления редукционной переменной на одном процессоре реализуются операторами программы в витках, выполняющихся на данном процессоре, а вычисление конечного результата по значениям, полученным на каждом процессоре, производится системой поддержки. При этом если программа работает на одном процессоре, то редукция будет вычисляться только операторами программы.

В случае обнаружения ошибок сравнения трассировок в поток stderr выдается диагностика о наличии ошибок сравнения. Этот поток может быть направлен либо на экран, либо в файл (см.п.7 и п.14.3).

Сообщения о типе ошибки, строке исходного текста и номерах итераций всех объемлющих циклов так же можно направить либо на экран, либо в файл (см.п.14.2).

Структуру и перечень сообщений об ошибках сравнения трассировок см. в п.12.

Если различий в трассировке не обнаружено, можно переходить к параллельному выполнению программы с реальными данными (см.п.13.3).

Если обнаружены различия, но ошибку в программе не удается определить по эталонной трассировке и диагностике сравнения трассировок, пользователь может накопить трассировку на каждом процессоре при запуске параллельного варианта программы на требуемой матрице процессоров (см.п.13.3).

Если при параллельном выполнении программы (или его имитации на отдельной рабочей станции) на некотором процессоре возникнут аварийные ситуации (или будут обнаружены отличия трассировки от эталонной), то возможно зависание программы. Если завершить ее выполнение с помощью CTRL-C, то направляемые в файлы стандартные выводные потоки могут пропасть. В этом случае поток stderr направлять в файл не следует.

Место "зависания" или аварийного завершения программы можно определить, включив перед данным запуском системную трассировку программы (см.п.14.4). Последние записи в системной трассировке позволят найти место в программе, после которого произошла аварийная ситуация.

7.      Параллельное выполнение с реальными данными

Если различий на предыдущих шагах не обнаружено, то можно считать программу отлаженной на тестовых данных и переходить к параллельному выполнению программы на кластере рабочих станций с реальными данными.

Для этого служат команды компиляции:

dvm c [опции C-DVM конвертора] <имя DVM-программы>
dvm f [опции F-DVM конвертора] <имя DVM-программы>

выполнения:

dvm run [N1 [N2 [N3]]] [<опции_кластера>] <имя DVM-программы>

где N1, N2, N3 - размеры матрицы процессоров (по умолчанию – 1 1 1).

По умолчанию запуск управляется параметрами из наборов, заданных в переменных окружения dvmpar и usrpar.

Если при выполнении программы с реальными данными результаты вычислений не удовлетворяют пользователя, то он может снова получить варианты программы для последовательного и параллельного выполнения для того, чтобы трассировать программу уже с реальными данными. Однако следует учитывать, что:

13.4    Команда  комплексного прогона одной программы последовательно через все шаги отладки .

Команды можно использовать для платформ, обеспечивающих интерактивный режим выполнения программ.

dvm ftest [матрица процессоров] <имя_DVM-программы>

dvm сtest [матрица процессоров] <имя_DVM-программы>

Результат работы: конкатенация результатов работы команд, объединенных в команду комплексного прогона.

13.5    Запуск программ с нестандартным набором параметров

При запуске программ перечисленными в этой главе производными dvm-командами, но с нестандартным параметрами (с использованием своих собственных корректирующих наборов параметров), пользователь должен учитывать последовательность, которой следует система поддержки при коррекции параметров:

Приведенная последовательность коррекции параметров отражается в текущей директории пользователя в файле current.par, используемом системой поддержки при выполнении любой dvm-команды.

14    Параметры DVM-системы

Базовые наборы параметров, управляющих работой системы поддержки, передается пользователю вместе с DVM-системой и располагается в директории dvm_sys/par. Имена файлов отражают назначение содержащихся в них параметров, а именно:

checksum

-

контрольные суммы перечисленных ниже файлов параметров (проверяются только при запуске с файлами параметров с расширением .rel без их коррекции);

statist

-

паpаметpы, задающие режимы сбора данных для работы анализатора производительности DVM-программ;

sysdebug

-

паpаметpы встpоенных сpедств отладки системы поддержки;

syspar

-

паpаметpы, упpавляющие функционированием системы поддеpжки;

systrace

-

паpаметpы, задающие режимы системной тpассиpовки;

trcevent

-

перечень и паpаметpы тpассиpуемых событий;

usrdebug

-

параметры динамического контроля и трассировки программы пользователя

Расширения имен файлов отражают способ применения данного подмножества параметров, а именно:

rel

-

набор параметров, предназначенный для максимально быстрого выполнения программы;

deb

-

набор параметров, предназначенный для отладки программы пользователя и системы поддержки; встроенные в систему поддержки средства внутреннего самоконтроля, сбора системной трассировки и выдачи информационных сообщений в нем включены;

par

-

наборы корректирующих параметров.

   К корректирующим наборам параметров относятся файлы с именами:

deb_err, deb_trc, deb_red, deb_dif, deb_size, deb_ptrc

-

параметры, используемые для выполнения dvm-команд в соответствии с методикой отладки программ (см.п.13);

out

-

паpаметpы вывода информационных сообщений системы поддержки, действующие, если переменная окружения dvmout=on (см.п.7 и п.14.3);

outoff

-

паpаметpы вывода информационных сообщений системы поддержки, действующие, если переменная окружения dvmout=off (см.п.7 и п.14.3).

Пользователь выбирает наиболее подходящий для его целей базовый набор, задав соответствующее расширение в переменной окружения dvmpar. Он может также иметь собственные наборы параметров (в любой из своих рабочих директорий и с любыми именами и расширениями файлов), корректирующие базовый набор. В них пользователь задает только те параметры (содержащиеся в любом из файлов с расширениями .rel или .deb), значения которых он желает скорректировать. Эти директории и имена файлов должны быть перечислены в переменной окружения usrpar файла запуска dvm-команд (см.п.7).

Все параметры базового набора снабжены комментариями. Полные списки параметров динамического контроля и пользовательской трассировки приведены в п.14.1 и п.14.2. Параметры вывода информационных сообщений системы поддержки и основные параметры управления системной трассировкой (как наиболее часто используемые при отладке программ) рассмотрены в п. 14.3 и п.14.4.

14.1    Параметры динамического контроля

Перечисленные ниже параметры содержатся в файлах с именем usrdebug.

Динамическим контролем используются следующие значения:

14.2    Параметры накопления и сравнения трассировки вычислений

Системой сравнения результатов выполнения используются тот же механизм задания параметров, что и системой динамического контроля. Существуют следующие параметры:

0

генерация конфигурационного файла трассировки. Файл формирует только процессор с номером TraceOptions.WrtHeaderProc;

1

накопление трассировки и запись в файл <номер процессора>.<TraceOptions.Ext>;

2

объединение двух предыдущих режимов;

3

сравнение трассировки с эталонной, заданной в файле TraceOptions.TraceFile.

0

отсутствие трассировки (уровень NONE);

1

трассировка начала и завершения циклов или областей задач и начала витков или задач (уровень MINIMAL);

2

предыдущий уровень, плюс трассировка модификаций переменных и результатов вычисления редукции (уровень MODIFY);

3

трассировка всех событий (уровень FULL).

Следующие параметры являются параметрами системы поддержки выполнения параллельных программ, но их значения влияют на работу отладчика:

14.3    Параметры перенаправления стандартных выходных потоков и управления выводом информационных сообщений системы поддержки

Перечисленные ниже параметры содержатся в файлах с именами syspar, statist, systrace, trcevent, sysdebug и usrdebug. По умолчанию будем считать, что параметр задается в файлах с именем syspar.

[<режим>][<путь>[.<расширение>]]

При ненулевом значении параметра StdOutToFile поток stdout переводится в файл (файлы) с именем (именами)

[<путь>][<номер процессора>].<расширение>

Если опция <расширение> не задана, то расширение файла (файлов) полагается равным 'sto'.

Опция <режим> определяет способ перенаправления потока stdout и может принимать значения "*" и "+". В первом случае перенаправление осуществляется на всех процессорах в отдельный для каждого процессора файл с приведённым выше именем. Во втором случае перенаправление также производится на всех процессорах, но в общий для всех процессоров файл с именем

 <путь>.<расширение>

 Причём, если опция <путь> (вместе с опцией <расширение>) не задана, то перенаправление осуществляется в файл с именем "stdout" (без расширения).

Если опция <режим> отсутствует, то перенаправление потока stdout производится только на процессоре с нулевым внутренним номером в файл <путь>.<расширение> (или в файл "stdout", если опция <путь> не задана).

[<режим>][<путь>[.<расширение>]]

При ненулевом значении параметра StdErrToFile поток stderr переводится в файл (файлы) с именем (именами)

[<путь>][<номер процессора>].<расширение>

Если опция <расширение> не задана, то расширение файла (файлов) полагается равным 'ste'.

Опция <режим> определяет способ перенаправления потока stderr и может принимать значения "*" и "+". В первом случае перенаправление осуществляется на всех процессорах в отдельный для каждого процессора файл с приведённым выше именем. Во втором случае перенаправление также производится на всех процессорах, но в общий для всех процессоров файл с именем

<путь>.<расширение>

Причём, если опция <путь> (вместе с опцией <расширение>) не задана, то перенаправление осуществляется в файл с именем "stderr" (без расширения).

Если опция <режим> отсутствует, то перенаправление потока stderr производится только на процессоре с нулевым внутренним номером в файл <путь>.<расширение> (или в файл "stderr", если опция <путь> не задана).

14.4    Параметры управления системной трассировкой

Управление режимами трассировки и составом трассируемых событий осуществляется с помощью параметров, содержащихся в файлах systrace.* и trcevent.*. Рассмотрим основные из них. По умолчанию считается, что параметр содержится в файлах systrace.* .

14.4.1  Включение и выключение трассировки

14.4.2  Задание открытых (включенных) потоков трассировки

14.4.3  Задание режимов трассировки

14.4.4  Управление формой накапливаемой информации

14.4.5  Управление механизмами внутреннего самоконтроля системы поддержки, функционирующими при накоплении трассировки

В процессе накопления трассировочной информации система поддержки может контролировать определенные области оперативной памяти, при изменении содержимого которых она завершает выполнение программы с выводом соответствующего сообщения об ошибке. К таким областям относятся:

Контрольные части динамически запрашиваемых блоков памяти создаются при специальном указании в файлах параметров sysdebug.* и расписываются при выделении блока задаваемым там же кодом. Контроль их содержимого может осуществляться при каждом запросе и освобождении блока памяти, а также в процессе трассировки.

Явно задаваемая область памяти контролируется путем сравнения ее эталонной контрольной суммы с текущей. Эталонная контрольная сумма вычисляется при инициализации системы поддержки.

Начальный и конечный адреса области памяти с программным кодом задаются программой, запускающей на выполнение систему поддержки, посредством записи этих адресов в ее (системы поддержки) исполняемый модуль. Эта же программа вычисляет и записывает в исполняемый модуль системы поддержки эталонную контрольную сумму памяти команд. Система поддержки в процессе своего функционирования (в частности, по событиям трассировки) контролирует память команд, сравнивая ее текущую контрольную сумму с эталонной.

Управление механизмами контроля областей памяти осуществляется с помощью следующих параметров файлов systrace.* .

14.4.6  Управление выводом дополнительной информации при трассировке некоторых функций системы поддержки в расширенном режиме

0

-

не выводить дополнительной информации;

1

-

выводить выходные начальные и конечные значения индексных переменных параллельного цикла для текущего процессора;

2

-

дополнительно выводить карту отображения цикла.

15    Сообщения об ошибках системы поддержки

Сообщения об ошибках, возникающих в процессе функционирования системы поддержки, делятся (по степени серьезности последних) на предупреждения и сообщения об ошибках, прерывающих выполнение программы. Ошибки, прерывающие выполнение программы, могут быть обычными, ответственность за которые лежит (скорее всего) на пользователе, и фатальными, требующими, возможно, участия разработчика или его представителя.

В соответствии с этим сообщения об ошибках имеют один из следующих видов:

*** RTS warning

<номер класса ошибки> . <номер ошибки внутри класса> : <текст сообщения об ошибке>

*** RTS err

<номер класса ошибки> . <номер ошибки внутри класса> : <текст сообщения об ошибке>

*** RTS fatal err

<номер класса ошибки> . <номер ошибки внутри класса> : <текст сообщения об ошибке>

Класс ошибки определяется функциональной и модульной структурой системы поддержки.

Каждое сообщение об ошибке завершает вывод имени файла и номера строки, в которой произошла ошибка, как пользовательской программы, так и системы поддержки:

             USRFILE=<имя файла программы пользователя>; USRLINE=<номер строки>;

             SYSFILE=<имя файла системы поддержки>;            SYSLINE =<номер строки>;

По характеру возникновения ошибки делятся на две группы. Первую группу составляют ошибки, возникающие только на всех процессорах сразу. Сообщения об этих ошибках выводит процессор ввода/вывода. Вторая группа состоит из ошибок, которые могут происходить не на всех процессорах "одновременно". Сообщения о таких ошибках выводит каждый процессор самостоятельно, сопровождая каждое сообщение своими внутренним и внешним номерами. При работе на одном процессоре все сообщения об ошибках выводятся без его номеров.

В системе поддержки предусмотрены возможности вывода всех сообщений об ошибках первой группы всеми процессорами и вывода всех сообщений об ошибках второй группы только процессором ввода/вывода. Первая возможность достигается установкой значения параметра MultiProcErrReg (файлы параметров с именем syspar) равным 2. Для вывода сообщений об ошибках второй группы только процессором ввода/вывода значение этого параметра должно быть нулевым (эта возможность используется только в экспериментальных целях). Стандартное значение параметра MultiProcErrReg равно единице.

Все сообщения об ошибках с их тематическим разбиением и в порядке возрастания номеров классов и номеров ошибок внутри класса рассмотрены в документе "Система поддержки DVM-программ. Детальный дизайн" (файл rtsDDr.doc).

Ниже перечислены номера сообщений, сгруппированных по возможным причинам их возникновения. Номера сообщений "fatal error" опущены. Не рассматриваются также ошибки, которые не могут возникать в программах, генерируемых компиляторами C-DVM и F-DVM (при правильной работе компиляторов), а возможны только при программировании  непосредственно с помощью функций системы поддержки (впрочем, при "затирании" памяти программой пользователя в любой программе возможны любые ошибки).

15.1    Ошибки запуска и завершения

Эти ошибки диагностируются сообщениями с номерами 01x.xxx и 02x.xxx.
Среди них:

Кроме того, при завершении программы возможны также сообщения с номерами 022.002 и 022.003, свидетельствующие о неверной контрольной сумме памяти команд или данных, т.е. об изменении памяти, которая не должна была изменяться ("затирание памяти").

Во время выполнения программы о "затирании" памяти могут говорить также сообщения со следующими номерами: 230.000, 230.001, 230.002, 230.003, 230.004, 250.000, 250.001.

15.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.

15.3    Ошибки вида "[the object] is not a/the …"

"Объект, заданный при обращении к функции, не является объектом нужного вида".

Соответствие вида объекта и выполняемой операции как правило контролируется C-DVM и F-DVM компиляторами. Возникновение такой ошибки при выполнении программы скорее всего вызвано "затиранием" [дескриптора] объекта.

Номера сообщений:

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.

15.4    Ошибки вида "… is not a subsystem of the current/parental PS"

"Процессорная система, заданная при обращении к функции, не является текущей/родительской процессорной системой или непосредственной или косвенной её подсистемой".

Сообщения диагностируют нарушение иерархии подсистем. Например, подзадача пытается использовать/изменять объект, принадлежащий более высокому уровню иерархии.

Номера сообщений:

032.012, 032.013, 032.032, 032.052, 032.082, 032.083, 036.012, 036.013, 036.068, 036.069, 038.025, 038.026, 038.042, 038.043, 044.003, 044.044, 044.045, 046.017, 046.058, 046.059, 070.013, 070.027, 080.006, 080.025, 080.047, 080.057, 080.067, 080.157, 080.167, 080.206, 080.255, 090.004, 090.005, 090.014, 090.015, 090.023, 090.024, 092.004, 092.005, 092.014, 092.015, 092.023, 092.024, 094.006, 094.007, 096.006, 096.007, 101.001, 101.011, 110.002, 110.005, 110.011, 110.014, 130.003, 130.033, 130.037, 130.063, 130.067, 131.004, 131.005, 132.032, 132.033, 133.003, 140.003, 140.033, 141.003, 141.033, 143.004, 143.005, 144.032, 144.033, 219.002.

15.5    Ошибки вида "…was not created by the current subtask" и "…was not started by the current subtask"

"Заданный при обращении к функции объект создан не в текущей подзадаче" и "Заданная при обращении к функции асинхронная операция запущена не текущей подзадачей".

Сообщения диагностируют нарушение иерархии подсистем. Например, подзадача пытается использовать/изменять объект, принадлежащий другой подзадаче. Или подзадача осуществила попытку ожидания асинхронной операции (т.е. реализуемой парой операторов START-WAIT), запущенной другой подзадачей.

Номера сообщений:

060.067, 060.077, 060.117, 065.006, 069.022, 070.005, 070.006, 070.032, 070.042, 070.052, 070.062, 070.072, 070.082, 080.003, 080.023, 080.056, 080.066, 080.073, 080.082, 080.156, 080.166, 080.203, 080.253, 120.008, 131.023, 131.043, 132.012, 132.017, 132.042, 132.052, 143.023, 143.043, 144.012, 144.017, 144.042, 144.052.

15.6    Ошибки вида "…has not been aligned/mapped"  и  "…has already been aligned/mapped";     "…does not exist"  и  "…already exists"

Вероятная причина таких ошибок - нарушение порядка создания/использования массивов и других DVM-объектов. Например, массив A, выровненный на массив B, может быть создан (оператором malloc) только если массив B уже существует (создан). Аналогично, параллельный цикл по массиву может быть выполнен только если массив уже существует. Или наоборот, выполняется повторное создание объекта. Заметим, что повторное создание массива (malloc) в последовательной программе могло пройти незамеченным; а (повторное) создание темплейта или группы границ вообще невидимо для последовательной программы.

Номера сообщений:

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.

15.7    Ошибки вида  "… has already been started/inserted …",  "… has not been started/completed"  и  "… the reduction group is empty"

Такого рода ошибки являются следствием нарушения последовательности действий с DVM-объектами: группами редукционных операций и теневых граней, буферами удаленного доступа и т.д. Например, повторный запуск операции до завершения запущенной, запуск операции с пустой группой, ожидание завершения незапущенной операции, включение переменных (массивов) в группу во время выполнения операции с этой группой, удаление объекта во время выполнения операции и т.п.

Номера сообщений:

060.120, 060.140, 069.023, 070.004, 070.033, 070.034, 070.044, 070.053, 070.054, 070.063, 070.073, 070.083, 080.007, 080.008, 080.009, 080.010, 080.011, 080.026, 080.027, 080.028, 080.029, 080.030, 080.042, 080.043, 080.044, 080.045, 080.046, 080.052, 080.053, 080.054, 080.062, 080.063, 080.064, 080.072, 080.083, 080.152, 080.153, 080.154, 080.162, 080.163, 080.164, 080.207, 080.208, 080.209, 080.210, 080.211, 080.256, 080.257, 080.258, 080.259, 080.260, 131.003, 131.024, 131.044, 131.045, 132.013, 132.019, 132.034, 132.043, 132.053, 143.003, 143.024, 143.044, 143.045, 144.013, 144.019, 144.034, 144.043, 144.053.

15.8    Ошибки индексации и значений

Ошибки данного типа возникают при выходе индекса за граница некоторой размерности DVM-объекта (например, при выравнивании массива или описании параллельного цикла), индексировании по несуществующей размерности, неправильном соотношении между индексами (например, начальный индекс больше конечного), неверной размерности DVM-объекта и т.п. Некорректные значения могут передаваться системе поддержки, например, в векторе GENBLOCK или как размеры теневых граней (или в результате "затирания" памяти). Сообщения системы поддержки могут содержать выражение вида (<равенство или неравенство>) - нарушенное соотношение. Описание величин, включенных в каждое такое сообщение, можно найти в документе "Система поддержки DVM-программ. Детальный дизайн" (файл rtsDDr.doc).

Номера сообщений:

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.

15.9    Другие семантические ошибки

Перераспределение или переотображение массива или темплейта, которое не было разрешено при его создании или невозможно.

Номера сообщений:

030.002, 036.050, 036.065, 038.030, 038.037, 044.043, 046.053, 065.005, 065.010.

Попытка выполнения параллельного цикла с изменённым порядком витков по схеме ACCROSS (по схеме выполнения циклов с зависимостью по данным между витками).

Номера сообщений: 060.110, 060.111.

Попытка расширения множества локальных витков параллельного цикла с изменённым порядком выполнения витков.

Номера сообщений: 060.210, 060.211.

Включение одной и той же редукционной переменной в две различные группы.

Номер сообщения: 070.007.

Массивы в поддирективе SHADOW_START или SHADOW_WAIT параллельного цикла распределены иначе, чем сам цикл.

Номер сообщения: 060.040.

Неверно распределённые объекты в нерегулярном удалённом доступе (например, число распределённых измерений удалённого массива не равно единице).

Номера сообщений: 140.004, 140.034, 140.035, 140.040, 140.050, 140.051, 141.004, 141.034, 141.035.

15.10    Ошибки запроса памяти и количества объектов

Ошибки данного вида возникают при нехватке памяти для задачи или из-за ошибок в размерах создаваемых массивах. Ошибки запроса памяти возможны также при "затирании" памяти программой пользователя или при её "зацикливании".

Номера сообщений:

200.000, 200.001, 200.002, 200.003, 200.004, 200.005, 200.006, 200.007, 200.008.

Следующие сообщения выдаются, когда создано слишком много объектов (распределенных массивов, буферов удаленного доступа). В C-DVM такие ошибки могут быть вызваны несбалансированностью операторов malloc и free для распределенных массивов или использованием локальных в функции (или блоке) "статических" распределенных массивов (т.е. массивов с константными размерностями).

Номера сообщений:

040.004, 040.007, 130.029, 140.060.

15.11    Ошибки нижнего уровня передачи сообщений

Ошибки передачи сообщений являются результатом неверного взаимодействия системы поддержки с системой передачи сообщений.

Причиной могут служить:

Рекомендуется обратиться к разработчику или его представителю.

Номера сообщений:

210.000, 210.001, 210.002, 210.003, 210.004, 210.005, 212.000, 212.001, 212.002, 212.003, 213.000, 213.001, 213.002, 214.000, 214.001, 219.003.

16    Структура файла системной трассировки

Файл системной трассировки имеет следующую структуру:

Трассировка каждого события может быть включена и выключена по его номеру (см. п.6 и п.14.4).

Состав накапливаемой при трассировке информации определяется режимом трассировки. При кратком режиме выводится:

При подробном режиме трассировки сохраняемая информация расширяется и зависит от типа события. Если событием является обращение к функции, то выводятся ее входные параметры. При возврате из функции выводятся ее выходные параметры. Для каждого события может быть задан подробный режим трассировки вне зависимости от общего режима.

Накапливаемая при трассировке информация содержит также все информационные сообщения и сообщения об ошибках системы поддержки.

Для наглядности изображения вызовов функций различных уровней вложенности в параметрах, управляющих системной трассировкой, можно задать желаемый отступ от начала строки для получения "лесенки" (см.14.4).