- •Пояснительная записка к курсовому проекту по дисциплине
- •Введение
- •1. Техническое задание
- •1.1. Область применения
- •1.2. Индивидуальное задание и литературные источники
- •1.3. Метод конвейеризации
- •1.4. Технические требования
- •1.4.1. Перечень команд
- •1.4.2. Диапазон и максимальная абсолютная погрешность данных
- •1.4.5. Способы организации ввода/вывода информации
- •1.4.6. Способ оценки производительности эвм
- •1.4.7. Требуемое значение приращения производительности эвм, которое должно быть получено в результате модификации первоначально созданной эвм
- •1.5. Способ тестирования создаваемой эвм
- •1.6. Способ взаимодействия программ пользователя с внешними устройствами
- •1.7. Задача и требования к прикладной программе, которая иллюстрирует возможности взаимодействия с внешними устройствами по вводу и выводу
- •1.8. Интерфейс Win32 api
- •2. Структура и алгоритм функционирования эвм классической модели
- •2.1. Вводные замечания
- •2.2. Функциональная модель эвм
- •2.3. Алгоритм функционирования эвм
- •2.4. Средства управления прерываниями
- •2.5. Организация виртуальной памяти
- •2.6. Оценка производительности эвм
- •3. Модификация созданной эвм
- •3.1. Возможности повышения производительности эвм
- •3.2. Организация конвейерной обработки команд
- •3.3. Расчет прироста производительности эвм
- •4. Описание тестовой задачи
- •4.1. Описание программы (исходной и объектной)
- •Моделирование процесса выполнения программы
- •5. Программирование ввода и вывода.
- •5.1. Пример использования для ввода/вывода системных функций.
- •5.2 Общие сведенья об интерфейсе Win32 api.
- •Заключение.
3. Модификация созданной эвм
3.1. Возможности повышения производительности эвм
Существуют следующие способы повышения производительности ЭВМ:
повышение тактовой частоты;
использование КЭШей;
увеличение числа параллельно работающих операционных устройств (если две команды не имеют зависимостей между собой, то их можно выполнять параллельно).
В данном случае, мы будем увеличивать производительность нашей ЭВМ, путём совмещения выполнения текущей команды с выборкой следующей.
3.2. Организация конвейерной обработки команд
t
RAM
CPU
DECODE ENDOP
ADD 21 такт EADDR EXEC
|
X |
X |
X |
X |
X |
X |
X |
|
|
|
|
|
|
X |
X |
|
|
|
|
|
X |
|
|
|
|
|
|
|
X |
X |
X |
X |
X |
X |
|
|
X |
X |
X |
X |
X |
OFETCH
WRITE 18 тактов
|
X |
X |
X |
X |
X |
X |
X |
|
|
|
|
|
|
|
X |
X |
|
X |
|
|
|
|
|
|
|
X |
X |
X |
X |
X |
X |
X |
|
|
X |
JMP17 тактов
|
X |
X |
X |
X |
X |
X |
X |
|
|
|
|
|
|
X |
X |
|
X |
|
|
|
|
|
|
|
X |
X |
X |
X |
X |
X |
|
|
X |
JZ, JO, JSусловие выполняется: 18 тактов
|
X |
X |
X |
X |
X |
X |
X |
|
|
|
|
|
|
|
X |
X |
|
X |
|
|
|
|
|
|
|
X |
X |
X |
X |
X |
X |
X |
|
|
X |
JZ, JO, JSусловие не выполняется: 11 тактов
|
X |
X |
X |
X |
X |
X |
X |
|
|
|
X |
|
|
|
|
|
|
|
X |
X |
X |
CMP20 тактов
|
X |
X |
X |
X |
X |
X |
X |
|
|
|
|
|
|
X |
X |
|
|
|
|
X |
|
|
|
|
|
|
|
X |
X |
X |
X |
X |
X |
|
|
X |
X |
X |
X |
READ21 такт
|
X |
X |
X |
X |
X |
X |
X |
|
|
|
|
|
|
X |
X |
|
|
X |
|
|
|
|
|
|
|
X |
X |
X |
X |
X |
X |
|
|
X |
X |
PUSH16 тактов
|
X |
X |
X |
X |
X |
X |
X |
|
|
|
|
|
X |
X |
|
X |
|
|
|
|
|
|
|
X |
X |
X |
X |
X |
|
|
X |
POP16 тактов
|
X |
X |
X |
X |
X |
X |
X |
|
|
|
X |
X |
|
|
|
X |
|
|
|
|
|
|
|
X |
X |
X |
|
|
X |
X |
X |
INT 28 тактов
|
X |
X |
X |
X |
X |
X |
X |
|
|
|
|
|
|
|
X |
X |
|
|
|
|
|
X |
X |
|
|
X |
|
|
|
|
|
|
|
X |
X |
X |
X |
X |
X |
X |
|
|
X |
X |
X |
X |
X |
|
|
X |
X |
Будем использовать метод выборки следующей команды во время завершения текущей, по-другому этот метод называется «метод простой предварительной выборки команды».
Пример совмещения выполнения трех команд:
|
1 |
1 |
1 |
1 |
1 |
1 |
1 |
|
|
|
|
1 |
1 |
|
|
|
1 |
1 |
2 |
2 |
2 |
2 |
2 |
2 |
2 |
1 |
|
|
|
|
|
|
|
1 |
1 |
1 |
1 |
|
|
1 |
1 |
1 |
|
2 |
1 |
1 |
1 |
1 |
1 |
|
|
Предварительная выборка
+ + + + + + + +
-
2
2
2
2
3
3
3
3
3
3
3
2
2
2
2
2
2
2
3
2
2
2
2
2
базовый цикл латентности
Латентность – это число единиц времени (тактов), разделяющих инициации.
Для обеспечения предварительной выборки нужны дополнительные действия CPU: обновить IP и передать его содержимое в RA. Обозначим знаком - изменение IP, а знаком “+” - предварительную выборку.
ADD 15 тактов
|
|
|
|
|
|
X |
X |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
X |
X |
X |
X |
X |
X |
|
+ |
X |
X |
X |
X |
X |
|
|
WRITE 16 тактов
|
|
|
|
|
|
|
X |
X |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
X |
X |
X |
X |
X |
X |
X |
|
+ |
X |
|
|
|
|
|
|
JMP 17 тактов – перекрытий нет
|
|
|
|
|
|
X |
X |
|
|
+ |
+ |
+ |
+ |
+ |
+ |
+ |
X |
X |
X |
X |
X |
X |
|
|
X |
+ |
|
|
|
|
|
|
|
JZ, JO, JS условие выполняется: 18 тактов – перекрытий нет
|
|
|
|
|
|
|
X |
X |
|
|
+ |
+ |
+ |
+ |
+ |
+ |
+ |
X |
X |
X |
X |
X |
X |
X |
|
|
X |
+ |
|
|
|
|
|
|
|
JZ, JO, JS условие не выполняется: 11 тактов – перекрытий нет
|
|
|
|
+ |
+ |
+ |
+ |
+ |
+ |
+ |
X |
X |
X |
+ |
|
|
|
|
|
|
|
CMP 15 тактов
|
|
|
|
|
|
X |
X |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
X |
X |
X |
X |
X |
X |
|
+ |
X |
X |
X |
X |
|
|
|
READ 15 такт
|
|
|
|
|
|
X |
X |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
X |
X |
X |
X |
X |
X |
|
+ |
X |
X |
|
|
|
|
|
MOVREG 11 тактов
|
|
|
|
+ |
+ |
+ |
+ |
+ |
+ |
+ |
X |
X |
X |
+ |
|
|
|
|
|
|
|
PUSH 14 тактов
|
|
|
|
|
X |
X |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
X |
X |
X |
X |
X |
|
+ |
X |
|
|
|
|
|
|
POP 12 тактов
|
|
|
X |
X |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
X |
X |
X |
|
+ |
X |
X |
X |
|
|
|
|
INT 23 такта
|
|
|
|
|
|
|
X |
X |
|
|
|
|
|
X |
X |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
X |
X |
X |
X |
X |
X |
X |
|
|
X |
X |
X |
X |
X |
|
+ |
X |
X |
|
|
|
|
|
Расчёт средней латентности:
0.34*15=5.1 (для ADD)
0.10*16=1.6 (для WRITE)
0.21*15= 3.15 (для READ)
0.06*18= 1.08 (Условный переход выполняющийся)
0.02*11= 0.22 (Условный переход не выполняющийся)
0.08*15= 1.2 (для CMP)
0.03*17= 0.51 (для JMP)
0.06*11= 0.66 (для MOVREG)
0.03*23= 0.69 (для INT)
0.04*14= 0.56 (для PUSH)
0.04*12= 0.48 (для POP)
-----------------------------------
Итого: 15.25 18.85 такта