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

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


Оглавление

1 Введение
2 Что такое DVM-программа?
3 Типы ошибок в DVM-программе
4 Динамический контроль DVM-указаний
5 Сравнение результатов выполнения
6 Средства накопления и анализ системной трассировки
7 Настройка DVM-системы
8 Опции конверторов

8.1 Опции конверторов, управляющие режимами работы программ
8.2 Опции конверторов для динамического отладчика
8.3 Опции конверторов для анализа производительности

9 Команды DVM-системы
10 Методика отладки DVM-программ

10.1 Отладка обычной последовательной программы
10.2 Получение отладочных вариантов DVM-программы для последовательного и параллельного выполнения
10.3 Выполнение программы в режиме динамического контроля DVM-указаний
10.4 Накопление эталонного файла трассировки DVM-программы
10.5 Сравнение эталонной трассировки с результатами выполнения параллельной программы на одном процессоре
10.6 Сравнение трассировки параллельного выполнения с эталонной
10.7 Накопление трассировки параллельной программы
10.8 Параллельное выполнение с реальными данными
10.9 Оценка объема трассировки
10.10 Управление объемом файла трассировки
10.11 Запуск программ с нестандартным набором параметров

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

11.1 Параметры динамического контроля
11.2 Параметры накопления и сравнения трассировки вычислений
11.3 Параметры перенаправления стандартных выходных потоков и управления выводом информационных сообщений системы поддержки
11.4 Параметры управления системной трассировкой

11.4.1 Включение и выключение трассировки
11.4.2 Задание открытых (включенных) потоков трассировки
11.4.3 Задание режимов трассировки
11.4.4 Управление формой накапливаемой информации
11.4.5 Управление механизмами внутреннего самоконтроля системы поддержки, функционирующими при накоплении трассировки
11.4.6 Управление выводом дополнительной информации при трассировке некоторых функций системы поддержки в расширенном режиме

12 Диагностические сообщения динамического отладчика

12.1 Динамический контроль
12.2 Накопление и сравнение трассировки

13 Структура конфигурационного файла трассировки
14 Структура трассировки вычислений
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 77. Параллельная программа представляет собой обычную последовательную программу, в которую вставлены 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).

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

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

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

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

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

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

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

  1. Необъявленная зависимость по данным в параллельном цикле.
  2. Использование в параллельном цикле или после выхода из него приватных переменных без их предварительной инициализации.
  3. Запись в переменные, доступные только на чтение.
  4. Использование редукционных переменных после запуска асинхронной редукции, но до ее завершения.
  5. Необъявленный доступ к нелокальным элементам распределенного массива.
  6. Запись в теневые грани массива.
  7. Чтение теневых элементов массива до завершения операции их обновления.
  8. Модификация нелокального элемента распределенного массива в последовательной части программы.
  9. Выход за пределы распределенного массива.
  10. Запись в буфер удаленного доступа.

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

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

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

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

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

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

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

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

Степень подробности трассировки управляется параметрами (см.п.11.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) (см.п.11.3);
dvmoutfile - имя файла, в который направляется вывод задачи пользователя
(если не задан, то вывод идет на экран);
dvmlog - включение (1) и отключение (0) протоколирования сеанса работы пользователя (если не задан dvmoutfile, то вывод идет в файл dvm.log);
dvmshow - включение (1) и отключение (0) вывода на экран всех выполняемых dvm-команд;
dvmsave - включение (1) и отключение (0) сохранения промежуточных файлов (конвертации, компиляции и т.д.).

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

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

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

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

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

-p - (по умолчанию) получение параллельного варианта программы: обрабатываются все DVM-указания.
-s - получение последовательного варианта программы:
обрабатываются только те DVM-указания, которые необходимы для трассировки вычислений и анализа производительности. Обращения к данным при этом остаются без изменений, что позволяет отлаживать такую программу обычными средствами.
-o<file> - имя выходного или .f файла.
-v - вывод номера версии, имени выходного файла, и т.д.

