Развитие архитектуры вычислительных систем Продолжим обсуждение того, в каких направлениях развивается архитектура вычислительных систем. Этот процесс определяется, с одной стороны, требованиями большей эффективности и скорости обработки информации, с другой — появлением и новых технических возможностей. Зачем нужны сверхбыстрые компьютеры Несмотря на стремительно нарастающую производительность компьютеров, которая каждые 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. Чем отличаются мультикомпьютерные системы от мультипроцессорных? Система основных понятий Архитектура параллельных вычислительных систем Цель поиска новых принципов архитектуры — повышение производительности компьютеров для решения классов задач, требующих высокопроизводительных вычислений: Работа Математическое с терабайтовыми Моделирование интеллекта моделирование базами данных Ведущий принцип: отказ от последовательности выполнения операций Ведущие направления развития архитектуры: техническое программное техническое решение: программное решение: решение: решение: Мультипроцессорные параллельные мультикомпью параллельное схемы: несколько вычисления: выделение в выполнение терные процессоров и иных программе нескольких однотипных системы однотипных устройств одновременно подпрограмм (кластеры): в составе выполняемых действий объединение вычислительного (распараллеливание) нескольких комплекса, имеющего компьютеров в общую оперативную локальную сеть память для решения одной задачи