debugDDr (1158410), страница 7

Файл №1158410 debugDDr (Раздаточные материалы) 7 страницаdebugDDr (1158410) страница 72019-09-18СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 7)

MODE = <NONE | MINIMAL | MODIFY | FULL>, [EMPTYITER]

# Begin trace header. Don't modify these records

<SL | PL | TR> <номер конструкции> (<номер объемлющей конструкции>) [<ранг цикла>] {<имя файла>, <номер строки>} = <NONE | MINIMAL | MODIFY | FULL>, (<измерение>:<первый виток>, < последний виток>, <шаг >), …

EL: <номер конструкции>

<SL | PL | TR> <номер конструкции> (<номер объемлющей конструкции>) [<ранг цикла>] {<имя файла>, <номер строки>} = <NONE | MINIMAL | MODIFY | FULL>, (<измерение>:<первый виток>, < последний виток>, <шаг >), …

EL: <номер конструкции>

END_HEADER

# End trace header

Строка MODE определяет уровень подробности трассировки всей программы и режим накопления пустых витков. Все остальные строки определяют параметры для конкретных конструкций программы.

После заголовка, в файле трассировки идут записи следующих типов и форматов:

  • Чтение переменной:

RD: [<тип переменной>] <имя переменной> = <значение>; {<файл>, <строка>}

  • Начало оператора присваивания нового значения переменной:

BW: [<тип переменной>] <имя переменной>; {<файл>, <строка>}

  • Запись нового значения переменной:

AW: [<тип переменной>] < имя переменной > = <значение>; {<файл>, <строка>}

  • Чтение редукционной переменной:

RV_RD: [<тип переменной >] < имя переменной > = < значение >; {< файл>, <строка >}

  • Начало оператора присваивания нового значения редукционной переменной:

RV_BW: [<тип переменной >] < имя переменной >; {< файл>, <строка >}

  • Запись нового значения редукционной переменной:

RV_AW: [<тип переменной>] <имя переменной> = <значение>; {<файл>, <строка>}

  • Результат вычисления редукции:

RV: [<тип переменной >] <значение>; {< файл>, <строка >}

  • Завершение блока собственных вычислений в последовательной части программы:

SKP: {< файл>, <строка >}

  • Начало параллельного цикла:

PL: <номер конструкции> (<номер объемлющей конструкции>) [<ранг цикла>] ; {<файл>, <строка>}

  • Начало последовательного цикла:

SL: <номер конструкции> (<номер объемлющей конструкции>) [<ранг цикла (всегда равен единице)>] ; {<файл>, <строка>}

  • Начало области параллельных задач:

TR: <номер конструкции> (<номер объемлющей конструкции>) [<ранг области (всегда равен единице)>] ; {<файл>, <строка>}

  • Начало витка1 или параллельной задачи:

IT: <абсолютный индекс витка (вычисляется из значений всех индексных переменных цикла) или номер задачи>, (<значение индексной переменной1>,< значение индексной переменной2>,…).

  • Завершение параллельного или последовательного цикла или области задач:

EL: <номер конструкции>; {<файл>, <строка>}

6.5Реализация системы сравнения результатов выполнения

6.5.1Основные структуры системы сравнения результатов выполнения

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

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

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

Рис. 4. Структура трассировки

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

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

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

Структура описания исполняемой конструкции программы:

typedef struct tag_STRUCT_INFO

{

long

No;

char

File[MaxSourceFile];

unsigned long

Line;

enum_TraceLevel

TraceLevel;

enum_TraceLevel

RealLevel;

byte

bSkipExecution;

s_COLLECTION

cChildren;

byte

Type;

byte

Rank;

s_REGULARSET

Limit[MAXARRAYDIM];

s_REGULARSET

Current[MAXARRAYDIM];

s_REGULARSET

Common[MAXARRAYDIM];

long

CurIter[MAXARRAYDIM];

struct tag_ STRUCT _INFO*

pParent;

unsigned long

Bytes;

unsigned long

StrCount;

unsigned long

Iters;

}

STRUCT_INFO;

No

уникальный номер конструкции;

File

имя файла программы, где располагается данная конструкция;

Line

номер строки начала конструкции;

TraceLevel

уровень трассировки данной конструкции, заданный в конфигурационном файле трассировки (полный, только модификации, минимальный или отключен);

RealLevel

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

bSkipExecution

флаг, определяющий трассировку конструкции в зависимости от ограничений по трассируемым виткам;

cChildren

коллекция указателей на описания вложенных конструкций для данной конструкции;

Type

тип конструкции (параллельный или последовательный цикл, область задач);

Rank

размерность конструкции (определяет размерность параллельных циклов);

Limit

ограничения трассировки конструкции по виткам;

Current

текущие пределы итерационных переменных циклов;

Common

наиболее общие пределы итерационных переменных циклов;

CurIter

текущие значения итерационных переменных;

pParent

ссылка на описание объемлющей конструкции;

Bytes

размер полной трассировки конструкции;

StrCount

число строк полной трассировки конструкции;

Iters

общее число выполненных итераций данной конструкции.

Следующие структуры описывают записи трассировки в зависимости от их типа.

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

typedef struct tag_SKIP

{

byte

RecordType;

char

File[MaxSourceFile];

unsigned long

Line;

}

