Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Практика №1 (Структура СРВ).doc
Скачиваний:
13
Добавлен:
02.03.2016
Размер:
265.73 Кб
Скачать

Список литературы

  1. Гома. Х. Проектирование систем реального времени, параллельных и распределённых приложений. ДМК Пресс, 2002.

  2. Дашевский В.П. «Вероятностные методы оценки выполнимости задач в системах реального времени». Автореферат диссертации на соискание степени кандидата технических наук.

  3. Иан Соммервилл. Инженерия программного обеспечения. 6-е издание. «Вильямс» 2002.

  4. Б. Я. Лурье, П. Дж. Энрайт. Классические методы автоматического управления. «БХВ-Петербург» 2004.

  5. A.Burns, A.J.Wellings «Designing the Hard Real-time Systems»

  6. Catlin, Brian. Real-Time Systems and Microsoft Windows NT / MSDN

Практическое занятие №1. Основы профилирования процессов.

Проектирование СРВ на некоторых этапах предполагает оценку эффективности управляющих алгоритмов при их исполнении на выбранных аппаратных конфигурациях.

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

Алгоритм профилирования можно представить следующей схемой (Рисунок 6)

Рисунок 6 Алгоритм профилирования кода.

Профилирование с использованием счётчика времени

Произвести измерения времени выполнения кода можно разными способами с различной степенью точности. В IBM PC имеются два механизма: системный таймер (штатная частота: 18,2 тика в секунду, т.е. период T = 55мс, максимальная частота – 1 193 180 тиков в секунду, T = 0, 84 мкс), часы реального времени (частота 1024 тика в секунду, T = 0,98 мс); регистр счётчик времени (Time Stamp Counter), увеличивающийся на единицу при каждом такте процессорного ядра. Анализ различных вариантов хорошо представлен в [7]

Предпочтительным вариантом при профилировании является использование регистра счётчика времени. Для работы с этим регистром, начиная с микропроцессора Pentium, поддерживается специальная инструкция RDTSC. Результат работы (число тактов микропроцессора, прошедших с момента запуска системы) заносится в регистры EAX:EDX. Ниже приведён алгоритм профилирования участка кода (Листинг 1).

__int64 clock, clock2;

__asm

{

XOR EAX, EAX // Вызов CPUID гарантирует очистку конвейера

CPUID // микропроцессора перед вызовом RDTSC

RDTSC

MOV dword ptr [clock+4], EDX

MOV dword ptr[clock], EAX

//

// … Профилируемый код

//

XOR EAX, EAX

CPUID

RDTSC

MOV dword ptr [clock2+4], EDX

MOV dword ptr [clock2], EAX

}

clock2-=clock; // clock2 содержит число тактов между

// вызовами RDTSC

Листинг 1 Профилирование кода с использованием инструкции RDTSC

В переменную clock будет помещено число тактов микропроцессора, прошедших между двумя вызовами инструкции RDTCS. Так как при проектировании СРВ большинство временных ограничений задаётся астрономическим временем, следует перевести число тактов в секунды:

При профилировании кода следует проводить несколько измерений, так как на скорость выполнения влияют многие факторы (обозначим это как tнак): работа других программ, в том числе операционной системы, аппаратные компоненты системы: кэш память различных уровней (L1, L2, L3), конвейерная организация МП и т.п. При этом лучший из полученных результатов (минимальное время выполнения) можно трактовать как скорость работы алгоритма (т.е. tалг  min ({tпроф}) {tпроф} – множество измерений времени выполнения); к сожалению хорошей верхней оценки (максимальное время выполнения) получить не удаётся. Таким образом tпроф=tалг + tнак. При этом случайной величиной здесь является tнак, т.о. анализ результатов профилирования проводится с помощью статистических методов. В нашей работе нас будет интересовать:

  1. Оценка среднего времени профилирования и оценка среднеквадратичного отклонения.

  2. Подтверждение или опровержение гипотезы о нормальном распределении времени профилирования.

  3. Получение функций зависимости времени профилирования от некоторой величины (например, функция времени переключения контекста потока от числа активных потоков).