Параллельное программирование на языке C-DVM (1158283), страница 4
Текст из файла (страница 4)
Динамический контроль позволяет выявлять ошибки следующих типов:
-
Необъявленная зависимость по данным в параллельном цикле.
-
Использование в параллельном цикле или после выхода из него приватных переменных без их предварительной инициализации.
-
Запись в переменные, доступные только на чтение.
-
Использование редукционных переменных после запуска асинхронной редукции, но до ее завершения.
-
Необъявленный доступ к нелокальным элементам распределенного массива.
-
Запись в теневые грани массива.
-
Чтение теневых элементов массива до завершения операции их обновления.
-
Модификация нелокального элемента распределенного массива в последовательной части программы.
-
Выход за пределы распределенного массива.
-
Запись в буфер удаленного доступа.
Для динамического контроля программы ее следует сначала скомпилировать в режиме получения отладочного варианта параллельной программы.
Команда получения отладочного параллельного варианта имеет вид:
dvm cpdeb <имя_DVM-программы>
Результат работы: готовая программа (выполняемый файл <имя_DVM‑программы>_p).
Команда запуска отладочного параллельного варианта DVM-программ, осуществляющего динамический контроль DVM-указаний имеет вид:
dvm err <имя_DVM-программы>
Результат работы: ошибки, обнаруженные в DVM-указаниях (при их наличии).
В случае обнаружения неверных DVM-указаний в текущей директории появляется файл еrror.dbg, в котором перечислены все найденные ошибки. Краткое сообщение о наличии ошибок появляется после выдачи результатов выполнения задачи.
Структуру и перечень сообщений об ошибках динамического контроля см. в приложении 3.
Отсутствие ошибок при динамическом контроле не гарантирует правильной работы параллельной программы. Поэтому отладку программы следует продолжить, воспользовавшись командами накопления и сравнения трассировок.
4.3.1.4 Сравнение результатов выполнения
Отсутствие ошибок при динамическом контроле не гарантирует правильной работы параллельной программы по следующим причинам:
-
динамический контроль не проверяет правильность описания редукционных операций;
-
источником ошибок могут быть процедуры, вызываемые из DVM-программ, но написанные на других языках и не подлежащие динамическому контролю;
-
отлаженная последовательная программа может содержать ошибки, которые не проявились при ее последовательном выполнении, но могут проявиться при параллельном выполнении.
Для поиска таких ошибок используется метод накопления и сравнения трассировок последовательного и параллельного выполнения программы, который позволяет определить место в программе и момент, когда появляются расхождения в результатах вычислений.
При трассировке выполняется сбор информации обо всех чтениях и модификациях переменных, о начале выполнения каждого витка цикла, о начале и конце выполнения параллельного цикла, о начале выполнения каждой параллельной задачи, о начале и конце выполнения группы задач.
Для выполнения сравнения необходимо выполнить последовательность команд:
Команда получения отладочного параллельного варианта:
dvm cpdeb <имя_DVM-программы>
Результат работы: готовая программа (выполняемый файл <имя_DVM‑программы>_p).
Команда получения отладочного последовательного варианта :
dvm csdeb <имя_DVM-программы>
Результат работы: готовая программа (выполняемый файл <имя_DVM‑программы>_s).
Команда запуска отладочного последовательного варианта DVM-программ, осуществляющая накопление эталонной трассировки на одном процессоре :
dvm trc <имя_DVM-программы>
Результат работы: файл с накопленной трассировкой 0.trd. При наличии ошибок сбора трассировки – сообщение об ошибках после выдачи результатов выполнения задачи и появление файла error.trd в текущей директории.
Команда запуска отладочного параллельного варианта DVM-программ, осуществляющая сравнение результатов вычислений, полученных при запуске программы на одном процессоре в специальном режиме проверки редукционных операций, с накопленной ранее эталонной трассировкой.
dvm red <имя_DVM-программы>
Результат работы: При наличии ошибок – сообщение об ошибках после выдачи результатов выполнения задачи и появление файла error.trd в текущей директории.
Команда запуска отладочного параллельного варианта DVM-программы, осуществляющая сравнение результатов вычислений, полученных при запуске программы на нескольких процессорах, с накопленной ранее эталонной трассировкой.
dvm dif N1 [N2 [N3]] <имя_DVM-программы>
где N1, N2, N3 размеры матрицы процессоров (по умолчанию – 1 1 1).
Результат работы: При наличии ошибок – сообщение об ошибках после выдачи результатов выполнения задачи и появление файла error.trd в текущей директории.
Если различий в трассировке не обнаружено, можно переходить к параллельному выполнению программы с реальными данными.
Если обнаружены различия, но ошибку в программе не удается определить по эталонной трассировке и диагностике сравнения трассировок, пользователь может накопить трассировку на каждом процессоре при запуске отладочного параллельного варианта программы на требуемой матрице процессоров.
Для этого используется следующая команда.
dvm ptrc N1 [N2 [N3]] <имя DVM-программы>,
где N1, N2, N3 размеры матрицы процессоров(по умолчанию – 1 1 1).
Результат работы: Для каждого процессора накапливается трассировка в отдельном файле с именами: 0.trd, 1.trd, 2.trd и т.д. При наличии ошибок выдается соответствующее сообщение после выдачи результатов выполнения задачи.
Чтобы найти строку в файле трассировки, где согласно диагностике сравнения трассировок обнаружена ошибка, используется команда.
dvm dbgerr <имя файла трассы> <имя файла ошибок>
Результат работы: Выдается номер строки в указанном файле трассировки (например, 0.trd), где начинается выполнение витка цикла, на котором обнаружена первая ошибка, указанная в файле ошибок (например, error.trd).
Структуру накапливаемых файлов трассировки и перечень сообщений об ошибках сравнения результатов см. в приложении 3.
4.3.1.5 Псевдопараллельное выполнение на рабочей станции (среда WINDOWS и UNIX) и параллельное выполнение на параллельной ЭВМ
Если различий на предыдущих шагах не обнаружено, то можно переходить к псевдопараллельному выполнению на одном процессоре (рабочей станции) и к запуску в параллельном режиме на многопроцессорной ЭВМ.
Для этого необходимо выполнить команду компиляции:
dvm c <имя DVM-программы>
и команду запуска программы:
dvm run [N1 [N2 [N3]]] <имя DVM-программы>
где N1, N2, N3 размеры матрицы процессоров (по умолчанию – 1 1 1).
5.3.2Отладка эффективности DVM-программы
Для отладки эффективности DVM-программ используется анализатор производительности, который позволяет получить информацию об основных характеристиках эффективности выполнения его программы (или ее частей) на параллельной системе.
Эффективность выполнения параллельных программ на многопроцессорных ЭВМ с распределенной памятью определяется следующими основными факторами:
-
степенью распараллеливания программы - долей параллельных вычислений в общем объеме вычислений;
-
равномерностью загрузки процессоров во время выполнения параллельных вычислений;
-
временем, необходимым для выполнения межпроцессорных обменов;
-
степенью совмещения межпроцессорных обменов с вычислениями.
-
Основные характеристики производительности
Основные характеристики и их компоненты
-
Коэффициент эффективности (Parallelization efficiency) равен отношению полезного времени к общему времени использования процессоров.
-
Время выполнения (Execution time) - максимальное значение среди времен выполнения программы на всех используемых ею процессорах
-
Число используемых процессоров (Processors).
-
Общее время использования процессоров (Total time) - произведение времени выполнения (Execution time) на число используемых процессоров (Processors).
-
Полезное время (Productive time) - сумма трех составляющих – полезного процессорного времени (CPU), времени ввода-вывода (I/O) и полезного системного времени (Sys).
-
Потерянное время (Lost_time) - разница между общим временем использования процессоров и полезным временем. Недостаточный параллелизм, коммуникации и простои - составляющие потерянного времени
-
Недостаточный параллелизм (Insufficient_par) и его компоненты
-
Коммуникации (Communication) и все их компоненты.
-
Простои (Idle time) процессора из-за его недостаточной загрузки.
-
Потенциальные потери из-за разбалансировки (Load_Imbalance).
-
Потенциальные потери из-за синхронизации (Synchronization) при выполнении коллективных операций и все их компоненты.
-
Потенциальные потери из-за разброса времен (Time_variation) выполнения коллективных операций и все их компоненты.
-
Время перекрытия (Overlap) и его компоненты. Эта характеристика отражает потенциальное сокращение коммуникационных расходов за счет совмещения межпроцессорных обменов с вычислениями.
Характеристики выполнения программы на каждом процессоре
-
Потерянное время (Lost time) - сумма его составляющих – потерь из-за недостаточного параллелизма (User insufficient_par), системных потерь из-за недостаточного параллелизма (Sys insufficient_par), коммуникаций (Communication) и простоев (Idle time).
-
Потери из-за недостаточного параллелизма (User insufficient_par).
-
Системные потери из-за недостаточного параллелизма (Sys insufficient_par).
-
Простои на данном процессоре (Idle time) - разность между максимальным временем выполнения интервала (на каком-то процессоре) и временем его выполнения на данном процессоре.
-
Общее время коммуникаций (Communication).
-
Реальные потери из-за рассинхронизации (Real synchronization).
-
Потенциальные потери из-за рассинхронизации (Synchronization).
-
Потенциальные потери из-за разброса времен (Variation).
-
Время перекрытия асинхронных операций (Overlap).
-
Разбалансировка (Load_imbalance) вычисляется как разность между максимальным процессорным временем (CPU+Sys) и соответствующим временем на данном процессоре.
-
Время выполнения интервала (Execution_time).
-
Полезное процессорное время (User CPU_time).
-
Полезное системное время (Sys CPU_time).
-
Время ввода-вывода (I/O_time).
-
Число используемых процессоров для данного интервала (Processors).
-
Времена коммуникаций для всех типов коллективных операций (Reduction, Shadow, Remote_access, Redistribution и I/O).
-
Реальные потери из-за рассинхронизации для всех типов коллективных операций.
-
Потенциальные потери из-за рассинхронизации для всех типов коллективных операций.
-
Потенциальные потери из-за разброса времен для всех типов коллективных операций.
-
Время перекрытия для всех типов коллективных операций.
Замечание. Последние три характеристики выдаются только в том случае, если в параметрах запуска задан параметр IsTimeVariation=1;