Краткая история появления
параллелизма в архитектуре ЭВМ
Сегодня
параллелизмом в архитектуре компьютеров уже мало кого удивишь. Все современные
микропроцессоры, будь то Pentium III или PA-8700, MIPS R14000, Е2К или Power3
используют тот или иной вид параллельной обработки. В ядре Pentium 4 на разных
стадиях выполнения может одновременно находиться до 126 микроопераций. На
презентациях новых чипов и в пресс-релизах корпораций это преподносится как
последнее слово техники и передовой край науки, и это действительно так, если
рассматривать реализацию этих принципов в миниатюрных рамках одного кристалла.
Вместе
с тем, сами эти идеи появились очень давно. Изначально они внедрялись в самых
передовых, а потому единичных, компьютерах своего времени. Затем после должной
отработки технологии и удешевления производства они спускались в компьютеры
среднего класса, и наконец сегодня все это в полном объеме воплощается в
рабочих станциях и персональных компьютерах.
Для
того чтобы убедиться, что все основные нововведения в архитектуре современных
процессоров на самом деле используются еще со времен, когда ни
микропроцессоров, ни понятия суперкомпьютеров еще не было, совершим маленький экскурс
в историю, начав практически с момента рождения первых ЭВМ.
IBM 701
(1953), IBM 704
(1955): разрядно-параллельная
память, разрядно-параллельная арифметика.
Все
самые первые компьютеры (EDSAC, EDVAC, UNIVAC) имели разрядно-последовательную
память, из которой слова считывались последовательно бит за битом. Первым
коммерчески доступным компьютером, использующим разрядно-параллельную память
(на CRT) и разрядно-параллельную арифметику, стал IBM 701, а наибольшую
популярность получила модель IBM 704 (продано 150 экз.), в которой, помимо
сказанного, была впервые применена память на ферритовых сердечниках и
аппаратное АУ с плавающей точкой.
IBM 709
(1958): независимые
процессоры ввода/вывода.
Процессоры
первых компьютеров сами управляли вводом/выводом. Однако скорость работы самого
быстрого внешнего устройства, а по тем временам это магнитная лента, была в
1000 раз меньше скорости процессора, поэтому во время операций ввода/вывода
процессор фактически простаивал. В 1958г. к компьютеру IBM 704 присоединили 6
независимых процессоров ввода/вывода, которые после получения команд могли
работать параллельно с основным процессором, а сам компьютер переименовали в
IBM 709. Данная модель получилась удивительно удачной, так как вместе с
модификациями было продано около 400 экземпляров, причем последний был выключен
в 1975 году - 20 лет существования!
IBM STRETCH
(1961): опережающий
просмотр вперед, расслоение памяти.
В
1956 году IBM подписывает контракт с Лос-Аламосской научной лабораторией на разработку
компьютера STRETCH, имеющего две принципиально важные особенности: опережающий
просмотр вперед для выборки команд и расслоение памяти на два банка для
согласования низкой скорости выборки из памяти и скорости выполнения операций.
ATLAS
(1963): конвейер команд.
Впервые
конвейерный принцип выполнения команд был использован в машине ATLAS,
разработанной в Манчестерском университете. Выполнение команд разбито на 4
стадии: выборка команды, вычисление адреса операнда, выборка операнда и выполнение
операции. Конвейеризация позволила уменьшить время выполнения команд с 6 мкс до
1,6 мкс. Данный компьютер оказал огромное влияние, как на архитектуру ЭВМ, так
и на программное обеспечение: в нем впервые использована мультипрограммная ОС,
основанная на использовании виртуальной памяти и системы прерываний.
CDC 6600
(1964): независимые
функциональные устройства.
Фирма
Control Data Corporation (CDC) при непосредственном участии одного из ее
основателей, Сеймура Р.Крэя (Seymour R.Cray) выпускает компьютер CDC-6600 -
первый компьютер, в котором использовалось несколько независимых функциональных
устройств. Для сравнения с сегодняшним днем приведем некоторые параметры
компьютера:
время
такта 100нс,
производительность
2-3 млн. операций в секунду,
оперативная
память разбита на 32 банка по 4096 60-ти разрядных слов,
цикл
памяти 1мкс,
10
независимых функциональных устройств.
Машина
имела громадный успех на научном рынке, активно вытесняя машины фирмы IBM.
CDC 7600
(1969): конвейерные
независимые функциональные устройства.
CDC
выпускает компьютер CDC-7600 с восемью независимыми конвейерными
функциональными устройствами - сочетание параллельной и конвейерной обработки.
Основные параметры:
такт
27,5 нс,
10-15
млн. опер/сек.,
8
конвейерных ФУ,
2-х
уровневая память.
ILLIAC IV
(1974): матричные
процессоры.
Проект:
256 процессорных элементов (ПЭ) = 4 квадранта по 64ПЭ, возможность
реконфигурации: 2 квадранта по 128ПЭ или 1 квадрант из 256ПЭ, такт 40нс,
производительность 1Гфлоп;
работы
начаты в 1967 году, к концу 1971 изготовлена система из 1 квадранта, в 1974г.
она введена в эксплуатацию, доводка велась до 1975 года;
центральная
часть: устройство управления (УУ) + матрица из 64 ПЭ;
УУ
это простая ЭВМ с небольшой производительностью, управляющая матрицей ПЭ; все
ПЭ матрицы работали в синхронном режиме, выполняя в каждый момент времени одну
и ту же команду, поступившую от УУ, но над своими данными;
ПЭ
имел собственное АЛУ с полным набором команд, ОП - 2Кслова по 64 разряда, цикл
памяти 350нс, каждый ПЭ имел непосредственный доступ только к своей ОП;
сеть
пересылки данных: двумерный тор со сдвигом на 1 по границе по горизонтали;
Несмотря
на результат в сравнении с проектом: стоимость в 4 раза выше, сделан лишь 1
квадрант, такт 80нс, реальная произв-ть до 50Мфлоп - данный проект оказал
огромное влияние на архитектуру последующих машин, построенных по схожему
принципу, в частности: PEPE, BSP, ICL DAP.
CRAY 1
(1976): векторно-конвейерные
процессоры
В 1972 году С.Крэй покидает CDC и основывает свою компанию Cray
Research, которая в 1976г. выпускает первый векторно-конвейерный компьютер
CRAY-1: время такта 12.5нс, 12 конвейерных функциональных устройств, пиковая
производительность 160 миллионов операций в секунду, оперативная память до
1Мслова (слово - 64 разряда), цикл памяти 50нс. Главным новшеством является
введение векторных команд, работающих с целыми массивами независимых данных и
позволяющих эффективно использовать конвейерные функциональные устройства.
Иерархия
памяти.
Иерархия
памяти пямого отношения к параллелизму не имеет, однако, безусловно, относится
к тем особенностям архитектуры компьютеров, которые имеет огромное значение для
повышения их производительности (сглаживание разницы между скоростью работы
процессора и временем выборки из памяти). Основные уровни: регистры,
кэш-память, оперативная память, дисковая память. Время выборки по уровням памяти
от дисковой памяти к регистрам уменьшается, стоимость в пересчете на 1 слово
(байт) растет. В настоящее время, подобная иерархия поддерживается даже на
персональных компьютерах.
А что же сейчас
используют в мире?
По
каким же направлениям идет развитие высокопроизводительной вычислительной
техники в настоящее время? Основных направлений четыре.
1.
Векторно-конвейерные компьютеры. Конвейерные функциональные устройства и набор
векторных команд - это две особенности таких машин. В отличие от традиционного
подхода, векторные команды оперируют целыми массивами независимых данных, что
позволяет эффективно загружать доступные конвейеры, т.е. команда вида A=B+C
может означать сложение двух массивов, а не двух чисел. Характерным
представителем данного направления является семейство векторно-конвейерных
компьютеров CRAY куда входят, например, CRAY EL, CRAY J90, CRAY T90 (в марте
2000 года американская компания TERA перекупила подразделение CRAY у компании
Silicon Graphics, Inc.).
2.
Массивно-параллельные компьютеры с распределенной памятью. Идея построения
компьютеров этого класса тривиальна: возьмем серийные микропроцессоры, снабдим
каждый своей локальной памятью, соединим посредством некоторой коммуникационной
среды - вот и все. Достоинств у такой архитектуры масса: если нужна высокая
производительность, то можно добавить еще процессоров, если ограничены финансы
или заранее известна требуемая вычислительная мощность, то легко подобрать
оптимальную конфигурацию и т.п.
Однако
есть и решающий "минус", сводящий многие "плюсы" на нет.
Дело в том, что межпроцессорное взаимодействие в компьютерах этого класса идет
намного медленнее, чем происходит локальная обработка данных самими
процессорами. Именно поэтому написать эффективную программу для таких компьютеров
очень сложно, а для некоторых алгоритмов иногда просто невозможно. К данному
классу можно отнести компьютеры Intel Paragon, IBM SP1, Parsytec, в какой-то
степени IBM SP2 и CRAY T3D/T3E, хотя в этих компьютерах влияние указанного
минуса значительно ослаблено. К этому же классу можно отнести и сети
компьютеров, которые все чаще рассматривают как дешевую альтернативу крайне
дорогим суперкомпьютерам.
3.
Параллельные компьютеры с общей памятью. Вся оперативная память таких
компьютеров разделяется несколькими одинаковыми процессорами. Это снимает
проблемы предыдущего класса, но добавляет новые - число процессоров, имеющих
доступ к общей памяти, по чисто техническим причинам нельзя сделать большим. В
данное направление входят многие современные многопроцессорные SMP-компьютеры
или, например, отдельные узлы компьютеров HP Exemplar и Sun StarFire.
4.
Последнее направление, строго говоря, не является самостоятельным, а скорее
представляет собой комбинации предыдущих трех. Из нескольких процессоров
(традиционных или векторно-конвейерных) и общей для них памяти сформируем
вычислительный узел. Если полученной вычислительной мощности не достаточно, то
объединим несколько узлов высокоскоростными каналами. Подобную архитектуру
называют кластерной, и по такому принципу построены CRAY SV1, HP Exemplar, Sun
StarFire, NEC SX-5, последние модели IBM SP2 и другие. Именно это направление
является в настоящее время наиболее перспективным для конструирования
компьютеров с рекордными показателями производительности.
Использование параллельных вычислительных систем
К
сожалению чудеса в жизни редко случаются. Гигантская производительность
параллельных компьютеров и супер-ЭВМ с лихвой компенсируется сложностями их
использования. Начнем с самых простых вещей. У вас есть программа и доступ,
скажем, к 256-процессорному компьютеру. Что вы ожидаете? Да ясно что: вы вполне
законно ожидаете, что программа будет выполняться в 256 раз быстрее, чем на
одном процессоре. А вот как раз этого, скорее всего, и не будет.
Закон Амдала
и его следствия
Предположим,
что в вашей программе доля операций, которые нужно выполнять последовательно,
равна f, где 0