Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
mlr_EVM v ASUTP_3.0.doc
Скачиваний:
5
Добавлен:
10.02.2016
Размер:
201.73 Кб
Скачать

Лабораторная работа № 2. Определение производительностиCpu

Цель работы: определение производительности процессора на элементарных операциях.

Задачи:

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

— разработать программный код для определения времени затрачиваемого на выполнение 1000000 арифметических операций сложения, деления, а также на выполнение 1000000 тригонометрических операций;

— используя разработанное ПО провести исследование производительности различных CPU.

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

Элементарным циклом работы процессора является машинный такт. Каждый машинный такт выполняется за строго определённый интервал времени. Такая периодичность обеспечивается тактовым генератором. Количество тактов в единицу времени называется тактовой частотой процессора.

Рассмотрим х86 (32-х разрядную) архитектуру процессора. Для копирования данных используется мнемоническая инструкция ассемблера:

mov приемник, источник

Источниками и приёмниками могут быть как внутренние регистры, так и ячейки во внешней памяти. Если выполняется операция копирование из одного регистра в другой — то эта операция называется регистр-регистр, если из регистра во внешнюю память, то регистр-память и из памяти в регистр — память-регистр. Необходимо определить количество тактов затрачиваемых на выполнение такой инструкции.

Существует инструкция процессора, которая возвращает кол-во тактов от начала работы процессора — rdtscв виде 64-х разрядного целого. Результат заносится в регистрыEDX(старшие 4-е байта) иEAX(младшие). Ёмкость 32-х разрядного числа позволяет хранить значение до 232, то есть, например процессор с частотой 1 ГГц будет инкрементировать младшее число 4.2 секунды, а только потом инкрементировать старшее число, которое переполнится только за 572 года.

Определение тактовой частоты процессора

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

Учитывать корректировки на затраченные такты при сохранении промежуточных результатов нет смысла, так как эта величина на много порядков меньше количества тактов процессора за 1 с.

Используем системную функцию Sleep(), которая останавливает поток на заданный интервал времени.

void Sleep(IN DWORD dwMilliseconds);

Подключаемый заголовочный файл: windows.h(объявление в winbase.h)

Программная реализация выглядит следующим образом:

unsignedintuHigh,uLow;

_asm

{

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

;начала его работы

mov uLow, EAX;сохранение младшей части

mov uHigh, EDX;сохранение старшей части

}

Sleep(1000);

_asm

{

rdtsc

sub EAX, uLow;разность младших частей значений счётчика тактов

sbb EDX, uHigh;разность старших частей с учётом флага

;переноса CF (Carry Flag)

mov uLow, EAX; сохранение тактовой частоты процессора в

mov uHigh, EDX; переменных uHigh и uLow

}

В начале лабораторной работы уже отмечалось, что на инкрементирование младших разрядов числа тактов процессор с частотой 1 ГГц должен затратить 4.2 секунды. Если частота процессора значительно выше, то для простоты следует уменьшить время паузы, например, до 500 мс или еще меньше. Также следует учесть это время при преобразовании частоты в МГц.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]