Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Arkhitektura_IS.doc
Скачиваний:
9
Добавлен:
15.05.2015
Размер:
406.53 Кб
Скачать
  1. Предсказание условных переходов с последующим декодированием команд, находящихся в предсказанной ветви (branch prediction).

В случае условного перехода продолжается выборка и декодирование команд, не дожидаясь проверки самого условия, по одной из возможных ветвей. Различают статическое предсказание и динамическое. Статическое работает по схеме, заложенной в процессор. Например, процессор считает, что условный переход назад более вероятен, чем вперед (для циклов с многочисленным числом повторений это наиболее эффективно). Динамическое предсказание опирается на предысторию вычислительного процесса – по мере выполнения программы для каждого ее условного перехода накапливается статистика поведения. Куда чаще всего передавалось управление на каждом конкретном условном переходе, инструкции той ветви и декодируются заранее (до проверки условия). Возникает идея выполнять обе ветви перехода сразу, однако пока это очень сложно организовать даже в двуядерных процессорах.

2. Спекулятивное исполнение (speculative execution). Идея идет дальше – инструкции предсказанной ветви не только декодируются, но и исполняются до проверки условия перехода. Если предсказание сбывается, то работа оказывается не напрасной. Если же предсказание не сбывается – то приходится выполнять совсем другие инструкции.

Эти два метода призваны решать первую проблему – проблему условных переходов.

Другая проблема зависимости данных может решаться исполнением с изменением последовательности инструкции (out-of-order execution)

К примеру, имеется следующая последовательность команд:

1) A = B + C

2) K = A + M

3) Z = X + Y

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

1) A = B + С

2) Z = X + Y

3) K = A + M

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

Кэширование памяти

Общие принципы

По статистике, каждая третья операция в программе – это операция с памятью. Мы с вами говорили о том, что динамическая память, используемая в качестве основной памяти, работает по сравнению с процессором медленно. Обращение к ней приводит к простою процессора – появляются такты ожидания. Для ускорения работы с памятью используется специальный буфер между регистрами процессора и основной памятью, называемый кэш-памятью или просто КЭШем. Эффективность кэш-памяти опирается на характерную особенность программного обеспечения, заключающуюся в том, что в короткие промежутки времени преимущественно, используются одни и те же данные, либо данные, имеющие близкие адреса. Поэтому в кэш-память заносятся данные, к которым происходило обращение, а также данные из соседних ячеек.

При каждом обращении к памяти контроллер кэш-памяти проверяет, есть ли копия затребованных данных в КЭШе. Если есть, то это случай кэш-попадания. Данные берутся из кэш-памяти и обращения к основной памяти не происходит. Если копии нет, то это случай кэш-промаха и данные приходится брать из основной памяти. При этом блок данных, считанный из основной памяти, по определенным правилам заместит один из блоков КЭШа. От качества алгоритма замещения зависит процент попаданий – один из основных параметров быстродействия кэш-памяти. Другим важным параметром является время поиска в кэш-памяти нужных данных. Обращение к основной памяти может осуществляться одновременно с поиском в КЭШе. В случае промаха это сэкономит такты процессора. Однако это увеличивает энергопотребление.

Обычно применяется двухуровневая схема кэширования. Первый уровень КЭШа, так называемый L1, является внутренним, то есть всегда расположен на процессорном кристалле. Объем его не велик (порядка 8-128 Кб). В Гарвардской архитектуре кэш для данных и команд физически разделен. В принстонской архитектуре – для данных и команд общий кэш. Вторичный кэш подключается, как правило, к специальной процессорной шине, работающей на частоте, близкой к тактовой частоте процессора.

Кэш логически представляет собой набор строк фиксированной длины. С каждой строкой связана некоторая служебная информация – адрес содержащегося в ней в текущий момент блока основной памяти, и ее состояние (действительная или нет). Эта служебная информация называется тегом (tag).

