![](/user_photo/1363_n5AgO.jpg)
- •Семестр 2. Раздел 1. Архитектура эвм
- •Тема 6. Сетевые устройства: сетевые платы, сетевое оборудование 124
- •Тема 7. Параллельные архитектуры, графические процессоры. Языки cuda и OpenCl. Квантовые вычисления, днк-компьютеры, нанопроцессоры. 132
- •Тема 1. Архитектуры эвм. Принципы фон Неймана. Конвейеры. Тактовый генератор и резонаторы. Архитектура компьютера
- •Архитектура фон Неймана
- •Принципы фон Неймана
- •Гарвардская архитектура
- •Скалярный процессор
- •Векторный процессор
- •Вычислительный конвейер
- •[Править] Пузырек
- •Генератор тактовых импульсов
- •Кварцевый резонатор
- •Тема 2. Схема цпу, регистры, шины, мосты, чипсеты, слоты расширения, порты
- •Типовые структуры операционного блока микропроцессора
- •Системная шина микропроцессора
- •Принципы построения параллельного порта
- •Принципы построения последовательного порта
- •Синхронные последовательные порты
- •Асинхронные последовательные порты
- •Принципы построения микропроцессорных таймеров
- •Чипсеты современных компьютеров
- •Компоненты южного моста
- •Тема 3. Пзу, озу и способы их организации. Ассоциативная память (кэш). Пзу
- •Статические оперативные запоминающие устройства - озу (ram)
- •Кэширование, выполняемое операционной системой
- •Алгоритм работы кэша с отложенной записью
- •Алгоритм вытеснения
- •Политика записи при кэшировании
- •Кэширование интернет-страниц
- •Кэширование результатов работы
- •Тема 4. Накопители данных: накопители на жестких магнитных дисках, накопители на гибких магнитных дисках, накопители на магнитных лентах, оптические накопители, flash-память Жёсткий диск
- •Устройство
- •Гермозона
- •Устройство позиционирования
- •Блок электроники
- •Низкоуровневое форматирование
- •Геометрия магнитного диска
- •Адресация данных
- •Технологии записи данных
- •Метод продольной записи
- •Метод перпендикулярной записи
- •Метод тепловой магнитной записи
- •Накопитель на гибких дисках
- •Конструкция
- •Оптический диск
- •[Править] Некоторые параметры оптических дисков
- •Флеш-память
- •Принцип действия[1]
- •Nor и nand приборы
- •Slc и mlc приборы
- •[Править] Аудиопамять
- •[Править] Технологические ограничения
- •[Править] Специальные файловые системы
- •[Править] nand
- •Твердотельный накопитель
- •[Править] nand ssd
- •[Править] ram ssd
- •Тема 5. Устройства ввода и вывода данных: принтеры, сканеры, факс-модемы, мыши, клавиатуры, мониторы, электронная бумага Принтер
- •[Править] Классификация
- •[Править] Матричные принтеры
- •[Править] Сравнение с другими типами
- •[Править] Струйные принтеры
- •[Править] Классификация
- •[Править] Сублимационные принтеры
- •[Править] Сравнение с другими типами
- •[Править] Лазерные принтеры
- •[Править] Сравнение с другими типами
- •[Править] Другие принтеры
- •[Править] Интернет-принтеры
- •[Править] История и принципы работы
- •[Править] Обзор современных технологий цифровой печати
- •[Править] Картридж принтера
- •[Править] Печатающая головка
- •Копировальный аппарат
- •История
- •Модуляция
- •[Править] Виды модуляции
- •[Править] Аналоговая модуляция
- •[Править] Цифровая модуляция
- •[Править] Импульсная модуляция
- •[Править] Развёртка
- •[Править] Модуляция
- •[Править] Каналы связи
- •[Править] Приём сигнала
- •[Править] Свёртка
- •[Править] Запись изображения
- •[Править] Запись информации
- •Компьютерная мышь
- •[Править]Трекболы
- •[Править]Сенсорные полоски и панели
- •Компьютерная клавиатура
- •Монитор (устройство)
- •Жк-дисплей
- •Электронная бумага
- •Тема 6. Сетевые устройства: сетевые платы, сетевое оборудование
- •Активное сетевое оборудование
- •Пассивное сетевое оборудование
- •[Править] Принцип работы
- •[Править] Таблица маршрутизации
- •[Править] Применение
- •Сетевой коммутатор
- •Сетевой концентратор
- •[Править] Упрощённое описание принципа работы
- •[Править] Характеристики сетевых концентраторов
- •Межсетевой экран
- •Другие названия
- •Разновидности сетевых экранов
- •[Править] Типичные возможности
- •Тема 7. Параллельные архитектуры, графические процессоры. Языки cuda и OpenCl. Квантовые вычисления, днк-компьютеры, нанопроцессоры. Квантовый компьютер
- •Теория [править] Кубиты
- •[Править] Вычисление
- •[Править] Алгоритмы
- •[Править] Квантовая телепортация
- •[Править] Применение квантовых компьютеров [править] Специфика применения
- •[Править] Приложения к криптографии
- •[Править] Физические реализации квантовых компьютеров
- •Транзисторы на нанотрубках
- •Графический процессор
- •Массово-параллельная архитектура
- •Многоядерный процессор
- •Hyper-threading
[Править] Пузырек
Пузырек в третьем такте обработки задерживает исполнение
Когда в выполнении по каким-либо причинам случается небольшой сбой или задержка, в конвейере получается «пузырек», в котором не происходит ничего полезного. Во втором такте обработка фиолетовой инструкции задерживается и вместо стадии расшифровки в третьем такте теперь находится пузырек. Всё, что находится «за» фиолетовой инструкцией, испытывает задержку в один такт, тогда как все, что находится «перед» фиолетовой инструкцией продолжает исполняться.
Очевидно, что наличие пузырька в конвейере дает суммарное время исполнения в 8 тактов вместо 7 на схеме исполнения, продемонстрированной выше.
Пузырьки — это как заглушки, в которых не случается ничего полезного при их прочтении, раскодировании, исполнении и записи результата. Они могут быть выражены при помощи инструкции NOP[1][2][3]ассемблера.
[править] Пример 1
Допустим, типичная инструкция для сложения двух чисел это СЛОЖИТЬ A, B, C. Эта инструкция суммирует значения, находящиеся в ячейках памяти A и B, а затем кладет результат в ячейку памяти C. В конвейерном процессоре контроллер может разбить эту операцию на последовательные задачи вида
ЗАГРУЗИТЬ A, R1
ЗАГРУЗИТЬ B, R2
СЛОЖИТЬ R1, R2, R3
ЗАПИСАТЬ R3, C
загрузить следующую инструкцию
Ячейки R1, R2 и R3 являются регистрами процессора. Значения, которые хранятся в ячейках памяти, которые мы называем A и B, загружаются (то есть копируются) в эти регистры, затем суммируются, и результат записывается в ячейку памяти C.
В данном примере конвейер состоит из трех уровней — загрузки, исполнения и записи. Эти шаги называются, очевидно, уровнями или шагами конвейера.
В бесконвейерном процессоре, только один шаг может работать в один момент времени, поэтому инструкция должна полностью закончиться прежде, чем следующая инструкция в принципе начнется. В конвейерном процессоре, все эти шаги могут выполняться одновременно на разных инструкциях. Поэтому когда первая инструкция находится на шаге исполнения, вторая инструкция будет на стадии раскодирования, а третья инструкция будет на стадии прочтения.
Конвейер не уменьшает время, которое необходимо для того, чтобы выполнить инструкцию, но зато он увеличивает объем (число) инструкций, которые могут быть выполнены одновременно и таким образом уменьшает задержку между выполненными инструкциями — увеличивая т. н. пропускную способность. Чем больше уровней имеет конвейер, тем больше инструкций могут выполняться одновременно и тем меньше задержка между завершенными инструкциями. Каждый микропроцессор, произведенный в наши дни, использует как минимум двухуровневый конвейер.
[править] Пример 2
Чтобы лучше продемонстрировать идею, давайте посмотрим на теоретический трехуровневый конвейер:
Шаг |
Описание |
Загрузка |
Прочитать инструкцию из памяти |
Исполнение |
Исполнить инструкцию |
Запись |
Записать результат в память и/или регистры |
и на псевдоассемблерный листинг, который нужно выполнить:
ЗАГРУЗИТЬ 40, A ; загрузить число 40 в A
КОПИРОВАТЬ A, B ; скопировать A в B
СЛОЖИТЬ 20, B ; добавить 20 к B
ЗАПИСАТЬ B, 0x0300 ; записать B в ячейку памяти 0x0300
Теперь как это всё будет исполняться:
Такт 1 | ||
Загрузка |
Исполнение |
Запись |
ЗАГРУЗИТЬ |
|
|
Инструкция ЗАГРУЗИТЬ читается из памяти.
Такт 2 | ||
Загрузка |
Исполнение |
Запись |
КОПИРОВАТЬ |
ЗАГРУЗИТЬ |
|
Инструкция ЗАГРУЗИТЬ выполняется, тогда как инструкция КОПИРОВАТЬ читается из памяти.
Такт 3 | ||
Загрузка |
Исполнение |
Запись |
СЛОЖИТЬ |
КОПИРОВАТЬ |
ЗАГРУЗИТЬ |
Инструкция ЗАГРУЗИТЬ находится на шаге записи результата, где её результат (то есть число 40) записывается в регистр А. В это же время, инструкция КОПИРОВАТЬ исполняется. Так как она должна скопировать содержимое регистра A в регистр B, она должна дождаться окончания инструкции ЗАГРУЗИТЬ.
Такт 4 | ||
Загрузка |
Исполнение |
Запись |
ЗАПИСАТЬ |
СЛОЖИТЬ |
СКОПИРОВАТЬ |
Загружена инструкция ЗАПИСАТЬ, тогда как инструкция СКОПИРОВАТЬ прощается с нами, а по инструкции СЛОЖИТЬ в данный момент производятся вычисления.
И так далее. Следует учитывать, что иногда инструкции будут зависеть от результатов других инструкций (например, как наша инструкция СКОПИРОВАТЬ). Когда более, чем одна инструкция ссылается на определенное место, читая его (то есть используя в качестве входного операнда) либо записывая в него (то есть используя его в качестве выходного операнда), исполнение инструкций не в порядке, который был изначально запланирован в оригинальной программе может повлечь за собой «конфликт конвейера» (англ. en:Hazard (computer architecture)) (о чем упоминалось выше). Существует несколько зарекомендовавших себя приемов для либо предотвращения конфликтов, либо их исправления, если они случились.
[править] Трудности
Множество схем включают в себя конвейеры в 7, 10 или даже 20 уровней (как, например, в Intel Pentium 4). Поздние ядра Pentium 4 с кодовыми именами «Prescott» и «Cedar Mill» (и их Pentium D-производные) имеют 31-уровневый конвейер, самый длинный среди популярных процессоров. Xelerator X10q имеет конвейер длиной более, чем в тысячу шагов[4]. Обратной стороной медали в данном случае является необходимость сбрасывать весь конвейер в случае, если ход программы изменился (например, по условному оператору). Эту проблему пытаются решать предсказатели переходов (англ. en:Branch predictor). Предсказание переходов само по себе может только усугубить ситуацию, если предсказание производится плохо. В некоторых областях применения, таких как вычисления на суперкомпьютерах, программы специально пишутся так, чтобы как можно реже использовать условные операторы, поэтому очень длинные конвейеры весьма позитивно скажутся на общей скорости вычислений, так как длинные конвейеры проектируются так, чтобы уменьшить CPI (англ. Clocks Per Instruction, количество тактов на инструкцию). Если ветвление происходит постоянно, переорганизация таким образом, чтобы те инструкции, которые, скорее всего, понадобятся, были размещены в конвейере, может значительно уменьшить потери скорости по сравнению с необходимостью каждый раз полностью сбрасывать конвейер. Программы типа gcov могут использоваться для того, чтобы определять, как часто отдельные ветки исполняются на самом деле, используя технологию, известную как анализ покрытия кода (англ. Code coverage analysis), хотя на практике подобный анализ является последней мерой при оптимизации[источник не указан 410 дней].
Высокая пропускная способность конвейеров оборачивается тормозами в случае, если в исполняемом коде содержится много условных переходов: процессор не знает, откуда читать следующую инструкцию, и поэтому вынужден ждать, когда закончится инструкция условного перехода, оставляя за ней пустой конвейер. После того, как ветка будет пройдена и станет известно, куда процессору необходимо переходить в дальнейшем, следующая инструкция должна будет пройти весь путь через конвейер перед тем, как результат становится доступным и процессор снова «работает». В крайнем случае, производительность конвейерного процессора может теоретически упасть до производительности бесконвейерного, или даже быть хуже за счет того, что будет занят только один уровень конвейера и между уровнями присутствует небольшая задержка.
Из-за конвейера процессора, код, который загружает процессор, не будет исполнен мгновенно. Из-за этого, обновления в коде, которые находятся очень близко к текущему месту исполнения программы, могут пройти незамеченными из-за того, что код уже предзагружен в en:Prefetch Input Queue. Кэш инструкций еще больше усугубляют эту проблему. Стоит учитывать, что данная проблема присутствует только в самомодифицирующихся программах, а также в упаковщиках исполняемых файлов.