Развитие архитектуры вычислительных систем

advertisement
Развитие архитектуры вычислительных систем
Продолжим обсуждение того, в каких направлениях развивается архитектура вычислительных систем.
Этот процесс определяется, с одной стороны, требованиями большей
эффективности и скорости обработки информации, с другой — появлением и
новых технических возможностей.
Зачем нужны сверхбыстрые компьютеры
Несмотря на стремительно нарастающую производительность компьютеров, которая каждые 4-5 лет практически по важнейшим показателям
удваивается, всегда есть классы задач, для которых даже такой производительности не хватает. Укажем некоторые из них.
1. Математические расчеты, лежащие в основе реализации математических моделей многих процессов. Гигантские вычислительные ресурсы необходимы для более надежного и долгосрочного прогноза
погоды, для решения аэрокосмических задач, в том числе и оборонных, для решения многих инженерных задач и т. д.
2. Поиск информации в гигантских базах данных, достигающих по
объему хранимой информации нескольких терабайтов (1 терабайт =
= 1024 Гбайт = 1012байт).
3. Моделирование интеллекта. При всех фантастических показателях
объем оперативной памяти современных компьютеров составляет
лишь малую долю объема памяти человека.
Как можно ускорить работу компьютера
Вернемся к архитектуре компьютера четвертого поколения, изображенной на рисунке.
Центральный
процессор
Память
Видеопамять
данных
Шина
адреса
управления
К
К
К
К
К
К
Устройство
ввода
Устройство
ввода
Устройство
вывода
Устройство
вывода
Внешнее
запоминающее
устройство
Внешнее
запоминающее
устройство
Рис.4.13. Архитектура персонального компьютера
(сплошные линии означают потоки данных,
пунктирные – управляющие сигналы, К – контроллеры)
У компьютера имеется много внешних устройств, но только один,
нацеленный
непосредственно
на
выполнение
программы,
процессор
(контроллеры не в счет, у них иные функции), одна шина и одна оперативная
память. При решении с помощью такого компьютера любой задачи основной
цикл работы состоит из следующих этапов:
1) процессор считывает очередную команду программы;
2) эта команда расшифровывается, из оперативной памяти извлекаются
указанные в ней данные, над ними выполняется требуемое действие;
3) результаты действия записываются в оперативную память (если
действие того требует)
и всё повторяется заново, пока не произойдет остановка по какой-то причине.
Конечно, по мере совершенствования компьютеров в этой схеме
появились некоторые дополнительные возможности: небольшая собственная
память у процессоров, кэш-память, так называемая конвейерная обработка,
когда процессор, выполняя текущую команду, «заглядывает» в следующую и
кое-что для ее выполнения делает. Все это важно, но в какой-то момент
потребовалось сделать принципиальный шаг и отказаться от единичности
главных устройств компьютера: либо процессора, либо оперативной памяти,
либо шины, либо всего этого вместе взятого. Так родилась совершенно новая
архитектура, с которой в настоящее время связываются, пожалуй, большие
надежды в области роста производительности компьютеров, нежели с
совершенствованием отдельных узлов.
Чтобы стало более понятным, зачем компьютеру несколько процессоров,
обсудим решение простейшей математической задачи. Есть массив из 100
чисел: а1, а2,… а100. Требуется найти их сумму.
Нет ничего проще. И на компьютере, и без него мы, скорее всего,
поступим так: сложим первые два числа, обозначим как-то их сумму
(например, S), затем прибавим к ней третье число, и будем делать это еще 98
раз. Это пример последовательного вычислительного процесса. Его блоксхема приведена на рис. 4.14.
S : = a1 + a 2
i:=3
S : = S + ai
i:=i+1
I  100
Рис. 4.14. Алгоритм последовательного решения задачи сложения массива чисел
Поскольку ни у кого из нас нет второй головы, то иначе эту задачу в
одиночку не решить. Но представим, что мы решаем ее не в одиночку, а всем
классом (25 человек). Тогда возникает возможность совсем иной последовательности действий:
1. Объединить числа в пары — по два на каждого ученика (итого распределим 50 чисел): например, ученик Петя Иванов берет себе ах и а2,
ученик Ваня Петров — а 3 и а4, и т. д.
2. Дать команду «Складывай!» — Каждый складывает свои числа.
3. Дать команду «Записывай!» — Каждый записывает мелом на классной доске свой результат.
4. Поскольку у нас осталось еще 50 необработанных чисел (а51, … а100),
повторить пункты 1-3. После этого имеем на доске 50 чисел: b1 = а1 +
а2, ..., b50 = а99 + а100 — результаты парных сложений.
5. Объединить в пары числа bi и повторить пункты 2-4, пока не останется одно число.
Первое впечатление — очень сложно, гораздо сложнее, чем на рис. 4.14.
Если бы мы захотели записать этот алгоритм в виде блок-схемы, то нам бы
пришлось, кроме описания порядка действий и объектов действий, сделать
то, чего мы никогда при записи алгоритмов еще не делали, — предусмотреть
синхронизацию параллельных процессов по времени. Например, выполнение
команд 2 и 3 должно завершиться всеми участками вычислений до нового
объединения чисел в пары (перехода к пункту 4), иначе даже при решении
этой простой задачи наступит хаос. Но сложность не есть объективная
причина отвергнуть такой путь, особенно если речь идет о возможности
значительного
ускорения
предложили
выше,
компьютерных
называется
на
вычислений.
языке
То,
что
мы
программистов
распараллеливанием вычислений и вполне поддается формальному
описанию. Эффект ускорения вычислений очевиден: пункт 2 в приведенном
выше алгоритме ускоряет соответствующий этап работы в раз!
Следующий вопрос: что надо изменить в устройстве компьютера, чтобы
он смог так работать? Для реализации подобной схемы вычислений
компьютеру потребуется 25 процессоров, объединенных в одну архитектуру
и
способных
работать
параллельно.
Такие
многопроцессорные
вычислительные комплексы — реальность сегодняшней вычислительной
техники.
Вернемся, однако, к описанной выше последовательности действий — в
ней еще есть источники проблем. Представим себе, что в схеме на рис. 4.13
мы дорисовали еще 24 центральных процессора, соединенных с шиной. При
реализации в таком компьютере команды 3 из нашего примера произойдет
одновременное обращение 25 процессоров к системной не для пересылки
результатов сложения в оперативную память. Но поскольку шина одна, то и
числа могут пересылаться в память только по одному. Значит, для
выполнения команды 3 придется организовать очередь передачу чисел в
память. Тут же возникает вопрос: не сведет ли к нулю очередь все
преимущества от параллельности выполнения операций на шаге 2? А если
преимущества останутся, то насколько они будут велики? Окупятся ли
расходы на 24 дополнительных процессора?
В возникшей ситуации естественен следующий шаг: ввод в архитектуру
нескольких системных шин. А если еще подумать над возможными
проблемами, то и нескольких устройств оперативной памяти.
Как видите, все это очень непросто. Обсуждаемые изменения в
устройстве компьютера приводят к принципиально новым архитектурам,
отличным от архитектуры фон Неймана. Изобретателям таких систем
приходится искать компромисс между возрастающей сложностью (и, как
следствие, — стоимостью) и ускорением их работы.
Варианты реализации параллельных вычислительных систем
В
самом
общем
смысле
под
параллельными
вычислениями
понимаются процессы обработки данных, в которых одновременно могут
выполняться несколько машинных операций.
Распределенные вычисления — способ реализации параллельных
вычислений путем использования множества компьютеров, объединенных в
сеть.
Такие
вычислительные
системы
еще
называют
мультикомпьютерными системами.
Распределенные
вычисления
часто
реализуются
с
помощью
компьютерных кластеров — нескольких компьютеров, связанных в
локальную сеть и объединенных специальным программным обеспечением,
реализующим параллельный вычислительный процесс. Распределенные
вычисления
могут
производиться
и
с
помощью
многомашинных
вычислительных
комплексов,
образуемых
объединением
нескольких
отдельных компьютеров через глобальные сети.
Мультипроцессорная система реализуется в одном компьютере. Достижение
параллелизма
в
ней
происходит
благодаря
возможности
независимой работы отдельных устройств: нескольких процессоров, блоков
оперативной памяти, шин и т. д. Мультипроцессорная система может использовать разные способы доступа к общей для всей системы памяти. Все
процессоры могут иметь равный (однородный) доступ к единой памяти. К
такому типу относятся мощнейшие в мире суперкомпьютеры семейства Cray.
Другое решение: для каждого процессора выделяется свой раздел памяти
компьютера.
На сегодняшний день кластерные системы — это самый дешевый
способ организации параллельных вычислений, поскольку для них можно
использовать уже имеющиеся у пользователя компьютеры. Однако возможности
реализации
взаимодействия
отдельных
компьютеров
по
сравнению с организацией узлов в мультипроцессорной системе невелики,
равно как и скорость передачи данных, и это налагает ограничения на класс
решаемых задач.
Вопросы и задания
1. Для каких классов задач нужны сверхпроизводительные вычислительные
системы?
2. Что такое параллельные вычисления?
3. Для
примера
со
сложением
чисел
25
учениками
попробуйте
проанализировать следующие ситуации: в классе всего 1 кусок мела; в классе
5 кусков мела; в классе 25 кусков мела. Оцените, как от этого зависит время
решения задачи (учтите еще ширину доски и время перемещения учеников
по классу). Попробуйте построить модель такого процесса. Переведите эту
ситуацию на язык компьютерной терминологии для многопроцессорных
систем.
4. Попробуйте привести примеры алгоритмов поиска информации в массиве
и сортировки массива, которые допускают распараллеливание операций.
Опишите процедуру распараллеливания. Сколько процессоров необходимо
для эффективного распараллеливания в приведенном вами примере?
5. Что такое распределенные вычисления?
6. Чем отличаются мультикомпьютерные системы от мультипроцессорных?
Система основных понятий
Архитектура параллельных вычислительных систем
Цель поиска новых принципов архитектуры — повышение производительности
компьютеров для решения классов задач, требующих высокопроизводительных
вычислений:
Работа
Математическое
с терабайтовыми
Моделирование интеллекта
моделирование
базами данных
Ведущий принцип: отказ от последовательности выполнения операций
Ведущие направления развития архитектуры:
техническое
программное
техническое решение:
программное решение:
решение:
решение:
Мультипроцессорные параллельные
мультикомпью параллельное
схемы: несколько
вычисления: выделение в
выполнение
терные
процессоров и иных
программе нескольких
однотипных
системы
однотипных устройств одновременно
подпрограмм
(кластеры):
в составе
выполняемых действий
объединение
вычислительного
(распараллеливание)
нескольких
комплекса, имеющего
компьютеров в
общую оперативную
локальную сеть
память
для решения
одной задачи
Download