Запись блока памяти, который не присутствует в КЭШе, осуществляется прямо в основную память. Если же данный блок присутствует в КЭШе, то возможны два варианта записи:

  1. Сквозная запись. Информация одновременно записывается как в основную память, так и в КЭШ. Достоинства: процесс записи не может нарушить действительность данных в КЭШе, простота алгоритма. Недостаток: при каждой операции записи происходит обращение к основной памяти, даже если требуется записать всего один байт.

  2. Обратная запись. Сначала происходит запись в кэш. При этом соответствующая строка КЭШа помечается как модифицированная, то есть требующая выгрузки в основную память. И только после выгрузки в эту строку можно помещать другие данные, иначе мы потеряем невыгруженные данные. В основную память данные переписываются только целой строкой. При этом контроллер может откладывать выгрузку, и производит ее в наиболее благоприятный момент, либо когда к основной памяти пришел запрос этих ячеек памяти от других устройств компьютера (графических адаптеров, контроллеров дисков, сетевых карт и т.п.). Этот алгоритм уменьшает количество операций записи в основную память. Однако его реализация требует дополнительных аппаратных ресурсов.

В зависимости от организации соответствия строки КЭШа и области основной памяти различают три архитектуры кэш-памяти: кэш прямого отображения, наборно (или частично) ассоциативный кэш и полностью ассоциативный кэш.

Кэш прямого отображения

В каждой строке КЭШа может отображаться только определенный набор блоков основной памяти. Основная память условно разбивается на страницы, каждая из которых равна размеру КЭШа, например, 256 Кбайт. Кэш-память и основная память делятся на строки, если размер строки КЭШа 32 байта, то тогда в нашем примере на 8К строк (по 32 байта каждая). Каждая строка КЭШа может отображать из любой страницы кэшируемой памяти только соответствующую ей строку. То есть на каждую строку КЭШа могут претендовать множество блоков основной памяти с одинаковой младшей частью адреса (смещением внутри страницы). Тогда в теге каждой строки кэш-памяти достаточно хранить лишь номер страницы в основной памяти. Также в теге хранятся признаки действительности и модифицированности данных. Таким образом, каждой строке основной памяти соответствует единственная строка КЭШа.

При появлении запроса на считывание данных из памяти, контроллер памяти сначала проверяет, есть ли соответствующие данные в КЭШе. Для этого достаточно по младшей части адреса требуемой ячейки найти соответствующую ей строку КЭШа и сравнить содержимое ее тэга со старшей частью адреса требуемой ячейки, а также проверить содержимое флага действительности. То есть поиск осуществляется достаточно быстро, за счет того, что по адресу ячейки сразу ясно в какой строке она КЭШа она может отображаться. В случае промаха после считывания из основной памяти новые данные помещаются в соответствующую строку КЭШа (если она немодифицированная). Если реализовано упреждающее считывание, то в последующие свободные циклы шины данных обновляется следующая строка (если и она чистая, то есть немодифицированная). Независимо от объема затребованных данных, строка в КЭШе переписывается целиком, так как признак действительности относится к строке в целом. Возможен секторированный вариант КЭШа, когда каждый сектор в строке имеет свой признак действительности, и возможно частичное изменение строки.

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

Объем кэшируемой памяти определяется как размером кэш-памяти, так и разрядностью тега.

Наборно-ассоциативный и ассоциативный кэш

В наборно-ассоциативной архитектуре каждая строка основной памяти может отображаться на одну из нескольких строк КЭШа. В полностью ассоциативном КЭШе – на любую строку КЭШа. Ассоциативность КЭШа снижает вероятность конфликтных ситуаций, когда все используемые для данного блока основной памяти строки кэш-памяти заняты другими блоками. Однако при этом усложняются алгоритмы поиска нужной ячейки в кэш-памяти, ведь прямой перебор тэгов всех строк здесь неприменим. Остается только параллельный анализ всех строк, что является сложной аппаратной задачей, эта сложность существенно увеличивается с увеличением объема кэш-памяти. Поэтому полностью ассоциативным удается сделать только первичный кэш.

Микроархитектурные особенности процессоров

Процессоры x86

Первое поколение

К нему относятся процессоры 8086 и 8088 и сопроцессор 8087.

МП 8086 по определению фирмы Intel является носителем базовой архитектуры x86. Выпущен в 1979г. Все современные МП семейства x86 совместимы с ним. Так называемый реальный режим работы современных процессоров x86 эмулирует работу именно процессора 8086. Имеется набор неравноправных 16-битных регистров, сегментная система адресации памяти, которая позволяет адресовать лишь 1Мбайт (разрядность адресной шины 20 бит). Имеется базовая конвейеризация – пока выполняется текущая инструкция, блок предварительной выборки выбирает из памяти следующую. Размер инструкции 1-6 байта. В однобайтовой инструкции либо весь байт является кодом операции, либо вместе с кодом операции содержит номер регистра, в котором должен находится операнд.

