Повышение эффективности отладки DVM-программ
Модели параллельного программирования. Методика отладки DVM-программ. Разработка и внедрение в отладчик системы DVM возможностей управления размером трассировки. Реализация уровня подробности контрольных сумм. Сохранение элементов массива в заданный файл.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 17.10.2013 |
Размер файла | 126,4 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
3. Рассмотрим случай, когда у нас имеется параллельный цикл (или область задач), а в него (или в задачу области задач) вложены один или несколько последовательных циклов. В этом случае после параллельного цикла (или области задач) будут вычислены контрольные суммы для всех массивов, к которым был доступ непосредственно в параллельном цикле (соответственно, задаче области задач) и во вложенных последовательных циклах.
4.2 Конфигурационный файл. Файл трассировки
В уровне подробности контрольных сумм, также как и в других уровнях подробности можно создавать конфигурационный файл. При создании из уровня подробности контрольных сумм этот файл дополнительно хранит информацию о доступе к массивам в параллельных конструкциях. Файл трассировки помимо информации конфигурационного файла содержит трассировку конструкций начала и завершения циклов и областей задач, а также контрольные суммы массивов.
Для установления однозначного соответствия между массивами и вычисленными контрольными суммами, необходима уникальная идентификация массивов. Поэтому в уровне подробности контрольных сумм автоматически включается регистрация массивов (параметр TraceOptions.drarr).
Уникальным идентификатором массива будем считать четвёрку:
§ имя массива;
§ имя файла, в котором объявлен этот массив;
§ номер строки объявления массива;
§ номер массива.
Номер массива вычисляется следующим образом: в списке зарегистрированных массивов ищется последний зарегистрированный массив с таким же именем, таким же именем файла и номером строки в этом файле. Если такой массив найден, то в качестве номера регистрируемого массива берётся номер найденного массива, увеличенный на единицу. Иначе (если такой массив не найден) в качестве номера регистрируемого массива принимается нулевое значение. Ситуация, в которой в одной и той же строке файла регистрируются массивы с одним и тем же именем - это инициализация в последовательном цикле элементов массива - указателей памятью, выделенной для динамического массива. Имя у этих динамических массивов одно и то же, так как значение переменной цикла компиляторами C-DVM и Fortran-DVM подставлено быть не может.
Как было сказано в главе 2, конфигурационный файл (а также и заголовок файла трассировки) хранит структуру вложенности циклов и областей задач программы в том виде, в котором она представляется отладчику (она определяется по последовательности обращений к нему и передаваемым параметрам, таким, как номер конструкции). Например, одним из отличий конфигурационного файла от статической структуры программы является то, что в местах вызовов функций в конфигурационном файле будут находиться конструкции циклов и областей задач из тел этих функций. В отличие от заголовка, сама трассировка хранит последовательность выполнения всех отслеживаемых отладчиком конструкций.
Опишем процесс построения заголовка трассировки (конфигурационного файла). Пусть в процессе выполнения программы вызывается функция отладчика - например, начало какой-нибудь конструкции (цикла или области задач). В качестве параметров передаются имя исходного файла, номер строки файла и номер самого цикла. Отладчик производит поиск конструкций с такими параметрами на текущем уровне вложенности. Если не находит, то создаётся новая конструкция, которая добавляется на текущий уровень вложенности в заголовок трассировки, иначе, найденная конструкция берётся в качестве текущей. Например, если взять последовательный цикл, в который вложен параллельный цикл, то в заголовке трассировки дублирования параллельного цикла не произойдёт, а в самой трассировке будет записано столько параллельных циклов, сколько итераций совершит внешний последовательный. В результате в качестве заголовка трассировки создаётся структура, напоминающая (по структуре конструкций) текст нашей программы.
При выполнении программы с уровнем подробности контрольных сумм (также как и с другими уровнями подробности), имеется возможность не строить заголовок трассировки в процессе выполнения, а загрузить его из конфигурационного файла перед началом тестового запуска (для этого необходимо существование файла, заданного параметром TraceOptions.FileLoopInfo). В этом случае информация о массивах, к которым осуществлялся доступ, не накапливается (если пользователь не установит значение параметра TraceOptions.TrapArraysAnyway равным 1), следовательно, повышается эффективность выполнения, хотя, с другой стороны, возможен подсчёт контрольных сумм для массивов, к которым не было доступа в соответствующих конструкциях.
Последнее утверждение иллюстрирует следующий пример.
Пусть имеется функция F(X, Y), параметрами которой являются два одинаково распределённых массива и эта функция в параллельном цикле читает массив X и пишет в массив Y. Пусть у нас есть три одинаково распределённых массива A, B и С, подходящие в качестве параметров для нашей функции. Рассмотрим следующую последовательность вызовов функции F: F(A, B), F(B, С).
Рассмотрим два случая:
1. Конфигурационный файл не загружен. Во время первого вызова функции F в заголовке файла трассировки будет создана конструкция параллельного цикла для цикла из тела нашей функции, в конструкции завершения этого цикла будет сохранена информация о том, что к массиву А был доступ на чтение, к массиву В - на запись. Также будут вычислены контрольные суммы для массивов А и В (или только для массива В, если TraceOptions.ChecksumMode = 1) и записаны в трассировку. Во время второго вызова функции F произойдёт поиск конструкции цикла из тела нашей функции в заголовке файла, и информация о доступе к массивам будет обновлена следующим образом: к массиву А - доступ на чтение, к массиву В - доступ на чтение и запись, к массиву С - на запись. В трассировку запишутся вычисленные контрольные суммы для массивов В и С. Если включен режим сохранения конфигурационного файла, то в него сохранится вся информация из заголовка.
2. Конфигурационный файл загружен. В этом случае загруженный конфигурационный файл становится заголовком трассировки, вся информация о доступе к массивам берётся из этого заголовка, поэтому отслеживания доступа к массивам не происходит. При первом вызове функции F конструкция параллельного цикла будет найдена в заголовке трассировки, и в конце цикла контрольные суммы будут вычислены и сохранены в трассировку уже для всех трёх массивов. То же самое произойдёт и во время второго вызова функции F.
Во втором случае уместен следующий вопрос: а что произойдёт, если массив С - динамический, создаётся между двумя вызовами функции F? Во время первого вызова функции F он ещё не существует. В этом случае контрольная сумма для массива С подсчитываться не будет (у отладчика не будет информации об адресе массива). Во время второго вызова функции F контрольная сумма для массива С будет вычислена и помещена в трассировку.
Запуск программы параллельно в режиме накопления трассировки с уровнем подробности контрольных сумм недопустим без наличия конфигурационного файла или с параметром TraceOptions.TrapArraysAnyway = 1, поскольку некоторые процессоры могут не вызвать операцию подсчёта контрольных сумм из-за того что им может не достаться ни одной итерации параллельного цикла (в этом случае на этих процессорах обращений к массивам не будет).
Формат файла трассировки
В формате файлов изменилась только конструкция завершения цикла/области задач.
Информация обо всех массивах (вне зависимости от значения параметра TraceOptions.ChecksumMode), связанных с конструкцией сохраняется в записи завершения этой конструкции в заголовке файла трассировки (а также и в конфигурационном файле, если заданы соответствующие параметры) и имеет следующий формат:
EL: <номер конструкции> (<имя>, <файл>, <строка>, <номер>, <”r”|”w”|”rw”>) ... (<имя>, <файл>, <строка>, <номер>, <”r”|”w”|”rw”>)
После номера конструкции в той же строке через пробел в скобках перечисляется информация о массивах: первые 4 поля - уникальный идентификатор массива, далее - тип доступа к массиву: чтение (”r”), запись (”w”), чтение и запись (”rw”).
В самой трассировке конструкция завершения цикла/области задач выглядит следующим образом:
EL: <номер конструкции>; {<файл>, <строка>}
CS(<имя>, <файл>, <строка>, <номер>, <доступ>)=”<значение>”
...
CS(<имя>, <файл>, <строка>, <номер>, <доступ>)=”<значение>”
вместо любой из строк с контрольными суммами может находиться запись
CS(<имя>, <файл>, <строка>, <номер>, <доступ>) FAILED
Каждая строка кроме первой представляет собой описание массива либо с вычисленным значением контрольной суммы, либо с зарезервированным словом FAILED, которое означает, что контрольная сумма для данного массива не может быть вычислена (последнее может произойти в случае каких-либо ошибок в программе). В случае невозможности подсчёта контрольной суммы для какого-либо массива на экран будет выдано соответствующее сообщение Список сообщений отладчика находится в Приложении 1. Контрольные суммы подсчитываются только для массивов тип доступа к которым удовлетворяет значению параметра TraceOptions.ChecksumMode.
4.3 Сравнение контрольных сумм
При запуске программы в режиме сравнения контрольных сумм происходит загрузка в память эталонной трассировки с контрольными суммами. Далее, во время выполнения отлаживаемой программы происходит подсчёт контрольных сумм для тех же массивов, что и при эталонном выполнении программы. Подсчитанные контрольные суммы сравниваются с соответствующими контрольными суммами эталонной трассировки с точностью, заданной параметром Trace.FloatPrecision.
В случае неравенства контрольных сумм какого-либо массива в файл с ошибками сравнения выдаётся сообщение. В этом сообщении содержится идентификатор массива, информация о точке нумерации, в которой произошла ошибка сравнения, а так же предыдущая точка (если такая была), в которой контрольные суммы для указанного массива совпали. Данная информация позволяет пользователю задать подробную трассировку на интервале от точки, в которой контрольные суммы совпадали (если такой не было, то с начала выполнения программы) до точки, в которой контрольные суммы не совпали.
4.5 Реализация уровня подробности контрольных сумм
При реализации уровня подробности контрольных сумм введены следующие структуры:
typedef struct tag_CHECKSUM
{
void *pInfo; /* pointer to the array debugger
information */
double sum; /* checksum of the array */
long lArrNo; /* array number in the tArrays table */
byte accType; /* access type: 1-read, 2-write,
3-read and write */
byte calculated; /* 1 - if checksum is calculated,
0 - impossible to calculate checksum
for this array
2 - the same as 0 + you don't need to
output error message */
void *pAddr; /* array address information for
trapping purposes */
}
CHECKSUM;
typedef struct tag_LIST
{
byte collect;
CHECKSUM *body;
int cursize;
int maxsize;
}
LIST;
В некоторые структуры отладчика добавлены необходимые поля.
Тип CHECKSUM используется для передачи информации функции Lib-DVM, которая вычисляет контрольные суммы для заданных массивов. Одной структуре соответствует один массив. Поле pInfo - указатель на структуру с дополнительной информацией о массиве, lArrNo - номер массива в таблице tArrays (см. [1]), accType - тип доступа к элементам массива (1- чтение, 2 - запись, 3 чтение и запись), sum - поле, в которое помещается значение вычисленной контрольной суммы, calculated - флаг, определяющий, подсчитана контрольная сумма или нет (1 - контрольная сумма вычислена и хранится в поле sum, 0 - не удалось вычислить контрольную сумму для указанного массива, 2 - контрольную сумму для указанного массива вычислить не удалось, сообщение об ошибке уже выдано).
Тип LIST используется для хранения информации о доступе к массивам в заданной конструкции программы. Флаг collect определяет, требуется ли собирать информацию о доступе к массивам. Поле maxsize - количество элементов типа CHECKSUM, под которые выделена память и на которые ссылается поле body. Поле cursize - количество заполненных элементов типа CHECKSUM по указателю body. В случае необходимости хранения большего количества, чем maxsize элементов, выделяется дополнительно REALLOC_COUNT*sizeof(CHECKSUM) байт памяти при помощи функции realloc. Значение макроса REALLOC_COUNT можно переопределить, по умолчанию оно равно 5.
Функции, добавленные в отладчик системы DVM при реализации уровня подробности контрольных сумм:
void cs_compute(CHECKSUM *arrays, int count)
Функция реализует подсчёт контрольных сумм для передаваемого ей в качестве параметра массива структур CHECKSUM, количество элементов которого передаётся в параметре count. В настоящее время функция cs_compute реализована разработчиками системы времени выполнения и находится в файле maxim_k.c.
void list_init(LIST *list)
Функция инициализирует передаваемую ей структуру пустым списком
void list_clean(LIST *list)
Функция освобождает память, занимаемую списком, затем инициализирует список при помощи функции list_init()
void updateListA(LIST *list, void *pArrBase, byte accType)
Функция пытается найти в списке массив с адресом pArrBase, если такого массива в списке нет, то он добавляется. Информация о доступе к найденному или добавленному массиву обновляется в соответствии с полем accType
void updateListN(LIST *list, long lArrNo, byte accType)
Функция пытается найти в списке массив с номером lArrNo, если такого массива в списке нет, то он добавляется. Информация о доступе к найденному или добавленному массиву обновляется в соответствии с полем accType
void lists_uucopy(LIST *dest, LIST *src)
Функция добавляет в список dest массивы из списка src, которых в dest ещё нет. Для всех добавленных или найденных в dest массивов обновляется информация о доступе, взятая из массивов src
int list_build_checksums(LIST *list, CHECKSUM **ppChecksums)
Функция создаёт массив контрольных сумм *ppChecksums по указанному списку list. Возвращается число элементов в массиве *ppChecksums
size_t list_to_header_string(char *str, LIST *list)
Функция создаёт строку str, содержащую информацию о массивах списка list. Строка создаётся в формате файла циклов или заголовка трассировки
Глава 5. Сохранение элементов массива в заданный файл
При выполнении программы в режиме сравнения с уровнем подробности контрольных сумм пользователю может быть полезна возможность сохранения массива в момент обнаружения расхождения в контрольных суммах. Далее, после получения массива, сохранённого в той же точке, но при эталонном запуске пользователь может сравнить и визуализировать эти массивы внешними средствами и с их помощью определить итерацию цикла, на которой происходит ошибка.
Сохранение массива в момент обнаружения расхождения в контрольных суммах производится в том случае, если параметр SaveArrayFilename не является пустой строкой (этим параметром определяется имя файла, в который производится сохранение). При сохранении массива на экран выдаётся уникальный идентификатор этого массива Сообщения отладчика описаны в Приложении 1., Напомним, что уникальным идентификатором массива является строка <имя массива>, <файл объявления>, <строка объявления>, <номер массива>. и номер точки, в которой произошло сохранение.
При необходимости сохранить этот же массив при повторном запуске пользователю нужно кроме параметра SaveArrayFilename указать уникальный идентификатор массива в параметре SaveArrayID, а так же точку нумерации FinishPoint, в которой и будет производиться сохранение массива.
Особенности реализации
При реализации возможностей сохранения массива в файл написано 2 функции.
void save_array(dvm_ARRAY_INFO *pArr, char *point)
Функция сохраняет массив с отладочной информацией pArr. На экран выдаётся сообщение об успехе/неудаче операции с указанием точки нумерации point
void save_array_with_ID(char *arr_id, char *point)
Функция сохраняет массив с идентификатором arr_id. На экран выдаётся сообщение об успехе/неудаче операции с указанием точки нумерации point
Глава 6. Оценка эффективности предложенных возможностей
Для наших экспериментов выберем один из тестов NASA [14] - LU, переписанный на язык Фортран-DVM разработчиками системы DVM. Этот тест мы будем запускать на отладочных данных, поскольку запуск на целевых данных потребовал бы слишком много ресурсов.
Внесём в наш тест ошибку и покажем, как предложенные возможности позволяют определить её местонахождение. Рассмотрим следующий параллельный цикл:
878 CDVM$ PARALLEL (j) ON flux(*,*,j,*), SHADOW_COMPUTE
879 do j = L1, L2
880 do k = 2, nz - 1
881 do i = ist, iend
882 flux(1,i,j,k) = rsd(3,i,j,k)
883 u31 = rsd(3,i,j,k) / rsd(1,i,j,k)
884 q = 0.50d+00 * ( rsd(2,i,j,k) * rsd(2,i,j,k)
885 > + rsd(3,i,j,k) * rsd(3,i,j,k)
886 > + rsd(4,i,j,k) * rsd(4,i,j,k) )
887 > / rsd(1,i,j,k)
888 flux(2,i,j,k) = rsd(2,i,j,k) * u31
889 flux(3,i,j,k) = rsd(3,i,j,k) * u31 + c2 *
890 > ( rsd(5,i,j,k) - q )
891 flux(4,i,j,k) = rsd(4,i,j,k) * u31
892 flux(5,i,j,k) = ( c1 * rsd(5,i,j,k) - c2 * q )*u31
893 end do
894 end do
895 end do
Удалим из этого цикла со строки 878 спецификацию SHADOW_COMPUTE, которая позволяет обновлять значения в теневых гранях без обмена между процессорами: значения элементов теневых граней подсчитываются в том же цикле, в котором вычисляются значения массива. Во время написания программы программист мог попросту забыть, что нужно обновить теневые грани массивов при изменении их элементов.
Результаты последовательного и параллельного на двух процессорах запусков программы не совпадают. Если алгоритм не предполагает такого различия и результаты последовательного выполнения программы совпадают с ожидаемыми (результатами ручного просчёта или эксперимента), то, скорее всего, при распараллеливании программы была произведена ошибка.
Таблица 1. Результаты последовательных запусков отладочной версии теста NASA LU с различными параметрами
Неинструментированная программа (-d0 -p) |
Инструментированная программа с отключенным отладчиком (-d4, -p, EnableTrace=0) |
Инструментированная программа с динамическим контролем (-d4, EnableDynControl=1) |
|
0,14 сек |
3,6 сек |
1620 сек Динамический контроль досрочно завершил выполнение программы по исчерпании максимально допустимого количества ошибок |
Воспользуемся существующими возможностями отладки, запустим программу в режиме оценки размера трассировки с уровнями подробности FULL и MODIFY. В случае уровня подробности FULL предполагаемый размер трассировки составляет 1 337 771 861 байт, расход оперативной памяти 2 426 457 092 байт, для уровня MODIFY 383 064 655 и 746 277 668 байт соответственно. Для тестовой машины (Intel Pentium 4 - 1800 МГц, 256 Мб ОЗУ) это неприемлемо.
Попробуем использовать возможности динамического контроля DVM-указаний. Несмотря на то, что время выполнения программы с использованием динамического контроля достаточно велико (как видно из таблицы 1), динамический контроль определил доступ к нелокальной переменной в следующем цикле после того, в котором была удалена спецификация SHADOW_COMPUTE:
897 CDVM$ PARALLEL (j) ON frct(*,*,j,*)
898 do j = jst, jend
899 do k = 2, nz - 1
900 do i = ist, iend
901 do m = 1, 5
902 frct(m,i,j,k) = frct(m,i,j,k)
903 > - ty2 * (flux(m,i,j+1,k)-flux(m,i,j-1,k))
904 end do
905 end do
906 end do
907 end do
В приведённом цикле использовались теневые грани одного из массивов, которые должны были быть обновлены в предыдущем цикле. Сообщение динамического контроля:
*** DYNCONTROL *** : Loop( No(42), Iter(2) ), Loop( No(43), Iter(2) ), Loop( No(44), Iter(2) ), Loop( No(45), Iter(1) ). File: ludv.fdv, Line: 902
Access to non-local element flux(m,i,j + 1,k).
Однако время отладки с использованием динамического контроля (27 минут) всё же может быть неприемлемо.
Запустим программу последовательно в режиме накопления трассировки с уровнем подробности контрольных сумм. Далее запустим отлаживаемую программу в режиме эмуляции параллельного выполнения на двух процессорах со сравнением промежуточных результатов выполнения с данными полученной на предыдущем запуске трассировки. В результате параллельного запуска получим множество сообщений о несовпадении значений контрольных сумм массивов, первое из которых:
Different checksums for array ("frct", "ludv.fdv", 68, 0, "rw"): -0.3839 != -0.3328 at the point 13.E; previous correct point is 11.E.
Производя поиск в трассировке можно определить, что точка 11.E соответствует строке кода 869, точка 13.E - строке 907, ошибка была совершена именно на этом интервале.
Если программист ещё не догадался, где он ошибся, он может получить трассировку с уровнем подробности FULL на интервале от точки 11.E до 13.Е. Для этого необходимо присвоить соответствующие значения параметрам TraceOptions.StartPoint и TraceOptions.FinishPoint файла параметров. Далее необходимо повторить процедуры накопления трассировки и сравнения промежуточных результатов выполнения программы с данными трассировки.
Следующее сообщение об ошибке будет выдано первым:
(1)*** CMPTRACE *** : TraceRecord(101872), Loop( No(42), Iter(6) ), Loop( No(43), Iter(2) ), Loop( No(44), Iter(2) ), Loop( No(45), Iter(1) ). File: ludv.fdv, Line: 902
Different DOUBLE values: 2.8509 != 0.0000.
Как видно, новые возможности, предложенные в настоящей работе, позволили локализовать ошибку гораздо быстрее, чем возможности динамического контроля DVM-указаний. Суммарное время выполнения в случае использования новых возможностей составляет 14,1 + 45,4 + 15,2 + 66,1 секунд = 140,8 секунд против 1620 секунд в случае использования динамического контроля DVM-указаний.
В таблице 2 приведены времена выполнения программы. Стоит заметить, что уровень подробности трассировки MINIMAL не позволяет локализовать ошибку (хотя время выполнения программы с этим уровнем подробности вполне сравнимо со временем выполнения программы с уровнем подробности контрольных сумм). Запуски программы с накоплением трассировки и сравнением промежуточных результатов выполнения с данными трассировки при уровнях MODIFY и FULL не производились, поскольку (как было указано в начале главы) размер трассировки и требования к объему оперативной памяти настолько велики, что для тестовой машины это неприемлемо. При уровне подробности NULL накопление трассировки не производится, в файл трассировки сохраняется только заголовок (поэтому сравнение промежуточных данных с данными трассировки невозможно).
Таблица 2. Времена выполнения программы с указанными уровнями подробностями трассировки, режимами и ограничениями
уровень CHECKSUM |
уровень FULL на интервале от 11.Е до 13.Е |
уровень MINIMAL |
уровень NULL |
||
режим накопления трассировки |
14,1 сек |
15, 2 сек |
13,1 сек |
8,2 сек |
|
режим сравнения трассировки при эмуляции двух процессоров |
45,4 сек |
66,1 сек Отладчик досрочно завершил выполнение программы по исчерпании максимально допустимого количества ошибок |
19,3 сек |
- |
|
размер файла трассировки |
12 575 992 байт |
16 708 133 байт |
12 550 535 байт |
15 346 байт |
Можно заметить, что если время выполнения программы или объем трассировки при запуске программы с ограничением на интервал трассировки будут велики пользователь может дополнительно указать ограничение на трассируемые итерации (см. Главу 3).
В качестве одного из направлений дальнейшего улучшения возможностей отладчика можно предложить внедрение в отладчик возможности сравнения промежуточных данных выполнения программы с данными трассировки, собранной на нескольких процессорах (для всех существующих уровней подробности трассировки).
Заключение
В данной дипломной работе предложены новые возможности, существенно повышающие эффективность отладки DVM-программ, что и было показано в ходе экспериментов с тестом NASA [14] LU.
В процессе выполнения работы
1. Детально изучены исходные тексты и документация к отладчику системы DVM
2. В отладчике системы DVM предложены и реализованы возможности
- нумерации конструкций начала и завершения параллельных циклов и областей задач трассировки
- задания двух точек нумерации, между которыми накапливается трассировка заданного уровня подробности;
- задания ограничений на количество трассируемых итераций последовательных и параллельных циклов с помощью специальных параметров.
3. В отладчике системы DVM предложен и реализован уровень подробности трассировки контрольных сумм.
4. В отладчике системы DVM предложена и реализована возможность сохранения элементов массива в заданный файл в заданной точке нумерации, а также в точке обнаружения различия контрольных сумм массивов.
Предложенные возможности были успешно протестированы на демонстрационных программах, поставляемых вместе с системой DVM, а так же на тесте NASA [14] LU.
Изменения коснулись 13 файлов отладчика. Написано 20 новых функций, во многие существующие функции отладчика внесены изменения.
Разработанные возможности рекомендованы к применению в новых версиях системы DVM.
Литература
1. Документация к системе DVM.
2. Rajkumar Buyya, High Performance Cluster Computing (Architecture, Systems, and Applications), PowerPoint presentation.
3. Высокопроизводительные параллельные вычисления на кластерных системах. Материалы Международного научно-практического семинара./Под ред. проф. Стронгина. Нижний Новгород: Изд-во Нижегородского Университета, 2002, стр. 83-90.
4. MPI: A Message-Passing Interface Standard.
5. High Performance Fortran language specification // High Performance Fortran Forum. Scientific Programming. - 1993. - Vol. 2. - Р.1-170.
6. OpenMP Consortium
7. High Performance Debugging Forum
8. Страничка отладчика Guard.
9. Support for Debugging Automatically Parallelized Programs. Robert Hood, Gabriele Jost, NASA Ames Research Center.
10. Коновалов Н. А., Крюков В. А., Погребцов А. А., Сазанов Ю. Л. C-DVM - язык разработки мобильных параллельных программ.- М.: Препринт ИПМ им. М.В.Келдыша РАН, 1997. - №86. - 37 с.
11. Konovalov N. A., Krukov V. A., Mihailov S. N. and Pogrebtsov A. A. Fortran DVM - a Language for Portable Parallel Programs Development // Proceedings of Software For Multiprocessors and Supercomputers: Theory, Practice, Experience
12. Крюков В.А., Удовиченко Р.В. Отладка DVM-программ. - М.: Препринт ИПМ им. М.В. Келдыша РАН, 1999. - №56. - 26 с.
13. Удовиченко Р.В. Отладка DVM-программ. Диссертация на соискание ученой степени кандидата физико-математических наук, 2000 г.
14. NAS Parallel Benchmarks Group, NASA Ames Research Center, NAS parallel benchmarks 2.3.
Приложение 1. Сообщения об ошибках отладчика системы DVM (добавленные)
Сообщения об ошибках, связанные с нумерацией конструкций:
Invalid start point value: TraceOptions.StartPoint = '<erroneous string>'.
Неверно задана точка начала подробной трассировки (синтаксическая ошибка)
Invalid finish point value: TraceOptions.FinishPoint = '<erroneous string>'.
Неверно задана точка окончания подробной трассировки (синтаксическая ошибка)
Start point is not less than finish point.
Точка нумерации, заданная в качестве начальной не предшествует точке окончания трассировки
Start and finish points are incomparable values.
Точки начала и окончания подробной трассировки несравнимы, т.е. находятся в разных подзадачах одной и той же области задач
Start point <point1> implies task region but actual construction is parallel loop; starting verbose trace from the point <point2>.
Точка, указанная в качестве номера начала подробной трассы <point1> является номером параллельного цикла внутри области задач, но конструкция, соответствующая указанному номеру области задач является параллельным циклом. Подробная трассировка будет начата с точки <point2>
Finish point <point1> implies task region but actual construction is parallel loop; finishing verbose trace at the point <point2>.
Точка, указанная в качестве номера окончания подробной трассы <point1> является номером параллельного цикла внутри области задач, но конструкция, соответствующая указанному номеру области задач является параллельным циклом. Подробная трассировка будет окончена в точке <point2>
Assertion failed
Нарушено необходимое условие. Внутренняя ошибка
Сообщения об ошибках, возникающие при неверном указании параметров, отвечающих за ограничения на итерации:
Incorrect parameter TraceOptions.Ig_left value.
Неверное значение параметра TraceOptions.Ig_left
Incorrect parameter TraceOptions.Ig_right value.
Неверное значение параметра TraceOptions.Ig_right
Incorrect parameter TraceOptions.Iloc_left value.
Неверное значение параметра TraceOptions.Iloc_left
Incorrect parameter TraceOptions.Iloc_right value.
Неверное значение параметра TraceOptions.Iloc_right
Incorrect parameter TraceOptions.Irep_left value.
Неверное значение параметра TraceOptions.Irep_left
Incorrect parameter TraceOptions.Irep_right value.
Неверное значение параметра TraceOptions.Irep_right
Parameter TraceOptions.Irep_right is reserved for further versions; it is switched off for this run.
Параметр TraceOptions.Irep_right зарезервирован для будущих версий. В текущем запуске он будет выключен
Сообщения об ошибках, связанные с уровнем подробности контрольных сумм:
Incorrect or absent configuration file for parallel checksum tracelevel.
Для накопления параллельной трассировки с уровнем подробности контрольных сумм необходим конфигурационный файл
TraceOptions.TrapArraysAnyway = 1 can not be specified with parallel checksum tracelevel.
Параметр TraceOptions.TrapArraysAnyway = 1 нельзя задавать при накоплении параллельной трассировки с уровнем подробности контрольных сумм
Incorrect parameter value: TraceOptions.ChecksumMode = <value>.
Неверное значение параметра TraceOptions.ChecksumMode
TraceOptions.ChecksumMode = 0 is not supported yet.
Значение параметра TraceOptions.ChecksumMode = 0 в настоящий момент не поддерживается
Incorrect parameter value: TraceOptions.TrapArraysAnyway = %d.
Неверное значение параметра TraceOptions.TrapArraysAnyway
Found access to array without registration.
Обнаружено обращение к массиву, для которого не была вызвана функция регистрации. Для такого массива контрольные суммы подсчитываться не будут, поскольку отладчик не обладает никакой другой информацией об этом массиве, кроме адреса.
Different checksums for array (<array_id>, <access>): <value1> != <value2> at the point <point1>; previous correct point is (absent | <point2>)
Значения <value1> и <value2> контрольных сумм массива <array_id> с доступом <access> различаются в точке <point1>. Точки, в которой контрольные суммы совпадали либо не существует (absent), либо такой точкой является <point2>
Unable to compute checksum for array (<array_id>) at the point <point>.
Контрольная сумма для массива с идентификатором array_id не может быть вычислена в точке point (возможно, в этой точке указанный массив ещё не создан, а информация о нём была загружена из конфигурационного файла)
Reference to undefined array
При чтении заголовка трассировки в записи завершения цикла/области задач обнаружена ссылка на массив, который не был зарегистрирован
Warning: failed checksums found. They won't be recounted
В эталонной трассировке обнаружены массивы, контрольные суммы которых при накоплении эталонной трассировки вычислить не удалось. Контрольные суммы этих массивов в соответствующих конструкциях в режиме сравнения промежуточных результатов выполнения вычисляться не будут
Instances of replicated array (<array_id>) do not match at the point <point>
При подсчёте контрольных сумм обнаружилось, что экземпляры массива <array_id>, размноженного по всем процессорам имеют различные локальные контрольные суммы
Сообщения об ошибках, связанные с сохранением массива в файл:
Can't open file <filename> for writing.
Невозможно открыть файл <filename> для записи
Array (<array_id>) cannot be saved at the point <point>.
Массив с идентификатором <array_id> невозможно сохранить в точке нумерации <point> (возможно, в этой точке указанный массив ещё не создан, а информация о нём была загружена из конфигурационного файла)
An error occurred during saving array (<array_id>) to file <filename> at the point <point>.
При сохранении массива с идентификатором <array_id> в файл <filename> в точке <point> произошла ошибка
Array (<array_id>) has been successfully saved to file <filename> at the point <point>.
Массив с идентификатором <array_id> был успешно сохранён в файл <filename> в точке <point>
Array (<array_id>) was not found at the point <point>.
Массив с идентификатором <array_id> в точке <point> не зарегистрирован (и, следовательно, не может быть сохранён)
Invalid array ID specification <erroneous string>.
Неверная спецификация идентификатора массива (синтаксическая ошибка)
параллельный программирование отладчик трассировка
Приложение 2. Параметры отладчика системы DVM (добавленные)
Параметры, определяющие точки начала и конца подробной трассировки:
TraceOptions.StartPoint, тип char *
Данный параметр определяет точку нумерации, с которой необходимо включить подробную трассировку, уровень которой определяется параметром TraceOptions.TraceLevel
TraceOptions.FinishPoint, тип char *
Данный параметр определяет точку нумерации, после которой необходимо выключить подробную трассировку
Следующие параметры определяют ограничения на трассируемые итерации. Эти параметры имеют тип int и умолчанию их значения равны -1. Об их использовании более подробно см. Главу 3.
TraceOptions.Ig_left
TraceOptions.Ig_right
TraceOptions.Iloc_left
TraceOptions.Iloc_right
TraceOptions.Irep_left
TraceOptions.Irep_right (заблокирован)
Параметры, введённые в уровне подробности трассировки контрольных сумм:
TraceOptions.ChecksumMode, тип byte
В зависимости от значения данного параметра подсчёт контрольных сумм будет производиться для всех массивов (TraceOptions.ChecksumMode = 2), либо для массивов, к элементам которых был доступ на запись, либо на чтение и запись (TraceOptions.ChecksumMode = 1, по умолчанию)
TraceOptions.TrapArraysAnyway, тип byte
Значение 1 данного параметра указывает на то, что даже в случае загруженного конфигурационного файла требуется производить отслеживание обращений к массивам и вычислять контрольные суммы, базируюсь на этих данных. Если значение параметра равно 0 (по умолчанию), то отслеживания обращений к элементам массивов при загруженном конфигурационном файле производиться не будет
Параметры, управляющие возможностями сохранения элементов массива в файл:
TraceOptions.SaveArrayFilename, тип char *
Если имя файла, определяемое данным параметром, не является пустой строкой, то в этот файл будет производиться запись элементов массива в случае обнаружения расхождения в контрольных суммах. Если имя файла пустая строка “” (по умолчанию), то сохранение элементов массива в файл производиться не будет
TraceOptions.SaveArrayID, тип char *
Если идентификатор массива, определяемый данным параметром, а также параметр TraceOptions.SaveArrayFilename не являются пустыми строками, то в точке, определяемой параметром TraceOptions.FinishPoint массив с указанным идентификатором будет сохранён в заданный файл. Если данный параметр пустая строка “” (по умолчанию), то сохранение элементов массива в точке TraceOptions.FinishPoint (если задана) производиться не будет.
Размещено на Allbest.ru
Подобные документы
Обзор существующих моделей параллельного программирования, основные средства отладки эффективности MPI-программ, общие проблемы всех средств трассировки. Создание экспериментальной системы отладки эффективности MPI-программ, этапы работы анализатора.
дипломная работа [767,2 K], добавлен 14.10.2010Модели параллельного программирования; отладка параллельных программ. Реализация экспериментальной версии системы сравнительной отладки Fortran-OpenMP программ: получение, сбор и запись трассы, инструментарий программ, используемый формат файлов трассы.
дипломная работа [92,8 K], добавлен 17.10.2013Изучение составляющих этапов разработки программ, процесса их тестирования, отладки и документирования в контексте курса обучения начинающих программистов. Теоретический анализ постановки задачи и модели программы, создания текста, семантической отладки.
курсовая работа [29,2 K], добавлен 28.11.2010Отладка - процесс обнаружения, устранения синтаксических и семантических ошибок. Точки отслеживания (трассировки). Выполнение отладки в режиме останова. Мониторинг содержимого переменных. Пошаговое выполнение кода. Разработка тестов для отладки программы.
презентация [743,6 K], добавлен 09.12.2013Основные направления развития параллелизма, модели параллельного программирования. Автоматические средства разработки параллельного ПО, анализ последовательной программы. Разработка системы автоматического распараллеливания программ на языке Fortran77.
дипломная работа [57,7 K], добавлен 14.10.2010Понятие двумерного массива целых чисел. Создание динамического массива из элементов, расположенных в четырех столбах данного массива и имеющих нечетное значение. Сохранение результатов в файл и выведение их на экран. Использование ввода с файла.
курсовая работа [44,0 K], добавлен 09.11.2014Решение задач прикладного программирования. Оформление разработанных алгоритмов в виде графических схем. Написание программ с использованием подпрограмм, их отладка. Блок-схемы и листинг программ. Наборы тестов для отладки разработанных программ.
курсовая работа [575,8 K], добавлен 06.12.2013Языки программирования низкого и высокого уровней и среды реализации. Особенности процедурных, логических, объектно-ориентированных языков. Состав системы программирования: трансляторы, библиотеки и отладчик программ, компоновщик, средства редактирования.
презентация [11,9 K], добавлен 23.10.2013Разработка модели лифта, алгоритма и программы на языке JavaScript. Возможность использования модели при проектировании промышленных лифтов и отладки управляющих программ. Основные принципы построения модели лифта, выполнение вычислительного эксперимента.
курсовая работа [495,8 K], добавлен 09.06.2013Построение компилятора с языка высокого уровня как одного из элементов системы программирования. Разработка компилятора ассемблера, модификация базы данных исходного макета. Загрузчик, эмулятор, отладчик. Использование Flex и Bison для программирования.
курсовая работа [599,0 K], добавлен 04.11.2014