debugPDr (1158413), страница 2
Текст из файла (страница 2)
Замечание. Неверная спецификация редукционной операции (например, задание MIN вместо MAX) не обнаруживается при данном методе, но будет обнаружена при использовании метода сравнения результатов выполнения.
3.1.5Контроль использования буфера удаленных элементов
Буфер удаленных элементов используется для предварительной загрузки для каждого процессора требуемых ему нелокальных элементов. Для него используются все те же проверки, которые осуществляются для распределенных массивов, за исключением следующих случаев:
-
Проверка необъявленной зависимости по данным осуществляется для распределенного массива, для которого был создан буфер удаленного доступа.
-
Проверка на инициализацию элементов осуществляется как для элементов буфера (инициализация – копирование элементов из массива в буфер), так и для элементов соответствующего распределенного массива.
-
К элементам буфера разрешено обращение только на чтение.
3.2Метод сравнения результатов выполнения
3.2.1Накопление трассировки
При накоплении результатов вычислений в файл записывается следующая информация:
-
Значения всех переменных при доступе к ним на чтение.
-
Значения всех переменных при доступе к ним на запись.
-
Значения результатов вычисления редукции.
-
Начало выполнения области параллельных задач и параллельного или последовательного цикла.
-
Начало выполнения нового витка цикла или новой параллельной задачи.
-
Завершение выполнения области параллельных задач и параллельного или последовательного цикла.
Каждая запись в файле содержит ссылку на соответствующую строку исходного текста программы.
Поскольку метод сравнения результатов требует значительных накладных расходов, то предусмотрены средства управления степенью подробности накопления результатов выполнения.
Степень подробности накопления определяется содержимым специального файла – конфигурационного файла трассировки. Этот файл содержит описание всех исполняемых конструкций программы (области задач и циклы). Если данный файл не существует, то можно с помощью параметров задать его создание.
Для того чтобы сократить объем накапливаемой информации, для каждого цикла, для каждой области задач и для всей программы в целом можно задать следующие уровни накопления:
-
Отсутствие трассировки.
-
Трассировка только начала и завершения областей задач и начала самих задач, начала и завершения циклов и начала витков циклов.
-
Предыдущий уровень, плюс трассировка модификаций переменных и результатов вычисления редукции.
-
Полная трассировка (включает трассировку всех событий).
Кроме того, для каждого цикла можно указать диапазон витков, по которым будет накапливаться трассировка, а для области задач – диапазон трассируемых задач.
3.2.2Сравнение результатов
В режиме сравнения трассировки, эталонный файл перед началом выполнения программы, считывается в память. При чтении трассировки из файла, ее структура в памяти формируется с помощью тех же функций, что и в режиме накопления трассировки. В результате, после чтения трассировки из файла, мы имеем в памяти ту же структуру, которая была сформирована при накоплении трассировки.
При последующем выполнении программы, трассируемые события сравниваются с эталонными.
При этом, учитываются следующие особенности выполнения программы в параллельном режиме:
-
Значения редукционных переменных внутри параллельных конструкций могут различаться при последовательном и параллельном исполнении программы. Поэтому, сравнение значений таких переменных не производится.
-
При параллельном выполнении программы может поменяться порядок выполнения витков цикла или параллельных задач. В связи с этим, в начале выполнения каждого витка или задачи, производится поиск соответствующей записи в эталонной трассировке и установление ее как текущей.
-
В последовательной части программы при параллельном ее исполнении могут отсутствовать некоторые обращения к элементам распределенных массивов, предваренные проверкой принадлежности этих элементов текущему процессору.
-
В параллельной конструкции могут отсутствовать некоторые обращения к переменным, участвующим в вычислении редукционного максимума или минимума.
3.2.3Контроль редукционных операций
Накопление редукционных переменных осуществляется специальным образом. Значения редукционных переменных во время их вычисления в параллельном цикле не сравниваются с эталонными. Сравниваются только результаты окончательного вычисления редукции.
Для контроля правильности спецификации редукционной операции, вычисление редукционной операции производится двумя различными способами. Первый способ – это стандартный метод вычисления редукции. Сначала на каждом процессоре выполняются отображенные на него витки параллельного цикла или параллельные задачи, в которых в соответствии с заданным программистом алгоритмом будет вычислен частичный результат редукции. Конечный результат редукционной операции вычисляется библиотекой Lib-DVM путем объединения всех частичных результатов в соответствии с описанной программистом редукционной операцией. Если программа выполняется последовательно (или параллельно, но на одном процессоре), то редукционная операция целиком будет вычислена в соответствии с заданным программистом алгоритмом.
Второй способ представляет собой эмуляцию выполнения каждого витка параллельного цикла и каждой параллельной задачи на своем процессоре, осуществляемую следующим образом. Перед началом выполнения очередного витка или задачи текущее значение редукционной переменной сохраняется, а редукционной переменной присваивается ее начальное значение, т.е. то значение, которое она имела перед началом выполнения параллельной конструкции. После выполнения витка или задачи, над сохраненным значением редукционной переменной и полученным в редукционной переменной частичным результатом выполняется операция редукции в соответствии с описанной программистом редукционной операцией.
Для проверки правильности задания редукционной операции производится сравнение результатов выполнения программы с использованием двух описанных выше способов вычисления редукции. Если редукционная операция в программе задана правильно, то при обоих способах вычисления редукции получится одинаковый результат. При неверном задании операции редукции пользователь получит диагностику о расхождении результатов выполнения редукции.















