Министерство образования Республики Беларусь УЧРЕЖДЕНИЕ ОБРАЗОВАНИЯ «ГРОДНЕНСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ИМЕНИ ЯНКИ ...
48 downloads
195 Views
831KB Size
Report
This content was uploaded by our users and we assume good faith they have the permission to share this book. If you own the copyright to this book and it is wrongfully on our website, we offer a simple DMCA procedure to remove your content from our site. Start by pressing the button below!
Report copyright / DMCA form
Министерство образования Республики Беларусь УЧРЕЖДЕНИЕ ОБРАЗОВАНИЯ «ГРОДНЕНСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ИМЕНИ ЯНКИ КУПАЛЫ»
Т.А.Ситкевич, В.Н.Сюрин
ПАРАЛЛЕЛЬНЫЕ ВЫЧИСЛИТЕЛЬНЫЕ СРЕДЫ Учебно-методическое пособие
по одноименному спецкурсу для студентов специализации Н 02.02.08 – Интеллектуальные системы специальности Н 02.02.00 – Радиофизика
Гродно 2001
УДК 681(075.8) ББК 32 П
Рецензенты: профессор, доктор технических наук А.С.Ключников; доцент, кандидат физико-математических наук Н.Н.Иванов. Рекомендовано советом физико-технического факультета ГрГУ.
Ситкевич Т.А., Сюрин В.Н. Параллельные вычислительные среды:
П Уч.-метод. по собие – Гродно:ГрГУ, 2001. – 114 с.
УДК 681(075.8) ББК 32
Аннотация
© Т.А.Ситкевич, В.Н.Сюрин, 2001
ВВЕДЕНИЕ Современный этап развития вычислительной техники характеризуется интенсивными исследованиями в области параллельных вычислительных систем и параллельного программирования, и новые концепции в технологии, архитектуре и организации ЭВМ привели к созданию таких систем, способных выполнять большое число параллельных преобразований. Когда такие параллельные вычислительные системы станут реальностью и будет создано программное обеспечение, позволяющее достигнуть максимального соотношения эффективности и стоимости, они, несомненно, дадут импульс новым исследованиям и разработкам и помогут открыть еще не известные методы и расширить области приложений. На сегодняшний день наши знания о параллельных вычислениях весьма скромны в сравнении с результатами в области последовательных вычислений, и для того, чтобы в полной мере можно было бы использовать все преимущества предлагаемых параллельных архитектур, необходимо решить много сложных проблем в области языков программирования и компиляторов. Спецкурс «Параллельные вычислительные среды» посвящен изучению состояния дел в области систем параллельной обработки информации, существующих методов распараллеливания вычислений и параллельных алгоритмов вычислений, основных принципов построения ПВС и программирования в них. В течение последних 20-30 лет пристальное внимание многих ученых было привлечено к параллельной обработке данных и теории сложности алгоритмов. Дело в том, что дальнейшее повышение скорости вычислений за счет создания все более быстрых ЭВМ станет со временем либо невозможным, либо экономически невыгодным. Наиболее естественным тогда может быть именно параллельное соединение нескольких ЭВМ. Имея р процессоров, мы можем получить значительное повышение быстродействия (хотя и несколько меньшее, чем в р раз). Однако после многих лет работы и после того, как было получено большое число превосходных теоретических резуль3
татов, параллельные вычисления триумфа не достигли. Основными причинами этого можно назвать следующие: 1. Все реализованные параллельные системы применялись для решения задач, которые можно назвать задачами «с внутренним параллелизмом». Так, например, система наблюдения РЕРЕ производит слежение за некоторым количеством воздушных целей, и каждому процессору поручена своя цель, над которой он работает независимо от других процессоров и одновременно с ними. Но исследования показали, что таких задач с внутренним параллелизмом мало, и почти все применяемые алгоритмы имеют чисто последовательный характер. 2. У математиков есть обыкновение при отсутствии у них нужной ЭВМ создавать абстрактную машину (теоретическую модель), оставляя инженерам заботы по ее практической реализации. К сожалению, такая абстрактная машина оказывается непрактичной, поскольку теоретическая модель предполагает, что все р процессоров связаны с общей памятью большого объема. Теоретически всегда, когда два или более процессоров запрашивают из памяти одно и то же слово, они мгновенно его получают. Однако практически это почти недостижимо. На практике подобные ситуации иногда приводят к странному поведению системы: известен пример системы, которая снижала свою производительность при добавлении новых процессоров. Кроме того, в теоретической модели число процессоров не ограничено. Это, конечно, было бы неплохо, потому что, например, параллельное перемножение двух матриц размера n x n требует порядка n3 процессоров. При довольно «скромном» n =100 потребовался бы миллион процессоров. 3. В одной из первых параллельных систем, ILLIAC-1V, каждый подчиненный процессор (ПП) имеет свою «локальную память». К сожалению, между данными, записанными в локальных устройствах памяти, могут быть такие зависимости, при которых из 64 ПП работает только один, а остальные бездействуют. Эту ситуацию можно назвать «вырождением параллельности в последовательность», и попытки уменьшить количество подобных ситуаций не всегда увенчивались успехом. 4
4. Довольно важной целью распараллеливания вычислений является достижение надежности и живучести. Надежность мы определяем как способность системы обнаружить неисправный блок и отключить его. Под живучестью системы мы будем понимать возможность продолжения работы после отключения неисправного блока. ILLIAC и аналогичные ему системы не обладают ни тем, ни другим свойством: если некоторый блок вышел из строя, то система сможет продолжить работу только после его замены или ремонта. Таким образом, в настоящее время существует достаточно много нерешенных проблем и задач в области создания параллельных вычислительных систем, свободных от указанных и других недостатков, и довольно интенсивные исследования в этом направлении продолжаются.
5
НЕОБХОДИМОСТЬ ПОСТРОЕНИЯ ПВС. ОСНОВНЫЕ ОПРЕДЕЛЕНИЯ
Необходимость использования параллельных вычислений, параллельного выполнения программ на нескольких процессорах одновременно, т.е. необходимость создания ПВС можно обосновать следующими основными целями: более высокое быстродействие, более низкая стоимость, лучшая надежность и живучесть, модульность. Прежде чем перейти непосредственно к параллельным системам, рассмотрим по отдельности каждую из этих целей. С момента появления ЭВМ в 1940 г. их быстродействие стремительно возрастало. К сожалению, поддерживать такие же темпы увеличения быстродействия, как и раньше, становится все труднее и все дороже. Простой расчет показывает, что мы, повидимому, приближаемся к верхней границе скорости обработки данных, достижимой на цифровых вычислительных машинах, – это следует из основных физических законов. Таким образом, если мы хотим и дальше повышать быстродействие, нельзя рассчитывать только на сокращение времени срабатывания электронной схемы, уменьшение времени распространения сигнала, необходимо найти другое решение проблемы. Одно из возможных направлений – это иметь в системе несколько процессоров, работающих параллельно. Эта идея не нова. Еще в 1842 г. Манабреа писал: «... машина может ... вырабатывать несколько результатов одновременно, что очень сильно сократит общее время вычислений» [1]. Это равносильно параллельности, но, так как в наше время придумано много терминов, связанных с параллельностью, нам следует, прежде чем переходить к более детальному обсуждению параллельных систем, разобраться в этой терминологии. Когда говорят об универсальной ЭВМ, работающей в условиях вычислительного центра, используют термин «производительность». Этот термин обозначает число различных и не связанных между собой заданий, которое процессор способен обработать за данное время. Производительность р процессоров будет, конечно, больше производительности одного процессора (но соответственно увеличится и стоимость системы). Заметим, 6
что, хотя установив р отдельных ЭВМ, мы и получим увеличение производительности в р раз, время выполнения отдельного задания любого пользователя заметно не изменится. В связи с параллельностью используется и другой термин – мультипрограммирование. Идея состоит в обработке нескольких заданий на одном центральном процессоре с использованием нескольких устройств ввода-вывода, причем процессор и все устройства ввода-вывода могут работать одновременно. Несмотря на то, что используется только один процессор, время обработки всех заданий значительно уменьшится. Цель мультипрограммирования – уменьшить общее время обработки нескольких заданий. В противоположность этому, вычисляя «коэффициент повышения быстродействия (к.п.б.)» (speedup), мы хотим знать, во сколько раз уменьшится время обработки одного отдельного задания. Для того, чтобы еще больше разграничить эти понятия, стоит подчеркнуть разницу между терминами одновременность (concurrency) и параллелизм (parallelism). Одновременность означает, что в один и тот же момент времени происходят никак не связанные между собой события; например, данные передаются с диска на печатающее устройство в то время, как на процессоре идет некоторая программа. Обработка же всех разрядов слова одновременно, или выполнение одновременно р частей одной и той же программы, – это параллелизм. Различают пространственный и временной параллелизм. В первом случае мы имеем, например, несколько «географически» разнесенных процессоров, одновременно работающих над разными частями одного и того же задания. Примером второго случая может служить конвейер, на котором одновременно выполняются различные этапы обработки нескольких команд. Основное внимание при исследовании возможностей создания ПВС и рассмотрении уже существующих мы будем уделять увеличению к.п.б. (а не производительности) при помощи пространственного параллелизма, достигаемого ценой умеренных затрат. Рассмотрим теперь вопросы стоимости. Пока все выпускаемые на продажу процессоры были «из породы динозавров», объединение нескольких таких машин в одну систему обходи7
лось слишком дорого. Более того, это было невыгодно потому, что к.п.б., как оказалось, совсем не обязательно увеличивается пропорционально увеличению стоимости оборудования. Дело в том, что в каждый данный момент времени схемы приоритета предоставляют доступ к некоторому блоку памяти только одному из процессоров, поэтому некоторые процессоры будут вынуждены ждать (так называемый «конфликт по памяти»). В результате к.п.б. увеличится менее чем в р раз, в то время как стоимость возрастет ровно в р раз, а это может сделать весь проект экономически невыгодным. Соотношение между однопроцессорными и мультипроцессорными системами по показателю стоимость/производительность изменилось с появлением мини-ЭВМ. Мини-ЭВМ (и тем более микро-ЭВМ), т.е., по сути своей, современные персональные компьютеры, оказались по крайней мере на порядок более эффективными по стоимости, чем большие машины. Есть целый ряд очевидных соображений, объясняющих причины этого явления: 1.Продолжающееся совершенствование полупровод-никовой технологии благоприятствует разработке небольших ЭВМ. Создание устройств памяти на БИС и кристаллов с арифметическими и логическими схемами резко снизило стоимость производства минимашин. Процессоры большого объема, работа которых зависит от специализированных логических схем, обеспечивающих ускорение арифметических операций, предварительную выборку и буферизацию команд, выполнение команд с перекрытием по времени и т.д., гораздо в меньшей степени приспособлены для применения современной технологии БИС. 2. Экономика крупномасштабного производства. Накладные расходы на одну ЭВМ при объеме производства от 104 до 106 персональных компьютеров в год будут меньше, чем при производстве 50-100 больших однопроцессорных вычислительных систем в год. 3. При существующей политике цен стоимость разработки программного обеспечения больших вычислительных систем полностью поглощается стоимостью аппаратуры. Стоимость как аппаратуры, так и программного обеспечения (что дороже) складывается из стоимости разработки и стоимости реализации, и в последнее время они значительно снизились. Кроме того, даже 8
в случае традиционных ЭВМ массовая продажа этих машин позволяет окупить затраты на аппаратуру и программное обеспечение. Что же касается параллельных систем, то их окупаемость достигается еще проще, так как они используют типовые серийно выпускаемые устройства на БИС. Проведенный анализ показал, что по показателю производительность/стоимость мультипроцессорные ЭВМ в 3-4 раза превосходят однопроцессорные ЭВМ, построенные на той же технологической базе. Однако результат такого сравнения очень сильно зависит от стоимости памяти. В настоящее время идет быстрый процесс снижения цен на микропроцессоры, что делает приведенные выше соображения еще более актуальными. Так, например, стоимость системы РЕРЕ, имеющей столько процессоров, что по количеству миллионов операций в секунду она сравнялась с большой однопроцессорной CDC 7600, составляет всего 10% от стоимости последней [1]. Создаваемые в настоящее время параллельные системы обработки данных разрабатываются на основе микропроцессоров или устройств на СБИС в рамках новейших технологий и будут еще более эффективными по своей стоимости. Теперь перейдем к обсуждению модульности. Еще одна причина, по которой ПВС экономически выгодны, состоит в следующем. До недавнего времени ЭВМ покупались и устанавливались как некие единые устройства. Всякий раз, когда возникала необходимость в большей ЭВМ с большим быстродействием, приходилось отказываться от старой машины и покупать новую. В то же время использование ПВС позволяет наращивать вычислительную мощность по мере необходимости. Такое свойство системы можно назвать «способностью к инкрементному наращиванию» или модульностью. Таким образом можно создавать конкретную архитектуру, наиболее отвечающую нуждам пользователя. Но самым важным преимуществом ПВС является не ее к.п.б. и не стоимостная эффективность, а надежность и живучесть, что особенно важно при использовании в области управления реальными процессами. Отказ в системе управления реальным процессом может вызвать значительно более тяжелые последствия, чем в случае отказа ЭВМ, работающей в условиях вычис9
лительного центра: это – нарушение безопасности людей, огромный материальный ущерб и потеря жизненно важной информации. Поэтому в данном случае очень важно, чтобы система постоянно находилась в рабочем состоянии и правильно функционировала. Однопроцессорная ЭВМ надежна ровно на столько, на сколько надежна ее самая «уязвимая» часть. Кроме того, отказ однопроцессорной ЭВМ – это катастрофа, в то время как при отказе одного из процессоров в ПВС оставшиеся процессоры потенциально работоспособны и система может продолжать выполнять свою задачу, правда, с несколько меньшей производительностью. При отключении некоторой части ПВС временно для технического обслуживания либо при обнаружении в ней неисправности система должна оставаться работоспособной и продолжать выполнять свои функции за счет небольшого снижения быстродействия. Более того, всегда, когда это возможно, такая непрерывность работы должна достигаться без дополнительных расходов на резервные (избыточные) компоненты, используемые, например, на некоторых телефонных станциях или других отказонеустойчивых системах. В таких системах аппаратура удваивается или утраивается, и все результаты сравниваются. Надежность достигается введением избыточных модулей и схемами голосования по большинству, что дорого, а, следовательно, уменьшается стоимостную эффективность. Производительность, стоимостная эффективность, надежность и живучесть ПВС тесно связаны между собой. Например, использование параллелизма в системе управления движением авиатранспорта увеличивает ее надежность, поэтому плата за обслуживание может быть увеличена, хотя цену надежности определить очень трудно. Увеличение быстродействия ЭВМ, управляющей распределением электроэнергии, может в некоторых случаях предотвращать отключение энергии, а значит, и быстродействие имеет свою цену. Таким образом, ПВС имеют ряд преимуществ, но заметного прогресса в области построения параллельных систем не наблюдается. Причины, по которым ПВС не пользуются особой популярностью, заключаются в следующем: 1. Инженерное дело по самой своей природе консерватив10
но. Здесь присутствует классическая тупиковая ситуация: мы не можем научиться программировать для мультипроцессорных систем, пока таких систем не существует, но мы и не построим такую систему, пока для нее не будет готовых программ. 2. На рынке нет спроса на эти системы. Другой тупик: откуда может появиться спрос, если даже неизвестно, что такие параллельные структуры могут существовать? 3. Ограниченная область применения; отсутствие «параллельной» математики; недостаток знаний о возможности разбиения задач на параллельные ветви; огромные затраты на разработку языка и программ. Еще одно немаловажное для синтеза ПВС замечание можно сформулировать следующим образом: «Хороший разработчик ЭВМ должен в первую очередь знать задачи потенциальных пользователей, знать ту технологическую базу, на которой будет построена система, и конкретных людей, которые осуществят разработку аппаратуры и программ для проектируемой ЭВМ». Область применения ПВС не так ограничена, как это может показаться. Так, среди прочих можно выделить следующие области приложений: задача фильтрации, трассировка, поиск документов, манипулирование файлами, управление данными, предсказание погоды, управление полетами, уплотнение данных, обработка сигналов, информационный поиск, сортировка, манипулирование символами, распознавание образов, обработка изображений, динамическое программирование, решение дифференциаль-ных уравнений и выполнение матричных операций. Таким образом, область применения ПВС очень разнообразна и включает в себя большинство задач, требующих большого объема вычислительной работы. КЛАССИФИКАЦИЯ АППАРАТНЫХ СРЕДСТВ ПВС. КЛАССИФИКАЦИЯ ФЛИННА.
В литературе используются различные схемы классификации компьютерных архитектур, и одной из наиболее популярных является классификация Флинна. В ее основу положено описание работы компьютера с потоком команд и потоком данных. По Флинну принято классифицировать все возможные ар11
хитектуры компьютеров на четыре категории (см. рис. 1.1): SISD (Single Instruction Single Data) – один поток команд, один поток данных; SIMD (Single Instruction Multiple Data) – один поток команд, много потоков данных; MISD – много потоков команд, один поток данных; MIMD – много потоков команд, много потоков данных. SISD-компьютеры – это обычные, традиционные последовательные компьютеры, в которых в каждый момент времени выполняется лишь одна операция над одним элементом данных (числовым или каким-либо другим значением). Последовательная ЭВМ выбирает команды и операнды из памяти, выполняет команды и записывает результаты в память. Выполняемые команды образуют поток команд, а операнды – поток данных между памятью и центральным процессором. Таким образом, обычная ЭВМ – это машина, содержащая память – для хранения программ и данных; устройство управления, которое выбирает команды из памяти, дешифрует их и запускает выполнение операций на арифметическом логическом устройстве (АЛУ); АЛУ, которое выполняет операции над операндами, считанными из памяти, и записывает результаты в ту же память. При этом адреса операндов и результатов передаются в память устройством управления. SIMD-компьютеры состоят из одного командного процессора (управляющего модуля), называемого контроллером, и нескольких модулей обработки данных, называемых процессорными элементами. Управляющий модуль принимает, анализирует и выполняет команды. Если в команде встречаются данные, контроллер рассылает на все процессорные элементы команду, и эта команда выполняется на нескольких или на всех процессорных элементах. Каждый процессорный элемент имеет свою собственную память для хранения данных. Одним из преимуществ данной архитектуры считается то, что в этом случае более эффективно реализована логика вычислений. До половины логических инструкций обычного процессора связано с управлением выполнением машинных команд, а остальная их часть относится к работе с внутренней 12
памятью процессора и выполнению арифметических операций. В SIMD-компьютере управление выполняется контроллером, а «арифметика» отдана процессорным элементам. Примером SIMD-компьютера является матричный процессор, использующий одно устройство управления, посылающее один поток команд ко всем своим подчиненным процессорам, которые выполняют их синхронно, но каждый – над своими собственными данными. Конвейерные ЭВМ можно отнести к MISD-системам (много потоков команд, один поток данных), учитывая, что каждый элемент данных последовательно обрабатывается в различных частях конвейера. В этом случае Si обозначают к этапов обработки одной команды. Когда на этапе Si заканчивается вычисление результата, он передается на этап Si+1, но может случиться, что в этот момент Si+1 еще продолжает работать над предыдущим элементом данных. Поэтому этапы должны отделяться друг от друга буферами. В данной системе ПЭ (процессорные элементы) – это не процессоры, а скорее части одного центрального процессора, в каждой из которых выполняется своя микрокоманда, из к которых складывается выполнение одной команды. Мультипроцессорные системы, АПВС и СПВС (асинхронные и синхронные) – это представители MIMD-систем (много потоков команд, много потоков данных). Эта категория архитектур вычислительных машин наиболее богата, если иметь в виду примеры ее успешных реализаций. К ней относятся симметричные параллельные вычислительные системы, рабочие станции с несколькими независимыми процессорами и т.д. Действительно, во всех этих системах подчиненные процессорные элементы (ПЭ) работают асинхронно. В СПВС ПЭ работают над различными данными, и, даже если в системе есть управляющий процессор (УП), его программа работает асинхронно с программами ПЭ. Мультипроцессорные системы и АПВС совсем не имеют УП, и поэтому их процессоры могут работать над абсолютно различными заданиями. Данные же, обрабатываемые процессорами, различны всегда, так что все эти системы являются MIMD-системами. РЕШАЕМЫЕ ЗАДАЧИ И ИХ КЛАССИФИКАЦИЯ
13
Дешифратор команд Устр-во управления
Арифметическое устройство
MD ПЭ
ПЭ
SI
MD ПЭ
ПЭ
MI ПЭ
УУ
УУ
УУ
YY SIMD
Дешифратор адресов
ПЭ
MIMD
14
D
S1
S2
Sk
ПЭ
ПЭ
ПЭ MI
D SD
ПАМЯТЬ
MISD
Рис. 1.1. Последовательная и параллельные вычислительные системы.
Для того, чтобы использовать преимущества вычислительной системы, состоящей из нескольких процессоров, а именно: ее потенциально высокую надежность, возможность инкрементного наращивания и очень высокую пропускную способность, необходимо уметь представить решаемую задачу в виде нескольких параллельных взаимодействующих процессов. На сегодняшний день это достигнуто лишь для небольшого числа специализированных задач и специалистами, хорошо знающими эти задачи. Одной из таких задач является предсказание погоды – выполнение наблюдений и обработка полученных данных параллельно в разных географических районах (одновременно и независимо, т.е. разбиение задачи по пространству и по данным) с последующим централизованным согласованием результатов. Отличительной чертой этой прикладной задачи является то, что она легко разбивается на независимые или квазинезависимые части. О таких задачах говорят, что они обладают внутренним параллелизмом и называют их p-задачами (не используя при этом никаким образом числового значения p). Другой отличительной особенностью задачи предсказания погоды является ее автономность, т.е. независимость или возможность разбиения задачи по пространству. Другая задача, которую обычно считают параллельной – это задача противоракетной обороны (ПРО), которая обычно сводится к опознаванию и слежению за целями, различению их между собой и их классификации. При этом машина должна инициировать отдельный файл для каждого обнаруженного объекта, связывать каждый отраженный сигнал, полученный локатором, с соответствующим файлом, обновлять содержимое файлов, производить над ним математические расчеты. Ограничения, накладываемые режимом реального времени, таковы, что в ответ на каждый отраженный сигнал (от нескольких сотен до нескольких тысяч таких сигналов в секунду) нужно сгенерировать и передать на локатор запрос на следующий сигнал, и сделать это нужно за заданный временной интервал (обычно от 25 до 200 мсек). Простой расчет показывает, что такая задача никоим образом не может быть решена на традиционных последовательных ЭВМ, даже на самых больших и мощных. Результаты измерений, выполняемых локатором, сравниваются с 15
данными о цели, хранящимися в файле. Сравнение m отраженных сигналов с n целями при обычном способе сравнения требует порядка mn операций, и только m операций, если сравнение производится ассоциативно. Такая ассоциативная память, поиск данных или манипулирование данными в которой производится не по адресам, а по содержанию, используется в системе РЕРЕ, применяемой для решения данной задачи. В добавление к трем основным требованиям, которые задача ПРО предъявляет к обработке данных (выполнение сравнений, математические расчеты и многомерный поиск в файлах), ЭВМ должна иметь чрезвычайно высокую надежность, и желательно, чтобы эта надежность была неотъемлемой чертой архитектуры ВС. Параллельная ассоциативная архитектура позволяет обеспечить необходимую надежность, но только в том случае, когда отдельные параллельно работающие элементы системы независимы друг от друга и отказ одного из элементов не влияет на работу других элементов и на решение задачи в целом. Таким образом, все задачи можно классифицировать по двум признакам: наличие внутреннего параллелизма и автономности. В терминах этой классификации задача ПРО является неавтономной p-задачей. Кроме нее к неавтономным p-задачам можно отнести задачи, решаемые в измерительных системах в области управления реальными процессами, когда каждому подчиненному процессору можно поручить свою специальную задачу, скажем, тестирование конкретного модуля, узла или системы, а управляющий процессор использовать для координации работ, для слежения за результатами тестирования и для регистрации данных по мере необходимости. Телефонная коммутация также является неавтономной p-задачей. К автономным не p-задачам относятся среди прочих: обработка сигналов, в частности, быстрое преобразование Фурье, сортировка, поиск, оптимизация и задачи линейной алгебры. К наиболее важному случаю – неавтономным не p-задачам – относятся следующие задачи: управление распределением электроэнергии, управление ядерным реактором, общий случай управления в реальном масштабе времени (управление реальными процессами), обработка изображений и распознавание образов, не16
автономное моделирование управляющих, медицинских, биологических и других систем, управление транспортом (особенно воздушным), дифференциальные анализаторы (для целей моделирования, которые в некоторых военных приложениях работают со скоростью, превышающей темп реального времени). Таким образом, в терминах выбранной классификации можно выделить четыре основных класса задач (автономные и неавтономные, p-задачи и не p-задачи), для решения которых целесообразно и, более того, необходимо использовать ПВС. ПРИНЦИПЫ РАСПАРАЛЛЕЛИВАНИЯ ВЫЧИСЛЕНИЙ ЗАДАЧИ РАСПАРАЛЛЕЛИВАНИЯ И ИХ АКТУАЛЬНОСТЬ
Использование современных высокопроизводительных вычислительных средств параллельного действия для обработки большого количества быстро поступающей информации определило распараллеливание алгоритмов как одно из основных направлений на современном этапе развития науки и техники. С одной стороны, важной задачей является автоматическое распараллеливание алгоритмов обработки информации. От ее решения во многом зависит успех внедрения многопроцессорных систем в практику вычислений. С другой стороны, при разработке высокопроизводительных вычислительных средств параллельного действия требуется априори определить основные свойства внутреннего параллелизма алгоритмов и закономерности, которым подчиняется структура параллельных процессов обработки информации. Определение классов алгоритмов, допускающих распараллеливание на заданном уровне и позволяющих проводить реализацию алгоритма за заданное время, является главной проблемой, от решения которой зависит успешная и целенаправленная разработка высокопроизводительных вычислительных средств для решения задач в реальном времени. Это позволит оптимально приблизить структуру задачи к структуре разрабатываемой вычислительной системы. Такое соответствие может быть полностью достигнуто лишь тогда, когда известны основные принципы построения классов алгоритмов, допускающих распараллеливание, то есть законы, которые определяют 17
внутреннюю структуру параллельных алгоритмов. Мультиобработка информации, архитектура мультипроцессорных систем, место и масштабы «ручного» и автоматического распараллеливания, языковые средства и методы распараллеливания и другие вопросы все больше и больше интересуют разработчиков и пользователей [2]. С одной стороны, естественный параллелизм реальных процессов является предпосылкой для разработки параллельных алгоритмов и языков их описания, то есть ручного распараллеливания. С другой стороны, последовательный характер мышления человека, многолетний опыт последовательной алгоритмизации и программирования делают предпочтительным автоматическое распараллеливание. Масштабы использования вычислительной техники, сложность производственных, технических, народнохозяйственных, природных и других объектов, моделирование которых требует наличия мощных многопроцессорных вычислительных систем и сетей ЭВМ, являются еще одним важным доводом в пользу автоматического распараллеливания и реализации управления мультиобработкой на уровне операционных систем. Следует отметить, что в связи с повышением мощности и надежности элементной базы возросли возможности параллельного выполнения (а, следовательно, и потребности распараллеливания) на различных операционных уровнях. Важное место в этой проблематике занимают теоретические вопросы, включающие выбор модели распараллеливания, определение эквивалентности программ, определение степени параллелизма и синхронизация параллельных процессов, анализ потенциального параллелизма алгоритмов и программ, определение максимального параллелизма и др. Нередко практические потребности могут быть удовлетворены системами распараллеливания, которые хотя и не обеспечивают максимального параллелизма, но позволяют в рамках приемлемой модели и соответствующего определения эквивалентности получать практически достаточно приемлемые параллельные программы. Такие системы, основываясь, как правило, на крупноблочном распараллеливании, значительно упрощают функции системы, освобождая ее от микрораспараллеливания, частой синхронизации, обмена и тех функций, кото18
рые связаны с анализом входной и синтезом выходной программ при мелкоблочном распараллеливании. Кроме того, имеются алгоритмы микрораспараллеливания, схемная (либо программно-схемная) реализация которых предпочтительна. Создание ПВС вызвало необходимость решения возникающей при этом проблемы параллельного программирования, одной из важнейших составных частей которой является задача десеквенции - т.е. распараллеливания алгоритмов, программ или непосредственно вычислений. Первоначально под распараллеливанием понималось преобразование последовательной программы в эквивалентную параллельную, обрабатываемую одновременно на нескольких процессорах. В настоящее время этот термин определяет комплексную процедуру «подгонки» алгоритма, программы или даже вычислительного метода к архитектуре конкретного или гипотетического вычислительного комплекса. Общая проблема «подгонки» структуры программы под архитектуру ЭВМ не является новой. Известны различные методы структуризации программ в целях оптимального использования памяти, быстродействующих регистров, каналов связи, устройств ввода-вывода и т.д. Специфика обработки, связанная с многопроцессорностью, также оказала влияние эту проблему. Разные типы архитектур обусловили разные грани постановки задачи распараллеливания. Так, для конвейерных ЭВМ актуальной стала задача векторизации, поскольку на настройку и разгон конвейера, реализующего данную операцию, тратится довольно большое время. Поэтому наиболее эффективно на конвейерных ЭВМ реализуются программы, состоящие из длинных серий однотипных операций и как можно меньшего числа одиночных операций и коротких серий. Векторизацией называется преобразование программы в эквивалентную ей, производящую обработку максимально длинными сериями однотипных операций, т.е. требующую минимального числа запусков конвейера. Задача векторизации может быть решена либо сборкой частей программы в новом порядке, либо распараллеливанием ее повторяющихся участков. Это приводит к образованию «вертикальных» серий однотипных операций, которые, в частности, могут быть выполнены и «горизонтально» в конвейере. Это лишь 19
один пример преобразования программ, который можно трактовать как частный случай распараллеливания. Характерными особенностями современных методов распараллеливания являются следующие: распараллеливание может производиться в динамическом режиме, т.е. независимые вычислительные акты могут выявляться в процессе вычисления и назначаться на обработку по мере освобождения требуемого оборудования; допускается наличие не только последовательных, но и параллельных входных программ, и может оказаться, что процедура распараллеливания производит не распараллеливание, а, наоборот, свертку излишне коротких параллельных ветвей; результирующая программа должна обладать наилучшими в каком-то определенном смысле характеристиками. Преобразование распараллеливания, как правило, производится в два этапа. На первом этапе «вскрывается» и фиксируется в каком-либо машинно-независимом виде параллелизм алгоритма или задачи, а на втором выполняется генерация программы с параллельной структурой, адекватной архитектуре реализующей ЭВМ. На любом из этих этапов можно использовать два подхода: универсальный и специальный. При специальном подходе имеют дело с известным классом задач, фиксированными языками программирования, характерными для них структурами программ и конкретным вычислительным комплексом. При универсальном подходе предполагается, что исходная программа может быть из любой предметной области и может иметь произвольную структуру. Задача распараллеливания ставится как задача разработки распараллеливателя или десеквентора – специальной программы (алгоритма), выполняющей автоматическое преобразование последовательной программы в эквивалентную параллельную. При этом в процессе выявления параллелизма и распараллеливания почти не используются интерпретация и семантика операций. Вычислительные средства классифицируют также довольно грубо, выделяя лишь их типы или схемы архитектуры ЭВМ. Таким образом, при универсальном подходе обнаруживаются наиболее устойчивые закономерности и разрабатываются наиболее общие методы распараллеливания. Анализ проблематики универсального распараллелив-ания 20
выявил несколько обобщающих особенностей этого направления исследований: 1. Несмотря на разнообразие конкретных постановок задач распараллеливания, возникающих на различных уровнях и этапах прохождения программ, оказалось возможным сформулировать постановку задачи распараллеливания как задачу нахождения эффективного преобразования программ или спецификаций одного класса в параллельные программы другого класса, осуществляющие, вообще говоря, асинхронную обработку данных со взаимодействием над общей памятью. Понятие общей памяти позволяет выразить многие механизмы взаимодействия между операторами и сформулировать проблему организации обработки с конкуренцией над разделяемыми ресурсами, отличными от памяти в обычном смысле этого слова. 2. При рассмотрении всего многообразия методов оказалось возможным выделить своего рода двойственные постановки задачи распараллеливания. Особенно отчетливо прослеживается двойственность императивного и регламентирующего контроля над вычислением. Первый тип контроля исходит из того, что первоначально запрещается выполнение всех вычислительных актов и для инициации какого-либо действия нужно дать указание об его выполнении. Второй тип контроля применяется к среде вычислителей, осуществляющих свободное хаотическое функционирование, и заключается в запрещении выполнения какихлибо актов. Оказалось, что первый и второй механизмы контроля внутренне весьма схожи и могут быть построены и обоснованы с помощью одного и того же математического аппарата. Конкретным проявлением этого типа двойственности можно считать взаимную зависимость и независимость операторов при распараллеливании массовых вычислений. Помимо того, что трактовка формализмов как двойственных друг другу помогает лучше понять природу вещей, это дает еще и определенную техническую выгоду: конструкции и доказательства утверждений о них переносятся из одной области в другую почти автоматически. 3. Обнаружилось, что в наиболее «чистых» постановках задача распараллеливания оказалась во многих случаях принципиально разрешимой. Речь идет о задаче максимального распараллеливания, в которой требуется построить программу, до21
пускающую все возможные вычисления, не нарушающие эквивалентность исходной схеме. Так, один из результатов можно интерпретировать как возможность организации «абсолютно быстрых вычислений», т.е. без учета особенностей интерпретации быстрее осуществлять все необходимые вычисления в принципе нельзя. И, наконец, следует отметить, что тот или иной метод распараллеливания сам по себе скорее всего не может являться основой для сколь-либо серьезной практической реализации, должен разрабатываться с учетом соответствующих теоретических результатов и представлять собой синтез некоторой совокупности универсальных и специальных методов. ДВА ПОДХОДА К РАСПАРАЛЛЕЛИВАНИЮ ВЫЧИСЛЕНИЙ ПАРАЛЛЕЛИЗМ ДАННЫХ И ПАРАЛЛЕЛИЗМ ЗАДАЧ
В настоящее время существуют два основных подхода к распараллеливанию вычислений. Это параллелизм данных и параллелизм задач. В англоязычной литературе соответствующие термины data parallel и message passing [3]. В основе обоих подходов лежит распределение вычислительной работы по доступным пользователю процессорам параллельного компьютера. При этом приходится решать разнообразные проблемы. Прежде всего это достаточно равномерная загрузка процессоров, так как если основная вычислительная работа будет ложиться на один из процессоров, мы приходим к случаю обычных последовательных вычислений и никакого выигрыша за счет распараллеливания задачи не будет. Сбалансированная работа процессоров - это первая проблема, которую следует решать при организации параллельных вычислений. Другая и не менее важная проблема - скорость обмена информацией между процессорами. Если вычисления выполняются на высокопроизводительных процессорах, загрузка которых достаточно равномерна, но скорость обмена данными низкая, основная часть времени будет тратиться впустую на ожидание информации, необходимой для дальнейшей работы данного процессора. Рассматриваемые способы программирования различаются методами решения этих двух проблем. Разберем их более подробно. 1. Параллелизм данных. Основная идея подхода, основанно22
го на параллелизме данных, заключается в том, что одна операция выполняется сразу над всеми элементами массива данных. Различные фрагменты такого массива обрабатываются на векторном процессоре или на разных процессорах параллельной системы. Распределением данных между процессорами занимается специальная программа. Векторизация или распараллеливание в этом случае чаще всего выполняется уже на этапе компиляции перевода исходного текста программы в машинные коды. Роль программиста в этом случае обычно сводится к заданию опций векторной или параллельной оптимизации компилятору, директив параллельной компиляции, использованию специализированных языков для параллельных вычислений. Наиболее распространенными языками для параллельных вычислений являются высокопроизводительный ФОРТРАН (High Performance FORTRAN) и параллельные версии языка С (например, С*). Более детальное описание рассматриваемого подхода позволяет выделить следующие его характерные особенности: Обработкой данных управляет одна программа; Пространство имен является глобальным, то есть для программиста существует одна единственная память, а детали структуры данных, доступа к памяти и межпроцессорного обмена данными от него скрыты; Слабая синхронизация вычислений на параллельных процессорах, то есть выполнение команд на разных процессорах происходит, как правило, независимо и только лишь иногда производится согласование выполнения циклов или других программных конструкций - их синхронизация. Каждый процессор выполняет один и тот же фрагмент программы, но нет гарантии, что в заданный момент времени на всех процессорах выполняется одна и та же машинная команда; Параллельные операции над элементами массива выполняются одновременно на всех доступных данной программе процессорах. Таким образом, в рамках данного подхода от программиста не требуется больших усилий по векторизации или распараллеливанию вычислений. Даже при программировании сложных вычислительных алгоритмов можно использовать библиотеки подпрограмм, специально разработанных с учетом конкретной архитекту23
ры компьютера и оптимизированных для этой архитектуры. Подход, основанный на параллелизме данных, базируется на использовании при разработке программ базового набора операций: операции управления данными; операции над массивами в целом и их фрагментами; условные операции; операции приведения; операции сдвига; операции сканирования; операции, связанные с пересылкой данных. Рассмотрим подробнее эти базовые наборы операций. Управление данными. В определенных ситуациях возникает необходимость в управлении распределением данных между процессорами. Это может потребоваться, например, для обеспечения равномерной загрузки процессоров. Чем более равномерно загружены работой процессоры, тем более эффективной будет работа компьютера. Операции над массивами. Аргументами таких операций являются массивы в целом или их фрагменты (сечения), при этом данная операция применяется одновременно (параллельно) ко всем элементам массива. Примерами операций такого типа являются вычисление поэлементной суммы массивов, умножение элементов массива на скалярный или векторный множитель и т.д. Операции могут быть и более сложными - вычисление функций от массива, например. Условные операции. Эти операции могут выполняться лишь над теми элементами массива, которые удовлетворяют какомуто определенному условию. В сеточных методах это может быть четный или нечетный номер строки (столбца) сетки или неравенство нулю элементов матрицы. Операции приведения. Операции приведения применяются ко всем элементам массива (или его сечения), а результатом их является одно единственное значение, например, сумма элементов массива или максимальное значение его элементов. Операции сдвига. Для эффективной реализации некоторых параллельных алгоритмов требуются операции сдвига массивов. Примерами служат алгоритмы обработки изображений, конечно-разностные алгоритмы и некоторые другие. Операции сканирования. Операции сканирования еще называются префиксными/суффиксными операциями. Префиксная операция, например, суммирование, выполняется следующим 24
образом. Элементы массива суммируются последовательно, а результат очередного суммирования заносится в очередную ячейку нового, результирующего массива, причем номер этой ячейки совпадает с числом просуммированных элементов исходного массива. Операции пересылки данных. Это, например, операции пересылки данных между массивами разной формы (т.е. имеющими разную размерность и разную протяженность по каждому измерению) и некоторые другие. При программировании на основе параллелизма данных часто используются специализированные языки - CM FORTRAN, C*, FORTRAN+, MPP FORTRAN, Vienna FORTRAN, H. P. FORTRAN (основанный на языке программирования FORTRAN 90), что связано с наличием в последнем удобных операций над массивами). 2. Параллелизм задач. Стиль программирования, основанный на параллелизме задач, подразумевает, что вычислительная задача разбивается на несколько относительно самостоятельных подзадач и каждый процессор загружается своей собственной подзадачей. Компьютер при этом представляет собой MIMDмашину. Для каждой подзадачи пишется своя собственная программа на обычном языке программирования, обычно это Фортран или С. Чем больше подзадач, тем большее число процессоров можно использовать, тем большей эффективности можно добиться. Важно то, что все эти программы должны обмениваться результатами своей работы, практически такой обмен осуществляется вызовом процедур специализированной библиотеки. Программист при этом может контролировать распределение данных между процессорами и подзадачами и обмен данными. Очевидно, что в этом случае требуется определенная работа для того, чтобы обеспечить эффективное совместное выполнение различных программ. По сравнению с подходом, основанном на параллелизме данных, этот подход более трудоемкий, поскольку с ним связаны следующие проблемы: повышенная трудоемкость разработки программы и ее отладки; на программиста ложится вся ответственность за равномерную загрузку процессоров параллельного компьютера; программисту приходится минимизировать обмен данны25
ми между задачами, т.к. пересылка данных - наиболее «времяемкий» процесс; повышенная опасность возникновения тупиковых ситуаций, когда отправленная одной программой посылка с данными не приходит к месту назначения. Привлекательными особенностями данного подхода являются большая гибкость и большая свобода, предоставляемая программисту в разработке программы, эффективно использующей ресурсы параллельного компьютера и, как следствие, возможность достижения максимального быстродействия. Примерами специализированных библиотек являются библиотеки MPI (Message Passing Interface), PVM (Parallel Virtual Machines). Эти библиотеки являются свободно распространяемыми и существуют в исходных кодах. ПРЕОБРАЗОВАНИЕ ПОСЛЕДОВАТЕЛЬНЫХ ПРОГРАММ В ПАРАЛЛЕЛЬНЫЕ
В многопроцессорных системах различных типов отдельные операции и, более того, отдельные части программ могут выполняться параллельно. В тех случаях, когда программы написаны на традиционных языках программирования, для преобразования последовательных программ в параллельные и реализации возможности параллельного счета необходимо проведение дополнительного анализа. В зависимости от типа вычислительного процесса во время трансляции необходимо выполнять различные типы распараллеливания. Поэтому дать общую схему фазы распараллеливания для любой системы трудно. Однако можно выявить типичные элементы распараллеливания и рассмотреть их, предполагая, что они используются в зависимости от требований конкретной системы. Перечислим эти этапы. 1. Распараллеливание линейных участков. Линейным участком программы назовем часть программы, операторы которой выполняются в естественном порядке или в порядке, определенном командами безусловных переходов. Линейный участок ограничен начальным и конечным операторами. Начальным оператором линейного участка назовем оператор, для которого выполняется по крайней мере одно из следующих условий: у 26
оператора не один непосредственный предшественник; у непосредственного предшественника более одного непосредственного последователя. Конечным оператором линейного участка назовем оператор, для которого выполняется по крайней мере одного из следующих условий: у оператора не один непосредственный последователь; у непосредственного последователя оператора больше одного непосредственного предшественника. Исходя из этих определений, легко построить алгоритм нахождения линейных участков. Внутри линейного участка распараллеливание может производиться по операторам, а внутри операторов - распараллеливание арифметических выражений. Распараллеливание по операторам позволяет при наличии вычислительных ресурсов выполнить сразу несколько операторов, что ускоряет проведение вычислений. 2. Распараллеливание циклов. Границы циклов находятся по формальным признакам описания циклов в соответствующих языках программирования. Процесс преобразования последовательного цикла для параллельного выполнения заключается в том, что из переменных формируются векторы, над которыми выполняются векторные операции. Поскольку векторные операции выполняются параллельно над всеми или частью элементов векторов (в зависимости от имеющихся вычислительных ресурсов), то происходит значительное ускорение вычислительного процесса. 3. Распараллеливание по процессам. В вычислительных системах с множественным потоком команд одновременно может выполняться несколько участков программ. В зависимости от структуры вычислительных систем взаимосвязь потоков команд между собой может быть различна. Каждый поток команд может быть совершенно независимой задачей. Потоки команд могут образовывать подзадачи одной задачи. В последнем случае между подзадачами сохраняется связь по данным, но каждая подзадача – это, как правило, достаточно большая программа, слабо связанная с другими подзадачами по управлению. Наконец, программа может быть разбита на относительно небольшие части, достаточно тесно связанные между собой как по данным, так и по управлению. Такие части программы, которые могут выполняться параллельно с другими частями, назовем процессами. Разбиение программы на асинхронные парал27
лельно выполняемые процессы может оказаться существенным фактором ускорения вычислительного процесса. 4. Разбиение программы на слабо связанные участки. Такое разбиение может оказаться полезным в тех случаях, когда анализ всей программы потребует слишком много времени изза огромного числа связей и комбинаций, которые необходимо проверить. Предварительная разбивка программ на слабо связанные участки, т.е. декомпозиция программ, может сократить это время, хотя, конечно, повлияет на полноту распараллеливания. Метод разбиения программ на слабо связанные участки может оказаться эффективным при разбиении программ по узлам (вычислительным машинам) локальной сети. Он может позволить сократить число межмашинных обменов. ПАРАЛЛЕЛЬНАЯ РЕАЛИЗАЦИЯ ЦИКЛИЧЕСКИХ УЧАСТКОВ ПРОГРАММ
Рассмотрение проблемы параллельной реализации повторяющихся участков программ следует начать с выделения двух подходов - универсального и специального. При универсальном подходе нас не интересует содержание тела цикла. Оно рассматривается как некоторый «черный ящик», имеющий множество входов и множество выходов. Дополнительно на тело налагаются некоторые условия, главное из них - отсутствие отсылок вне тела цикла по операторам условного или безусловного переходов. При заданных предположениях распараллеливание цикла ведется на основе лишь формального анализа информационных связей, поэтому распараллеленный цикл оказывается эквивалентен первоначальному при любой интерпретации операторов тела. Универсальные методы в большей мере ориентированы на использование в распараллеливающих трансляторах и в меньшей - на анализ вычислительного метода или алгоритма. Специальный подход вовлекает в рассмотрение более или менее зафиксированную форму тела цикла и область, над которой производится вычисление. Нередко параллелизм извлекается только при использовании специальных соотношений предметной области. Методы этого типа также можно использовать при компиляции. Они, как правило, выявляют более глубокий параллелизм, чем универсальные. Но это требует более глубо28
кого анализа для определения специфических конструкций. Большое разнообразие этих конструкций требует и большей предварительной работы по анализу их распараллеливаемости. Кроме того, естественно, увеличиваются объем транслятора и время трансляции. Это заставляет рассматривать специальные методы прежде всего как средство анализа алгоритмов при ручном программировании. Рассмотрим специальные методы. Трудно провести какуюлибо их классификацию, так как в каждом из них присутствует часть специфики предметной области, но попытаемся это сделать. Ключом классификации выберем тип преобразования структурных данных. Можно различить четыре типа обработки и соответственно четыре типа циклов. 1. Тип «скалярный ® скалярный». В циклах этого типа не присутствуют массивы от индекса цикла и можно легко показать, что он либо эквивалентен некоторой циклической конструкции, либо задает рекурсивное применение некоторой, может быть, достаточно сложной составной операции вида: WHILE P DO x : = f (x). Стандартный прием «извлечения быстродействия» для такого цикла - сдваивание, т.е. следующая замена: WHILE P DO x : = f (f (x)). Выигрыш получается за счет того, что композиция ff вычисляется, как правило, быстрее, чем дважды f. Например, f есть линейное преобразование: x : = ax + b. Для вычисления двух таких итераций требуется два умножения, два сложения и два обращения к памяти. В то же время итерация x : = a(ax + b) + b = a2x + ab + b при совмещении операций a2, ab и предположении, что время умножения больше времени сложения, требует двух умножений, одного сложения и одного обращения к памяти. Этот прием может быть повторен произвольное число раз, что в итоге дает известный метод рекурсивного сдваивания. 2. Тип «скалярный ® векторный» производит на основе некоторой скалярной информации генерацию некоторого массива, зависящего от параметра цикла i. Пример такого цикла можно получить, модифицировав цикл WHILE P DO x : = f (x) : 29
WHILE P DO x (i) : = f (x (i - 1)); i = i + 1. Отличие последнего цикла в том, что вычисляется не только окончательное значение х, но и сохраняются все промежуточные. 3. Тип «векторный ® скалярный» задает выполнение некоторых редуцирующих действий над массивом, в результате чего получается скаляр. Простейший пример - «свертывание» массива посредством некоторой ассоциативной операции A: х = х (1) Е х (2) Е х (3) Е ... Е х (n). Конструкции такого рода хорошо изучены и реализуются параллельно в порядке, максимально близком к полному логарифмическому дереву. 4. Тип «векторный ® векторный». Преобразование информации, задаваемое такими циклами, заключается в переработке элементов одного массива в другой. В качестве примера рассмотрим упорядочение элементов массива Х путем вычисления позиции p(i) i-го элемента в упорядоченном массиве: FOR i = 1, n DO, FOR j = 1, n DO, IF x (j) < x (i) THEN p(i) : = p(i) + 1. Цикл вычисляет для каждого i число p(i) элементов массива Х, строго меньших x(i). Первоначально массив Р нулевой. В итоге p(i) будет указывать номер элемента, после которого должен стоять x(i). Параллельную версию цикла можно записать n так: FOR i = 1, n DO PARALLEL p(i) : = ∑ k ( x j < x i ). j =1
Для каждого i одновременно суммируются все результаты сравнений, а вычисление p(i) можно организовать по типу полного логарифмического дерева. Характерной особенностью всех перечисленных примеров является то, что время реализации цикла было уменьшено с величины порядка n (в последнем случае - даже n2) до величины O (log n). Но никакой даже самый глубокий формальный анализ не позволил бы осуществить эти преобразования без обращения «внутрь» тела цикла. Во всех случаях использовались некоторые специфические законы: ассоциативность, дистрибутивность, а в последнем цикле - особое свойство оператора условного перехо30
да. Однако, если иметь минимальную информацию о структуре тела цикла и входящих в него операций, преобразование уже можно было бы выполнить автоматически. Таким образом, четкой грани между формальным и специальным подходом нет. Она фиксируется, как только фиксируется какая-то гипотеза о доступности информации о теле. Наиболее универсальный случай это представление тела цикла в виде «черного ящика». Универсальные методы. Переходя к обзору универсальных методов, прежде всего заметим, что можно выделить интрациклическое (интраитерационное) и интерциклическое (интеритерационное) распараллеливание. Первое проводится внутри тела цикла обычными методами распараллеливания ациклических фрагментов. Второе предполагает совмещение при вычислении различных итераций цикла. Именно интерциклическое распараллели-вание как использующее специфику оператора цикла мы и рассмотрим. Все методы можно условно разделить на три категории. Методы первой из них тем или иным способом используют развертку цикла и последующее применение традиционной техники распараллеливания, разработанной для циклических участков. Ведь в конечном итоге любой цикл задает последовательное выполнение итераций, т.е. участок без циклов. Но воспользоваться этим непосредственно на практике не представляется возможным ввиду громоздкости развернутого цикла. Поэтому в работах предлагаются различные приемы для «сжатия» информации о развертке. Так развертка может выполняться только для информации о связях итераций. К методам этого класса можно отнести и универсальный метод, заключающийся в построении автономных ветвей из всех информационно-связанных итераций. Еще один прием - развертка цикла на некоторую глубину, достаточную для выявления набора параллельных итераций, которыми можно загрузить все свободные процессоры. В целом в результате применения таких методов получается либо некоторая параллельная форма, состоящая из набора ветвей, либо находится алгоритм, осуществляющий динамический анализ и назначение итераций на обработку. Методы второй категории используют в качестве результирующих конструкций некоторые новые формы задания массо31
вых вычислений, существенным образом отличающиеся от последовательных и параллельных циклов. Обычно это некоторая форма векторных и матричных операций. Методы третьей категории основываются на анализе тела цикла и преобразовании цикла в некоторую форму парал-лельного цикла. По характеру результирующей формы эти методы отличаются от методов второй категории несущественно. Наиболее важное различие методов второй и третьей категории в том, что последние не используют или почти не используют преобразование тела цикла и не меняют его операционную семантику. Как правило, меняется только заголовок, что является удобным при практическом применении. ОПЕРАЦИИ НАД МАССИВАМИ И МНОЖЕСТВАМИ
Операции над массивами как средство укрупнения объектов, над которыми производятся вычисления, появились в языках программирования задолго до создания векторных и матричных процессоров. Но только с появлением этих процессоров, ставших мощным средством ускорения вычислительного процесса, операции над массивами в языках программирования стали средством ускорения вычислений. В большинстве случаев операции над массивами – естественное обобщение скалярных операций, и реализуются они обычно по следующим правилам. Результатом бинарной операции над массивами является также массив, который есть результат данной операции над одноименными элементами операндов. Если один из операндов бинарной операции - скаляр, а другой - массив, то результатом этой операции является массив, каждый элемент которого - результат данной операции над скаляром и элементом операнда-массива. Результатом унарной операции над массивом является массив, каждый элемент которого – результат данной унарной операции над соответствующим элементом массива-операнда. Результатом операции редукции над массивами может быть скаляр. В набор стандартных функций соответствующих языков программирования включаются функции от аргумента-массива; предоставляется также возможность создавать функцииформулы, аргументами которых являются массивы. 32
В некоторых языках вводится набор специальных векторных операций, которые реализуют следующие функции: генерацию вектора целых чисел с шагом 1 по заданным верхней и нижней границам, генерацию вектора заданной длины из одинаковых элементов, замену значений всех компонент вектора на заданное значение, определение длины вектора, выборку компоненты вектора по индексу, выборку нескольких компонент по нескольким индексам, циклический сдвиг вектора. Вводится также набор операций над множествами: определение числа элементов множества, пересечение, объединение множеств, сумма и разность множеств и т.д. ПРИНЦИПЫ ПОСТРОЕНИЯ ПАРАЛЛЕЛЬНЫХ ВЫЧИСЛИТЕЛЬНЫХ СИСТЕМ ПРИЗНАКИ И ПОЛНАЯ СХЕМА КЛАССИФИКАЦИИ ПАРАЛЛЕЛЬНЫХ ВЫЧИСЛИТЕЛЬНЫХ СИСТЕМ
В качестве основных признаков классификации, характеризующих организацию структуры и функционирования вычислительных систем с точки зрения параллельности работы, выберем следующие: 1) тип потока команд в центральной части ВС; 2) тип потока данных в центральной части ВС; 3) способ обработки данных в центральных устройствах обработки; 4) степень связанности компонент ВС; 5) степень однородности основных компонент ВС; 6) тип внутренних связей в ВС. Эти шесть признаков определяют базовую схему классификации, содержащую семь уровней иерархии, в которой переход от каждого i-го уровня к следующему более низкому (i+1)-му уровню определяется соответствующим i-м признаком. В этой схеме и во вводимой далее нотации классов вычислительных систем используются следующие условные обозначения: ВС - вычислительные системы; ОК, МК - одиночный и множественный потоки команд соответственно (SI, MI); ОД, МД - одиночный и множественный потоки данных 33
соответственно (SD, MD); С, Р – пословная и поразрядная обработка данных в центральных обрабатывающих устройствах соответственно; Нс, Вс – низкая и высокая степень связанности ВС соответственно; Ор, Нр – однородная и неоднородная ВС соответственно; Кн, Пм, Пр – системы со связями «канал-канал», через общую внешнюю память и непосредственно между процессорами соответственно; Ош, Мш, Пк – системы со связями через одну общую шину с разделением ее времени, со связями через множество шин при использовании многовходовых модулей оперативной памяти и с перекрестными связями при помощи матричного коммутатора соответственно. Обозначения (нотации) классов систем будем составлять из условных обозначений каждого узла схемы, начиная с узлов второго уровня, через которые нужно пройти по стрелкам от узла ВС до узла данного класса систем включительно (рис.3.1). Первые три признака классификации характеризуют организацию функционирования вычислительных систем и определяют в общих чертах их структуру. Они являются двузначными и поэтому образуют в совокупности 8 классов систем (классы 4го уровня). Переход от первого ко второму уровню соответствует разделению систем по типу потока команд – одиночный или множественный – между модулями оперативной памяти и устройствами управления или процессорами. При переходе к третьему уровню системы разделяются по типу потока данных между центральными обрабатывающими устройствами и модулями памяти. Далее при переходе к четвертому уровню иерархии системы разделяются по способу обработки данных в центральных устройствах обработки – пословной или поразрядной. Системы с одиночными потоками команд и данных и с пословной обработкой данных (ОКОДС) представляют собой обычные процессоры, а с поразрядной обработкой (ОКОДР) – одноразрядные процессоры. Эти системы соответствуют SISD-типу машин классификации Флинна. Системы с одиночным потоком команд и множественным потоком данных имеют в качестве характерных представителей с пословной обработкой (ОКМДС) матричные 34
Магистральные системы
НС
ВС
НС
Однородные многопроцессорны е системы
Неоднородные многопроцессорные системы Неоднородные многомашинные системы
МД
8
Рис. 3.1. Схема классификации вычислительных машин
6 уровень
35
системы и ансамбли процессоров, с поразрядной обработкой (ОКМДР) – ассоциативные системы (SIMD-тип по Флинну). Типичными представителями класса систем с множественным потоком команд и одиночным потоком данных при пословной обработке (МКОДС) являются магистральные (конвейерные) системы; при поразрядной обработке (МКОДР) – системы с конвейером одноразрядных обрабатывающих устройств (MISD-тип
Однородные многомашинные системы
ОШ МШ ПК
НР ОР НР ОР
ОШ МШ ПР КН ПМ ПР КН ПМ ПР 7 уровень
Матричные и векторные Системы с ансамблем процессоров
ВС Ассоциативные системы
5 уровень
Одноразрядные процессоры Обычные процессоры
Р С
7 Р
6 С
5 Р
4 С
3 Р
МК ОК 2 уровень
ОД МД ОД 3 уровень
2 С
1 4 уровень
ВС 1 уровень
по Флинну). Многопроцессорные и многомашинные системы образуют класс систем с множественными потоками команд и данных и с пословной обработкой (МКМДС). В качестве систем с поразрядной обработкой (МКМДР) можно представить системы однобитовых процессоров, связанных между собой (MIMD-тип по Флинну). Последние три признака схемы классификации определяют классы систем со сложной структурой. На схеме показаны классы пятого, шестого и седьмого уровней для реально существующих систем. При переходе к пятому уровню схемы происходит разделение на системы с низкой и высокой степенью связанности, к шестому - на однородные и неоднородные системы и, наконец, при переходе к седьмому уровню системы разделяются по типу связей между устройствами их центральной части. Низкая степень связанности для систем типа ОКМДС означает, что обрабатывающие устройства имеют индивидуальные блоки оперативной памяти и связаны с устройством управления, но не имеют непосредственных связей между собой. Высокая степень связанности для систем такого класса означает, что обрабатывающие устройства имеют индивидуальные блоки оперативной памяти и, по меньшей мере, связаны линиями с соседними обрабатывающими устройствами. Типичные представители первых систем - ансамбли процессоров, в вторых - матричные системы (а также системы с векторным потоком данных, имеющие общую оперативную память). Наиболее сложную структуру имеют многомашинные и многопроцессорные системы. Первые из них характеризуются низкой степенью связанности, вторые - высокой, поскольку имеют общую оперативную память. Многомашинные системы обычно содержат конструктивно законченные вычислительные машины и могут состоять как из однотипных, так и из разнотипных машин. В состав многопроцессорных могут входить как однотипные, так и разнотипные процессоры. Характерными типами связей, которые могут использоваться в различных комбинациях, в однородных и неоднородных многомашинных системах являются связи «канал-канал» при помощи адаптера, через внешнюю память на магнитных дисках и лентах и непосредственно между процессорами для обмена сигналами о состоя36
нии друг друга, прерывания работы и для прямого управления. Характерными типами связей в однородных и неоднородных многопроцессорных системах между их процессорными модулями и модулями оперативной памяти являются связи при помощи одной шины с разделением времени обмена информацией, многошинные связи с применением многовходовых модулей оперативной памяти и перекрестные связи при помощи сосредоточенного или распределенного перекрестного (матричного) коммутатора. Шины и матричный коммутатор используются и для присоединения внешних устройств. Ряд параллельных вычислительных систем обладает признаками более чем одного класса. Так, например, ортогональные системы являются комбинацией систем типа ОКОДС и ОКМДР. Такого рода системы с признаками отличающихся друг от друга классов естественно считать системами с комбинированной структурой. Некоторые системы могут в процессе работы так изменять режим функционирования, что «переходят» из одного класса в другой. Такие системы называют системами с перестраиваемой структурой. ПОТОКИ КОМАНД И ДАННЫХ. ОСНОВНЫЕ СТРУКТУРЫ И ОПРЕДЕЛЕНИЯ
Понятия одиночных и множественных потоков команд и данных и четыре соответствующих класса вычислительных систем (ОКОД, ОКМД, МКОД, МКМД), как уже указывалось, введены М.Дж.Флинном. Под потоком команд понимается последовательный ряд команд, выполняемых системой, а под потоком данных - последовательный ряд данных, вызываемых потоком команд, включая промежуточные результаты. Множественность и число потоков определяются как максимально возможное число одновременных операций (команд) или операндов (данных), находящихся в одинаковой стадии обработки (на наиболее узком участке организационной структуры). В системах типа ОКМД одно устройство управления осуществляет управление работой множества процессорных модулей так, что каждый из них выполняет одну данную команду, затем следующую и т.д., т.е. реализуется синхронный параллель37
ный вычислительный процесс. Подмножества процессорных модулей могут пропускать выполнение команд, что определяется при помощи операций маскирования. В системах такого типа реальная скорость обработки информации сильно зависит от возможностей загрузки процессорных модулей, т.е. от возможностей распараллеливания. В системах типа МКОД процесс обработки разбивается на несколько этапов, каждому из которых соответствует один из процессорных модулей. Эти модули составляют в совокупности магистраль обработки (конвейер процессоров). Реальная скорость обработки зависит от возможностей заполнения магистрали. Наиболее высокая скорость обработки достигается при выполнении длинных линейных участков программ с однородными операциями. При частых прерываниях линейных участков командами ветвления скорость обработки снижается. В системах типа МКМД несколько устройств управления осуществляют управление одновременным выполнением различных участков одной и той же программы, т.е. реализуется асинхронный параллельный вычислительный процесс. Такие системы обладают большой гибкостью. Реальная скорость обработки информации зависит от возможностей загрузки процессоров, однако, если распараллеливание вычислений при выполнении данной программы затруднено, то можно, воспользовавшись наличием нескольких устройств управления, одновременно выполнять несколько программ, повышая тем самым загрузку процессоров. Системы типа МКМД отличаются высокой надежностью вследствие хороших возможностей взаимного резервирования однотипных устройств и машин. Системы рассмотренных четырех классов включены в базовую схему классификации и составляют с учетом переходов по уровням иерархии ее первый, второй и третий уровни. КРАТКОЕ ОПИСАНИЕ ОСНОВНЫХ КЛАССОВ ПВС
Параллельная обработка информации представляет собой одновременное выполнение двух и более частей одной и той же программы двумя или более процессорными модулями вычислительной системы. Ее следует отличать от мультипрограммирования, основное содержание которого составляет разделение 38
времени и оборудования между двумя или более программами, функционирующими одновременно и размещенными полностью или частично в оперативной памяти. Возможен мультипрограммный режим параллельной обработки. Вычислительные системы параллельной обработки информации или, более коротко, ПВС, содержат два или более процессорных модулей и подразделяются на три основных класса: ОКМД, МКОД, МКМД (см. п. 3.2.) Они представляют собой такие системы, в центральной части которых имеется два или более потока команд и (или) данных. Системой типа ОКМД называется некоторая параллельная вычислительная система с единственным общим модулем управления работой множества процессорных модулей, причем все или часть этих модулей одновременно выполняет поток команд. Такие системы, как уже упоминалось, делятся на системы с пословной (ОКМДС) и поразрядной (ОКМДР) обработкой. Основными типами систем ОКМДС являются ансамбли процессоров, системы с векторным потоком данных и матричные системы. Характерной особенностью таких систем является то, что они обрабатывают данные параллельно и обращаются к ним при помощи адресов, а не при помощи тэгов (признаков флажков, меток) или выборки по содержимому ячеек памяти. Ансамбли процессоров представляют собой такие системы, в которых процессорные модули упорядочиваются общим потоком управления и обработки, как правило, это - сравнительно небольшие процессоры без взаимосвязей либо с низкой степенью связанности. Системы с векторным потоком данных и матричные системы представляют собой такие параллельные системы, в которых процессорные модули упорядочиваются общим потоком управления и обработки, как правило, это сравнительно небольшие процессоры с высокой степенью связанности. В первых системах процессоры обычно имеют общую оперативную память и являются фактически составными арифметико-логическими устройствами обработки, которые выполняют последовательную команду за командой над векторами операндов. Во вторых системах процессоры имеют индивидуальную оперативную память и составляют матричную конфигурацию со связями между непосредственными соседями. 39
Если не считать машины Унгера (1958г.) [4], которая была узкоспециализированной и предназначалась только для решения задач распознавания образов, то, по-видимому, первой матричной системой следует считать систему SOLOMON [1]. Система содержит 1024 процессорных элемента (ПЭ) (рис.3.2), соединенных в виде матрицы 32Х32. Каждый ПЭ в матрице соединен с четырьмя соседними и включает в себя процессор, обеспечивающий выполнение последовательных поразрядных арифметических и логических операций, а также оперативное ЗУ емкостью 16 Кбит, разбитое на модули по 4 Кбит каждый. Длина слова переменная – от 1 до 128 разрядов. Разрядность слов устанавливается программно. По каналам связи от устройства управления (УУ) передаются команды и общие константы. В ПЭ используется так называемая многомодальная логика, которая позволяет каждому ПЭ выполнять (т.е. быть активным) или не выполнять (быть пассивным) общую операцию в зависимости от значений обрабатываемых данных. В каждый момент все активные ПЭ выполняют одну и ту же операцию над данными, хранящимися в собственной памяти и имеющими один и тот же адрес. Идея многомодальности заключается в том, что в каждом ПЭ имеется специальный регистр на четыре состояния – регистр моды. Общее устройство управления
ПЭ
ПЭ
ПЭ
ПЭ
ПЭ
ПЭ
ПЭ
ПЭ
ПЭ
Рис. 3.2. Структурная схема матричной системы
40
Мода (или модальность) заносится в этот регистр от УУ. При выполнении последовательности команд модальность передается в коде операции и сравнивается с содержимым регистра моды. Если есть совпадение, то операция выполняется. В других случаях ПЭ не выполняет операцию, но может в зависимости от кода пересылать свои операнды соседнему ПЭ. Такой механизм позволяет, в частности, выделить строку или столбец ПЭ, что может быть полезным при операциях над матрицами. Взаимодействуют ПЭ с периферийным оборудованием через внешние ПЭ. Система SOLOMON оказалась нежизнеспособной вследствие громоздкости, недостаточной гибкости и эффективности. Однако идеи, заложенные в ней, получили развитие в системе ILLIAC-IV [1, 5], разработанной Иллинойским университетом и изготовленной фирмой «Барроуз». В каждом квадранте 64 ПЭ образуют матрицу размером 8Х8. Схема связей между ПЭ похожа на схему системы SOLOMON, но связь с внешней средой имеют все ПЭ без исключения. Реально действующая система ILLIAC-IV состоит, таким образом, из двух частей: центральной с устройством управления и 64 ПЭ, а также подсистемы ввода-вывода, включающей в себя универсальную ЭВМ В-6700, файловые диски и лазерную архивную память большой емкости. Каждый ПЭ состоит из собственно процессора и ОЗУ. Процессор оперирует с 64-разрядными числами и выполняет универсальный набор операций. Быстродействие процессора достаточно высокое: операция сложения 64-разрядных чисел выполняется за 240 нс, а умножения - за 400 нс. Таким образом, процессор выполняет в среднем 3 млн. операций в секунду, а, следовательно, производительность системы равна 200 млн. операций в секунду. Емкость ОЗУ каждого ПЭ составляет 2048 64-разрядных слов, длительность цикла обращения к памяти 350 нс. Память выполнена на интегральных схемах. Каждый процессор имеет счетчик адресов и индексный регистр, так что конечный адрес в каждом процессоре может формироваться как сумма трех составляющих. Это существенно повышает гибкость системы по сравнению с системой SOLOMON, где все ПЭ выбирают ин41
формацию по одному адресу. Каждый процессор кроме индексного регистра имеет в своем составе пять программно-адресуемых регистров: накапливающийся сумматор, регистр для операндов, регистр пересылок, используемый при передачах от одного ПЭ к другому, буферный регистр на одно слово и регистр управления состоянием ПЭ (аналогичный регистру моды в системе SOLOMON). Регистр управления имеет 8 разрядов. В зависимости от содержимого этого регистра ПЭ становится активным или пассивным, а также выполняет ряд пересылочных операций. Если вычисления не требуют полной разрядности, то процессор может быть разбит на два 32-разрядных подпроцессора или даже восемь 8-раэрядных. Это позволяет в случае необходимости обрабатывать векторные операнды из 64, 2Х64=128 и 8Х64=512 элементов. Система ILLIAC была включена в состав вычислительной сети АКРА. В результате усовершенствования программного обеспечения производительность системы выросла до 300 млн. операций в секунду. Основным типом систем ОКМДР являются ассоциативные системы. Характерной особенностью таких систем является то, что их процессорные модули (или память со встроенной логической обработкой) реализуют адресацию на основе свойств содержимого данных. Ассоциативные системы подразделяются на системы с ассоциативной памятью и системы с ассоциативными процессорами (ассоциативные матричные системы). Системы с ассоциативной памятью оперируют с данными при доступе к ним при помощи тэгов или выборки по содержимому ячеек памяти в большей степени, чем при помощи адресов. Системы с ассоциативными процессорами обычно оперируют со срезами разрядов данных (срез разряда данных - это совокупность разрядов одной и той же фиксированной позиции в множестве слов данных). Ассоциативное ЗУ (рис.3.3.) включает в себя: устройство управления (УУ), запоминающий массив, регистр ассоциативных признаков (Рг АП), регистр маски (Рг М), регистр индикаторов адреса со схемами сравнения на входе. В АЗУ могут быть и другие элементы. Выборка информации из АЗУ происходит следующим образом: в регистр ассоциативных признаков из УУ 42
передается код признака искомой информации. Код может иметь произвольное число разрядов, от одного до m (m-максимальное число разрядов). Если код признака используется полностью, то он без изменения поступает на схему сравнения. Если же необходимо использовать только часть кода, то ненужные разряды маскируются с помощью регистра маски. Перед началом поиска информации в АЗУ все разряды регистра индикаторов адреса устанавливаются в единичное состояние. После этого производится опрос первого разряда всех ячеек запоминающего массива, и содержимое сравнивается со значением 1-го разряда регистра ассоциативных признаков. Если содержимое разряда запоминающего массива не совпадает с содержимым разряда регистра ассоциативных признаков, то в соответствующую ячейку регистра индикатора адреса заносится “0”, в противном случае состояние не меняется (остается “1”). Затем эта операция повторяется со вторым, третьим разрядом и так до последнего. После поразрядного опроса и сравнения в единичном состоянии останутся те разряды регистра индикаторов адреса, которые соответствуют ячейкам, содержащим информацию, совпадающую с записанной в регистр ассоциативных признаков. Эта информация затем считывается в последовательности, определенной в УУ. Устройство управления РгАП Запоминаю щий массив
РгАП
Ячейка 0 Ячейка 1 Ячейка n-1
Регистр индикаторов адреса
Т0 Схема сравнения
Т1
Рис.3.3. Структура ассоциативного запоминающего устройства
43
Очевидно, что время поиска информации в запоминающем массиве по ассоциативному признаку зависит только от числа разрядов признака и от скорости опроса разрядов, но совершенно не зависит от числа ячеек запоминающего массива, поскольку при опросе анализируются все ячейки. Этим и определяется главное преимущество ассоциативных ЗУ. В адресных ЗУ при операции поиска необходим перебор всех ячеек запоминающего массива. Запись новой информации в запоминающий массив производится без указания номера ячейки. Обычно один из разрядов в каждой ячейке используется для указания ее занятости, то есть если ячейка свободна для записи, то в этом разряде записан “0”. В этом случае при записи в АЗУ новой информации устанавливается признак “0” в соответствующем разряде регистра ассоциативных признаков и определяются все ячейки запоминающего массива, которые свободны для записи информации. В одну из этих ячеек УУ и записывает информацию. Нередко АЗУ строится таким образом, что, кроме ассоциативной, допускается и прямая адресация данных, что представляет определенные удобства при работе с периферийными устройствами. Запоминающие элементы АЗУ в отличие от элементов адресных ЗУ должны не только хранить информацию, но и выполнять определенные логические функции, которые позволяют осуществлять поиск не только по равенству содержимого ячейки заданному признаку, но и по другим условиям, а именно: содержимое ячейки больше признака, меньше или равно. Оперативные АЗУ способны формировать несколько потоков идентичной информации, которая обрабатывается большим числом операционных устройств. На основе ассоциативной памяти легко реализуется изменение места порядка расположения информации. Благодаря этому АЗУ является эффективным средством формирования набора данных в высокопроизводительных системах. Использование таких систем на практике показало, что они эффективны при решении задач обработки радиолокационной информации, распознавания образов, обработки различных снимков и других. Итак, высокая степень параллельности обработки может быть достигнута тогда, когда одноименные операции выполня44
ются одновременно над всем множеством содержащихся в выделенном поле ассоциативной памяти слов. Для этого в состав ассоциативной вычислительной системы вводятся обрабатывающие элементы, реализующие арифметическую и логическую обработку информации. Достижение наивысшей степени параллельности обработки возможно, когда число обрабатывающих элементов соответствует числу обрабатываемых слов. При этом, если слова обрабатываются последовательно поразрядно, то в текущий момент времени обрабатывающие элементы обрабатывают разрядный срез всех слов данных. К параллельным системам типа МКОД с пословной обработкой данных относятся магистральные (конвейерные) системы - такие системы, в которых осуществляется одновременное выполнение нескольких команд при помощи последовательного прохождения слов потока данных через магистраль (конвейер) нескольких специализированных блоков обработки. При этом обработка разбивается на соответствующее число подзадач (этапов), каждая из которых выполняется на одном из указанных специализированных блоков. Принцип магистральной (конвейерной) обработки основан на разделении вычислительного процесса на несколько подпроцессов, каждый из которых выполняется на отдельном устройстве. При этом последовательные процессы могут выполняться одновременно на своих устройствах подобно тому, как это имеет место в промышленных технологических процессах. Принцип конвейерной обработки может применяться на различных уровнях иерархии вычислительного процесса, начиная с уровня построения логических схем устройств. В зависимости от уровня применения принципа конвейерной обработки можно выделить, рассматривая уровни снизу вверх, арифметико-магистральные, командно-магистральные и макромагистральные системы; а в зависимости от типа применяемых команд обработки среди магистральных систем можно выделить системы с обычными и системы с векторными командами. Для эффективной реализации конвейера должны выполняться следующие условия: система выполняет повторяющуюся операцию; 45
эта операция может быть разделена на независимые части, степень перекрытия которых невелика; трудоемкость операций примерно одинакова. Количество подопераций называют глубиной конвейера. Важным условие нормальной работы конвейера является отсутствие конфликтов, т.е. данные, подаваемые в конвейер, должны быть независимыми. В том случае, когда очередной операнд зависит от результата предыдущей операции, возникают такие периоды работы конвейера, когда он пуст, что вызывает снижение эффективности его использования. Увеличение быстродействия, которое можно получить при помощи конвейера, описывается формулой: n * d / (n + d), где n - количество операндов, d - глубина конвейера. К числу ЭВМ, в которых широкое применение нашел конвейер команд, относится одна из лучших отечественных машин БЭСМ-6 [4]. Эта ЭВМ, разработанная под руководством академика С.А.Лебедева в 1966 г., была в течение многих лет самой быстродействующей в стране благодаря целому ряду интересных решений, в том числе и конвейеру команд. Последний обеспечивался использованием восьми независимых модулей ОЗУ, работающих в системе чередования адресов, и большого числа быстрых регистров, предназначенных также и для буферизации командной информации. Это позволило получить на БЭСМ-6 производительность 1 млн операций в секунду. В структурной схеме (рис.3.4) конвейерной вычислительной системы STAR-100 [5] используются оба типа конвейера (и команд, и данных). Система содержит 3 конвейерных процессора: - ППЗ – процессор, содержащий конвейерное устройство, выполняющее сложение и умножение с плавающей запятой. - ППФЗ – процессор, содержащий конвейерное устройство сложения с плавающей запятой и умножения с фиксированной запятой, деления и извлечения корня. - СП – специализированный конвейерный 16-ти разрядный процессор, выполняющий операции с фиксированной запятой и ряд логических операций. 46
МП1 УПП МП32
Блок управления потоками данных и буферами
ППЗ ППФЗ СП
каналы вода-вывода
Рис. 3.4.Структурная схема конвейерной вычислительной системы
Конвейерные процессоры в системе SТАR-100 оперируют 64-х разрядными или 32-х разрядными числами и каждые 40 наносекунд выдают результаты в блок управления потоками данных и буферами. Оперативное ЗУ построено по модульному принципу и содержит 32 модуля памяти. Оно работает с чередованием адресов под управлением устройства управления памяти. Конвейерный сумматор с плавающей запятой состоит из 4 сегментов или специализированных операционных устройств. Продолжительность числа каждого сегмента составляет 40 наносекунд. Таким образом, время выполнения операции сложения с плавающей запятой - 160 наносекунд. Конвейерный умножитель включает в себя 8 сегментов (8 операций), поэтому время выполнения операции умножения составляет 320 наносекунд. При загрузке конвейера длинной последовательностью операндов, под которыми производится одна и та же операция, результат выдается каждые 40 наносекунд. Учитывая, что каждый из двух основных процессоров может выдавать по 2 32-х разрядных результата, то система SТАR-100 может достигать быстродействия до 100 млн. операций в секунду. Одной из наиболее высокопроизводительных вычислительных систем считается СRАY. В этой системе конвейерный принцип обработки используется в максимальной степени. Имеется и конвейер команд, и конвейер арифметических и логических 47
операций. В системе широко применяется совмещенная обработка информации несколькими устройствами. Все это позволило при решении научных задач достигнуть производительности в 250 млн. операций в секунду. В качестве систем МКОД с поразрядной обработкой данных можно рассматривать системы с конвейером одноразрядных процессоров. Системой типа МКМД называется некоторая параллельная вычислительная система с несколькими модулями управления работой нескольких процессорных модулей, причем эти модули выполняют несколько потоков команд. Число процессоров составляет обычно величину в пределах от 2 до 10, но может достигать и нескольких десятков, особенно в микропроцессорных системах. Основные типы систем МКМД с пословной обработкой – это многопроцессорные и многомашинные системы. Многопроцессорной системой называется такая параллельная система, которая содержит два или более сильно связанных центральных процессора, общую для них оперативную память и, целиком или частично, общие периферийные устройства, включая периферийные процес-соры и каналы ввода-вывода, управление которыми как единым комплексом осуществляет единственная операционная система. В многопроцессорной ВС могут быть несколько копий одной операционной системы. Таким образом, многопроцессорная ВС содержит два или более процессорных модулей, функционирующих под единых управлением, и осуществляет одновременную обработку нескольких команд и данных при общей иерархической памяти. Более подробно характерные черты многопроцессорных систем можно представить следующим образом. Многопроцессорная система включает два или более центральных устройств обработки информации - центральных процессорных модулей. Эти устройства могут иметь как одинаковые, так и различные характеристики. Основная память (оперативная память) должна находиться в общем пользовании и должна быть доступной для всех процессоров системы. Процессоры могут иметь некоторую собственную память. В системе должен быть общий доступ ко всем устройствам ввода-вывода, включая каналы, устройства управления и периферийное оборудование. В системе дол48
жна быть единая интегрированная операционная система, осуществляющая общее управление аппаратными и программными средствами. При этом должна быть предусмотрена возможность тесного взаимодействия аппаратных средств и программного обеспечения: на уровне системного программного обеспечения при выполнении системных задач; на программном уровне при выполнении частей одной и той же программы несколькими процессорами или при выполнении нескольких независимых программ (мультипрограммный режим параллельной обработки) - на уровне обмена данными; на уровне аппаратных прерываний. Следует отметить, что взаимодействие аппаратных и программных средств зависит не только от организации взаимных связей, но и от системного программного обеспечения и процедур обработки данных. Базовая структурная схема многопроцессорной системы изображена на рис.3.5, где тонкими линиями показаны связи для сигналов управления, а жирными линиями – связи для данных и команд.
Центральный процессор
Центральный процессор
Центральный процессор
Общая память Общее управление вводом-выводом Рис. 3.5. Базовая структурная схема многопроцессорной системы
Многомашинной системой называется такая параллельная система, которая содержит обычно две или более однопроцессорных или многопроцессорных слабо связанных между собой ВС с общей внешней памятью и/или со связями через каналы ввода/вывода, работающих совместно под управлением своих 49
операционных систем. В системе возможны непосредственные связи между процессорами в целях управления. В ее состав могут входить однопроцессорные и многопроцессорные системы одного и того же или различных типов, а также магистральные, матричные, ассоциативные и другие системы. В качестве систем МКМД с поразрядной обработкой можно рассматривать системы связанных между собой одноразрядных процессоров. Системами с комбинированной структурой называются такие ПВС, структуры которых характеризуются комбинацией признаков существенно отличающихся друг от друга классов. Одним из наиболее известных типов систем с комбинированной структурой являются ортогональные системы. Они представляют собой такие ПВС, которые ведут обработку двумя процессорами обычным процессором типа ОКОДС и ассоциативным процессором типа ОКМДР - и используют общую для них оперативную память в режиме разделения оборудования, вследствие чего являются системами с высокой степенью связанности. Системами с перестраиваемой структурой будем называть такие ПВС, которые обладают возможностью в процессе работы изменять тип структуры и, в предельном случае, осуществлять «переходы» от одного класса к другим существенно отличным классам. Такие системы в последнее время получили быстрое развитие в связи с разработкой и созданием распределенных ВС на базе микропроцессоров. Вычислительные системы с иерархической структурой могут иметь и более двух уровней иерархии. ЭВМ, выполняющие предварительную обработку информации, часто называют машинами-сателлитами. По типу структуры ВС разделяются с постоянной и переменной структурами. Под структурой ВС понимают состав системы и схемы функциональных и управляющих связей между ее элементами. В системах с постоянной структурой в процессе ее функционирования не изменяется состав функциональных и управляющих связей между ее элементами. Переменную структуру имеют адаптивные системы, т. е. такие, у которых структура изменяется на основе анализа текущей информации. Подобные 50
системы позволяют достичь оптимального состояния в любых изменяющихся условиях функционирования. По степени централизации управления ВС делятся на централизованные, децентрализованные и со смешанным управлением. В централизованных ВС все функции управления сосредоточены в одном элементе, в качестве которого используется одна из ЭВМ, называемая машиной-директором, или центральный процессор. В децентрализованной ВС каждый процессор или ЭВМ действует автономно, решая свои задачи. В системе со смешанным управлением ВС разбивается на группы взаимодействующих ЭВМ (или процессоров), в каждой из которых осуществляется централизованное управление, а между группами – децентрализованное. Концепция распределенных вычислительных систем быстро развивается и изменяется, в силу чего еще не является сложившейся. В настоящее время под такими системами понимается новый класс ВС, имеющих большое число рассредоточенных универсальных средств (ресурсов) аппаратного и программного обеспечения с возможностью быстрой и гибкой перестройки, функционирующих автономно, но, вместе с тем, согласованно под управлением операционной системы высокого уровня, объединяющей их в единое целое и обеспечивающей их взаимодействие через сеть связи. Распределенные ВС воплощают дальнейшее развитие многомашинных и многопроцессорных систем с децентрализованным управлением, в том числе существующих мини- и микропроцессорных систем. Следует выделить вычислительные сети. Они состоят из территориально разнесенных центров (узлов), образуемых самыми разнообразными ВС, и систем связи, линии которых соединяют центры в некоторую конфигурацию сети. Вычислительные центры функционируют в той или иной автономно друг от друга и взаимодействуют между собой через систему связи. Вычислительные сети, в силу своих особенностей, существенно отличаются от других типов ПВС и обладают ярко выраженной спецификой как в части организации структуры и функционирования, так и в части программного обеспечения. Их целесообразно рассматривать особо. Мы рассмотрим соотношение 51
их внутренних связей с внутренними связями других вычислительных систем. Различие между распределенной ВС и вычислительной сетью является, в принципе, вопросом о размерах, местоположении и функциях узлов, а также о количестве взаимодействий между ними. Если все компоненты системы относительно малы, зависимы и локализованы, то их можно считать частями одной распределенной вычислительной системы (машины). Если, наоборот, они достаточно сложны и независимы, то их можно рассматривать как разные машины сети. Множество разнообразных смешанных форм, вероятно, станет обычным в ближайшие годы. Возможно, что концепция центрального процессора устареет. Большая вычислительная машина будет в этом случае укомплектована десятками, сотнями или даже тысячами идентичных процессоров, выполненных на одном кристалле (или даже части кристалла), у каждого из которых будет своя функция. Некоторые из этих процессоров могут иметь микропрограммы для компиляции программ (для каждого языка - один процессор), для выполнения программ после компиляции (также со специализацией процессоров по языкам), для осуществления связи с пользователями в оперативном режиме, для управления большими базами данных, для аппаратной диагностики и других целей. Одно из направлений развития ВС имеет дело с высокопараллельными устройствами массовой обработки (на уровнях вплоть до самых элементарных операций), называемыми вычислительными средами. Вычислительная среда представляет собой совокупность простейших одинаковых автоматов, одинаковым образом соединенных между собой и программно настраиваемых на выполнение некоторой функции из функционально полного набора. Основные принципы построения вычислительных сред - параллельность, конструктивная однородность и программная изменяемость структуры. Основные типы ПВС представлены на рис. 3.6. На этом рисунке выделены однородные и неоднородные многопроцессорные ВС, поскольку характеристики однородности и неоднородности в большой степени влияют на структуру многопроцессорных систем в силу их сильной связанности. ВС с повы52
53
ВС с одиночным потоком команд и множественным потоком данных
ВС с множественным потоком команд и одиночным
ВС с множественными потоками команд и данных
ВС с комбинированными и переменными потоками команд и
Ансамбли процессоров
Магистральные (конвейерные) ВС
Многомашинные ВС
ВС с комбинированной й
ВС с векторным потоком данных
Макромагистральные ВС
Многопроцессорные ВС
Ортогональные ВС
Матричные ВС
Командномагистральные ВС
Однородные многопроцессорные ВС
Ассоциативные ВС
Арифметикомагистральные ВС
Неоднородные многопроцессорные ВС
ВС с ассоциативными
ВС с ассоциативной
ВС с повышенной надежностью
ВС с перестраиваемой структурой
Распределенные вычислительные системы и сети
Рис. 3.6. Основные типы параллельных вычислительных систем
шенной надежностью, а также распределенные ВС и сети показаны отдельно в связи с их спецификой.
Параллельные вычислительные системы
СТРУКТУРА СВЯЗЕЙ В ПАРАЛЛЕЛЬНЫХ ВЫЧИСЛИТЕЛЬНЫХ СИСТЕМАХ МЕЖПРОЦЕССОРНЫЕ СВЯЗИ В ВЫЧИСЛИТЕЛЬНЫХ СИСТЕМАХ И СЕТЯХ И ИХ КЛАССИФИКАЦИЯ.
Если рассмотреть на уровне оборудования связи для обмена информацией между процессорами, обеспечивающие соединение каждого процессора с любым другим в вычислительных системах и сетях, то можно построить схему классификации и структурную схему межпроцессорных связей, изображенную на рисунке 3.7. Схема имеет пять уровней, первый из которых является исходным, второй определяет стратегию организации обмена информацией, третий – метод управления соеди-нением трактов обмена, четвертый – структуру путей передачи информации, а пятый уровень определяет соответствующие типы структур вычислительных систем и сетей. Первый уровень – исходный, он включает внутренние связи для обмена информацией. Второй уровень включает прямые и косвенные (непрямые) тракты обмена. В первом случае осуществляется прямая передача информации, когда передатчик выбирает путь, а приемник распознает предназначающиеся для него сообщения. При этом в канале связи никакой логики не предусмотрено, за исключением, возможно, буферных устройств и устройств повторения сообщений. Во втором случае осуществляется непрямая передача информации, когда между передатчиком и приемником предусматривается логика выбора одного из нескольких альтернативных путей передачи на промежуточных пунктах, а также, в некоторых случаях, дополнительное преобразование сообщения. Управление соединением трактов обмена может быть централизованным и децентрализованным (третий уровень). При прямой передаче альтернатив не существует и не требуется управление соединением трактов обмена. Непрямая передача при помощи централизованного управления характеризуется тем, что все сообщения передаются через единый пункт, выполняющий функции промежуточного пункта назначения и одновременно источника для всех дальнейших передач. Непрямая передача при помощи децентрализованного управления характеризуется тем, 54
2 - уровень
прямые
3 - уровень
ничего
4 - уровень
5 - уровень
индивидуальные тракты
1
2
косвенные
централизованное назначение трактов обмена
распределенные тракты
3
4
индивидуальные распределенные тракты тракты
5
6
7
децентрализованное назначение трактов обмена
индивидуальные распределенные тракты тракты
8
Память
коммутатор
Рис. 3.7. Структурная схема межпроцессорных связей в ПВС
9
10
что осуществляется выбор одного из нескольких пунктов передачи информации.
55
Четвертый уровень соответствует двум структурам путей передачи информации. Первая определяет индивидуальные (раздельные) тракты обмена, которые назначаются (выделяются) для
Связи для обмена информацией
4 - уровень
осуществления обмена. Вторая структура определяет общие (разделяемые) тракты обмена, передача по которым осуществляется при помощи разделения времени этих трактов. Прямая передача по раздельным путям характеризуется тем, что каждый источник информации имеет один или несколько альтернативных путей передачи, причем ни один вид пути не используется более чем одним источником информации. Такая организация обеспечивает параллельность передач, однако не гарантирует максимальной скорости передачи из-за возможной задержки сообщений. Прямая передача с использованием общего пути осуществляется для всех сообщений только по этому общему пути. Непрямая передача при помощи раздельных путей и централизованного управления означает, что каждый источник имеет свой путь к промежуточному пункту и от него — к каждому приемнику. Непрямая передача при помощи общего пути и централизованного управления отличается от предыдущей тем, что используется единственный путь от промежуточного пункта к приемникам информации. Непрямая передача при помощи раздельных путей и децентрализованного управления предусматривает, что каждый путь имеет единственный источник, но может иметь много пунктов назначения. Непрямая передача при помощи общего пути и децентрализованного управления означает, что передача осуществляется по многим путям, каждый из которых может быть одновременно (совместно) использован многими приемниками информации в режиме разделения времени для обмена данными. Пятый уровень включает различные типы структур вычислительных систем и сетей (№№ 1, 2, ..., 10). Прямой передаче по раздельным путям соответствует кольцевая структура процессорных элементов без коммутаторов (№1), каждый элемент которой имеет соседа-предшественника и соседа-преемника. Передача инициируется данным предшественником, после чего каждый последующий элемент проверяет адрес сообщения и, в случае необходимости, передает его по индивидуальному пути дальше своему преемнику. Передача прекращается в пункте назначения. Такая структура отличается логической простотой и обладает явно выраженной модульностью, но она не обладает высокой надежностью, а скорость передачи в ней ограничена 56
из-за последовательного характера передачи информации по кольцу. В качестве примера можно указать кольцевую версию САМАС. Другим типом структуры при прямой передаче по раздельным путям является структура с полным набором связей (№2). В этом случае каждый источник имеет пути ко всем приемникам. Такая структура не отличается модульностью построения и характеризуется высокой стоимостью системы при большом числе элементов, но она обеспечивает высокую скорость обмена информацией при сравнительно простой логике организации этого обмена. Структуру с полным набором связей имеет вычислительная сеть MERIT, в которой соединены CDC 6500 и две машины IBM 360/67. Прямой передаче с общим путем соответствует классическая многопроцессорная структура с общей основной памятью (№ 3). В таких системах все сообщения передаются через основную память. При этом обеспечивается очень высокая пропускная способность, поскольку обмен фактически представляет собой запись в оперативную память и чтение из нее. Если такая память используется также и для обработки данных, что является типичным случаем, то она оказывается нередко узким местом системы. Другим типом структуры при прямой передаче с общим путем является структура с общей шиной (магистралью передачи), используемой для связи со всеми системными элементами в режиме разделения ее времени (№ 4). Такие структуры часто применяются в авиационно-космических системах и системах военного назначения, а также при построении автоматизированных систем в промышленности и научных лабораториях. Они отличаются простотой и явно выраженной модульностью, однако при их использовании требуется тщательное планирование занятия времени шины в целях повышения производительности всей системы. В качестве примера рассматриваемой структуры можно привести соответствующую конфигурацию САМАС. Непрямой передаче по раздельным путям при централизованном управлении соответствует структура в виде звезды (№ 5). При передаче сообщения проходят через центральный коммутатор. Такая структура часто реализуется на основе матричного коммутатора, однако в некоторых случаях при57
меняется также процессор как центральный элемент системы. Она отличается простотой логики работы, но не имеет высокой надежности. В качестве примера можно указать вычислительную сеть IBM Network/440. Другим типом структуры при непрямой передаче по раздельным путям при централизованном управлении является кольцевая структура процессорных элементов с центральным, коммутатором (№ 6). Такая структура сочетает в себе особенности кольцевой структуры (№ 1) и структуры в виде звезды (№ 5). Пересылка сообщений осуществляется по кольцу через центральный коммутатор или же ведется по кольцу под управлением центрального коммутатора, который осуществляет адресацию пересылок. В качестве примера можно отметить экспериментальную систему обмена информацией SPIDER. Непрямой передаче по общему пути при централизованном управлении соответствует структура с общей шиной и центральным коммутатором (№7). Такая структура в функциональном отношении эквивалентна структуре в виде звезды (№ 5). При этом ее главное отличие состоит в том, что процессоры связываются друг с другом не через индивидуальные тракты, соединяемые центральным коммутатором, а при помощи общей шины и организации доступа к ней. При передаче информации процессорный элемент посылает сообщение через общую шину к центральному коммутатору, который переправляет его к процессорному элементу-приемнику данного сообщения. На время передачи сообщения между каким-либо процессорным элементом и центральным коммутатором шина занята этой передачей, и другие процессорные элементы не имеют к ней доступа, т.е. заблокированы по входу и по выходу. Рассматриваемая структура сочетает в себе качества экономичности и логической простоты, но при ее применении приходится преодолевать некоторые трудности, связанные с невысокой степенью модульности и сравнительно невысокой надежностью. Непрямой передаче по раздельным индивидуальным трактам при децентрализованном управлении соответствует регулярная структура (№ 8). Каждый процессорный элемент связан с ближайшим соседом слева, справа, сверху и снизу, причем регулярный характер связи сохраняется и для крайних процес58
сорных элементов, которые соединяются с соответствующими им крайними процессорными элементами на противоположной стороне. Сообщения проходят через сеть от одного элемента к другому соседнему, причем каждый из процессорных элементов выбирает тракт для отсылки сообщения. Можно считать, что кольцевая структура без центрального коммутатора (№ 1) есть частный случай регулярной структуры, когда в последней каждый элемент имеет два связанных с ним соседних элемента и когда не принимается решений о выборе тракта для отсылки сообщения. Модульность и высокие характеристики надежности определяются регулярным характером рассматриваемой структуры. Вместе с тем, такая структура требует сложной логики организации работы, выдвигает проблемы полной загрузки узлов сети и соединяющих их линий и другие. В настоящее время такие структуры представляют интерес, скорое, с точки зрения исследований, однако перспективы их применения на практике представляются очень обнадеживающими. Другим типом структуры при непрямой передаче по раздельным индивидуальным трактам и децентрализованном управлении является нерегулярная структура (№ 9). Она становится все более распространенной в таких системах, в которых процессоры и связи между ними имеют высокую стоимость. Здесь не требуется связь процессора с каждым соседним процессором, что усложняет логику переключения при передаче сообщений, но упрощает межпроцессорные связи. При использовании нерегулярной структуры достигается довольно высокая надежность системы и, одновременно, возможность ее наращивания новыми модулями. Основное применение нерегулярная структура находит в вычислительных сетях с географически разнесенными узлами, пример — сеть ARPA. Непрямой передаче по общему тракту при децентрализованном управлении соответствует структура с общей шиной и комбинированным подключением к ней коммутаторов и процессорных элементов (№ 10). Такая структура подобна нерегулярной структуре с точки зрения характеристик модульности и возможностей наращивания. Однако она обладает более низкими характеристиками надежности и меньшими возможностями реконфигурации, поскольку процессорные элементы и комму59
таторы используют единственный тракт передачи информации. Структуры с общей шиной при комбинированном подключении к ней коммутаторов и процессорных элементов становятся все более распространенными, в особенности, в универсальных вычислительных системах на базе мини-ЭВМ. В качестве примера системы с такой структурой можно отметить систему PLURIBUS, предназначенную для выполнения функций связи в узлах сети ARPA. Направления дальнейшего развития и применений рассмотренных структур будут в значительной степени связаны с распределенными вычислительными системами и сетями. Среди структур можно выделить по совокупности их основных характеристик четыре «доминирующие» структуры, а именно: кольцевую структуру (№ 1), структуру с общей шиной (№4), структуру в виде звезды с коммутатором в центре и процессорными элементами в концах лучей (№ 5) и нерегулярную структуру (№ 9). Проведенный анализ показывает, что эта классификация или какая-либо подобная ей представляет собой полезные инструменты для выбора структуры системных связей и количественной оценки выбранной системы по нескольким основным показателям. Одно из достоинств классификации состоит в возможности систематического перебора и сравнения всех вариантов. Рассмотренная классификация, как обычно, обладает определенной степенью условности. Некоторые существующие вычислительные системы и сети не могут быть однозначно отнесены к тому или иному типу структур и сочетают в себе признаки структур более чем одного типа. ОСНОВНЫЕ ТИПЫ СТРУКТУРЫ СВЯЗЕЙ
Несмотря на большое разнообразие вычислительных систем, существует только три основных типа связей между центральной частью и каналами ввода-вывода. В структурах первого типа («канал – центральный процессор») каналы подключаются к центральному процессору (рис. 3.8), и информация из канала поступает в процессор (процессор фактически управляет обменом между памятью и каналами). В структурах второго типа («канал — основная память») все данные передаются непосредственно на входы основной памяти, в которой они могут накапли60
ваться для обработки процессором или для выборки на какоелибо устройство (рис. 3.9). В структурах третьего типа («канал – системный контроллер») предусматривается центральный узел коммутации: все передачи данных к периферийным устройствам, центральным процессорам и главной памяти, а также все передачи данных от них осуществляются через и под управлением системного контроллера (рис. 3.10).
Основная память
Контроллер ввода-вывода
Системный контроллер
Контроллер ввода-вывода
Центральный процессор
Контроллер ввода-вывода
Периферийные устройства
Рис. 3.8. Структура межпроцессорной связи «Канал – центральный процессор»
В конкретных вычислительных системах устройства, имеющие одинаковые функции, могут отличаться с точки зрения деталей их функционирования, а также в названиях. На рис. 3.83.10 изображены основные типы структур без каких-либо их деталей. В большинстве традиционных систем, в особенности однопроцессорных, каналы ввода-вывода подключены непосредственно к центральному процессору, при этом основная память часто конструктивно совмещается с процессором. На рисунке 3.8 представлена структура с непосредственным 61
подключением трех независимых каналов к центральному процессору, с которым конструктивно совмещена основная память. Основным достоинством такого типа структуры является то, что требуется наименьшее количество оборудования, и что стоимость оказывается также наименьшей. Системы со структурой «канал – центральный процессор» наиболее целесообразно применять в тех случаях, когда требования к ресурсам систем должны или могут быть определены заранее и когда они не меняются в динамике работы. Это определяется тем обстоятельством, что все функции по управлению сосредоточены в процессоре (данные поступают в основную память и из основной памяти под управлением программы, выполняемой центральным процессором). Основной областью применения систем, в которых каналы подключены к центральному процессору, является пакетная обработка, которая в настоящее время занимает главное место при использовании вычислительных машин. Основным недостатком структуры «канал – центральный процессор» является требование повышенной производительности центрального процессора, которое вытекает из необходимости быстрой обработки случайного потока прерываний. Этот недостаток влечет несколько других недостатков. Имеет место жесткое ограничение на число подключаемых каналов с точки зрения их эффективного использования, особенно при одновременной работе, так как при большом числе каналов процессор большую часть времени затрачивает на обслуживание прерываний, связанных с вводом и выводом. Кроме этого, при обработке со сложным взаимодействием процессов и при работе систем с виртуальной памятью типичным является положение, когда возникает большое число непланируемых запросов на ввод-вывод. В этих условиях при использовании систем с подключением каналов к центральному процессору необходима такая операционная система, которая бы компенси-ровала недостатки структуры. Наконец, ограничение на число каналов приводит, естественно, к ограничению числа обслуживаемых периферийных устройств. Проблема ограничений на число каналов и на число периферийных устройств может быть решена во многих случаях путем введения подканалов или путем совместного использования каналов. Для повышения ско62
рости обработки и пропускной способности системы требуется более тщательное и квалифицированное программирование и обоснованное распределение приоритетов между периферийными устройствами. Рассмотрим структуру типа «канал – основная память» (рис. 3.9). В этом случае имеется прямой независимый доступ к основной памяти, которая реализуется конструктивно как отдельное устройство в виде двух или более компонент вычислительной системы. Запись данных в основную память и считывание их из нее осуществляются, логически и физически, без непосредственного вмешательства центрального процессора. Все основные части системы, осуществляющие обработку и передачу информации (центральные процессоры, процессоры ввода-вывода и контроллеры ввода-вывода), представляют собой устройства, подключенные к соответствующим входам модулей основной памяти. Они работают независимо друг от друга. Эти устройства, с одной стороны, имеют дело с отдельными входами основной памяти, а с другой стороны, – с периферийными устройствами. Модуль основной памяти
Модуль основной памяти
Центральный процессор
Процессор ввода-вывода
Процессор ввода-вывода
Контроллер ввода-вывода
Контроллер ввода-вывода
Периферийные устройства
Рис. 3.9. Структура связи «Канал – основная память»
63
Главным достоинством данной структуры является одновременность операций ввода-вывода и вычислений благодаря независимому доступу к основной памяти. Разделение ввода-вывода и вычислений позволяет не только увеличить число каналов, с которыми может работать система, но и разгружает центральный процессор от большого числа прерываний. Вследствие такой независимости операций ввода-вывода и вычислений рассматриваемая структура наилучшим образом отвечает требованиям обработки со сложным взаимодействием процессов. Системы со структурой «канал – основная память» обладают гораздо боль-шей гибкостью по сравнению с системами со структурой «канал – центральный процессор». Наращивание первых для уве-личения их мощ-ности достигается простым добавлением ком-понентов систем, при этом отпадает необходимость в сложных завязках. Напри-мер, для увеличения вычислительной мощности обычно добавляется центральный процессор, который подключается к одному из входов основной памяти. В таких случаях ограничения могут быть вызваны только возможностями операционной системы по управлению получаемыми двух- или многопроцессорными системами. Таким образом, структура типа «канал — основная память» позволяет иметь большое число дополнительных входов памяти, независимых контроллеров ввода-вывода, процессоров ввода-вывода и других устройств. Все эти устройства, расширяя возможности системы, и, в частности, увеличивая ее гибкость, значительно увеличивают стоимость системы. Так, например, каждый вход памяти должен иметь свой собственный интерфейс и управляющую логику, а процессор или контроллер ввода-вывода — иметь интерфейс для обеспечения работы канала. Поэтому дополнительные каналы повышают гибкость системы, но и приводят к высокой стоимости системы. Число входов памяти может быть достаточно большим, однако следует учитывать, что центральный процессор полностью занимает вход памяти или разделяет его с ограниченным числом периферийных устройств. Например, если каждый модуль памяти в системе имеет четыре входа, то один из входов закрепляется за центральным процессором. Три оставшихся входа обычно предоставляются для работы с дисками, лентами и низкоскоростными устройствами 64
соответственно. В многопроцессорной системе, в которой каждый модуль памяти имеет, например, четыре входа, два входа выделяются центральным процессорам, а периферийные устройства должны совместно разделять два оставшихся входа. Можно сохранить достоинства структуры с многовходовой памятью и обеспечить при этом низкую стоимость системы, если использовать мультиплексор. Мультиплексоры могут быть непосредственно подключены ко входу памяти, чтобы обеспечить подключение дополнительных процессоров ввода-вывода и контроллеров ввода-вывода, или же они могут быть подключены к процессорам ввода-вывода и контроллерам ввода-вывода, чтобы обеспечить подключение дополнительных каналов ввода-вывода. Имеющиеся большие потенциальные возможности по организации работы множества каналов ввода-вывода не могут быть использованы из-за необходимости предоставления входов памяти в исключительное пользование центральным процессорам, причем, очевидно, чем больше центральных процессоров в системе, тем большее число входов основной памяти они занимают. Поэтому нередко каналам предоставляется только один или два остающихся входа памяти и, следовательно, системы со структурой «канал – основная память» в этом случае обеспечивают по существу те же возможности по обслуживанию каналов, что и системы с традиционной структурой «канал – центральный процессор». Существуют системы со структурой, которая может рассматриваться как вариант структуры «канал – центральная память». Такие системы имеют два центральных процессора, один из которых выполняет все функции ввода-вывода, а другой – все функции по реализации вычислений. Ясно, что такой подход представляет собой весьма дорогостоящий путь организации вычислительных систем. Перейдем к системам со струк-турой «канал – системный контроллер» (рис. 3.10). В системах такого типа центральным входом для каналов ввода-вывода, центральных процессоров и модулей основной памяти служит системный контроллер, который управляет доступом к основной памяти, как от каналов ввода-вывода, так и от центрального процессора. Этот контроллер является логическим связывающим звеном между основной памятью и центральным процессором и выполняет функции 65
регулирования потоков информации в системе. Рассматриваемая структура имеет сходство со структурой «канал – основная память» в том смысле, что в обоих случаях доступ к основной памяти со стороны каналов осуществляется без вмешательства центрального процессора. Вместе с тем системный контроллер обеспечивает доступ к основной памяти подобно тому, как это делает центральный процессор в системах со структурой «канал – центральный процессор», т.е. структура «канал – системный контроллер» с этой точки зрения подобна структуре «канал – центральный процессор». Таким образом, структура «канал – системный контроллер» соединяет в себе особенности структур «канал – центральный процессор» и «канал – основная память». При этом, однако, системный контроллер представляет собой самостоятельное функциональное устройство, которое при правильном применении может обеспечить в системе сочетание достоинств двух последних структур.
Основная память
Контроллер ввода-вывода
Системный контроллер
Контроллер ввода-вывода
Центральный процессор
Контроллер ввода-вывода
Периферийные устройства
Рис.3.10. Структура связи “Канал – системный контроллер”.
66
Основное достоинство структуры «канал – системный контроллер» заключается в логической координации всех системных действий. Центральный процессор имеет все возможности для выполнения вычислений, в то время как контроллер осуществляет жесткое управление системой. Одна из проблем, которая возникает для структуры «канал – центральный процессор», состоит в том, что требуется постоянно взаимодействовать с каналами и, как следствие, обслуживать с привлечением процессора большое число прерываний. Эти прерывания возникают в произвольные моменты времени, и их влияние на пропускную способность системы может быть самым различным. С другой стороны, в структуре «канал – основная память» имеются скрытые потери, связанные с постоянным опросом со стороны центрального процессора о том, что произошло в течение последнего цикла его работы. Системный контроллер не имеет отмеченных выше недостатков. Он освобождает центральный процессор от действий по низкоприоритетным вводам и выводам информации и в то же время обеспечивает постоянную готовность центрального процессора к обработке прерываний. Поскольку системный контроллер может устранить недостатки, обсуждавшиеся выше, структура с системным контроллером может считаться эффективной для выполнения как локальных вычислений, так и вычислений со сложным взаимодействием. Ввиду того, что стоимость оборудования, составляющего системный контроллер, близка к стоимости центрального процессора, то стоимость системы минимальной конфигурации близка к стоимости двухпроцессорной системы. Кроме этого, алгоритм, управляющий работой системного контроллера, может либо давать преимущества вычислениям перед вводом-выводом, либо отнимать, вследствие чего возникают трудности в балансировке работы системы. Поэтому применение рассматриваемой структуры в ряде случаев может оказаться нерациональным, а эффективность – сильно зависящей от характера решаемых задач. Существует ряд систем, в которых использованы варианты структуры с системными контроллерами. В некоторых из таких систем эти контроллеры выполняют функции общего интерфейса и управления доступом к памяти. В других системах они выполняют только 67
функции коммутации и не обеспечивают приоритетного доступа к памяти, при этом все требования обслуживаются в порядке их поступления. Эти системы могут быть настроены как на первоочередное выполнение вычислений, так и на первоочередное выполнение ввода-вывода в зависимости от требований конкретной области применения. В настоящее время наметилась тенденция распределенной обработки при помощи групп микропроцессоров. Микропроцессорные компоненты системы, вероятно, не будут крупными фиксированными функциональными устройствами, явно отделёнными друг от друга, такими как традиционные устройства управления, арифметико-логические устройства и блоки вводавывода. Вместо этого они будут, по-видимому, динамически перестраиваемыми элементами в целях решения некоторой задачи обработки информации. Например, если данная программа требует большого объема вычислений, то элементы перестраиваются в устройства обработки. Если же, наоборот, требуется большое число операций ввода-вывода, то они перестраиваются в устройства для ввода-вывода. Уже построено несколько микропроцессорных систем с изменяемой структурой. Они занимают промежуточное положение между системами большой и средней производительности. Будущие системы могут быть построены из элементов, имеющих различные возможности – от ограниченных до самых широких. Распространению таких систем будет способствовать простота наращивания элементов, количество которых будет ограничено лишь возможностями операционной системы по управлению этими элементами. ПРИНЦИПЫ ПРОГРАММИРОВАНИЯ В ПАРАЛЛЕЛЬНЫХ ВЫЧИСЛИТЕЛЬНЫХ СРЕДАХ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПВС
Программное обеспечение вычислительной системы делится на две части: программное обеспечение базовой машины и программное обеспечение системы, которая состоит из системы параллельного программирования (Р-программирования) и управляющей системы. Программное обеспечение системы ха68
рактеризуется независимостью от числа электронных машин (ЭМ) в системе, функциональной идентичностью при реализации на любой ЭМ, изменяемостью модулей и наращиванием их состава, возможностью использования вычислительной системы в режиме коллективного доступа. Основные задачи управляющей системы – обеспечение связи с внешним миром и рациональное использование ресурсов системы. Гибкость использования ресурсов и универсальность применения вычислительных систем достигаются введением режимов параллельной обработки, автономной работы машин, режима профилактики и режима диспетчера; иерархической структурой управляющей программы, состоящей из главного диспетчера, старших диспетчеров режимов автономной работы и параллельной обработки, диспетчеров элементарных машин. На систему Р-программирования возлагается задача обеспечения достаточно широких возможностей при написании и отладке параллельных программ. В состав системы Р-программирования входят языки для записи параллельных алгоритмов, получаемые путем расширения соответствующих языков операторами системных взаимодействий; трансляторы с языков, позволяющие при автоматизации параллельного программирования использовать трансляторы базовой машины; средства отладки Р-программ, анализирующие качество Р-программ и выявляющие ошибки взаимодействий Р-ветвей путем моделирования параллельного процесса на одной ЭМ; а также средства специальной организации Р-программ, такие как: сегментирование Р-ветвей с целью экономии оперативной памяти; подготовка высоконадежных вычислений, обеспечивающих продолжение счета при сбоях и выходе машин из строя; средства управления заданиями (языки директив), облегчающие пользователю реализацию различных видов работ: запуск и снятие Р-программ, задание и уничтожение Р-файлов, задание графика работы подсистем и т.д. Особенности работы вычислительной системы и ее программного обеспечения в сильной мере определяются параметрами ЭМ и, в частности, ее стоимостью. По мере удешевления ЭМ и в связи с развитием интегральной технологии становится 69
все более реальным направление, основанное на построении вычислительной системы из большого числа простых и дешевых вычислительных модулей. Алгоритмы планирования обеспечивают разбиение системы на подсистемы в соответствии с поступающими задачами. Каждая такая подсистема в течение определенного интервала времени работает в монопрограмном режиме, обслуживая задачи, которые требуют для своей реализации как раз столько ЭМ, сколько их имеется в наличии в подсистеме. По истечении заданного промежутка времени происходит новое разбиение системы на подсистемы. Такая организация работы позволяет получить эффект, эквивалентный тому, что в процессе функционирования основное число ЭМ ведет непрерывный счет, а одна или несколько ЭМ занимаются обменом с внешней памятью. При работе простых ЭМ проявляется тенденция к упрощению операционных систем. В этом случае ЭМ рассматривается как единица ресурса системы, которая работает в подсистеме в монопрограммном режиме. Монопрограммный режим работы ЭМ позволяет упростить работу операционной системы, не снижая эффективность работы системы в целом. В основу построения простых и эффективных операционных систем для вычислительных систем могут быть положены принципы модульности и иерархичности структуры, многопрограммности ЭМ и подсистем, адаптивности к внешним условиям, крупноблочности при распараллеливании алгоритмов. СТРУКТУРИЗАЦИЯ И ВЫПОЛНЕНИЕ ПАРАЛЛЕЛЬНЫХ ПРОГРАММ
Все современные языки программирования обязательно не только отражают, но и подчеркивают иерархическую структуру алгоритмов. Выделение, подчеркивание уровней иерархии, лексико-графических уровней, реализация блочного принципа – такая структуризация программы не только служит естественному отражению реального процесса, но и помогает разобраться и проследить правильность выполнения алгоритма, упростить разработку, облегчить модификацию, обеспечить наглядность и в большей мере реализовать оптимальное планирование использования всех ресурсов ВС: процессоров, памяти всех 70
уровней и других устройств. Разбиению на частные «элементарные» работы и отражению их взаимодействия служит концепция программирования на уровне процедур. Эта концепция нашла отражение в мощных многомашинных вычислительных комплексах «Эльбрус», где она реализована аппаратно-программным способом. Принцип процедурного программирования допускает формирование любых программных структур со всеми типами соподчинения, в том числе допускает вложенность процедур. Очевидно, что возможность явного задания структуры программы, включающего указание параметров процедур, способствует автоматическому получению информации для организации распараллеливания. Использованию иерархической структуры алгоритма, соподчинению операторов при выполнении программы соответствует стековый принцип обработки информации. Действительно, выполнение процедуры в процедуре при описании соответствует переходу на новый лексико-графический уровень. В процессе счета требуется прерывание выполнения одной процедуры, запоминание на момент прерывания всей относящейся к ней информации и инициализация вложенной процедуры. Такие действия равносильны работе со стеком, где переход на новый лексико-графический уровень соответствует понижению прерванного выполнения процедуры на один уровень, началу выполнения на вершине стека работ более высокого уровня, а затем обратному сдвигу для продолжения выполнения прерванной процедуры. Поскольку число уровней может быть произвольным, то и глубина погружения в стеке может быть значительной. Преимущественное использование принципа процедурного программирования для выделения элементарных работ, выполнение которых в ВС подлежит планированию, поставило бы программиста в большую зависимость от возможностей разбиения алгоритма на процедуры, от предполагаемого объема процедур, усложнило бы работу механизмов распределения ресурсов. Это определило целесообразность представления алгоритма в виде одного или нескольких взаимодействующих процессов. Процессы – логически завершенные, преимущественно значительные по объему работы, на которые можно и целесообразно разбить выполняемый алгоритм. При формировании про71
цессов основополагающими являются требования оптимальной сегментации программ для распределения работ между средствами ВС и распределения ресурсов ВС в ходе выполнения нескольких процессов. Порядок выполнения процессов также подчиняется стековому принципу. Одновременно между процессами существует два вида зависимости: процессы могут быть явно зависимыми (влиять на порядок работы друг друга, порождать и ликвидировать друг друга); зависимость может реализовываться операционной системой, управляющей ресурсами. В первом случае процессы, как правило, объединены в рамках одной задачи и используют закрепленную за этой задачей память. Это позволяет строить сложные программные системы. Во втором случае оказывается возможным организация совместных работ многих пользователей. Выполнение процессов может чаще всего происходить и прерываться в стековом порядке: последний прерван – первый восстанавливается. На этот порядок накладывается дисциплина приоритетов. Абсолютизация стекового принципа соответствует природе большинства вычислительных процессов. СТЕКОВЫЙ ПРИНЦИП ВЫПОЛНЕНИЯ ПРОЦЕДУР
В многопроцессорной системе одновременно могут выполняться, т. е. находиться в активном состоянии, несколько процессов, но не более числа процессоров. Процесс отображен элементарной рабочей программой. Каждая программа формируется из команд (точнее, из макрокоманд), соответствующих отдельным процедурам. Описания процедур (сегменты процедур) хранятся отдельно. Существует словарь сегментов данной программы, сформированный при трансляции, в котором хранятся указатели на каждый сегмент. Один из выделенных базовых регистров каждого процессора (распределение регистров всех процессоров идентично, так как выполнение программы не должно зависеть от назначенного для этого процессора) во время выполнения программы указывает на ее словарь сегментов. Номер выполняемой команды находится в регистре номера команды и состоит из номера сегмента и адреса внутри сегмента. Вычислительный процесс организуется так, что параметры выполняемой процедуры, промежуточные результаты и другие именованные данные, относящиеся к ней и формируемые в 72
ней, находятся в памяти процессора, которая с учетом стекового принципа выполнения процедур организуется в виде стека. По стековому принципу осуществляется динамическое распределение памяти под процедуры. В алгоритмических языках с блочной структурой переменные появляются на основании описаний при входе в процедуры и сохраняются до выхода из данной процедуры. Поэтому при входе в процедуру должна отводиться память для локальных данных, а при выходе ее нужно освобождать. Так как последовательность входов и выходов подчиняется стековой дисциплине, т. е. первым осуществляется выход из той процедуры, которая была запущена последней, то и для динамического распределения памяти под процедуры также целесообразно использовать стек. Тогда в памяти каждого процессора будет организован стек, на котором выполняются закрепленные за ним программы. В вершине стека отражается выполнение процедуры самого высокого на данный момент уровня иерархии. По мере поступления вложенных процедур для выполнения вся информация о прерванных процедурах погружается в стеке на один уровень ниже. Процедуры, не являющиеся вложенными, выполняются последовательно на одном уровне стека. При этом, как указывалось выше, кодовые сегменты процедур отделены от данных, находящихся в стеке, а доступ к ним осуществляется с помощью базовых регистров процессоров. Такая организация приводит к тому, что все процедуры обладают свойством повторной входимости, т. е. одна и та же процедура может выполняться на стеках разных процессоров, при этом нет необходимости иметь несколько копий ее программы. Это очень важно для возможности выполнения программ в многоканальном режиме, для независимого выполнения процедур операционной системы в составе различных программ и т. д. При этом обеспечивается контекстная защита данных. Структурные связи выполняемой процедуры, рекурсивность и повторная входимость обеспечиваются тем, что каждой запущенной, но неоконченной процедуре в стеке соответствует своя область прямоадресуемых данных. Адрес начала этой области является базой процедуры. Область прямоадресуемых данных формируется на основе области имен данной процедуры, которую составляют используемые процедурой ее собственные имена 73
и имена охватывающих процедур в соответствии с иерархической структурой. Если процессор располагает собственной оперативной или сверхоперативной памятью достаточного объема, то процедура вызывается на организованный в этой памяти стек процессора вместе с областью известности имен, которая заданием значения базы превращается в область прямоадресуемых данных этой процедуры. Наиболее удобный естественный и экономичный способ адресации данных – это адресация по номеру уровня вложенности, лексико-графическому уровню, который позволяет установить базу данной процедуры, а также по смещению относительно базы. База данной процедуры формируется в базовом регистре выполняющего процессора. Номер этого регистра равен номеру лексико-графического уровня. Адресация имен процедуры при ее выполнении производится с помощью адресных пар, состоящих из значения базы и значения смещения относительно базы. Для повышения надежности и универсальности используемых ресурсов стеки процессоров могут быть нежестко закреплены за процессорами. В стеке процессора в основном концентрируются устройства памяти процессоров, основные регистры, над которыми производятся операции. Операционные устройства могут быть отделены от собственно процессора и рассматриваться отдельно. Собственно процессором остается устройство управления, ведающее обработкой потока инструкций, и их назначением для выполнения. Это допускает перекоммутацию связи «процессор – стек процессора» в случае отказов процессоров, так как стек отказавшего процессора соответствует пассивному стеку некоторого процесса. При этом может быть учтен приоритет решаемых процессорами задач. Для оперативного продолжения одними процессорами работ, выполнение которых уже начато на других процессорах, целесообразно, чтобы стеки процессоров составляли общую память, доступную всем процессорам. В то же время эти стеки должны быть в разных блоках этой памяти, что должно допускать одновременное обращение, т. е. обеспечивать минимальные взаимные помехи при работе процессоров. Связь с закрепленными за ними стеками процессоры могут осуществлять с помощью специально выделенных базовых регистров, адреса 74
которых различимы для специальных команд, ведающих коммутацией, и неразличимы для процессоров: часть адреса такого регистра является общей для всех процессоров. В частности, возможна следующая процедура продолжения работы ВС в случае отказа или отключения одного из процессоров: 1. Прерывается работа головного процессора. 2. Запускается на нем процедура анализа активных процессов. Данная процедура находит среди всех активных стеков стек выполняемого процесса с минимальным приоритетом. При этом возможны два случая: процесс из стека отказавшего процессора оказывается в числе процессов с минимальным приоритетом, тогда этот процесс переводится в очередь процессов; минимальным приоритетом обладает активный процесс, не выполнявшийся на стеке отказавшего процессора; тогда изменяется содержимое базового регистра, выполнявшего этот процесс процессора, для подключения его к стеку отказавшего процессора; стек прерванного процесса становится пассивным и переводится в очередь. Так как внутри системы накапливаются разнообразные функции управления (режимами прохождения задач, ресурсами, обеспечения надежности) и слежение за работой ВС должно осуществляться с устойчивым периодом, то одним из вариантов такого устойчивого вмешательства управляющих средств является не только назначение одного из процессоров управляющим, но и формирование в системе специального управляющего стека процессора. После прерывания управляющего процессора с частотой, с которой происходит анализ состояния системы, осуществляется коммутация этого процессора с управляющим стеком процессора, чтобы избежать работы стандартной процедуры переключения на новый вид работ, которая может быть значительно более трудоемкой. В управляющем стеке процессора работы по управлению могут быть всегда подготовлены (в результате предыдущего включения) к продолжению с момента переключения на них управляющего процессора. Децентрализованное управление ВС может производиться с помощью периодического включения в состав очереди управляющего процесса, объединяющего ряд процедур управления. 75
При каждом включении этого процесса подготавливается его следующее включение вновь. Очевидно, что такое решение не обеспечивает оперативной и синхронной работы средств ВС, чревато возможностью отказа ВС без выхода на процедуры управления. Подводя итог анализу способов организации управления вычислительным процессом в ВС, можно выделить три возможности: управление через очередь, при котором управляющий процесс периодически подставляется в очередь и реализуется процессором, выбравшим его в соответствии с дисциплиной обслуживания очереди. Такой способ управления приемлем, например, для таких работ, как реорганизация памяти, оценка состояния средств; выполнение одним из процессоров функции головного или управляющего. Его работа по обслуживанию очереди периодически прерывается для выполнения функций управления ВС; наличие в системе специального управляющего процессора, в силу назначения и исполнения не участвующего в обслуживании очереди. В многопроцессорных ВС, совмещающих различные режимы обработки информации и нуждающихся в сложном планировании использования ресурсов, целесообразно включение в состав ВС специализированных управляющих процессоров. При рассмотренной организации вычислительного процесса процессоры выступают в роли ресурса для активизации стеков процессов, предлагая свое оборудование (налагая его) стекам процессов. При этом принципиально возможна коммутация любого процессора с любым стеком процесса. В этом выражается идея виртуальных процессоров. Центральное же место в работе ВС занимают, как это и должно быть, процессы, для выполнения которых назначаются ресурсы. В то же время, поскольку для активизации процессов необходимы ресурсы, функции управления ими приходится распределять между процессорами и даже назначать управляющий процессор. ФОРМИРОВАНИЕ И СИНХРОНИЗАЦИЯ ПРОЦЕССОВ
Каждый пользователь формирует свою задачу. Задача содержит один или несколько в общем случае взаимосвязанных 76
процессов. При выполнении одних процессов может быть предусмотрено рождение новых процессов. В рамках одной задачи и отведенной для нее памяти обычно операционная система стремится использовать минимальное число формируемых стеков. Так как стек есть фактически модель операционного устройства – процессора, то для последовательно выполняемых процессов естественно стремление снизить число формируемых стеков, обеспечить их преемственность, начиная выполнение новых процессов на стеках закончившихся процессов или процессов, их породивших. Распараллеливание для полного использования ресурсов осуществляется двумя путями: на основе естественного существования независимых задач пользователей; на основе существования сложных программных систем, которые состоят из взаимосвязанных процессов, допускающих параллельное выполнение. Разбиение задачи на взаимодействующие процессы – проблема, связанная не только с оптимальным использованием ресурсов ВС, но и с разработкой больших программных систем, при которой возникает необходимость распределения работ между исполнителями для сокращения времени разработки. Создание каждого процесса в основном сводится к организации стека процесса, т.е. к отведению памяти под стек и формированию шапки стека. В рамках отдельной задачи пользователя необходима экономия памяти и времени формирования, поэтому стек нового процесса организуется или на стеке процесса, его породившего либо закончившего непосредственно перед ним свое выполнение, или в памяти, отведенной для стеков данной задачи, если решение только начинается. Несколько стеков процессов могут формироваться для распараллеливания задачи. В целом, в рамках одной задачи может быть сформировано сколько угодно процессов. Процессы ставятся в очередь в соответствии с приоритетом. Приоритет формируется с учетом приоритета задачи пользователя – абсолютный приоритет, а также с учетом приоритета по сравнению с приоритетами других процессов в рамках данной задачи – относительный приоритет. Абсолютные и относительные приоритеты всех процессов могут быть приведены к приоритету про77
цесса выбором такого его значения, при котором приоритет любого процесса задачи пользователя с меньшим приоритетом обязательно меньше приоритета любого процесса задачи с большим приоритетом. Окончание каждого процесса может наступить либо при естественном окончании выполнения последней процедуры, либо по приказу «убить процесс», либо при выходе из процесса по аварийной ситуации. В первых двух случаях выполнение задачи может продолжаться, так как заканчивается или уничтожается в первом случае лишь часть задачи (данный процесс) или во втором случае – данный процесс и процессы, созданные в нем. В третьем же случае возможно аварийное окончание задачи. Синхронизация информационно взаимосвязанных процессов может производиться с помощью механизма семафоров или матрицы следования. СОВМЕСТНАЯ РАБОТА ПРОЦЕССОРОВ
Рассмотрим самый общий случай функционирования ВС независимо от ее применения, т.е. на данный общий алгоритм функционирования ВС может налагаться любая организация управления, превращающая ВС в специализированную или отражающая особенности ее использования. Функции управления ВС могут реализоваться очередью, одним из процессоров или специализированным управляющим процессором. По обеспечиваемой оперативности управления два последних способа равносильны, поэтому целесообразно различать два способа управления: с помощью постановки управляющих процессов в очередь, когда отсутствуют жесткие требования к моменту принятия решения, и с помощью управляющего процессора (считая, что им может быть один из процессоров ВС, решающий и основные задачи из очереди). Управляющий процессор реагирует на сигналы прерывания, поступающие в жестком временном режиме. По поступлении на управляющий процессор сигнала прерывания может быть произведена его перекоммутация на управляющий стек процессора. Обработка управляющих процессов так же, как и других, производится процессорами, которые их выбрали для выполнения. В голове очереди находится процесс с максимальным приоритетом. Выбор процесса из головы очереди происходит всегда, когда на этом 78
процессоре заканчивается выполнение процесса или когда такое выполнение необходимо прервать. Одним из возможных случаев такого прерывания является случай, когда исчерпался отрезок времени, определенный системой для выполнения процессов данной задачи при работе в режиме разделения времени. На процессоре производится смена стека – наложение на стек процессора стека процесса из головы очереди. Производится реорганизация очереди, т.к. прерванный процесс возвращается в очередь и должен занять в ней место в соответствии со скорректированным значением приоритета. ПАРАЛЛЕЛЬНЫЕ МЕТОДЫ ВЫЧИСЛЕНИЙ. АЛГОРИТМЫ И ЯЗЫКИ
Существует два возможных подхода к разработке параллельных методов вычислений. Первый основан на исследовании существующих методов решений сложных задач и их доработке для представления в виде, удобном для выполнения параллельных вычислений. Он обеспечивает преемственность работ и возможность разделения труда между специалистами-математиками и специалистами в области вычислительных систем. Видоизменение метода вычислений для приспособления к параллельным вычислениям несложно и не требует значительных усилий при доработке. Достоинство такого подхода заключается в возможности получения быстрого практического выхода. Второй подход связан с разработкой новых методов, специально учитывающих возможность выполнения параллельных вычислений. Он позволяет более эффективно использовать особенности вычислительных систем, приспособленных для выполнения параллельных вычислительных процессов. Этот путь особенно удобен при подходе к решению новых сложных задач, для которых еще нет готовых методов вычислений. В основе таких методов может лежать принцип разбиения задачи на связанные подзадачи с помощью некоторых регулярных приемов, аналогичных методам расчленения. Понятие распараллеливания алгоритма подразумевает представление алгоритма (программы) в таком виде, чтобы можно было совмещать во времени выполнение отдельных участков алгоритма (его ветвей). Процесс распараллеливания алгоритма состоит в выделении ветвей, описании структуры параллельного процесса и синхронизации выполнения ветвей при его реа79
лизации. Для облегчения распараллеливания в некоторых языках (например, PL-1) предусмотрены специальные средства для выделения ветвей в алгоритме и синхронизации их. В этом случае программист в явной форме указывает на возможности распараллеливания, а транслятор и операционная система машины реализуют параллельный процесс. Если исходный алгоритм записан на языке, не имеющем подобных средств, то его распараллеливание сводится к сегментации алгоритма и объединению сегментов в ветви по определенным правилам. Эту работу выполняет либо программист, либо машина по специальной программе сегментации. В вычислительной машине могут быть специальные блоки, предназначенные для сегментации программ. Основой построения параллельного алгоритма может служить как последовательный алгоритм, так и задача сама по себе. При распараллеливании последовательного алгоритма наиболее разумным представляется прагматический подход, т.е. в последовательных алгоритмах выявляются часто встречаемые элементы, которые затем трансформируются в параллельную форму. Далее этот подход иллюстрируется на примерах арифметических выражений, а также на распараллеливании с помощью перестановок и рекурсий. Очевидно, что по крайней мере некоторые из этих преобразований могут быть выполнены автоматически. Подобный путь исключительно важен, поскольку оказывается возможным использование на параллельных ЭВМ созданного для обычных машин дорогостоящего программного обеспечения. Указанные принципы распараллеливания относятся к определенным последовательным алгоритмам. Это соответствует общепринятому в численном анализе последовательному характеру мышления. При программировании на параллельных ЭВМ необходим параллельный тип мышления. Отметим, что параллельный тип мышления характерен для аналогогибридных вычислений. Для распараллеливания асинхронных процессов необходим совершенно иной подход, поскольку в этом случае разные процессы должны выполнять общую работу, но без всякой синхронизации извне. Вычисления арифметических выражений составляют основу численных алгоритмов. Имеется большое число последова80
тельных алгоритмов, которые содержат векторные элементы, т.е. операции над матрицами или матрицами и векторами. Распараллеливание таких операций выполняется непосредственно. По этой причине термины «векторизация» и «распараллеливание» часто используются как синонимы. Тем не менее, векторизация – частный случай распараллеливания. Распараллеливание таких алгоритмов, как в методе исключения по Гауссу при решении систем линейных уравнений, выполняется весьма несложно. Ядро этой программы – вычисление скалярных произведений. На параллельной ЭВМ оно может быть выполнено достаточно эффективно. С другой стороны, параллельная реализация даже весьма простых алгоритмов, например, выбора разрешающего элемента, иногда сильно затруднена. Многие итерационные методы, в частности, методы линейной алгебры, формулируются в терминах матриц и векторов. Однако встречаются важные итерационные методы, например, метод последовательной верхней релаксации (SOR), для распараллеливания которых необходимы некоторые ухищрения. Многие алгоритмы вычисляют не отдельные значения, а блоки значений. Примерами таких алгоритмов служат решения уравнений и алгоритмы минимизации. Другие алгоритмы можно модифицировать так, что они будут вычислять блок переменных. Если отвлечься от математического смысла программы, то потенциальные возможности распараллеливания программ, например, на Фортране скрыты в циклах типа DO. По этой причине большинство компиляторов для параллельных ЭВМ распараллеливает последовательные циклы типа DO. Этот тип автоматического распараллеливания программ имеет важное значение для переноса существующего (последовательного) математического обеспечения на параллельные ЭВМ. Трансформирующие программы для автоматического распараллеливания последовательных алгоритмов, вообще говоря, проводят анализ потока данных последовательного алгоритма. Используя некоторые понятия операционных систем, этот последовательный граф потока данных может быть преобразован в потоковый граф с максимальным параллелизмом. 81
И, наконец, третий подход основан на изучении программы, полученной в результате работы последовательного компилятора. Если такая программа содержит достаточно «большие» арифметические выражения, то она может быть распараллелена с помощью численных алгоритмов. При рассмотрении вопросов разработки параллельных алгоритмов и языков для однородных вычислительных систем необходимо учитывать следующие соображения: Режим параллельной обработки должен использоваться в основном для тех задач, которые не могут быть реализованы достаточно эффективно (т.е. с нужной точностью, временем решения) с помощью одной ЭВМ. Распараллеливание вычислительного процесса необходимо для получения нужной эффективности решения сложных задач; в общем случае не требуется прибегать к максимальному параллелизму. Схемы алгоритмов (программ) являются иерар-хическими структурами, высший уровень которых – крупные блоки, а низший уровень – операторы (машинные команды). Процесс распараллеливания должен начинаться с самого высокого уровня; переход на более низкий уровень происходит только в том случае, если не удалось достичь нужной степени распараллеливания на данном уровне. Схема параллельного алгоритма показана на рис. 4.1. А1
О Б М Е Н
А2
...
Аn
...
Z1
Z2
…
Zn
У П Р А . В . Л Е Н И Е
Рис. 4.1. Параллельный алгоритм вычислений.
82
При разработке Р-алгоритма главное внимание уделяется выявлению циклов и распределению массивов. Используется 2 основные схемы распараллеливания: групповая и конвейерная. Все многообразие взаимодействий между ветвями Р-алгоритма может быть сведено к шести основным процедурам: 1. Трансляционный обмен (информация передается из одной ветви во все остальные). 2. Трансляционно-циклический обмен – реализует трансляционный обмен в цикле по ветвям. 3. Обмен сдвигом (передача информации из данной ветви в следующую или предыдущую). 4. Дифференцированный обмен (информация передается из данной ветви в некоторые выделенные). 5. Коллекторный обмен (информация собирается из всех ветвей в одну выделенную). 6. Обобщенный условный переход – изменяется естественный порядок реализации операторов во всех ветвях при выполнении обобщенного условия. Приведенные операторы обеспечивают доступ к общим данным и синхронизацию процессов в разных ветвях. Процедуры обменных взаимодействий могут пополняться. В частности, могут быть введены процедуры обобщенного безусловного перехода, начальной загрузки, с помощью которых можно инициировать работу системы. Параллельные языки или языки высокого уровня, предназначенные для записи Р-алгоритмов, отличаются от известных языков средствами задания обменных взаимодействий Р-ветвей: системными операторами и системными программными функциями. Вместе с обычными операторами они образуют набор, позволяющий описывать как последовательные, так и параллельные вычислительные процессы. Примерами этих языков могут служить Бейсик, Фортран, Ассемблер. Системные операторы, введенные в эти языки, позволяют задавать взаимодействия ветвей Р-процесса на микроуровне. Это освобождает программиста от необходимости знать структуру системы, в частности, такие команды, как «прием», «передача», «настройка». Специальные операторы ввода-вывода обеспечи83
вают удобное задание распределения массивов по ветвям. В качестве стандартных системных функций могут использоваться функции, определяющие значение максимального и минимального элемента массива, сумму всех значений массива, распределенного по ветвям, общее число ветвей и т.д. Для данных языков каждая ветвь Р-программы оформляется как последовательная программа. Особенность такой последовательной программы – наличие операторов обменных взаимодействий, которые вводятся в операционную систему в виде блоков или библиотечных модулей. Библиотечные модули позволяют использовать операторы обменных взаимодействий в языках высокого уровня. Описанный подход постепенного расширения последовательных алгоритмов и языков средствами параллелизма позволяет полностью сохранить преемственность и при развитии языков и алгоритмов в направлении структуризации приблизиться к естественным наукам. Касаясь проблемы языка программирования, необходимо отметить, что совершенно не обязательно разрабатывать для ПВС специальный язык высокого уровня. Для того, чтобы писать Рпрограммы, достаточно незначительного расширения языка РL/ 1 (или любого другого языка высокого уровня) с целью выполнения следующих задач: для программирования на существующей уже работающей ПВС, для моделирования на последовательной машине процесса выполнения Р-программ, для анализа алгоритмов (в математических терминах). Программа, выполняемая на любой ЭВМ, – это в конечном счете машинная программа, т.е. программа на соответствующем машинном языке. Но поскольку в распоряжении программиста имеются компиляторы, программы обычно пишут на языках высокого уровня. Языки высокого уровня имеют следующие преимущества: Овладеть их синтаксисом нетрудно; программа же, написанная на языке высокого уровня, получается более понятной, с легко воспринимаемой структурой. Языки высокого уровня лаконичны. Так как эти языки универсальны, программу, написанную 84
на одном из них, можно рассматривать как математическую формулировку метода решения задачи. В литературе широко представлены не только стандартные конструкции этих языков, но и некоторые специальные конструкции, предназначенные для параллельной обработки (например, существуют соответствующие расширения Фортрана, Алгола 60 и Паскаля) [5]. В качестве наилучшего кандидата, пригодного для составления Р-программ (по крайней мере, программ подчиненных процессоров), был предложен язык РL1. Имеются следующие соображения в пользу РL/1: Этот язык может быть реализован (и в основном уже реализован) на существующих ЭВМ. Более того, этот язык, возможно, станет наиболее широко используемым языком программирования. Существует много компиляторов с этого языка (в том числе оптимизирующих). Это очень лаконичный язык, особенно когда дело касается обработки векторов и матриц. Например, если А, В и С – это матрицы (n x n), то оператор (А-В+С) означает поэлементное сложение матриц В и С с записью результата в А. Язык РL/1 имеет ряд других полезных свойств, например возможность работы с подчиненными задачами. То, что задачи, решаемые последовательно-параллельно и имеющие в основном арифметический характер, можно запрограммировать на РL/1, не вызывает сомнений. Для того, чтобы использовать РL/1 и в качестве языка программирования задач управляющего процессора, он должен давать возможность реализовать следующие свойства Р-задач: Вся программа разбита на части, одни из которых выполняются последовательно, другие – параллельно. В памяти должна храниться как информация, относящаяся к каждой такой части, так и своего рода «граф предшествования», описывающий последовательность выполнения частей, их расположение в памяти и т. п., – этой информацией пользуется управляющий процессор (УП). Та область памяти, где записаны эти программы, должна быть доступна для УП, но недоступна для подчиненных процессоров (ПП). 85
В задачу УП входят пересылки данных по шине, поэтому он должен располагать командами, которые обеспечивают такие пересылки. Пересылки не должны перекрываться по времени. УП должен принимать прерывания от всех ПП. Программа УП запускается по сигналам от ПП. Будучи запущенной, она находит очередную подзадачу и, поручив ее одному из ПП, пересылает некоторый файл в память этого ПП, пересылает некоторые переменные между файлами некоторых ПП или запускает один или все ПП. Нетрудно видеть, что язык управляющего процессора можно реализовать как некоторое расширение системного языка (т. е. языка ОС), поскольку он предполагает пересылку файлов, обработку прерываний и запуск подчиненных процессов. «Параллельный» РL/1 или РРL/1 должен быть определен таким образом, чтобы программы, написанные на нем, можно было бы легко преобразовывать в программы моделирования. И как мы уже говорили, расширение существующего языка для применения его к «параллельному программированию» является широко распространенным приемом (таким образом были расширены Фортран, Алгол и Паскаль). Точно таким же образом для системы РЕРЕ был разработан язык РРОК, основанный на Фортране [1]. Принимая за основу язык РL/1, необходимо добавить в него следующие дополнительные возможности: Индексы в РРL/1 будут использоваться не только для задания номеров элементов массива, но и для указания номера конкретной локальной памяти. В этом случае такой индекс ставится в скобках слева от имени переменной. Если значение индекса в скобках равно нулю или же «левосторонний» индекс вообще отсутствует, то имеется в виду обращение к общей памяти. Существуют два способа хранения значений переменных (особенно массивов) в локальных устройствах памяти: под разными или под одинаковыми именами. В общей памяти размещается вектор С размерности m. Каждый ПП может обращаться только к своему «экземпляру» переменной С; УП может обращаться ко всем экземплярам этой переменной. Если все объявляемые переменные сопровождаются знаком (#), то его можно вынести за скобки. Каждый ПП знает свой номер; обращение к 86
своему номеру имеет вид (#Р). Количество ПП обозначается в программах УП как Р. Поскольку рассылка информации всегда происходит из общей памяти во все локальные устройства памяти, можно не указывать, какие именно локальные устройства имеются в виду. Программная модель должна состоять из главной программы для УП, которая инициирует запуск программ ПП в соответствии с некоторой управляющей информацией (вероятно, представленной в виде списков). Так как программы ПП работают в параллель, их можно трактовать как процессы, инициируемые главной программой одновременно. Эти процессы должны взаимодействовать с главной программой. Так, некоторые из процессоров, возможно, должны будут ждать, пока не произойдет некоторое событие или же пока не наступит некоторое заранее назначенное время. Это (реальное) время должно имитироваться в модели при помощи специального счетчика времени. Программы, написанные на РРL/1, можно транслировать «один к одному» на язык 81МРБ/1 [IВМ 72] [5], поскольку этот язык имеет средства: Главная программа, написанная на языке 81МРБ/1, запускает или последовательно, или параллельно некоторое число так называемых процессов. В язык 51МРБ/1 встроены разнообразные средства для обработки списков. Предусмотрен оператор «ожидания». Приостановленный процесс может быть вновь активизирован, если выполнилось некоторое условие (событие). Язык позволяет моделировать весьма сложные взаимодействия между одновременно протекающими вычислительными процессами. Для синхронизации выполнения всех программ (т. е. главной программы и процессов) используется счетчик времени, имитирующий реальное время. К сожалению, язык 81МРБ/1 не настолько широко известен, чтобы его описание можно было найти в любой книге по вычислительной технике, но имеется другой выход из положения – использовать средства для работы с подчиненными задачами, предусмотренные в РL/1. Может быть, они не столь со87
вершенны и представляют для моделирования ПВС меньше удобств, чем 81МРБ/1, но преимущество их заключается в том, что они составляют часть стандартного РL/1, а следовательно, более доступны. ОЦЕНКА ПРОИЗВОДИТЕЛЬНОСТИ ПАРАЛЛЕЛЬНЫХ АЛГОРИТМОВ
Все программы делятся на сегменты согласно логической структуре соответствующей задачи. Для выполнения каждого сегмента программы необходимы различные ресурсы, и, чтобы достаточно точно оценить потенциально возможную производительность (выявить узкие места в распределении ресурсов), необходимо рассмотреть каждый сегмент отдельно. Однако для того, чтобы на основе анализа отдельных сегментов получить полезные показатели производительности, необходимо определить относительную важность или вычислительную сложность различных сегментов. Сложность может быть задана в терминах числа арифметических операций в сегменте программы, но, поскольку вычислительная сложность отдельных операций может сильно различаться, такая мера оказывается не всегда полезной. Поэтому в дополнение к ней целесообразно привлечь еще одну меру сложности, основанную на числе машинных тактов, требуемых для реализации сегмента программы. Ясно, что оценки, основанные на числе тактов, не являются не зависящими от ЭВМ, но поскольку отношение между сложностью операций и относительным быстродействием процессора и основного запоминающего устройства меняются незначительно, с этим недостатком можно смириться. Просмотр программы позволяет без труда оценить число параллельных процессов, имеющихся в данном сегменте. Эта степень параллелизма обычно является функцией размера системы и, очевидно, мерой потенциального параллелизма сегмента программы. Чтобы объединить потенциальный параллелизм различных сегментов программы, необходим несколько иной показатель, который называется ускорением. Он отражает тот факт, что программа может исполняться на произвольном числе m > 1 процессоров. Этот показатель часто используется также для того, 88
чтобы охарактеризовать потенциальный параллелизм программы. Пусть T(m) – время, необходимое для выполнения параллельных ветвей сегмента программы на m процессорах. Тогда ускорение на m процессорах можно определить как T(1)/T(m). Факторы ускорения всех сегментов программы можно объединить, используя оценки вычислительной сложности программы. Обычно при оценке общего ускорения на m процессорах предполагается, что все они работают с одинаковой скоростью. В этом случае расчет оказывается совсем простым. Если в данной параллельной вычислительной системе имеются процессоры с различным быстродействием, то можно оценить общее ускорение, используя наряду с оценками сложности каждой части различные уровни параллелизма различных сегментов программы. Важно отметить, что этот показатель ускорения будет отражать эффекты, обычно называемые потерями на синхронизацию. Так, если в программе имеется сегмент, содержащий две параллельные ветви одинаковой длины, исполняемые на процессорах с различным быстродействием, и следующая последовательная ветвь может быть начата лишь после окончания выполнения этих двух параллельных ветвей, то один процессор закончит свою работу раньше другого. Поэтому первый процессор будет вынужден ждать, пока закончит свою работу второй процессор, после чего один из них начнет выполнять следующую последовательную ветвь. Возникающая задержка объясняется необходимостью синхронизации процессоров перед началом выполнения следующего множества ветвей (в рассматриваемом случае – последовательной ветви), и ее влияние учитывается в показателе ускорения. В приведенных рассуждениях предполагалось, в частности, что объем вычислений не зависит от числа работающих процессоров. Однако известны алгоритмы, в которых объем вычислений непредсказуемо зависит от структуры параллельного исполнения. Заметим, что общие данные являются общим ресурсом. Их можно разделить на два типа: чувствительные данные: структуры данных, к которым в каждый момент времени может обращаться только один про89
цессор. Примерами могут служить общий счетчик, значение которого всегда должно соответствовать числу обращений к нему, или расписание, разделяемое процессорами; нечувствительные данные: структуры данных, доступ к которым или изменение которых могут одновременно осуществлять несколько процессоров, или структуры данных, которые в одной части доступны одному процессору, а в другой – другому процессору. Все данные отображаются на физические ресурсы памяти, которые на каждом цикле своей работы допускают только одно обращение. Кроме того, чувствительные структуры данных являются логическими ресурсами, которые в полном цикле «доступ-модификация» допускают лишь одно обращение. Доступы к логическим ресурсам должны быть защищены средствами синхронизации. При этом не имеет значения, будут ли эти средства доступа реализованы аппаратно или программно. Все обращения к общим ресурсам приводят к накладным расходам, имеющим два компонента: компонент, определяемый механизмом доступа к ресурсу; например, доступ к данным, находящимся на диске или в локальной памяти другого процессора, требует большего времени, чем доступ к локальной памяти своего процессора; компонент, возникающий из-за конкуренции процессоров, вынужденных ожидать, когда общий ресурс станет доступным. Заметим, что если общие данные хранятся в физически различных ресурсах, то анализ должен быть проведен для каждого ресурса отдельно. Средством доступа к физически общим данным может служить общая шина и общий модуль памяти или индивидуальный модуль памяти другого процессора, доступный посредством протокола межпроцессорного обмена. Механизмом доступа к логически разделяемому ресурсу является средство синхронизации (хотя в конечном счете для доступа к данным должно быть использовано некоторое физическое средство). Каждая логически независимая общая структура данных является отдельным общим ресурсом, и «спор» за каждый из них происходит независимо от остальных ресурсов, если только вычислительная 90
система не возлагает управление различными общими ресурсами на один контроллер или одно средство синхронизации. Доступность каждого общего ресурса ограничена. Если общий темп запросов ресурса от всех процессоров равен его доступности, то наступает насыщение, и добавление новых процессоров не вызывает увеличения ускорения. Поэтому каждый общий ресурс независимо от других ограничивает число процессоров, которые могут быть эффективно использованы в параллельных программах: максимальное число процессоров = =1 / (темп запросов * время цикла ресурса). Таким образом, средний темп запросов ресурса – важный показатель, отражающий максимально достижимую производительность. Покажем теперь, что темп запросов наряду с другими свойствами системы определяет также потерю производительности, возникающую за счет процессов разделения ресурсов. Если время ответа в механизме доступа не зависит от числа конкурирующих процессоров, то накладные расходы на доступ определяются произведением темпа запросов ресурса на дополнительное время доступа, которое берется по сравнению с соответствующим последовательным алгоритмом. Конкуренция увеличивает эти накладные расходы, и принято считать, что они зависят от числа конкурирующих процессоров, а также от распределения обращений к ресурсу по времени. Если время ответа в механизме доступа зависит от числа конкурирующих процессоров, что определяется особенностями вычислительной системы, то возникающие эффекты можно оценить аналогичным образом. Очевидно, этот анализ должен быть применим к алгоритму сегмент за сегментом, с использованием меры сложности для определения среднего темпа запросов ресурса из данной ветви. Тогда в общем случае по алгоритму можно определить средний темп запросов ресурса и число конкурирующих процессоров (или, по крайней мере, максимальное их число). Особенности доступа к ресурсу определяются системой. В совокупности они дают оценку максимального числа процессоров, которые могут быть эффективно использованы в реализации дан91
ного алгоритма, а также оценку накладных расходов, возникающих из-за необходимости разделения ресурса. Возможности конкретной параллельной вычислительной системы по удовлетворению потребностей программы в ресурсах ограничивают эффективность программы только для данной системы. Однако если все системы близки по своим возможностям, то показатели производительности указывают разработчику алгоритма направления поиска подходящего алгоритма. С другой стороны, если все алгоритмы близки по потребностям в ресурсах, то показатели производительности могут быть полезны разработчику аппаратуры при создании системы, которая могла бы удовлетворить потребности в ресурсах большинства алгоритмов. КОЛИЧЕСТВЕННЫЕ ХАРАКТЕРИСТИКИ СТРУКТУР ВЫЧИСЛИТЕЛЬНЫХ СИСТЕМ
Существует несколько подходов к построению количественных характеристик структур вычислительных систем [6]. Выбираются два параметра – длина основного машинного слова w, которая используется в обрабатывающих устройствах, и число параллельно обрабатываемых двоичных позиций данного разряда множества слов v, т. е. ширина обрабатываемого разрядного среза. В качестве характеристики максимально возможной степени параллелизма системы принимается совокупность этих параметров (w, v). Тогда получаем: а) (1, 1) – полностью последовательная обработка одного бита информации за другим (одноразрядный процессор); б) (w, 1) – последовательная обработка w-разрядных слов при параллельной обработке разрядов каждого слова в обычном процессоре (w>1); в) (1, v) – последовательная обработка разрядных срезов слов при параллельной обработке содержимого данного разряда множества слов (v>1) как, например, в системах с ассоциативными процессорами; г) (w, v) – полностью параллельная обработка всех w разрядов каждого из v слов одновременно (v > 1, w > 1). При помощи этой двумерной характеристики максимально возможная степень параллельности обработки информации 92
обычной однопроцессорной системой IBM 360/50 (для основного формата) может быть представлена одним модулем системы с ансамблем процессоров РЕРЕ, одним квадрантом матричной системы ILLIAC IV или одним модулем ассоциативной системы STARAN [5, 6]. Характеристики параллельности структур в совокупности с частотой синхронизации работы устройств вычислительных систем определяют их максимальную производительность или, в более общем случае, максимальную полосу пропускания, которая может быть определена как наибольшее число двоичных разрядов, которые вычислительная система может обработать за единицу времени. Приведенные характеристики параллельности непосредственно связаны с классификацией вычислительных систем. Действительно, системы с характеристиками (1, 1) составляют класс ОКОДР; системы с характеристиками (w, 1), где w>1, – класс ОКОДС; с характеристиками (1, v), где v > 1, относятся к классу ОКМДР, а с характеристиками (W, V), где w> 1 и v > 1, классифицируются неоднозначно. Проанализируем рассмотренные характеристики параллелизма структур вычислительных систем. Отметим, что ширина обрабатываемого разрядного среза v для большого числа типов систем, таких как обычные однопроцессорные, с ассоциативными процессорами, матричные, с ансамблем процессоров, многомашинные и многопроцессорные – совпадает с максимальным числом одновременно (параллельно) обрабатываемых слов и, следовательно, с числом обрабатывающих процессоров. Характеристики структур систем в виде двоек чисел (w v) не отражают различий между уровнями обработки и управления в тех или иных параллельных системах. Так, например, ширина обрабатываемого разрядного среза v может быть представлена как количество процессоров в многопроцессорной системе и как количество обрабатывающих процессоров в матричной системе, хотя в первом случае может одновременно выполняться несколько программ, а во втором случае выполняется одна программа. Иными словами, не учитывается соотношение между числом модулей управления и обрабатывающих модулей, и, следовательно, не учитываются различия между мно93
гопроцессорными системами и матричными системами и т. п. Подобные трудности встречаются при попытках составления характеристик для структур магистральных систем. Таким образом, характеристики структур систем в виде двоек чисел (w, v) приспособлены фактически только для систем с единственным потоком команд, т. е. систем классов ОКОД и ОКМД. Другим естественным и простым подходом к построению количественных характеристик структур систем является использование двоек чисел (k, n), где k и n – количества потоков команд и данных соответственно. Такие характеристики непосредственно связаны с классификацией систем в зависимости от единственности и множественности потоков команд и данных. Они применяются в ряде работ. Четыре основных класса вычислительных систем – с одиночными потоками команд и данных ОКОД (обычные процессоры), с одиночным потоком команд и множественным потоком данных ОКМД (ассоциативные и матричные системы, системы с ансамблем процессоров и с векторным потоком данных), с множественным потоком команд и одиночным потоком данных МКОД (магистральные системы) и с множественными потоками команд и данных МКМД (многомашинные и многопроцессорные системы) – характеризуются двойками целых чисел (1,1), (1,n), (k, 1), (k,n) соответственно, где k > 1 и п > 1. Здесь, в отличие от предыдущего подхода, фактически указывается количество устройств управления, т. е. количество возможных независимо выполняемых программ, и, как и в предыдущем случае, количество обрабатывающих процессоров (n = v), но при этом количество разрядов слов, обрабатываемых в параллель, не находит отражения. Сохранить в определенной степени достоинства обоих подходов и устранить их недостатки можно путем комбинации обоих подходов, хотя в этом случае несколько усложняется описание. Рассмотрим такой комбинированный подход. В качестве основных требований к описанию структур вычислительных систем при помощи числовых характеристик примем следующие. Описание должно охватывать широкий круг вычислительных систем всех четырех классов ОКОД, ОКМД, МКОД и 94
МКМД, включая обычные процессоры, ассоциативные и матричные системы, магистральные системы, многомашинные и многопроцессорные системы. Оно должно явно выражать основные особенности структур и их главные различия между собой и должно быть однозначным. Описание должно содержать параметры, соотношения между которыми должны соответствовать соотношениям между структурами. При этом для каждой конкретной конфигурации системы значения параметров должны быть представлены числами. Кроме этого, описание должно характеризовать не только собственно структуру и ее возможности распараллеливания, но и гибкость структуры. Оно должно давать возможность анализа соответствия структур систем и структур алгоритмов и программ. В качестве основной цели описания примем количественные характеристики параллельности обработки, при этом связи между процессорами и блоками памяти как таковые не будем включать в описание. Описание построим на базе различий между тремя основными уровнями обработки, которые рассмотрены ниже. Обработка первого уровня осуществляется в устройстве управления. Это устройство интерпретирует команды программы одну за другой, используя счетчик команд и некоторые другие регистры. Арифметико-логическое устройство получает внешние управляющие сигналы от устройства управления, вырабатывает соответствующую исполнительную последовательность микрокоманд (второй уровень обработки), которая реализуется в виде элементарных логических операций над содержимым разрядов данных (третий уровень обработки). Конфигурация вычислительной системы может содержать одно или несколько устройств управления. Каждое устройство управления может осуществлять управление одним или несколькими арифметико-логическими устройствами. Наконец, каждое арифметико-логическое устройство обычно обрабатывает сразу группу разрядов (слово), хотя в ряде простейших случаев оно оперирует в каждый момент времени с отдельным разрядом. Таким образом, на каждом из уровней возможна как последовательная, так и параллельная обработка. В соответствии с этим описание структур систем можно представить в виде упорядо95
ченной тройки: t(a) •= (k, d, w), где а — наименование или тип вычислительной системы; k – количество устройств управления, т. е. наибольшее количество независимо и одновременно выполняемых программ в системе; d – количество арифметикологических устройств, приходящихся на одно устройство управления; w – количество разрядов, содержимое которых обрабатывается одновременно (параллельно) одним арифметико-логическим устройством, т. е. длина слова процессора. Здесь величины k и w имеют тот же смысл, что и в описаниях для двух первых подходов, а величины v, k и d связаны соотношением v = k - d для случая, когда арифметико-логические устройства поделены поровну между устройствами управления. Последнее условие и возможность его выполнения неявно предполагаются при построении троек (k, d, w). Рассмотрим теперь кратко вопросы соответствия описания структур вычислительных систем возможностям распараллеливания вычислительных процессов. Параллелизм независимых ветвей задачи (первый тип) состоит в том, что отдельные большие разделы задачи могут решаться независимо друг от друга, лишь время от времени обмениваясь между собой результатами. Параллелизм смежных операций (второй тип) состоит в том, что результат выполнения некоторой операции не обязательно используется в качестве входного операнда в последующей за ней операции, а, может быть, и в нескольких последующих операциях, вследствие чего эти смежные операции могут выполняться одновременно. Параллелизм обработки данных о множестве объектов (третий тип) состоит в том, что для задач, имеющих дело с массивами информации, нередко можно одновременно проводить почти идентичную обработку данных о большом числе одинаковых или почти одинаковых объектов. В более общем случае в задаче используется естественный параллелизм, и она сразу формулируется по возможности в наиболее параллельном виде. Параллелизм независимых ветвей задачи находит свое естественное воплощение при построении систем, у которых k > 1. Типичными представителями таких систем являются многомашинные и многопроцессорные системы. Параллелизму смеж96
ных операций соответствует d > 1, т. е. командно-магистральная обработка. Наконец, параллелизму обработки данных о множестве объектов соответствует матричная, ассоциативная и подобная им обработка. Следует отметить, что здесь речь идет о наибольшем соответствии отдельных типов параллелизма вычислений отдельным типам структуры вычислительных систем, тогда как на практике задачи содержат в себе обычно в той или иной мере параллелизм различных типов, а вычислительные системы, в свою очередь, нередко совмещают в себе структуры более одного типа. Вместе с тем, если на вычислительной системе, имеющей явно выраженный тип структуры, реализовать вычисления с явно выраженным типом параллелизма, не соответствующим типу структуры вычислительной системы, то производительность и загрузка оборудования последней снижаются, причем для некоторых сочетаний типов параллелизма и типов вычислительных систем это снижение может быть значительным. Можно отметить и другие случаи соответствия типов параллелизма вычислений и типов структур вычислительных систем. Так, например, необходимость оперирования с многоразрядными словами данных привела с самого начала к построению арифметико-логических устройств с параллельной обработкой разрядов слов (w > 1). Возможность расчленения арифметических и некоторых других операций на этапы привела к построению систем с арифметико-магистральной обработкой (w’ > 1, где w’ – количество этапов обработки данных в арифметической магистрали). Наконец, кажущийся на первый взгляд несколько искусственным макромагистральный способ обработки (k’ > 1, где k’ – количество одновременно работающих устройств управления при макромагистральном режиме) также отражает достаточно распространенные виды параллельности вычислений. Пусть требуется решить на многопроцессорной системе крупную задачу, причем ее решение содержит много циклов с большим объемом вычислений. Тогда работу процессоров можно организовать следующим образом. В течение любого, например, i-го цикла накапливаются исходные данные для следующего цикла вычислений. В это же время первый процессор осуще97
ствляет свою часть обработки данных, накопленных в (i – 1)-м цикле, и готовит массив данных для той части программы, которая должна исполняться вторым процессором. Одновременно с этим второй процессор выполняет свою часть программы и использует при этом тот массив, который был подготовлен первым процессором в (I – 1)-M цикле по данным, принятым в (i – 2)-м цикле, и готовит массив данных для той части программы, которая должна исполняться третьим процессором, и так далее. Ясно, что программа может быть распределена между большим количеством процессоров, при этом, как обычно для магистральной обработки, получение конечного результата отстоит от момента получения исходных данных на все время прохождения обработки через все процессоры магистрали, хотя средняя скорость обработки может быть близкой к суммарной скорости работы процессоров организованной магистрали. Отметим, что выше рассматривались возможности распараллеливания вычислений при выполнении одной программы. При этом во всех случаях не исключалась возможность организации мультипрограммной работы. Отметим также, что с увеличением степени параллельности любого типа на любом уровне обработки средняя производительность системы возрастает, хотя средняя загрузка ее оборудования может и уменьшиться. Последнее может привести к уменьшению отношения производительности к стоимости, что является одним из главных препятствий на пути массового распространения высокопараллельных вычислительных систем. Возможность реализации магистральной обработки на различных уровнях вычислительной системы говорит, с одной стороны, об универсальности принципа магистральной обработки и, с другой стороны, о том, что вряд ли будут развиваться «чисто магистральные системы». Действительно, примеры реальных магистральных систем говорят скорее о том, что в этих системах сделан акцент на магистральную обработку, но в целом они являются все же системами с комбинированной структурой. В этой связи следует напомнить об определенной условности класса МКОД как самостоятельного класса вычислительных систем, к которому и только к которому могут быть отнесены те или иные вычислительные системы. 98
МНОГОПРОЦЕССОРНЫЕ ВЫЧИСЛИТЕЛЬНЫЕ СИСТЕМЫ С ПРОГРАММИРУЕМОЙ АРХИТЕКТУРОЙ
Опыт разработки и эксплуатации многопроцессорных систем приводит к выводу, что для повышения их производительности во многих случаях целесообразно и даже необходимо отказаться от классических принципов и перейти к новым принципам синтеза архитектуры многопроцессорных систем. От принципа жесткой архитектуры следует перейти к принципу программируемой архитектуры многопроцес-сорной ВС. Принцип процедурной реализации задач в ВС необходимо заменить принципом структурной реализации, структурного моделирования. Важен переход от фон-неймановского принципа потока управления к принципу потока данных. Существенное значение имеет переход от принципа сосредоточенной общей для всех ВС памяти к распределенной памяти, обеспечивающей прямой параллельный доступ для всех процессоров системы. Очень важным является отказ от процедурного принципа выполнения макроопераций в процессорах системы в виде последовательности элементарных команд и переход к аппаратному, структурному принципу реализации макроопераций при соответствующей настройке внутренней коммутации процессоров. Необходимо также сделать решительный шаг и перейти от принципа внутренних машинных языков низкого уровня, строящихся на основе набора простейших элементарных операций, к принципу внутренних машинных языков высокого уровня, основанных на универсальном наборе макроопераций, реализуемых аппаратурным путем. В ряде случаев может оказаться полезным отказ от представления и обработки информации в виде параллельных кодов и переход к принципу представления и обработки информации в последовательных кодах. Наконец, серьезное значение имеет замена процедурного принципа организации обменов данными между процессорами, а также между процессорами и памятью системы, принципом программирования в мощной коммутационной системе прямых каналов связи, обеспечивающих непосредственный обмен данными между перечисленными узлами. Многопроцессорные системы с программируемой архитектурой существенно отличаются от таковых с жесткой архитек99
турой высокой производительностью, простотой организации вычислительных процессов, наглядностью и гибкостью программирования, простотой трансляторов, высокой живучестью и надежностью, возможностью разделения аппаратурных ресурсов между многими потребителями и способностью организации виртуальных многопроцессорных систем. Одной из основных проблем при создании многопроцессорных вычислительных систем с программируемой архитектурой является решение вопроса об определении оптимального набора крупных математических операций, которые должен реализовывать микропроцессор с программируемой архитектурой, который является основной составной частью МВС с программируемой архитектурой. Набор крупных операций микропроцессора должен быть, с одной стороны, минимальным, чтобы обеспечивать простоту структуры и настройки процессора на выполнение конкретной операции, с другой стороны, достаточно универсальным, чтобы обеспечить решение любых задач. Кроме того, множество крупных операций должно быть таким, чтобы обмен информацией между процессорами многопроцессорной системы и распараллеливание задачи между микропроцессорами были простыми. Если в структуру МП вложить алгоритм на основе более общей универсальной матричной операции и затем проводить перестройку такого алгоритма путем изменения внутренней коммутации микропроцессора и изменения отдельных величин или компонентов матрицы, окажется возможным осуществлять настройку структуры микропроцессора на выполнение любой из операций подмножества. Это дает возможность синтезировать относительно простой МП с программируемой структурой, работающий с языком высокого уровня, основанным на универсальном наборе крупных операций. Многопроцессорная вычислительная система с программируемой архитектурой должна иметь мощную универсальную коммутационную структуру, которая позволяет образовывать путем программирования любые прямые каналы связи между входами и выходами любых процессоров, входящих в систему, между процессорами и распределенной памятью, а также между отдельными секторами памяти. Универсальная коммутаци100
онная структура дает возможность запрограммировать при решении любой задачи такую систему каналов связи между процессорами многопроцессорной системы, которая будет адекватна внутренней структуре решаемой задачи. Программирование прямых каналов связи обеспечивает наилучшее распараллеливание вычислительного процесса, высокую скорость обмена данными между процессорами и максимальную производительность системы. Особое значение имеет то, что программирование прямых каналов связи адекватно отражает внутреннюю структуру задачи, обеспечивает линейный рост производительности многопроцессорной системы с программируемой архитектурой в зависимости от числа задействованных в решении задачи процессоров, что не удается обеспечить в многопроцессорных системах с жесткой архитектурой. Конструктивно каждая многопроцессорная вычислительная система с программируемой архитектурой может быть выполнена в модульной форме, состоящей из сверхбольших интегральных схем, каждая из которых включает процессор, сектор распределенной памяти, локальную коммутационную структуру. Внутренние каналы связи СБИС организуются так, чтобы процессор имел прямой доступ к распределенной памяти и коммутационной структуре, а распределенная память была связана прямым каналом связи с коммутационной структурой. Многопроцессорные системы с программируемой архитектурой дают возможность сбрасывать виртуальные многопроцессорные системы других классов. В частности, в многопроцессорной системе с программируемой архитектурой может быть легко запрограммирована любая известная жесткая многопроцессорная система: магистральная, матричная и т.д. Это соответствует программированию виртуальных машин в однопроцессорных ЭВМ. Однако существенная разница заключается в том, что, в отличие от процедурной реализации виртуальной машины в однопроцессорной ЭВМ, в многопроцессорной системе с программируемой архитектурой виртуальная вычислительная система реализуется аппаратурно, структурно. В настоящее время созданы большие интегральные схемы коммутаторов со значительным числом входов и выходов, которые позволяют программировать соединение любого входа с любой груп101
пой выходов. Из подобных схем могут быть образованы весьма мощные коммутационные структуры с сотнями и даже тысячами входов и выходов, которые обеспечивают возможность программирования, настройки и перестройки сотен и тысяч каналов связи в процессе работы многопроцессорной системы. Вследствие однотипности процессоров, однородности распределенной памяти и коммутационной структуры многопроцессорные системы с программируемой архитектурой отличаются высокой технологичностью и ремонтоспособностью, а также способностью к наращиванию аппаратурных ресурсов. Все структурные элементы многопроцессорных систем с программируемой архитектурой могут быть изготовлены в виде БИС или СБИС, причем число типов необходимых БИС и СБИС невелико. Многопроцессорные системы с программируемой архитектурой отличаются высокой живучестью и надежностью – они продолжают эффективно работать при выходе из строя даже значительной части входящих в систему микропроцессоров, секторов распределенной памяти или локальных элементов коммутационной структуры. МИКРОПРОЦЕССОРНЫЙ КОМПЛЕКТ БИС С ПРОГРАММИРУЕМОЙ СТРУКТУРОЙ
Многопроцессорные вычислительные системы с программируемой архитектурой строятся на основе микропроцессоров, реализующих крупные операции структурными методами, и имеют распределенную память и универсальную коммутационную систему. Основными устройствами системы являются: поле процессоров, состоящее из микропроцессоров с программируемой структурой; распределенная память, состоящая из блоков; УБО – устройство быстрого обмена данными между полем микропроцессоров и распределенной памятью, с одной стороны, и системным устройством с другой, представляющее собой буферное запоминающее устройство – буферную память; коммутационная система, позволяющая подключать выходы микропроцессоров, распределенной памяти и устройства быстрого обмена к любым входам микропроцессоров; магистраль, через которую осуществляется обмен данными и настроечной информацией с системным устройством; системное устройство СУ, представ102
ляющее собой типовую ЭВМ и состоящее из вводных и выводных устройств, общей памяти и процессора. Системное устройство выполняет функции ввода-вывода, управления всей МВС и долговременного хранения больших массивов информации. Пользователь на языке высокого уровня, близком к математической нотации, вводит программу решения задачи в СУ, где эта программа транслируется на язык крупных операций СУ (макроопераций) микропроцессоров, крупных коммутаций К (макрокоммутаций) коммутационной системы и макрокоманд управления блоками распределенной памяти и УБО. С помощью операционной системы оттранслированная программа загружается через магистраль в поле МП, коммутационную систему, блоки памяти и УБО. По команде СУ все устройства системы начинают работу. Вычислительная часть системы имеет децентрализованное, т.е. распределенное по всем блокам управление, и поэтому она может запускаться по частям, что позволяет совмещать различные режимы работы, такие, как решение, ввод, вывод. При загрузке и выгрузке больших массивов данных используется УБО. Информация в него может приниматься с выходов любых микропроцессоров и блоков распределенной памяти и затем быстро выдаваться в общую память СУ. Точно так же информация из общей памяти СУ может быстро приниматься в УБО и затем параллельно выдаваться на входы различных МП. Быстрый обмен может проводиться одновременно с решением и вводом-выводом через магистраль. Подобные многопроцессорные системы имеют весьма высокую производительность, которая обеспечивается параллельной работой всех МП и блоков распределенной памяти, а также возможностью совмещать во времени такие работы, как вводвывод через магистраль и быстрый обмен массивами информации через УБО. Параллельная, т.е. одновременная работа всех микропроцессоров и блоков распределенной памяти, обеспечивается коммутационной системой, позволяющей осуществлять параллельный обмен данными одновременно между всеми МП, блоками распределенной памяти и УБО. Все устройства системы могут автоматически перестраиваться с решения одной задачи на другую. Так, микропроцессоры и коммутаторы могут автоматически без вмешательства СУ перестраиваться с одних 103
макроопераций и макрокоммутаций на другие. Многопроцессорная вычислительная система с программируемой архитектурой характеризуется простотой программирования. Эта простота достигается высоким уровнем входного языка всех устройств системы. На основании рассмотрения общей схемы МВС с программируемой архитектурой нетрудно определить состав микропроцессорного комплекта. Очевидно, что минимальное число типов элементов комплекта должно быть не меньше четырех: для поля процессоров необходимо и достаточно иметь соответствующий микропроцессор; для коммутационной системы необходимо иметь соответствующий элемент коммутации – коммутатор; распределенную память можно построить, используя выпускаемые промышленностью большие интегральные схемы памяти и, возможно, еще один-два типа интегральных схем для организации децентрализованного управления, однако представляет интерес возможность использования одного типа БИС для построения распределенной памяти; точно так же, как и распределенная память, из двух-трех типов БИС может быть построено и устройство быстрого обмена, для него также представляет интерес возможность использования одного типа БИС. Общими для всех элементов комплекта принципами построения являются следующие. Все элементы должны выполнять соответствующие крупные операции: микропроцессор – вычислительные операции, коммутатор – стандартизированные совокупности коммутаций; БИС памяти – операции обмена стандартизированными массивами, БИС УБО – операции обмена стандартными массивами с преобразованием данных. Все БИС комплекта должны иметь программируемую структуру, крупные операции в них должны выполняться не процедурно, т.е. не как совокупность последовательности действий, а структурным методом – по граф-схеме алгоритма или, другими словами, схемно. Необходимо, чтобы элементы комплекта выполняли функции децентрализованного управления, без которого практически невозможно эффективно осуществлять параллельные вычисления. Комплект БИС должен иметь широкие функциональные возможности. 104
Набор крупных операций каждого элемента комплекта практически не может быть одновременно универсальным и высокоэффективным для всех классов задач. Поэтому набор крупных операций должен быть расширяемым. Для этого необходимо, чтобы все элементы комплекта допускали возможность их программирования на языке более низкого уровня. Например, МП должен иметь возможность программирования его на языке арифметико-логических операций, коммутатор – на уровне элементарных коммутаций, т.е. коммутаций «один вход на один выход». Это позволит в процессе эксплуатации перед решением класса задач, для которых требуются дополнительные макрооперации, произвести всего лишь один раз ввод в элементы системы структурных программ этих крупных операций и затем уже оперативно использовать их на языке высокого уровня (аналогично тому, как это делается при построении новых стандартных подпрограмм для ЭВМ). Комплект БИС для МВС ПА должен удовлетворять некоторым общим требованиям, обеспечивающим его единство и совместимость как с точки зрения обработки информации, так и со стороны его внешних электрических характеристик. К этим требованиям относятся единство представления и форматов числовой, программной и управляющей информации. Это упрощает программирование, обеспечивает единство интерфейсов межпроцессорного обмена и ввода-вывода, что позволяет соединять БИС комплекта в произвольных сочетаниях и объединять их в матричные, конвейерные и другие сложные структуры. Идентичность внешних электрических характеристик всех БИС комплекта обеспечивает совпадение уровней логического нуля и единицы, а также динамических параметров сигналов на выводах БИС. Это наиболее просто достигается при использовании для построения комплекта единой микроэлектронной технологии. Важнейшими характеристиками системы являются производительность, сложность и класс решаемых задач [6]. Высокая производительность обеспечивается параллельным решением задач на большом числе процессоров структурными методами реализации крупных операций и возможностью совмещения во времени различных режимов работы. Класс решаемых на МВС 105
задач зависит от универсальности наборов крупных и арифметико-логических операций, возможностей коммутационной системы и емкости памяти. Наиболее просто обеспечивается необходимый объем памяти, достаточно лишь увеличить число блоков распределенной памяти. Кроме того, сами МП имеют собственную распределенную память. Также относительно несложно увеличением числа коммутаторов расширяются возможности коммутационной системы. Основной характеристикой, наиболее существенно влияющей на класс решаемых задач, являются наборы крупных и арифметико-логических операций, причем если набор крупных операций влияет на эффективность решаемых задач, то арифметико-логический набор в основном определяет класс решаемых задач. В связи с этим набор арифметико-логических операций должен быть функционально полным, а набор крупных операций – расширяемым. Своего рода законом является зависимость производительности и класса эффективно решаемых задач от сложности МВС. Чем выше производительность и шире класс решаемых задач, тем большую сложность имеет система. Поэтому важное значение при построении многопроцессорных систем с программируемой архитектурой приобретают используемые в ней принципы переработки и межпроцессорной передачи информации, так как именно они в значительной степени определяют сложность микропроцессоров и коммутаторов, а те, в свою очередь, - сложность всей системы. Наибольший вклад в сложность МВС вносит коммутационная система. Так, для коммутации 256 входных шин на 256 выходных в общем случае потребуется 256 коммутаторов 16х16, т.е. коммутаторов, позволяющих в различных комбинациях соединять 16 входов с 16 выходами. Это значительный объем. С помощью такой коммутационной системы можно коммутировать не более 16 микропроцессоров. Поэтому необходимо, чтобы при заданной сложности коммутационная система имела весьма широкие функциональные возможности, т.е. максимальное число одновременно работающих каналов межпроцессорного обмена. Очевидно, что число таких каналов зависит от способов передачи информации. При обмене информацией параллельными кодами число каналов максимальное, при обмене 106
информацией последовательными кодами – минимальное. Так как и в том и в другом случае объем информации, передаваемый в единицу времени через коммутационную систему, одинаковый, то с точки зрения функциональных возможностей передача информации последовательными кодами имеет бесспорное преимущество. ОРГАНИЗАЦИЯ МАШИННЫХ ЯЗЫКОВ ВЫСОКОГО УРОВНЯ И ТЕХНОЛОГИЯ ПРОГРАММИРОВАНИЯ МВС С ПРОГРАММИРУЕМОЙ АРХИТЕКТУРОЙ
Для МВС с ПА необходимо создание машинных языков высокого уровня, описывающих каждую крупную (макро-) операцию одним оператором. Такая форма машинного языка высокого уровня обладает непроцедурностью и требует для своей реализации задания только входных параметров без указания процесса реализации отдельных крупных операций. В структуру операторов устройств, выполняющих крупные операции, должны входить параметры, располагаемые в произвольном или, в зависимости от структуры транслятора, в позиционном порядке с соответствующими признаками. Основными признаками, определяющими реализацию оператора, являются следующие: признак принадлежности оператора реализуемой задаче (для ассоциативного способа загрузки МВС с ПА); признак принадлежности оператора устройству, который необходим для реализации ассоциативного способа рассылки операторов по устройствам; номер программного блока, в котором участвует данный оператор; код операции, выполняемой данным устройством; параметр длины вектора операндов, обрабатываемых устройством; параметр состояния результата; параметр особых условий выполнения оператора; параметр расположения и считывания информации в ОЗУ (для запоминающих устройств). Первые три признака в зависимости от выбранного метода организации вычислительного процесса могут отсутствовать. Последние два могут содержать несколько подпараметров, обеспечивающих функциональную полноту описываемого оператора. Конкретный набор и структура параметров определяются областью применения МВС с ПА и техническими ограничениями на производство. При произвольном расположении параметров каждый из них должен иметь отличительный признак. 107
В качестве таких признаков могут служить идентификаторы. Позиционное расположение параметров несколько упрощает структуру транслятора, однако существенно усложняет процесс программирования, так как требует от программистов строгого соблюдения порядка следования параметров, число которых может быть более десяти. В связи с тем, что во многих макрооперациях длина вектора входных данных не совпадает с длиной вектора результатов, данный параметр должен иметь два подпараметра, позволяющих программистам осуществлять различного рода сортировки, а также организовать контроль правильности функционирования устройств. Операторы различных устройств отличаются друг от друга только набором и значением параметров, что обеспечивает унификацию процесса трансляции в машинные форматы. С целью обеспечения простоты программирования и достижения высокой эффективности решения задач необходимо использовать блочную структуру формирования программ. Программный блок реализует полностью или частично операторы одного загрузочного яруса. Вся программа состоит из последовательности блоков. Использование блоков осуществляется в порядке написания или в порядке, указанном метками переходов. Каждый из блоков может повторяться необходимое для решения задачи число раз. Если несколько блоков нужно объединить в некоторую более сложную программную единицу, то такая конструкция будет называться составным блоком. Последний также может повторяться в процессе решения задачи необходимое число раз. Стратегия реализации блока для конкретного варианта МВС с ПА определяется заложенными при технической реализации принципами организации вычислительных процессов. Организацию эффективных вычислительных процессов в МВС с ПА можно проводить с централизованным и децентрализованным управлением. Каждый из указанных способов управления реализуется с детерминированным и ассоциативным принципами распределения операторов по устройствам. Выбор того или иного способа реализации процесса управления определяется принятой конфигурацией, а также требованиями к быстродействию системы. Многопроцессорная вычислительная система с ПА с 108
централизованным управлением вычислительным процессом должна содержать, кроме основных устройств, специальную память команд (ОЗУК), предназначенную для хранения команд всех устройств, принимающих участие в выполнении преобразования информации, и программы, определяющей строгую последовательность функционирования системы. Программа состоит из отдельных блоков,. каждый из которых содержит набор команд обрабатывающих устройств и устройств памяти, операторы выбора команд из ОЗУК, операторы рассылки их по соответствующим устройствам, а также операторы пуска и остановки МВС с ПА. При детерминированном принципе рассылки команд все устройства с помощью пространственного коммутатора соединяются с центральным устройством управления поочередно в каждом программном блоке, который выбирает команду и отсылает ее в регистр команд устройства, соединенного в данный момент времени с ЦУУ пространственным коммутатором. По окончании рассылки команд всем устройствам ЦУУ выбирает команду для коммутатора и устанавливает соединения между отдельными устройствами, участвующими в реализации данного блока. Далее выбираются команды пуска и завершения работы блока, по которым запускаются необходимые устройства, и ЦУУ переходит в режим ожидания окончания работы каждого запущенного устройства. Такой алгоритм обеспечивает наглядность описания функционирования системы и простоту его модификации. Основным недостатком данного способа организации вычислительного процесса является некоторая громоздкость в описании и реализации рассылки операторов по устройствам. Данную процедуру можно упростить использованием ассоциативного принципа рассылки операторов, в соответствии с которым каждый оператор снабжается признаком принадлежности тому или иному устройству. В этом случае при распределении операторов программного блока между устройствами устанавливается одновременная связь между ЦУУ и всеми участвующими в реализации данного блока устройствами. Каждый оператор, считываемый из ОЗУК, поступает сразу на все устройства, а воспринимается только тем устройством, которому он принадлежит. Это существенно сокращает объем программ и время их реализации. 109
ЗАКЛЮЧЕНИЕ ПЕРСПЕКТИВЫ РАЗВИТИЯ ПАРАЛЛЕЛЬНЫХ ВЫЧИСЛИТЕЛЬНЫХ СИСТЕМ Развитие ПВС направлено на повышение их эффективности и производительности [7, 8]. Наряду с совершенствованием электронной элементной базы и соответствующего программного обеспечения для достижения указанной цели перспективным является комплексирование электронных вычислительных систем с оптическими. Основным преимуществом цифровой оптической обработки информации является высокая степень параллелизма, а также отсутствие взаимодействия между пересекающимися оптическими сигналами, что позволяет создавать вычислительные устройства на основе интегральной оптики с топологией, которую нельзя реализовать на электронных компонентах. Комбинированные электронно-оптические вычислительные системы позволяют решить и такую принципиальную задачу, являющуюся узким местом ЭВМ с классической фон-Неймановской структурой, как устранение последовательного механизма адресации и обмена данными, и в конечном счете совместить вычисления с хранением данных [7]. Эта проблема является базовой и при построении технических систем искусственного интеллекта [9], которые представляют собой яркий пример ПВС. Важной особенностью оптических вычислительных устройств является возможность использования виртуальных вычислений. Так, при реализации оптического Фурье-процессора никогда не определяются частичные произведения и суммы, содержащиеся в аналитической сути (записи) этого преобразования [8]. Существуют определенные предпосылки создания квантовых компьютеров, в которых вычислительные операции будут осуществляться путем манипуляций с фотонами (электронами) с использованием, например, последних достижений в области квантовой электродинамики и сверхпроводимости. Однако это достаточно далекая перспектива. Попытки создания 110
электронных компонентов на атомарном уровне (нанотехнология) [10] пока не достигли уровня практического применения. По мнению ряда специалистов [7, 8], в настоящее время наиболее перспективной является оптическая обработка информации в сочетании с электроникой, она прокладывает путь следующему поколению компьютеров, намного более эффективных, чем существующие электронные машины.
111
ЛИТЕРАТУРА 1. Валях Е. Последовательно-параллельные вычисления: Пер. с англ. – М.: Мир, 1985. 2. Вальковский В.А. Распараллеливание алгоритмов и программ. – М.: Радио и связь, 1989. 3. Параллельные вычисления/ Под ред. Г.Родрига. Пер. с англ. под ред. Ю.Г.Дадаева. – М.: Наука, 1986. 4. Б.А.Головкин. Параллельные вычислительные системы. – М.: Наука, 1986. 5. Системы параллельной обработки: Пер. с англ./ Под ред. Д.Ивенса. – М.: Мир, 1985. 6. Параллельная обработка информации. / В 5-ти томах. / Под ред. А.Н.Свенсона. – Киев: Наукова думка, 1985. 7. Акаев А.А., Майоров С.А. Оптические методы обработки информации. – М., Высшая школа, 1988. – 237 с. 8. Колфилд Д. Перспективы оптической обработки информации.– CW, 1988, № 19. – С.38-39. 9. Сюрин В.Н. Концептуальные основания построения универсального искусственного интеллекта. – В сб. Докладов Форума МАС-2000, Москва, 18–19 апреля 2000 г. 10. Ситкевич Т.А. Быстрое синдромное декодирование линейных блоковых кодов: Автореферат диссертации канд. техн. наук: 05.12.17/ БГУИР. – Минск, 1998. – 19 с.
112
СОДЕРЖАНИЕ ВВЕДЕНИЕ..................................................................................6 Необходимость построения ПВС. Основные определения..................................................................................6 Классификация аппаратных средств ПВС. Классификация Флинна.............................................................11 Решаемые задачи и их классификация....................................15 ПРИНЦИПЫ РАСПАРАЛЛЕЛИВАНИЯ ВЫЧИСЛЕНИЙ........................................................................17 Задачи распараллеливания и их актуальность .......................17 Два подхода к распараллеливанию вычислений параллелизм данных и параллелизм задач..............................22 Преобразование последовательных программ в параллельные.............................................................................26 Параллельная реализация циклических участков программ ...................................................................................28 Операции над массивами и множествами..............................32 ПРИНЦИПЫ ПОСТРОЕНИЯ ПВС.........................................33 Признаки и полная схема классификации ПВС.....................33 Потоки команд и данных. Основные структуры и определения ............................................................................37 Краткое описание основных классов ПВС............................38 Структура связей в ПВС...........................................................54 Межпроцессорные связи в вычислительных системах и сетях и их классификация.....................................54 Основные типы структур связей .............................................60 ПРИНЦИПЫ ПРОГРАММИРОВАНИЯ В ПВС ...................68 Программное обеспечение ПВС.............................................68 Структуризация и выполнение параллельных программ ...................................................................................70 Стековый принцип выполнения процедур.............................72 Формирование и синхронизация процессов..........................76 Совместная работа процессоров.............................................78 113
Параллельные методы вычислений. Алгоритмы и языки............................................................................................79 Оценка производительности параллельных алгоритмов..................................................................................88 Количественные характеристики структур ПВС....................92 Многопроцессорные ПВС с программируемой архитектурой .............................................................................99 Микропроцессорный комплект БИС с программируемой архитектурой............................................102 Организация машинных языков высокого уровня и технология программирования многопроцессорных вы числительных систем с программируемой архитектурой..............................................................................107 ЗАКЛЮЧЕНИЕ Перспективы развития ПВС...................................................110 ЛИТЕРАТУРА...........................................................................112
114
Учебное издание
Ситкевич Татьяна Анатольевна Сюрин В Н ПАРАЛЛЕЛЬНЫЕ ВЫЧИСЛИТЕЛЬНЫЕ СРЕДЫ Учебно-методическое пособие по одноименному спецкурсу для студентов специализации Н02.02.08 – Интеллектуальные системы специальности Н02.08.00 – Радиофизика
Редактор Н.Н.Красницкая Компьютерная верстка: А.В.Кременский
Сдано в набор 18.01.2001. Подписано в печать Формат 60х84/16. Бумага офсетная №1. Печать офсетная. Гарнитура Таймс. Усл.печ.л. 6,92. Уч.-изд.л. 6,54. Тираж 70 экз. Заказ Налоговая льгота – Общегосударственный классификатор Республики Беларусь ОКРБ 007-98, ч.1, 22.11.20.600. Учреждение образования «Гродненский государственный университет имени Янки Купалы» ЛВ №96 от 02.12.97 г. Ул. Ожешко, 22, 230023, Гродно. Отпечатано на технике издательского отдела Учреждения образования «Гродненский государственный университет имени Янки Купалы» ЛП №111 от 29.12.97 г. Ул. Ожешко, 22, 230023, Гродно.
115