Среднее время выполнения одной инструкции – 12 тактов. Тактовая частота – 4.77 или 8 МГц.

Второе поколение

Процессор 80286 с сопроцессором 80287

Появился защищенный режим, и вместе с ним виртуальная память (до 1 Гбайт), пространство адресуемой памяти увеличилось до 16 Мбайт (разрядность адресной шины увеличена до 24 бит). Более усовершенствован конвейер. Регистры, в которых хранятся очереди команд, имеют общий размер 6 байт. На выполнение инструкций в среднем тратилось 4.5 такта. Естественно, увеличились тактовые частоты – 8-20 МГц. Появились дополнительные инструкции.

Третье поколение

Процессор 80386 (80387)

Осуществлен переход к архитектуре IA-32 (IA-16, конечно, тоже осталась). Разрядность шины данных увеличена до 32-бит. Появилась возможность работать с 32-разрядными данными. Для этого почти все программно-доступные регистры были расширены (EAX, EBX и т.д.) Объем адресуемой и виртуальной памяти также увеличился (до 4Гбайт и 64Тбайт соответственно). То есть разрядность адресной шины увеличена до 32 бит. Защищенный режим был усовершенствован (в частности, добавлен режим виртуальных машин), это привело к появлению многозадачности. Существенных изменений в плане организации выполнения инструкций не произошло, однако частоты выросли до 16-50 МГц.

Четвертое поколение

Процессор 80486

Архитектурная модель (то есть программно-видимая модель) не изменилась, однако на микроархитектурном уровне произошли значительные изменения. Во-первых, значительно усложнен конвейер. Каждая CISC-операция, задаваемая программистом, разбивается на микрооперации, которые выполняет RISC-ядро. При полной загрузке конвейер способен выдавать каждые два такта по одной выполненной инструкции, однако каждая инструкция теперь проходит весь конвейер за большее количество тактов, однако при полной загрузке конвейера это уже не важно. Производительность конвейера существенно оторвалась от скорости доставки инструкций из оперативной памяти, поэтому был введен прямо в процессор быстродействующий кэш первого уровня объемом 8 Кбайт. Тактовая частота увеличена до 25-100 МГц. От внешнего сопроцессора отказались. Теперь если он есть, то обязательно в самом процессоре, или его нет вообще.

Пятое поколение

Процессоры Pentium и K5

Появилась суперскалярная микроархитектура. Конвейерная система имеет пять стадий: предварительная выборка команд, декодирование, вычисление адресов операндов, выполнение операции, запись результатов. Первые две стадии выполняются на общем конвейере, следующие стадии могут выполняться на двух конвейерах АЛУ-V и АЛУ-U. АЛУ-U аналогичен АЛУ процессора 80486. АЛУ-У лишен некоторых внутренних регистров. Теоретически получается возможным с двумя конвейерами выпускать за каждый такт две инструкции (по одной с каждого конвейера), но на практике получается лишь одна инструкция на выходе за такт. Так как не все инструкции могут выполняться парно. Эффективность работы конвейера сильно зависит от программного кода. Имеется блок предсказания ветвлений. Для ускорения снабжения конвейеров данными и инструкциями шина данных расширена до 64 бит. Однако максимальная разрядность данных осталась 32 бита. Кэш-память имеет гарвардскую архитектуру, то есть кэш данных и инструкций разделены (каждый по 8 Кбайт).

В последних моделях поколения появилось расширение инструкций MMX. Представляющей собой набор SIMD-команд – то есть одна и та же операция выполняется одновременно над несколькими комплектами операндов.

Шестое поколение

Процессоры Pentium Pro, Pentium II, Pentium III, Celeron и Xeon.

Введено исполнение с изменением последовательности инструкций. То есть исполнение программы не в том порядке, который задал программист. Логика работы следующая: имеются три основных устройства: выборки-декодирования, диспетчеризации-выполнения и отката. Все эти устройства связаны пулом команд, в котором хранятся микроинструкции. Блок выборки-декодирования выбирает из памяти (или КЭШа команд) исходные CISC-инструкции, декодирует их, расщепляя на микрооперации и превращая их в последовательность коротких RISC-инструкций внутренней кодировки. Внутренних, физических регистров процессора стало много больше, чем программно-видимых, появилась возможность переенования внутренних регистров. То есть внутренние регистры стали универсальными и могли быть любым из программно-видимых регистров.

