
- •Тема 2. Архитектура эвм
- •1. Общие принципы построения современных эвм
- •2. Основные принципы работы современных процессоров
- •Так, в процессоре пятого поколения можно выделить следующие основные части:
- •3. Современные системные платы
- •3.1. Стандарт атх
- •3.2. Выбор материнский платы
- •4. Оперативное запоминающее устройство (озу)
- •Модули dip, simm, dimm, rimm.
- •4.1. Разновидности структуры памяти (fpm, edo, sdram, bedo, rdham)
- •5. Интерфейсы
- •6. Современные дисководы и винчестеры
- •6.1. Интерфейсы жесткого диска
- •6.2. Производительность жесткого диска
- •7. Контроллеры
- •8. Внешние устройства пэвм
- •8.1. Корпус и блок питания
- •8.2. Мониторы
- •8.3. Принтеры
- •8.4. Сканеры
- •8.5. Другие внешние устройства
- •9. Вычислительные системы
2. Основные принципы работы современных процессоров
Микропроцессор представляет собой сложное электронное устройство для выполнения различных операций. Любой процессор поддерживает определенный набор команд, которые может исполнять, и содержит набор внутренних ячеек памяти, регистров, с которыми может работать гораздо быстрее, чем с внешней памятью. Различают два типа архитектуры микропроцессоров - CISC и RISC.
CISC (Complex Instruction Set Computer) подразумевает, что процессор поддерживает очень большой набор команд (более 200) и имеет небольшое число регистров. В свою очередь, RISC-архитектура (Reduced Instruction Set Computer) означает ограниченный набор команд и большое число внутренних регистров. Споры о том, что лучше, идут до сих пор. RISC-процессоры работают быстрее, т. к. команды простые. И стоят дешевле, но программы для них занимают больше места, чем для CISC. Именно поэтому в условиях дефицита оперативной памяти первоначальное развитие процессоров для персональных компьютеров пошло в направлении CISC-архитектуры. Все процессоры, совместимые с набором команд х86, являются CISC-процессорами, хотя некоторые могут иметь элементы RISC-архитектуры. Микропроцессоры пятого поколения имеют 64-разрядную шину данных и адресов. Могут работать с 8-, 16- и 32- битными данными, поддерживают конвейерную структуру и обладают возможностью предсказывать направление переходов в программе. Процессоры, обладающие немного большими возможностями, как правило, относят к шестому поколению. Рассмотрим основные принципы работы современных процессоров.
Прежде всего, отметим, что процессор выполняет программу, которая хранится в памяти. Программа представляет собой набор команд (инструкций) и данных. Последовательно считывая команды, процессор выполняет соответствующие действия. Каждая команда представлена несколькими байтами, причем длина ее не фиксирована и может составлять от 1 до 15 байт.
Так, в процессоре пятого поколения можно выделить следующие основные части:
блок целочисленных вычислений;
блок вычислений с плавающей точкой;
кэш-память;
блок предсказания ветвлений;
интерфейс шины;
блок управления памятью.
Основная задача процессора - выполнять программу и делать это как можно быстрее. Самое простое решение - повышение тактовой частоты. Когда достигается предел, определяемый технологией изготовления, приходится искать другие способы повышения производительности. Именно набор подобных решений сделал Pentium быстрее 486-го процессора. Хотя оба работали на одной частоте.
Кэш(сасhе)-память
Кэш-память представляет собой быстродействующий буфер памяти, используемый для временного хранения данных, которые могут потребоваться процессору. Это позволяет процессору работать практически с полной скоростью без ожидания кода или данных, извлекаемых из более медленной оперативной памяти. Кэш-память реализована в виде микросхем статической оперативной памяти (SRAM), установленных на системной плате или встроенных в процессор. Такая память впервые появилась на 486-х процессорах и по сей день является одним из эффективных методов увеличения производительности ПК.
Существуют два способа организации такой памяти: разделенная, когда данные и инструкции хранятся в разных местах, и единая, когда и данные и инструкции находятся в одной памяти. Второй метод более гибкий, так как позволяет динамично распределять память между данными и кодом, зато первый проще реализовать.
В современных ПК используются два уровня кэш-памяти, получившие название кэш-памяти первого (L1) и второго (L2) уровней (в некоторых серверных процессорах, например Itanium, применяется кэш-память третьего уровня - L3).
Основная особенность кэш-памяти первого уровня состоит в том, что она всегда интегрирована с ядром процессора и работает на той же частоте.
В системах класса Pentium (P5) кэш-память второго уровня обычно устанавливается на системной плате и работает соответственно с ее тактовой частотой. Intel значительно повысила производительность процессоров, переместив кэш-память с системной платы непосредственно в процессор, что повлекло за собой увеличение ее рабочей частоты до частоты процессора. Более современные процессоры содержат встроенную кэш-память второго уровня, которая работает на той же скорости, что и ядро процессора, причем скорости кэш-памяти первого и второго уровней одинаковы.
Конвейер
Прежде чем выполнить команду, процессор должен:
1) прочитать из памяти часть программы;
2) определить длину инструкции;
3) определить адрес ячейки памяти, если она используется в данной команде;
4) выполнить команду;
5) сохранить результат.
Как в любом конвейерном производстве, вся последовательность действий разбивается на этапы: выборка, декодирование, определение адреса, выполнение и сохранение. Как только очередная инструкция переходит на следующий этап, начинает выполняться новая.
Подобное решение резко повышало производительность и применялось еще в 486-х микропроцессорах. В Pentium впервые был применен двойной конвейер: команды могут исполняться параллельно, до двух за один такт. Практически все инструкции могут выполняться параллельно, за исключением операций с плавающей точкой и команд переходов. Общий прирост производительности при использовании второго конвейера составляет 15-20%. Понятия "суперскалярный" и "суперконвейерный" означает наличие более двух конвейеров и более пяти этапов в конвейере соответственно.
Внеочередное исполнение
С введением второго конвейера возникла проблема "зависимости данных".
Если последующая инструкция выполняется быстрее, чем предыдущая в параллельном конвейере, то она может закончиться раньше, нарушив очередность выполнения. Тем не менее, в некоторых процессорах возможно внеочередное выполнение инструкций. При этом результат заносится в буфер, из которого данные выходят уже в порядке очередности.
Снятие зависимости данных
Возможны ситуации, когда выполнение очередной команды зависит от результата предыдущей. В этом случае выполнение такой команды останавливается до тех пор, пока не будет получен требуемый результат, что снижает общую производительность. Различают два типа зависимостей:
1) запись после чтения: первая команда читает данные из регистра или памяти, вторая - ищет в этот же регистр или ячейку памяти. Очевидно, что, прежде чем производить запись, необходимо дождаться, пока будет выполнено чтение;
2) чтение после записи: обратная ситуация, когда до операции чтения необходимо дождаться выполнения записи.
Существует несколько методов уменьшения влияния зависимости данных на производительность. Это переименование регистров (register renaming), одновременное использование одних данных в обоих конвейерах (data forwarding) и запоминание промежуточных результатов для дальнейшего использования (data bypassing). Сразу отметим, что данные методы реализованы в разных процессорах по-разному, а в некоторых не применены совсем.
Одновременное использование данных и сохранение промежуточных результатов
Полное снятие зависимости второго типа невозможно, можно только уменьшить "простаивание" второго конвейера. Первый метод - одновременное использование данных (data forwarding). Например, если первая инструкция выполняет какую-либо операцию, читая данные из памяти или регистра, а вторая использует эти данные, то процессор выполняет операцию чтения и результат посылает одновременно на оба конвейера (operad forwarding). Возможна и другая ситуация: первая инструкция выполняет операцию, результат которой записывается в память или регистр, после чего этот результат используется второй командой также для записи куда-либо. В этом случае полученный результат используется одновременно в двух конвейерах (result forwarding). Кроме этих методов снятия зависимости данных, существует еще один - запоминание промежуточного результата для дальнейшего использования (data bypassing). Если первая инструкция сохраняет результат в памяти, а вторая использует эту же ячейку памяти, то результат передается сразу на второй конвейер, что позволяет избежать операции чтения из памяти. Таким образом, путем комбинации описанных выше методов при возникновении зависимости данных вынужденное простаивание конвейера можно свести к минимуму.
Контроль ветвлений программы
Если в программе встречается условный или безусловный переход, то после декодирования инструкции перехода и получения адреса процессор начинает считывать данные с нового адреса. Ясно, что до получения этого адреса конвейер простаивает. Подобная ситуация происходит достаточно часто, поэтому для снижения "негативных" последствий ветвлений программы все переходы, встречающиеся в программе, запоминаются в специальном буфере адресов переходов (branch target buffer). При выполнении инструкции перехода процессор проверяет наличие адреса в буфере и начинает чтение программы с этого адреса. В случае безусловного перехода создается таблица "истории" переходов, исходя из которой процессор решает, будет произведен переход или нет, и начинает выполнение инструкций с предсказанного адреса - так называемое опережающее исполнение (speculative execution), Понятно, что если адрес предсказан неправильно, то все выполнение прекращается, конвейер очищается и начинается исполнение с правильного адреса. Поэтому весьма важно, чтобы вероятность правильного прогноза была наиболее высокой. В современных процессорах она лежит в пределах 80-90%.
Блок вычислений с плавающей точкой FPU (Floating Point Unit)
Данный блок обеспечивает выполнение операций с плавающей точкой и мультимедийных операций ММХ. Как правило, такие операции могут исполняться только в одном конвейере. На производительность блока FPU в последнее время стали обращать внимание из-за появления множества приложений, написанных для команд ММХ или для работы с трехмерной графикой, не говоря уже о чисто вычислительных задачах. Именно оптимизация этого блока является сейчас основной задачей многих производителей, и в будущем появятся процессоры со значительно улучшенным блоком FPU. Пока существует один критерий: чем больше частота процессора, тем лучше он работает с плавающей точкой и ММХ. Например, достаточно высокой производительностью обладают процессоры Athlon и Pentium IV (благодаря высокой частоте кэш-памяти второго уровня).
Являясь очень сложными устройствами, современные процессоры имеют возможности настройки своих параметров. Например, в процессорах Pentium можно отключать второй конвейер или блок предсказания ветвлений, что позволяет оценить прирост производительности, обеспечиваемый этими элементами ядра процессора. Кроме того, практически все процессоры имеют свою так называемую визитную карточку - специальную инструкцию, которая помогает однозначно идентифицировать процессор. Данная инструкция называется CPUID и выдает имя фирмы разработчика, тип семейств, модель и версию процессора, а также показывает его основные свойства, в частности наличие блока FPU или ММХ.
Несколько слов о ММХ. В архитектуре процессоров MMX есть два основных усовершенствования. Первое, фундаментальное, состоит в том, что все микросхемы MMX имеют больший внутренний встроенный кэш, чем их собратья, не использующие эту технологию. Это повышает эффективность выполнения каждой программы и всего программного обеспечения независимо от того, использует ли оно фактически команды MMX.
Другим усовершенствованием MMX является расширение набора команд процессора 57 новыми командами, а также введение новой возможности выполнения команд, называемой одиночный поток команд - множественный поток данных (Single Instruction - Multiple Data, SIMD). В современных мультимедийных и сетевых приложениях часто используются циклы; хотя они занимают около 10% (или даже меньше) объема полного кода приложения, на их выполнение может уйти до 90% общего времени выполнения. SIMD позволяет одной команде осуществлять одну и ту же операцию над несколькими данными, подобно тому как преподаватель, читая лекцию, обращается ко всей аудитории, а не к каждому студенту в отдельности. Технология SIMD позволяет ускорить выполнение циклов при обработке графических, анимационных, видео и аудиофайлов; в противном случае эти циклы отнимали бы время у процессора.
Не стоит думать, что, как только вы купите такой процессор, все ваши программы, в той или иной мере работающие с графикой или звуком, станут работать быстрее. Проблема в том, что необходимо специальное программное обеспечение, которое использует эти команды. Сегодня для ускорения мультимедиа гораздо более эффективны (чем ММХ) 3DNow и SSE.
Технологии SSE, SSE2, SSE3
В феврале 1999 года Intel представила общественности процессор Pentium III, содержащий обновление технологии MMX, получившей название SSE (Streaming SIMD Extensions - поточные расширения SIMD). Инструкции SSE содержат 70 новых команд для работы с графикой и звуком в дополнение к существующим командам MMX. SSE позволяют выполнять операции с плавающей запятой, реализуемые в отдельном модуле процессора. В технологиях MMX для этого использовалось стандартное устройство с плавающей запятой.
Инструкции SSE2, содержащие 144 дополнительные команды SIMD, были представлены в ноябре 2000 года вместе с процессором Pentium 4. В SSE2 были включены все инструкции предыдущих наборов MMX и SSE.
Инструкции SSE3 были представлены в феврале 2004 года вместе с процессором Pentium4 Prescott; они добавляют 13 команд SIMD, предназначенных для ускорения выполнения сложных математических операций, обработки графики, кодирования видео и синхронизации потоков данных. Инструкции SSE3 также содержат все инструкции MMX, SSE и SSE2.
Обратите внимание: наилучшие результаты применения новых инструкций процессора обеспечиваются только при их поддержке на уровне используемых приложений. Сегодня большинство компаний, занимающихся разработкой программного обеспечения, модифицировали приложения, связанные с обработкой графики и звука, что позволило в более полной мере использовать возможности SSE. Например, графическое приложение Adobe Photoshop поддерживает инструкции SSE, что значительно повышает эффективность использования оснащенных SSE процессоров.
Технология Hyper Threading
Такие операционные системы, как Windows NT 4.0/2000/XP Professional/2003 Server и Linux, в полной мере поддерживают компьютеры с двумя или более установленными физическими процессорами, дающими подобным системам большой прирост производительности по сравнению с однопроцессорными компьютерами. Тем не менее двухпроцессорные компьютеры и системные платы всегда были на порядок дороже их однопроцессорных “сородичей”, а добавление второго процессора в поддерживающую подобную модернизацию систему приводило к возникновению различных сложностей, связанных с подбором одинаковой тактовой частоты и конфигурационных параметров для двух процессоров. Технология Hyper Threading (HT) компании Intel позволяет одному процессору одновременно обрабатывать два независимых потока команд. Другими словами, HT превращает один физический процессор в два виртуальных.
Поддерживающий HT процессор имеет два набора общих регистров, регистры управления и другие системные компоненты. В то же время логические процессоры совместно используют кэш-память, вычислительные блоки и шины данных/ввода-вывода. При выполнении программ каждый логический процессор обрабатывает один поток.
Быстродействие системы с процессором HT меньше быстродействия систем c двумя физическими процессорами. Однако выполнение нескольких приложений или одного многопоточного приложения в системе с процессором HT демонстрирует прирост производительности примерно на 25% по сравнению с обычным однопроцессорным компьютером.