8.2 Опции конверторов для динамического отладчика

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

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), а затем добавляются опции из командной строки. Если опции конверторов нигде не заданы, команды формируют рабочий параллельный вариант программы.

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

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

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

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

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

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

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

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

    -mf <список_машин> - <список_машин> - это имя файла со списком имен машин в кластере рабочих станций; общее количество процессоров в матрице процессоров не должно превышать количество имен машин в этом списке;
    -m - в качестве имени файла со списком имен машин используется $dvmdir/user/machinelist;
    -cp - копирование выполняемого файла в разделяемую (определенную в файле dvmwork и доступную для всех рабочих станций) директорию;
    -h - помощь.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    dvm pa [sts <имя_файла_вывода>][[[<ch1> <ch2><ch3>] <level>] <numbers]

    где:

    сh1 = y/n – вывод основных характеристик;
    ch2 = y/n – вывод сравнительных характеристик;
    ch3 = y/n – вывод характеристик по процессорам;
    level - номер уровня вложенности;
    numbers - список номеров процессоров, для которых выдавать характеристики.

    Результат работы: характеристики анализа производительности.

    Если отсутствуют опции в первой паре квадратных скобок, характеристики выводятся на экран. Команда вида dvm pa –h выводит на экран список своих опций.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

10.1 Отладка обычной последовательной программы

DVM-программа отлаживается на рабочей станции как обычная последовательная программа на языке C или Fortran 77 c использованием обычных компиляторов и средств отладки. DVM-указания при этом игнорируются.

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

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

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

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

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

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

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

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

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

EnableDynControl = 1; - подключение динамического отладчика;
EnableTrace = 0; - отключение накопления трассировки вычислений.

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

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

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

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

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

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

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

EnableDynControl = 0; - отключение динамического отладчика;
EnableTrace = 1; - подключение накопления трассировки;
TraceOptions.TraceMode = 1; - режим накопления трассировки.

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

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

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

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

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

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

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

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

EnableDynControl = 0; - отключение динамического отладчика;
EnableTrace = 1; - подключение накопления трассировки;
TraceOptions.TraceMode = 3; - режим сравнения трассировок;
ManualReductCalc = 1; - вычисление редукционных переменных в соответствии с указаниями пользователя.

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

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

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

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

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

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

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

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

EnableDynControl = 0; - отключение динамического отладчика;
EnableTrace = 1; - подключение накопления трассировки;
TraceOptions.TraceMode = 3; - режим сравнения трассировок;
ManualReductCalc = 0; - вычисление редукционных переменных по стандартному алгоритму.

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

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

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

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

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

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

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

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

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

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

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

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

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

EnableDynControl = 0; - отключение динамического отладчика;
EnableTrace = 1; - подключение накопления трассировки;
TraceOptions.TraceMode = 1; - режим накопления трассировки.

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

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

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

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

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

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

компиляции:

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

выполнения:

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

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

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

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

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

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

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

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

EnableDynControl = 0; - отключение динамического отладчика;
EnableTrace = 1; - подключение накопления трассировки;
TraceOptions.TraceMode = 0; - режим генерации конфигурационного файла трассировки.

Команда создает так называемый конфигурационный файл трассировки, в котором, в частности, приводятся предполагаемые объемы трассировки, исходя из заданных опций DVM-конверторов (см.п.8) и уровней ее сбора (см.п.11.2).

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

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

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

Конфигурационный файл трассировки содержит:

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

Заголовок исполняемой конструкции содержит:

Параметрами управления исполняемой конструкцией (которые может менять пользователь) являются:

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

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

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

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

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

Примеры задания итераций:

(0:2,10,) - трассировка итераций с номерами с 2 по 10 включительно;
(0:,10,) - трассировка итераций с номерами по 10 включительно;
(0:4,,) - трассировка итераций, начиная с номера 4;
(0:,,3) - трассировка каждой третьей итерации.

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

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

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

11 Параметры DVM-системы ==>