Устройство диспетчеризации-выполнения выбирает эти RISC-инструкции из пула команд, определяет порядок их выполнения так, чтобы максимально загрузить исполнительные устройства, то есть добиться максимального распараллеливания.

Однако последовательность результатов выполненных команд должна соответствовать порядку, задаваемому программистом (иначе процессор не сможет адекватно выполнять заложенную программистом программу). Устройство отката как раз этим и занимается: упорядочивает результаты выполнения RISC-инструкций и изымает выполненные инструкции из пула. Кроме того, он реагирует на прерывания и промахи в предсказывании переходов. При предсказании переходов используется спекулятивное исполнение, то есть инструкции предсказанной ветви не только декодируются, но и исполняются. Тогда действительно надо «откатываться»: результаты выполнения команд ложной ветви должны быть ликвидированы. Ситуация усложняется, когда в этой ложной ветви были операции записи данных в память. В этом случае для отката при записи необходимо сохранять переписываемую информацию. Все эти архитектурные особенности позволили каждый такт получать в среднем по две выполненные инструкции (опять же, при полной загрузке конвейера). Но чтобы загрузить конвейер, нужно достаточно быстро доставлять инструкции из памяти к процессору. Узким местом в этом случае является системная шина, которая работает на частоте, гораздо меньшей, тактовой частоте процессора. Для решения этой проблемы Intel стал использовать двойную независимую шину. Одна шина – FSB – связывает процессор с системной платой где находится оперативная память, а другая BSB, с вторичным КЭШем, работающая, как правило, на частоте ядра процессора (или вдвое меньшей частоте). Тогда как частота FSB не превышала 133 МГц. Разрядность BSB от 8-32 байт. FSB при этом имеет протокол, отличающийся от протокола системной шины процессора Pentium. Новый протокол системной шины позволял подключать к ней до 4 процессоров, что упростило использования этих процессоров в масштабируемых кластерах.

Процессоры этого поколения фирмы AMD (K-6) использовали старую шину. Появился новый набор инструкций – SSE и 3DNow!. В основном, эти наборы содержат инструкции для реализации SIMD-инструкций на числах с плавающей запятой. Появилась инструкции загрузки данных в кэш и записи в память, минуя кэш. То есть кэш перестал на программном уровне быть полностью прозрачным.

Зародилось сегментирование процессоров на рынке. Intel разработал облегченный дешевый вариант Pentium II – Celeron. Он вначале вообще не имел КЭШа второго уровня, но потом получил облегченный вторичный кэш в 128 Кб, но зато на полной тактовой частоте процессора, тогда как более большой кэш (512 Кбайт) Pentium II работал на половине тактовой частоты процессора. Поэтому в некоторых типичных задачах (например, в игровых приложениях) Celeron даже обгонял Pentium II на аналогичных частотах. Отсюда он получил широкую популярность. Вариант процессора Pentium III Xeon являлся продолжением линии Pentium Pro. Он имеет от 256-2 Мб полноскоростного вторичного КЭШа и позиционируется как серверный вариант.

Pentium II имел частоты от 233-600 МГц, Pentium III 500-1000 МГц.

Микроархитектура NetBurst

Применяется в процессорах Pentium 4.

Конвейер состоит из трех частей:

  1. Устройство предварительной обработки инструкций в порядке их следования в программном коде. Результатом его работы является последовательность микроопераций.

  2. Исполнительное ядро, которое исполняет микрооперации в удобном для него порядке.

  3. Блок упорядоченного завершения, отражающий результаты выполнения операции в изменениях состояния внешней памяти и портов.

Реализована гиперконвейерная архитектура. Число ступеней конвейера 20-30. У Pentium III (10-12 ступеней), а у Pentium всего 5. Удлинение конвейера позволяет упростить микрооперации, а упрощенная логика работает быстрее – более короткая цепочка логических элементов вносит меньшие задержки распространения сигнала. Это позволяет повысить тактовую частоту. Однако длинный конвейер увеличивает накладные расходы при его остановках. Поэтому применяются все рассмотренные технологии снижения простоя конвейера.

