debugDDr (1158410), страница 9
Текст из файла (страница 9)
Если задан режим сравнения трассировки, то данные функции используются модулем чтения трассировки для формирования в памяти таблицы трассировочных записей, соответствующей эталонному файлу.
Прототипы функций модуля накопления трассировки следующие:
| void trc_put_beginstruct( char *File, unsigned long Line, long No, byte Type, byte Rank, long *Init, long *Last, long *Step ) | ||
| File | – | имя файла с исходной DVM-программой; |
| Line | – | номер строки в DVM-программе; |
| No | – | уникальный номер конструкции; |
| Type | – | тип конструкции (параллельный или последовательный цикл, область задач); |
| Rank | – | размерность конструкции; |
| Init | – | массив начальных значений итерационных переменных; |
| Last | – | массив конечных значений итерационных переменных; |
| Step | – | массив значений шагов приращения итерационных переменных. |
Функция формирует запись начала исполняемой конструкции программы.
| void trc_put_endstruct(char *File, unsigned long Line, long No, unsigned long BegLine) | ||
| File | – | имя файла с исходной DVM-программой; |
| Line | – | номер строки в DVM-программе; |
| No | – | уникальный номер конструкции; |
| BegLine | – | номер строки начала конструкции. |
Функция формирует запись завершения исполняемой конструкции программы.
| void trc_put_iteration( AddrType *index ) | ||
| index | – | массив указателей на итерационные переменные. |
Функция формирует запись начала нового витка цикла или новой задачи. Если не задан режим записи пустых витков, то запись реально будет помещена в трассировку только после начала вложенной конструкции или обращения к переменной внутри данного витка.
| void trc_put_iteration_flash_par( byte Rank, long *Index, long LI ) | ||
| Rank | – | размерность витка; |
| Index | – | массив значений итерационных переменных; |
| LI | – | абсолютный индекс витка. |
Функция формирует запись начала нового витка цикла или новой задачи с указанными параметрами.
| void trc_put_iteration_flash(void) |
Функция помещает в трассировку текущую отложенную запись начала витка. Вызывается из функций trc_put_beginloop() и trc_put_variable().
| void trc_put_readvar( char *File, unsigned long Line, char *Operand, long Type, void *Value, byte Reduct ) | ||
| File | – | имя файла с исходной DVM-программой; |
| Line | – | номер строки в DVM-программе; |
| Operand | – | имя переменной; |
| Type | – | тип переменной; |
| Value | – | адрес переменной; |
| Reduct | – | флаг обращения к редукционной переменной. |
Функция формирует запись обращения к переменной на чтение.
| void trc_put_prewritevar( char *File, unsigned long Line, char *Operand, long Type, byte Reduct ) | ||
| File | – | имя файла с исходной DVM-программой; |
| Line | – | номер строки в DVM-программе; |
| Operand | – | имя переменной; |
| Type | – | тип переменной; |
| Reduct | – | флаг обращения к редукционной переменной. |
Функция формирует запись начала вычисления значения переменной.
| void trc_put_postwritevar( char *File, unsigned long Line, char *Operand, long Type, void *Value, byte Reduct ) | ||
| File | – | имя файла с исходной DVM-программой; |
| Line | – | номер строки в DVM-программе; |
| Operand | – | имя переменной; |
| Type | – | тип переменной; |
| Value | – | адрес переменной; |
| Reduct | – | флаг обращения к редукционной переменной. |
Функция формирует запись завершения вычисления нового значения и модификации переменной.
| void trc_put_reductvar( char *File, unsigned long Line, long Type, void *Value ) | ||
| File | – | имя файла с исходной DVM-программой; |
| Line | – | номер строки в DVM-программе; |
| Operand | – | имя переменной; |
| Type | – | тип переменной; |
| Value | – | адрес редукционной переменной. |
Функция формирует запись результата вычисления редукционной операции.
| void trc_put_variable( char *File, unsigned long Line, char *Operand, byte iType, long Type, void *Value, byte Reduct ) | ||
| File | – | имя файла с исходной DVM-программой; |
| Line | – | номер строки в DVM-программе; |
| Operand | – | имя переменной; |
| iType | – | тип записи; |
| Type | – | тип переменной; |
| Value | – | адрес переменной; |
| Reduct | – | флаг обращения к редукционной переменной. |
Общая функция формирования записи обращения к переменной.
| void trc_put_skip( char *File, unsigned long Line ) | ||
| File | – | имя файла с исходной DVM-программой; |
| Line | – | номер строки в DVM-программе. |
Функция формирует запись завершения блока собственных вычислений в последовательной части программы.
6.5.4Модуль чтения трассировки
Функции модуля чтения трассировки предназначены для чтения и разбора файла с эталонной трассировки и конфигурационного файла. Для формирования записей в таблице трассировочных записей используются функции модуля накопления трассировки.
Прототипы функций чтения трассировки следующие:
| void trc_rd_header( DVMFILE *hf, char* szFileName ) | ||
| hf | – | дескриптор файла; |
| szFileName | – | имя читаемого файла (участвует в сообщениях об ошибках). |
Функция читает из файла структуру и параметры трассировки исполняемых конструкций программы.
| void trc_rd_trace( DVMFILE *hf, char* szFileName, unsigned long StrBase ) | ||
| hf | – | дескриптор файла; |
| szFileName | – | имя читаемого файла (участвует в сообщениях об ошибках); |
| StrBase | – | номер строки файла, с которой начинаются записи трассировки. |
Функция читает файл с трассировкой и формирует в памяти таблицу трассировочных записей.
| unsigned long trc_rd_gets( DVMFILE *hf ) | ||
| hf | – | дескриптор файла. |
Функция читает следующую запись из файла. Возвращает число обработанных строк.
| short trc_rd_search_key(char *str) | ||
| str | – | строка с ключевым словом. |
Функция возвращает код, соответствующий строке с ключевым словом, или –1, если ключевое слово не найдено.
| char* trc_rd_split( char *Str, char *Format, … ) | ||
| Str | – | разбираемая строка; |
| Format | – | синтаксис строки; |
| … | – | адреса переменных, принимающих разобранные параметры строки. |
Функция производит разбор строки на параметры в соответствии с указанным синтаксисом.
В форматной строке Format могут использоваться следующие символы:
-
& – ключевое слово. В соответствующую переменную будет записан код ключевого слова.
-
% – необязательное число. В соответствующую переменную будет записано разобранное значение.
-
! – обязательное число. В соответствующую переменную будет записано разобранное значение.
-
#<type> – обязательное число указанного типа. В соответствующую переменную будет записано разобранное значение. В качестве <type> можно указать один из следующих символов:
-
i – int
-
l – long
-
f – float
-
d – double
-
@ – произвольная строка. Соответствующая переменная должна быть указателем на буфер, куда будет записана строка.
6.5.5Модуль сравнения трассировки
Функции модуля сравнения трассировки сравнивают события программы с соответствующими записями эталонной трассировки.
Прототипы функций модуля сравнения трассировки следующие:
| void trc_cmp_beginstruct( char *File, unsigned long Line, long No, byte Type, byte Rank, long *Init, long *Last, long *Step ) | ||
| File | – | имя файла с исходной DVM-программой; |
| Line | – | номер строки в DVM-программе; |
| No | – | уникальный номер конструкции; |
| Type | – | тип конструкции (параллельный или последовательный цикл, область задач); |
| Rank | – | размерность конструкции; |
| Init | – | массив начальных значений итерационных переменных; |
| Last | – | массив конечных значений итерационных переменных; |
| Step | – | массив значений шагов приращения итерационных переменных. |
Функция сравнивает событие начала исполняемой конструкции программы с соответствующей эталонной записью трассировки.
| void trc_cmp_endstruct(char *File, unsigned long Line, long No, unsigned long BegLine) | ||
| File | – | имя файла с исходной DVM-программой; |
| Line | – | номер строки в DVM-программе; |
| No | – | уникальный номер конструкции; |
| BegLine | – | номер строки начала конструкции. |
Функция сравнивает событие завершения исполняемой конструкции программы с соответствующей эталонной записью трассировки.
| void trc_cmp_iteration( AddrType *index ) | ||
| index | – | массив указателей на итерационные переменные. |
Функция сравнивает событие начала нового витка цикла или новой задачи с соответствующей эталонной записью трассировки. Если при формировании эталонной трассировки не был задан режим записи пустых итераций, то реальное сравнение будет произведено только после начала вложенной конструкции или обращения к переменной внутри данного витка.
| void trc_cmp_iteration_flash(void) |
Функция сравнивает текущую отложенную запись начала витка цикла или задачи с эталонной записью трассировки. Вызывается из функций trc_cmp_beginloop() и trc_cmp_variable().
| void trc_cmp_readvar(char *File, unsigned long Line, long Type, void *Value, byte Reduct) | ||
| File | – | имя файла с исходной DVM-программой; |
| Line | – | номер строки в DVM-программе; |
| Operand | – | имя переменной; |
| Type | – | тип переменной; |
| Value | – | адрес переменной; |
| Reduct | – | флаг обращения к редукционной переменной. |
Функция сравнивает событие обращения к переменной на чтение с соответствующей эталонной записью трассировки.
| void trc_cmp_prewritevar( char *File, unsigned long Line, long Type, byte Reduct ) | ||
| File | – | имя файла с исходной DVM-программой; |
| Line | – | номер строки в DVM-программе; |
| Operand | – | имя переменной; |
| Type | – | тип переменной; |
| Reduct | – | флаг обращения к редукционной переменной |
Функция сравнивает событие начала вычисления значения переменной с соответствующей эталонной записью трассировки.
| void trc_cmp_postwritevar( char *File, unsigned long Line, long Type, void *Value, byte Reduct ) | ||
| File | – | имя файла с исходной DVM-программой; |
| Line | – | номер строки в DVM-программе; |
| Operand | – | имя переменной; |
| Type | – | тип переменной; |
| Value | – | адрес переменной; |
| Reduct | – | флаг обращения к редукционной переменной. |
Функция сравнивает событие завершения вычисления нового значения и модификации переменной с соответствующей эталонной записью трассировки.
| void trc_cmp_reductvar( char *File, unsigned long Line, long Type, void *Value ) | ||
| File | – | имя файла с исходной DVM-программой; |
| Line | – | номер строки в DVM-программе; |
| Operand | – | имя переменной; |
| Type | – | тип переменной; |
| Value | – | адрес редукционной переменной. |
Функция сравнивает событие получения результата редукционной операции с соответствующей эталонной записью трассировки.
| void trc_cmp_variable( char *File, unsigned long Line, enum_TraceType iType, long vType, void *Value, byte Reduct ) | ||
| File | – | имя файла с исходной DVM-программой; |
| Line | – | номер строки в DVM-программе; |
| Operand | – | имя переменной; |
| iType | – | тип записи; |
| Type | – | тип переменной; |
| Value | – | адрес переменной; |
| Reduct | – | флаг обращения к редукционной переменной. |
Общая функция сравнения события обращения к переменной с соответствующей эталонной записью трассировки.
| void trc_cmp_skip( char *File, unsigned long Line ) | ||
| File | – | имя файла с исходной DVM-программой; |
| Line | – | номер строки в DVM-программе. |
Функция сравнивает событие завершения блока собственных вычислений в последовательной части программы с соответствующей эталонной записью трассировки. При необходимости, функция пропускает некоторые записи эталонной трассировки и позиционируется на нужной записи завершения блока собственных вычислений.
| long trc_cmp_forward(long CurTraceRecord, enum_TraceType iType) | ||
| CurTraceRecord | – | номер текущей записи трассировки; |
| iType | – | тип записи, до которого производится смещение. |
Функция осуществляет поиск ближайшей записи с указанным типом, начиная с текущей записи. Возвращает номер найденной записи. Если между текущей записью и искомой встречаются записи с типом ‘начало конструкции’, ‘конец конструкции’ или ‘начало витка’ или запись с указанным типом отсутствует, то функция возвращает -1.
6.5.6Модуль обработки редукции
Для обработки редукционных переменных используется своя таблица переменных. Данная таблица содержит в себе записи следующего типа, описывающие редукционные переменные:
| typedef struct tag_REDUCT_INFO | ||||
| { | ||||
| char* | Current; | |||
| char* | Initial; | |||
| byte | StartReduct; | |||
| s_REDVAR* | RVar; | |||
| } | REDUCT_INFO; | |||
| Current | – | указатель на буфер, содержащий промежуточный результат редукционной операции; | ||
| Initial | – | указатель на буфер, содержащий начальное значение редукционной переменной; | ||
| StartReduct | – | флаг начала редукционной операции над переменной; | ||
| RVar | – | указатель на RTL-структуру, описывающую редукционную переменную. | ||
Для проверки правильности заданной операции редукции используется метод ручного просчета редукции. Данный метод основывается на получении промежуточного результата редукционной операции после выполнения каждой итерации цикла и каждой параллельной задачи из области задач. Получив управление после выполнения очередного витка цикла или задачи, функция diter_() вычисляет промежуточный результат редукции, применяя специфицированную редукционную операцию, и восстанавливает исходное значение редукционной переменной. Окончательный результат редукции вычисляется в функции dendl_(), после завершения параллельной конструкции. Таким образом, получая управление и восстанавливая каждый раз начальное значение редукционной переменной перед выполнением очередного витка цикла или задачи, мы можем, применяя специфицированную редукционную операцию, сами просчитать результат редукции.















