Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
22
Добавлен:
30.04.2013
Размер:
395.26 Кб
Скачать

МИНИСТЕРСТВО оБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ

Московский Государственный институт электроники и математики

(Технический университет)

Кафедра вычислительных систем и сетей

Отчет о лабораторной работе №1

«Моделирование работы многоконвейерного процессора»

по дисциплине «Организация ЭВМ, комплексов и систем»

Выполнил:

студент группы С-31

Преподаватель:

канд. техн. наук, доцент

Иванова Елена Михайловна

Москва, 2004 год

Вариант 2

Дано

Вариант кода – 2

Количество конвейеров – 2

Фрагмент кода на Ассемблере:

MOV AX, [Const1]

MOV DX, [Const3]

MOV CX, [Cnt]

MUL DX, AX

MOV [Const2], DX

SUB [Const4], [Const2]

MOV CX, [Const4]

TEST CX, BX

JZ ZERO

MUL [Const3], CX

Zero: MOV [Const5], CX

Выполнение работы

Таблица последовательности выполнения процессором микроопераций для одного конвейера:

Группы простоев фазы исполнения связаны с тем, что выборка операндов из регистров и памяти занимает больше тактов, чем исполнение команды, а в тактах 20-23 еще и тем, что для выборки операндов необходимо было дождаться записи результатов предыдущей команды, которая тоже работала с регистром DX.

Продолжение таблицы:

Аналогично, в связи с ожиданием значения [const2] имеется задержка фазы исполнения в 26-31 тактах, [const4] – 33-37, CX – 40-42.

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

Таблица последовательностей микроопераций для случая двух конвейеров:

За исключением описанного выше случая условного перехода, все простои связаны либо с тем, что выборка операндов производится дольше, чем исполнение микрооперации (небольшие простои), либо с тем, что для выборки операндов процессору необходимо получить результат работы другой микрооперации, которая выполняется на другом конвейере или перед текущей микрооперацией на данном конвейере. Например, простои с 20 по 33 на первом конвейере, с 14 по 26, с 28 по 38 на втором конвейере.

Вывод

Использование конвейеров теоретически выгодно, так как в идеале каждые 2-3 такта процессор будет выдавать по результату очередной микрооперации.

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

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

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

В проделанной работе выигрыш от использования конвейеров оказался незначительным – 57 против 63. Невысокий результат происходит из-за сильной связанности микроопераций. Вероятно, для подобной задачи больше бы подошла последовательная обработка, чем параллельная.

Таблица 1

Число тактов (микроопераций) для фазы выполнения операции

Команда

Операция

Число тактов

MOV

Переместить - копирование второго операнда на место первого

2

AND

Логическое умножение двух операндов, результат помещается на место первого операнда

1

OR

Логическое сложение двух операндов, результат помещается на место первого операнда

1

XOR

Логическое исключающее «или» двух операндов, результат помещается на место первого операнда

1

NOT

Инверсия операнда, результат помещается на место операнда

1

NEG

Изменение знака операнда

1

JMP

Безусловный переход по адресу, указанному в качестве операнда

1

Jxxx

Условный переход по адресу, указанному в качестве операнда (на метку) при выполнении условия ххх (соответствующего флага или комбинации флагов (например JZ - при установленном флаге нулевого результата ZF=1), иначе перейти к следующей команде

2

SHL/ SHR

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

1

TEST

Логическое умножение двух операндов, результат никуда не помещается, устанавливаются флаги

1

ADD

Арифметическое сложение двух операндов, результат помещается на место первого операнда

1

ADC

Сложение с переносом (с учётом флага CF переноса), результат помещается на место первого операнда

1

SUB

Вычитание второго операнда из первого, результат помещается на место первого операнда

1

SBB

Вычитание с заёмом (с учётом флага CF переноса), результат помещается на место первого операнда

1

MUL

Умножение числа, расположенного в регистре-аккумуляторе (AL, или AX, или EAX – в зависимости от размера операнда) на операнд

3

DIV

Деление числа, расположенного в регистрах (AX, или DX:AX, или EDX:EAX – в зависимости от размера операнда) на операнд

3

MOVSX

/MOVZX

Пересылка со знаковым /с нулевым расширением второго операнда на место первого

CMP

Сравнение двух операндов путём вычитания второго из первого и установка флагов, результат операции никуда не заносится

INC/DEC

Увеличение /уменьшение на 1 содержимого операнда

PUSH

Уменьшение значения ESP на 4 и занесение в стек операнда

POP

Извлечение из стека операнда, увеличение ESP на 4

LOOP

Команда организации цикла, уменьшить содержимое СХ на 1, сравнить с нулём, если СХ>0 перейти по адресу, указанному в качестве операнда (по метке), иначе к следующей команде

CLD

Сбросить флаг направления DF=0

CMPSB

Сравнение байтов, расположенных в памяти по логическим адресам DS:ESI, ES:EDI, по результату сравнения установить флаги

CALL

Вызов процедуры (подпрограммы), занести в стек адрес возврата EIP

RET

Возврат из процедуры, восстановление из стека в EIP адреса возврата

NOP

Пустая операция, увеличивает EIP