Вместо первичного КЭШа инструкций используется кэш трассы (12 Кбайт) хранятся уже декодированные инструкции. Это позволяет экономить время на декодирование, однако организация такого КЭШа значительно сложнее. Кэш трасс тесно связан с устройством предварительной выборки. Для предсказания ветвлений используется статический и динамический метод. Статический метод заключается в том, что считается, что условные переходы назад, скорее всего, сбудутся (это типовой цикл), а вперед – не сбудутся. Для динамического предсказания используется специальный буфер (4К), который накапливает статистику инструкций ветвлений. Можно даже программно «намекнуть» процессору куда, скорее всего, пойдет вычислительный процесс. Для этого введена пара новых префиксов, которые можно использовать в командах условных переходов.

Диспетчер выполнения может за один такт поместить до 6 инструкций в исполняющие блоки. При этом каждый исполняющий блок может быть помещено до 3 инструкций. Выполнение микроопераций может стартовать сразу же, как только появятся необходимые операнды. Блок завершения позволяет за каждый такт завершать до трех операций. Что, с учетом роста тактовой частоты, существенно увеличивает производительность. Весь этот комплекс мер, повышающих количество операций за такт, называется Advanced Dynamic Execution.

Таким образом, микроархитектура NetBurst особенно эффективна на приложениях с линейным или циклическим кодом. Это, как правило, потоковые приложения (обработка видеоинформации в реальном времени, трехмерная визуализация, распознавание речи, Интернет- телефония). На непредсказуемо ветвящихся программах (таких как офисные приложения), гиперконвейерная архитектура не так эффективна.

В некоторых моделях реализована технология HT (Hyper Threading) – многопотоковое исполнение программ. Которое уже соответствует MIMD архитектуре. То есть операционная система видит два процессора, вместо реального одного. Основная идея заключается в следующем. При многоконвейерной архитектуре несмотря на все ухищрения, часть аппаратных ресурсов все равно простаивает. Так вот идея заключается в том, чтобы использовать эти простаивающие ресурсы для выполнения другой программы. Архитектурно процессоры, поддерживающие HT имеют дополнительную группу регистров и дополнительные ресурсы по организацию прерываний для разных логических процессоров. Кроме того, требуется поддержка ОС. Использование четырехкратного увеличения пакета передачи, позволило передавать по 200 FSB.

Начиная с 2004 года Intel ввела новую трехзначную маркировку своих процессоров.

Базовая микроархитектура МП отображается старшим разрядом:

3ХХ – процессоры Celeron

5XX – для настольных и мобильных ПК

7ХХ – для процессоров Pentium M с низким и сверхнизким потреблением.

В настоящий момент эта система дополнилась:

Появились серии 4xx, 6xx, двухядерные процессоры Pentium D и Pentium XE.

Последние версии процессоров семейства x86, стали, по-сути, 64-битными. Эту архитектуру часто называют x86-64. В ней все регистры общего назначения расширены до 64-битных (RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSP), регистры указателя инструкций также 64-битный (RIP), соответственно, появились новые инструкции для работы с этими регистрами. Многократно увеличилось количество адресуемой и виртуальной памяти. Первыми эту архитектуру стали поддерживать процессоры фирмы AMD – Athlon 64. Сама AMD назвала эту архитектуру AMD64. Впоследствии фирма Intel выпустила процессоры с этой архитектурой, называв ее EM64T. Фирма Microsoft называет эту архитектуру x64. Естественно, для того, чтобы новая архитектура эффективно работала, необходимо писать для нее специальное программное обеспечение, которое уже не будет работать на процессорах, не поддерживающих x86-64..

К настоящему времени эту архитектуру поддерживают следующие процессоры:

AMD K8:

AMD Athlon 64

AMD Athlon 64 X2

AMD Athlon 64 FX

AMD Opteron

AMD Turion 64

AMD Sempron ("Palermo" E6 stepping and all "Manila" models)

Intel NetBurst (EM64T)

Intel Xeon (some models since "Nocona")

Intel Celeron D (some models since "Prescott")

Intel Pentium 4 (some models since "Prescott")

Intel Pentium D

Intel Pentium Extreme Edition

Intel Core microarchitecture (EM64T)

Intel Xeon ("Woodcrest")

Intel Core 2

Микроархитектура Intel Core

