- •Пояснительная записка
- •Введение
- •1. Техническое задание
- •1.1. Область применения
- •1.2. Индивидуальное задание и литературные источники
- •1.3. Метод конвейеризации
- •1.4. Технические требования
- •1.4.1. Команды эвм
- •1.4.2. Диапазон и погрешность представления чисел
- •1.4.3. Форматы команд, данных и слова состояния процессора
- •1.4.4. Организация виртуальной памяти
- •1.4.5. Способы организации ввода/вывода информации
- •1.4.6. Способ оценки производительности эвм
- •1.4.7. Приращение производительности эвм
- •1.5. Способ тестирования эвм
- •1.6. Взаимодействие программ пользователя с внешними устройствами
- •1.7. Демонстрация возможностей взаимодействия cpu с внешними устройствами
- •1.8. Интерфейс Win32 api
- •2. Структура и алгоритм функционирования эвм классической модели
- •2.1. Вводные замечания
- •2.2. Функциональная модель эвм
- •2.3. Алгоритм функционирования эвм
- •2.4. Средства управления прерываниями
- •2.5. Организация виртуальной памяти
- •2.6. Оценка производительности эвм
- •3. Модификация созданной эвм
- •3.1. Возможности повышения производительности эвм
- •3.2. Организация конвейерной обработки команд
- •Inc 23 такта
- •Iret 12 тактов
- •3.3. Расчет прироста производительности эвм
- •4. Тестовая задача
- •4.1. Алгоритм и программа для тестирования эвм
- •4.2. Моделирование процесса выполнения программы
- •5. Программирование ввода и вывода
- •5.1. Пример использования системных функций для ввода
- •5.2. Общие сведения об интерфейсе Win32 api
- •Заключение
Iret 12 тактов
DECODE EXEC ENDOP
IFETCH
|
X |
X |
X |
X |
X |
X |
X |
|
|
|
|
|
|
|
|
X |
|
|
|
|
|
|
|
X |
X |
X |
X |
CHANGE IP
Одним из путей уменьшения времени выполнения команд является совмещение операций. Используем метод простой предварительной выборки команды, конвейеризация. Когда текущая команда выполняет последнюю часть своей работы в CPU, то можно выбирать очередную команду. При рассмотрении схемы выполнения ADD можно увидеть возможность одновременного выполнения (перекрытия) двух команд без столкновений.
Рассмотрим команды с целью анализа столкновений. Представим область определения каждой команды и результат ее выполнения в виде таблицы.
Команда (функция) |
Область определения |
Область значений |
ADD (тип) |
Операнд – ячейки памяти, регистр адреса для исполнительного адреса |
Акк, RD, регистр флагов |
STORE WR |
Ячейки памяти для исполнительного адреса, Акк, RD, RA |
Ячейки памяти операнда |
Jmp |
|
IP |
JS |
Условие (флаги) |
IP |
READ |
Операнд – ячейки памяти, ячейки памяти для исполнительного адреса, RA |
Акк, RD |
INC |
RD |
RD, OF |
IRET |
Операнд – ячейки памяти |
IP, регистр флагов |
t
RAM
CPU
1 |
1 |
1 |
1 |
1 |
1 |
1 |
|
|
|
|
|
|
1 |
1 |
2 |
2 |
2 |
2 |
2 |
2 |
2 | |
1 |
|
|
|
|
|
|
|
1 |
1 |
1 |
1 |
1 |
1 |
|
2 |
1 |
1 |
1 |
1 |
1 |
|
|
Предварительная выборка
+ + + + + + + +
|
|
|
|
|
|
2 |
2 |
3 |
3 |
3 |
3 |
3 |
3 |
3 |
|
|
2 |
2 |
2 |
2 |
2 |
2 |
|
3 |
2 |
2 |
2 |
2 |
2 |
|
|
базовый цикл латентности
Латентность – это число единиц времени (тактов), разделяющих инициации.
Метод выборки следующей команды во время завершения текущей называется предварительным. Он легко реализуется, но при исполнении команды нужно уметь выполнить выборку следующей команды. Могут возникать помехи, которые нужно устранить. Например, в команде JS не известен адрес. Помеха возникает, если к регистру, ячейке или к регистру флагов обращаются или модифицируют две различные команды так близко расположенные в программе, что при конвейеризации их исполнение перекрывается во времени.
Есть три класса таких помех: чтение после записи – RAW, запись после чтения – WAR, запись после записи – WAW. Когда пересекаются действия исполнения команды, то говорят о перекрытии действий.
ADD – базовый цикл латентности 14 тактов
|
|
|
|
|
Х |
Х |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
|
Х |
Х |
Х |
Х |
Х |
+ |
+ |
Х |
Х |
Х |
Х |
Х |
|
|
EADDR Изменение IP (RA)
Для обеспечения предварительной выборки нужны дополнительные действия CPU: обновить IP и передать его содержимое в RA.
WR – базовый цикл латентности 15 тактов
|
|
|
|
|
|
Х |
Х |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
|
Х |
Х |
Х |
Х |
Х |
Х |
+ |
+ |
Х |
|
|
|
|
|
|
Jmp (Перекрытий действий нет) –
базовый цикл латентности 11 тактов
|
|
|
|
+ |
+ |
+ |
+ |
+ |
+ |
+ |
|
Х |
Х |
Х |
+ |
|
|
|
|
|
|
|
JS (Перекрытий действий нет. Переход выполняется.) –
базовый цикл латентности 12 тактов
|
|
|
|
|
+ |
+ |
+ |
+ |
+ |
+ |
+ |
|
Х |
Х |
Х |
Х |
+ |
|
|
|
|
|
|
|
JS (Перекрытий действий нет. Переход не выполняется.) –
базовый цикл латентности 11 тактов
|
|
|
|
+ |
+ |
+ |
+ |
+ |
+ |
+ |
|
Х |
Х |
Х |
+ |
|
|
|
|
|
|
|
READ – базовый цикл латентности 14 тактов
|
|
|
|
|
Х |
Х |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
|
Х |
Х |
Х |
Х |
Х |
+ |
+ |
Х |
Х |
|
|
|
|
|
INC – базовый цикл латентности 21 такта
|
|
|
|
|
X |
X |
|
|
|
|
|
X |
X |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
|
X |
X |
X |
X |
X |
|
|
X |
X |
X |
X |
X |
+ |
+ |
X |
|
|
|
|
|
|
IRET – базовый цикл латентности 12 тактов
|
|
|
|
+ |
+ |
+ |
+ |
+ |
+ |
+ |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Х |
Х |
X |
Х |
+ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Средняя латентность:
Тип команд |
Доля общего времени выполнения, коэф. |
Время выполнения |
CiXi |
ADD |
0,3 |
14 |
4,2 |
READ |
0,2 |
14 |
2,8 |
WR |
0,15 |
15 |
2,25 |
JMP |
0,07 |
11 |
0,77 |
Условный переход выполняемый |
0,08 |
12 |
0,96 |
Условный переход невыполняемый |
0,07 |
11 |
0,77 |
INC |
0,05 |
21 |
1,05 |
IRET |
0,08 |
12 |
0,96 |
Итого |
|
|
13,76 |