SKIP;

RecordType

тип записи;

File

имя файла исходной DVM-программы;

Line

номер строки в DVM-программе.

Запись, описывающая начало исполняемой конструкции программы:

typedef struct tag_STRUCT_BEGIN

{

byte

RecordType;

char

File[MaxSourceFile];

unsigned long

Line;

long

Parent;

long

LastRec;

struct tag_STRUCT_INFO *

pCnfgInfo;

HASH_TABLE

hIters;

}

STRUCT_BEGIN;

RecordType

тип записи;

File

имя файла исходной DVM-программы;

Line

номер строки в DVM-программе;

Parent

номер записи начала объемлющей конструкции программы или номер записи витка, в котором данная конструкция выполняется;

LastRec

номер записи завершения данной конструкции;

pCnfgInfo

ссылка на описание конструкции;

hIters

хэш-таблица номеров записей витков конструкции. Служит для ускорения поиска записи начала конструкции.

Запись, описывающая завершение конструкции:

typedef struct tag_STRUCT_END

{

byte

RecordType;

char

File[MaxSourceFile];

unsigned long

Line;

long

Parent;

struct tag_STRUCT_INFO*

pCnfgInfo;

}

STRUCT_END;

RecordType

тип записи;

File

имя файла исходной DVM-программы;

Line

номер строки в DVM-программе;

Parent

номер записи начала объемлющей конструкции программы или номер записи витка, в котором данная конструкция выполняется;

pCnfgInfo

ссылка на описание конструкции.

Запись, описывающая начало витка цикла или задачи из области задач:

typedef struct tag_ITERATION

{

byte

RecordType;

long

Index[MAXARRAYDIM];

long

LI;

char

Checked;

long

Parent;

byte

Rank;

}

ITERATION;

RecordType

тип записи;

Index

значения итерационных переменных;

LI

абсолютный индекс витка или номер задачи;

Checked

равен 1, если данный виток (или задача) уже исполнялся. Служит для проверки повторного исполнения в режиме сравнения трассировки;

Parent

номер записи начала конструкции, к которой относится виток или задача;

Rank

размерность витка (равна размерности исполняемой конструкции).

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

typedef struct tag_VARIABLE

{

byte

RecordType;

long

vType;

char

Operand[MaxOperand];

char

File[MaxSourceFile];

unsigned long

Line;

byte

Reduct;

VALUE

val;

}

VARIABLE;

RecordType

тип записи;

vType

тип переменной. Система сравнения результатов выполнения обрабатывает только следующие четыре типа: int, long, float и double;

Operand

имя переменной;

File

имя файла исходной DVM-программы;

Line

номер строки в DVM-программе;

Reduct

1, если обращение идет к редукционной переменной. Иначе – 0;

val

значение переменной.

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

typedef struct tag_TRACE

{

TABLE

tTrace;

s_COLLECTION

cStructs;

TABLE

tBegStructs;

long

CurIter;

long

CurStruct;

long

CurTraceRecord;

long

CurPreWriteRecord;

byte

IterFlash;

byte

ReductExprType;

STRUCT_INFO*

pCurCnfgInfo;

int

ErrCode;

int

Level;

unsigned long

Bytes;

unsigned long

StrCount;

unsigned long

Iters;

FILE *

TrcFileHandle;

unsigned long

TraceRecordBase;

unsigned

FloatPrecision;

}

TRACE;

tTrace

таблица трассировочных записей;

cStructs

коллекция описаний конструкций программы, расположенных на внешнем уровне (не имеющих объемлющих конструкций);

tBegStructs

таблица номеров всех записей начала конструкций;

CurIter

номер записи текущего исполняемого витка или задачи;

CurStruct

номер записи текущей исполняемой конструкции;

CurTraceRecord

номер текущей обрабатываемой записи трассировки;

CurPreWriteRecord

номер записи начала текущего обрабатываемого выражения;

IterFlash

флаг отложенной записи витка;

ReductExprType

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

pCurCnfgInfo

ссылка на описание текущей исполняемой конструкции;

ErrCode

код последней ошибки;

Level

уровень трассировки, заданный для всей программы;

Bytes

размер полной трассировки последовательной части программы;

StrCount

число строк трассировки последовательной части программы;

Iters

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

TrcFileHandle

дескриптор файла трассировки;

TraceRecordBase

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

FloatPrecision

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

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

void cmptrace_Init(void)

Функция инициализирует структуры, используемые для трассировки. Если задан режим сравнения трассировки, то производит чтение файла с эталонной трассировкой. Если задан режим накопления трассировки, то производится чтение файла описания циклов.

void cmptrace_ReInit(void)

Функция подготавливает внутренние структуры к режиму сравнения трассировки после чтения файла с эталонной трассировкой.

void cmptrace_Done(void)

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

void cmptrace_Read(void)

Функция производит чтение конфигурационного файла трассировки или файла с эталонной трассировкой в зависимости от заданного режима.

void cmptrace_Write(void)

Функция производит запись конфигурационного файла трассировки или файла с эталонной трассировкой в зависимости от заданного режима.

Характеристики

Список файлов учебной работы

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
7023
Авторов
на СтудИзбе
260
Средний доход
с одного платного файла
Обучение Подробнее