Гиперконвейерная технология в конце своего развития столкнулась с рядом проблем. Важнейшими из которых являются проблема тепловыделения и проблема остановки роста тактовых частот. Фирма Intel имела довольно успешный опыт в технологиях, направленных на решение проблемы тепловыделения, реализованных в процессорах для мобильных ПК Pentium-M. омимо этого, вносимые технологические доработки в микроархитектуру МП приводили к реальному повышению быстродействия на прикладных программах лишь тогда, когда производители ПО учитывали микроахитектурные особенности МП при разработке этих прикладных программ. Однако, по экономическим соображениям, сложившимся на рынке, производители ПО делали это не очень охотно. Все это привело к тому, что основным способом эффективного повышения производительности МП стало расширение суперскалярной технологии, но конвейеры должны были стать как можно более независимыми, чтобы иметь возможность эффективно распараллеливать вычислительный процесс. То есть, по-сути, наметилась тенденция к увеличению количества ядер процессора, переход к SIMD или даже MIMD архитектуре.

Характерные особенности:

1. Многоядерность;

2. Intel Advanced Smart Cache.

Физически общий для всех ядер L2 кэш, с возможностью динамического перераспределения его использования в зависимости от выполняемых задач, что, во-первых, выгоднее с энергетической точки зрения, чем раздельный кэш. Во-вторых, решается проблема, когда КЭШу одного ядра не хватает места, в то время как кэш другого ядра практически свободен.

Индивидуальный L1 кэш для каждого ядра, но с возможностью прямого доступа к L1 кэшу соседнего ядра;

3. Длинна конвейера составляет 14 стадий (12 у Pentium III 20-30 у Pentium 4).

4. Модернизирован ряд технологий, направленных на увеличение количества выполняемых за такт инструкций. Все эти технологии объединяются под общим названием Intel Wide Dynamic Execution.

Среди них:

- количество одновременно обрабатываемых инструкций каждым исполнительным блоком увеличено до 4-х;

- технология макрослияния (Macro-Fusion). Набор CISC-инструкций, задаваемых программистом (например пара инструкций CMP и JMP), теперь может рассматриваться как одна микро-инструкция, эта одна микроинструкция выполняется быстрее.

5. Комплекс мер, направленных на энергосбережение - Intel Intelligent Power Capability.

Представляет из себя схемотехнические новшества, позволяющие динамически (достаточно быстро) включать и отключать неиспользуемые блоки, без снижения общей производительности системы.

Архитектура IA-64 (не путать с 64-битной x86-64)

Процессоры Intel Itanium, Itanium 2.

Разработана совместно компаниями Intel и HP. Имеет VLIW (Very Long Instruction Word) архитектуру (некий компромисс между CISC и RISC). Основная идея – все принципы повышения производительности, отмеченные выше, реализуются не аппаратно (увеличение сложности логики), а программно, с помощью компиляторов. Программист пишет инструкции с помощью команд x86 (или более высокоуровневого программирования), эти инструкции с помощью специального программного обеспечения низкого уровня транслируются в длинные слова регулярной структуры длиной 128 бит (по три инструкции x86 в одно 128 битое слово), которые и исполняются процессорным ядром.

Каждая длинная команда содержит шаблон (template) длиной в несколько бит, помещаемый в него компилятором, который указывает процессору, какие из команд могут выполняться параллельно. То есть процессору не нужно анализировать поток команд в процессе выполнения для выявления "скрытого параллелизма" (что существенно упрощает его аппаратную реализацию). Определение наличия параллелизма возлагается на компилятор, который и помещает эту информацию в код программы. Каждая команда содержит три 7-битных поля регистра общего назначения (РОН). 128 РОН.

Для устранения негативного влияния условных переходов компиляторы используют технологию "отмеченных команд" (predication). Когда процессор встречает "отмеченное" ветвление, он начинает одновременно выполнять все ветви. После того, как будет определена "истинная" ветвь, процессор сохраняет необходимые результаты и сбрасывает остальные.

Компиляторы для IA-64 будут также просматривать исходный код с целью поиска команд, использующих данные из памяти. Найдя такую команду, они будут добавлять пару команд - команду предварительной загрузки (speculative loading) и проверки загрузки (speculative check). Во время выполнения программы первая из команд загружает данные в память до того, как они понадобятся программе. Вторая команда проверяет, успешно ли произошла загрузка, перед тем, как разрешить программе использовать эти данные. Предварительная загрузка позволяет уменьшить потери производительности из-за задержек при доступе к памяти, а также повысить параллелизм.

Российская разработка – процессор Эльбрус Е2К, выполненная под руководством члена-корреспондента РАН Б.А.Бабаяна, тоже имело VLIW архитектуру.

Процессоры RISC архитектуры

Семейство PowerPC

Первый процессор Power 601 разработан альянсом фирм IBM/Apple/Motorola в 1993 г. Особенности:

32-рярядный, шина адреса тоже 32 разрядная (до 4 ГБ адресуемой памяти), шина данных – 64 разрядная. Тактовая частота – 50, 66 и 80 МГц. Все команды имеют один формат (трехоперандный). В RISC архитектуре данные в исполнительные блоки могут загружаться только из регистров, поэтому способов адресации не много. Инструкции разделены на два типа: команды обмена данными между регистрами и памятью и команды выполнения арифметических действий. Имеются три исполнительных устройства: целочисленное (IU), обработки чисел с плавающей запятой (FPU) и обработки переходов (BPU) – предсказывающий условные переходы. Все исполнительные устройства могут работать параллельно. За один такт могло выполняться до 3-х инструкций. Имелся раздельный кэш для команд и данных по 32 КБ (16+16). Существовал буфер команд (до 8 команд) в пределах которого, последние 4 команды могли выполнятся с нарушением предписанной последовательности их выполнения с целью эффективной загрузки исполнительный блоков. Затем были выпущены модели 602, 603, 604 и различные их модификации, отличающиеся, в основном, частотой, энергопотреблением, размерами КЭШа. Эти процессоры использовались, в основном в семействе персональных компьютеров PowerMac фирмы Apple.

МП Power 620

Полностью 64 разрядный процессор.

Размеры КЕШ-памяти увеличены до 32 Кб каждая. Появилась внешняя кэш-память второго уровня до 128 МБ. Введены усовершенствования в исполнительные блоки, особенно блока для работы с числами с плавающей запятой. Реализован механизм переименования регистров. Тактовая частота увеличена до 133 МГц. Адресная шина – 128 бит, шина данных – 40 бит. За один такт выполнялось до 4-х инструкций.

МП Power 750

Кэш второго уровня стал внутренним (работающим на полной тактовой частоте процессора) объемом до 1 МБ. Были эволюционно усовершенствованы исполнительные блоки. Частоты достигли 300-600 МГц.

МП POWER4 и POWER5

Разработан в 2001 г. Представляет собой два процессорных ядра на одном кристалле. Процессоры содержат раздельную кэш-память команд и данных 1-го уровня объемом по 64 Кбайт каждая. Кроме того, имеется разделяемая (общая) кэш-память 2-го уровня на кристалле (объемом 1,4 Мбайт) и внешняя кэш-память 3-го уровня (32 Мбайт). Для создания мультипроцессорных конфигураций имеются специальные линки с высокой пропускной способностью (частота более 500 МГц, ширина 128 бит). Теги кэш-памяти 3-го уровня расположены внутри кристалла, что ускоряет реализацию протокола когерентности. Скорость передачи данных между кэш-памятью 3-го уровня и основной памятью может достигать 12,8 Гбайт/с. Развитием этого процессора стал МП POWER5. Тактовая частота POWER5 составляет от 1,5 до 1,9 ГГц. Одно из главных новшеств это интегрированная кэш-память 3-го уровня объемом 36 Мбайт. Также был проведен ряд усовершенствований, направленных, в основном на повышение масштабируемости. Эти процессоры активно применяются для создания суперкомпьютеров и больших ВМ.

Менее популярными RISC процессорами являются МП семейства SPARC (Масштабируемая процессорная архитектура) фирмы SUN Microsystems. Это свободный стандарт, ориентированный на работу в ОС UNIX и языки программирования C. К его разработке могут присоединяться другие фирмы-изготовители процессоров. Это гарантирует им мощную поддержку со стороны ПО. Примерно такая же концепция использовалась при разработке процессоров Alpha фирмы DEC.

Вычислительные системы

Для повышения производительности, вычислительные системы могут строиться на базе отдельных вычислительных машин (многомашинные) или отдельных процессоров (многопроцессорные).

Следует заметить, что ничего принципиально нового в алгоритмическом плане это не несет. Это только лишь повышает производительность. То есть они, как и машина фон-Неймана, алгоритмически эквивалентны машине Тьюринга.

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

Этот обмен информацией может осуществляться на следующих уровнях:

  1. На уровне процессоров.

Взаимодействие осуществляется через регистры процессоров.

  1. Оперативной памяти.

Взаимодействие осуществляется посредством общей оперативной памяти.

  1. Каналов связи.

Взаимодействие осуществляется посредством общего поля внешней памяти и общего доступа к устройствам ввода-вывода. Это реализуется посредством специальных программ-драйверов. Такие вычислительные системы называются многомашинными системами или информационно-вычислительными сетями.

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

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

Чаще всего взаимодействие осуществляется на уровне оперативной памяти, для этого достаточно лишь технически создать общее поле оперативной памяти для всех процессоров и разработать операционную систему, которая будет программно реализовывать механизм взаимодействия. Доступ к внешней памяти и устройствам ввода-вывода, обычно, для многопроцессорных систем общий. Существенным является то, что обычно в информационно-вычислительных сетях отдельные процессоры работают под управлением своих отдельных операционных систем, когда как в многопроцессорных ВС – ОС одна на все процессоры. Это улучшает динамические характеристики ВС (скорость и надежность), но требует наличия специальной сложной операционной системы.

Примером ВС с взаимодействием на третьем уровне являются компьютерные сети. Примером многопроцессорных систем – суперкомпьютеры.

Классификация вычислительных систем.

С точки зрения классификации Флинна вычислительные системы имеют архитектуры MISD, SIMD или MIMD.

Выделяют следующие классы вычислительных систем:

  1. Конвейерные ВС – в основе лежит конвейерный способ обработки информации.

Функциональная структура представляет собой последовательность связанных элементарных блоков, работающих параллельно, но обрабатывающих данные одного потока. Эти идеи реализованы практически во всех современных процессорах. В чистом виде конвейерная архитектура относится к классу MISD.

  1. Матричные ВС – основывается на принципе массового параллелизма. То есть не имеют принципиальных ограничений в наращивании производительности.

В них обеспечивается возможность одновременной реализации большого числа операций на элементарных процессорах, объединенных в матрицу. Каждый элементарный процессор представляет собой АЛУ и локальную память ЛП, в которой хранятся некоторые данные. Поток команд на всю матрицу един и формируется устройством управления. Особенно эффективны такие системы на решение задач матричной алгебры. Реализуют SIMD архитектуру.

  1. Мультипроцессорные системы с общей памятью.

  2. Распределенные ВС – мультипроцессорные системы с MIMD архитектурой, в которых нет единого ресурса (общей памяти).

Примером являются транспьютерные системы. Транспьютер – это специализированный микропроцессор, состоящий из собственно, микропроцессора, локальной памяти и каналов ввода-вывода информации (линков), предназначенных, для взаимодействия с соседним транспьютером. Слово транспьютер придумано для аналоги со словом транзистор. То есть транспьютер в вычислительных системах должен был играть такую же роль, какую играет транзистор в электронных схемах, то есть это основной компактный вычислительный узел, способный легко взаимодействовать с другими узлами.

  1. Вычислительные системы с программируемой структурой.

Являются реализацией так называемой модели коллектива вычислителей, разработанной Институте математики СО АН СССР. ВС представляют собой композицию взаимосвязанных элементарных машин, каждая из которых, как и транспьютер имеет устройство связи, процессор и локальную память. Одним из главных недостатков систем рассмотренных выше классов являлось наличие единого общего ресурса (УУ, управляющей ЭВМ, устройств связи, общей памяти). Отказ этого единого ресурса приводит к отказу всей системы в целом. ВС с программируемой структурой – это распределенные средства обработки информации. В таких ВС нет единого функционально и технически реализованного устройства. Поэтому отказ одного из блоков не влечет за собой отказа всей системы в целом.

Матричные вычислительные системы

Имеют SIMD архитектуру в чистом виде. Матричный процессор представляет собой матрицу связанных идентичных элементарных процессоров. Каждый ЭП включает в себя АЛУ, память и устройство связи с другими ЭП (локальный коммутатор). Сеть связей между ЛК позволяет осуществлять обмен данными между любыми процессорами. Поток команд поступает на всю матрицу от единого устройства управления.

Такая архитектура была выбрана в начале 60-х годов. Тогда основной сложностью было построение схемы устройства управления, схемы АЛУ и памяти технически реализовать было легче. Поэтому такой централизм устройства управления и параллелизм устройства обработки и хранения информации обеспечивал компромисс между стоимостью и производительностью.

Понятно, что эффективного распараллеливания, при решении сложной практической задачи, предварительно нужно организовать данные в векторы или матрицы.

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

Классификация ВМ и систем.

Классификацию ВМ можно осуществить по различным признакам: