Текст
                    Основы информационных технологий

А. Б. Барский

Параллельные
информационные
технологии

Учебное пособие

Интернет-Университет
Информационных Технологий
www.intuit.ru

БИНОМ.

Лаборатория знаний
www.lbz.ru

Москва
2007

УДК 004.2(075.8) ББК 32.973.26 О2я73-1 Б26 Барский А. Б. Б26 Параллельные информационные технологии: Учебное пособие / А. Б. Барский. — М.: Интернет-Университет Информационных Технологий; БИНОМ. Лаборатория знаний, 2007. — 503 с.: ил., табл.— (Серия «Основы информационных технологий») ISBN 978-5-94774-546-7 (БИНОМ. ЛЗ) ISBN 978-5-9556-0071-0 (ИНТУИТ.РУ) Рассматриваются параллельные архитектуры вычислительных систем и органи- зация параллельных вычислительных процессов. На основе обобщения приёмов рас- параллеливания утверждается идея их распространения на решение широкого класса задач исследования операций. Приводятся методы параллельного и распределённого решения оптимизационных задач высокой сложности, способы организации статиче- ского и динамического планирования работ, способы организации параллельных уп- равляющих вычислительных процессов, методы повышения эффективности сетевых баз данных, параллельные методы решения информационно-логических задач. Для студентов старших курсов технических и экономических вузов, аспирантов и инженеров-исследователей в области современных информационных технологий, лежа- щих в основе параллельных архитектур вычислительных средств, в области оптимизации параллельных вычислительных процессов в системах управления и планирования. УДК 004.2(075.8) ББК 32.973.26-02я73-1 Издание осуществлено при финансовой и технической поддержке издательства «Открытые Системы», «РМ Телеком» и Kraftway Computers. Полное или частичное воспроизведение или размножение каким-либо способом, в том числе и публикация в Сети, настоящего издания допускается только с письменного разрешения Интернет-Университета Информационных Технологий. По вопросам приобретения обращаться: «БИНОМ. Лаборатория знаний» телефон (499) 157-1902, (495) 157-5272, е-пинк Lbz@aha.ru, http://www.Lbz.ru ISBN 978-5-94774-546-7 (БИНОМ. ЛЗ) ISBN 978-5-9556-0071-0 (ИНТУИТ.РУ) © Интернет-Университет Информационных Технологий, 2007 © БИНОМ. Лаборатория знаний, 2007
О проекте Интернет-Университет Информационных Технологий — это первое в России высшее учебное заведение, которое предоставляет возможность получить дополнительное образование во Всемирной сети. Web-сайт уни- верситета находится по адресу www.intuit.ru. Мы рады, что вы решили расширить свои знания в области компью- терных технологий. Современный мир — это мир компьютеров и инфор- мации. Компьютерная индустрия — самый быстрорастущий сектор эко- номики, и ее рост будет продолжаться еще долгое время. Во времена жест- кой конкуренции от уровня развития информационных технологий, до- стижений научной мысли и перспективных инженерных решений зависит успех не только отдельных людей и компаний, но и целых стран. Вы вы- брали самое подходящее время для изучения компьютерных дисциплин. Профессионалы в области информационных технологий сейчас востребо- ваны везде: в науке, экономике, образовании, медицине и других облас- тях, в государственных и частных компаниях, в России и за рубежом. Ана- лиз данных, прогнозы, организация связи, создание программного обес- печения, построение моделей процессов — вот далеко не полный список областей применения знаний для компьютерных специалистов. Обучение в университете ведется по собственным учебным планам, разработанным ведущими российскими специалистами на основе между- народных образовательных стандартов Computer Curricula 2001 Computer Science. Изучать учебные курсы можно самостоятельно по учебникам или на сайте Интернет-Университета, задания выполняются только на сайте. Для обучения необходимо зарегистрироваться на сайте университета. Удостоверение об окончании учебного курса или специальности выдает- ся при условии выполнения всех заданий к лекциям и успешной сдачи итогового экзамена. Книга, которую вы держите в руках, — очередная в многотомной серии «Основы информационных технологий», выпускаемой Интернет- Университетом Информационных Технологий. В этой серии будут выпущены учебники по всем базовым областям знаний, связанным с компьютерными дисциплинами. Добро пожаловать в Интернет-Университет Информационных Технологий! Анатолий Шкред anatoli@shkred.ru
Об авторе Барский Аркадий Бенционович, доктор технических наук, профессор, родился в 1937 году в г. Кировограде, в Украине. В 1960 г. окончил меха- нико-математический факультет Саратовского государственного универ- ситета по специальности «математик-вычислитель» и был направлен в Москву, в один из НИИ Министерства обороны. Участвовал в обосновании требований к разрабатываемым вычисли- тельным средствам сложных управляющих систем и в их испытаниях. В 1965 г. защитил кандидатскую диссертацию по вопросам контроля про- грамм реального времени. В 1973 г. защитил докторскую диссертацию по планированию и организации параллельных вычислений в многопроцес- сорных вычислительных системах. Предложил структуру и архитектуру некоторых высокопараллельных вычислительных систем. С 1991 г. про- фессор кафедры «ЭВМ» (современное название «Вычислительные систе- мы и сети») Московского государственного университета путей сообще- ния (МИИТ). Распространил свой интерес на логические нейронные се- ти, воспроизводящие принципы ассоциативного мышления на основе распараллеливания. Список научных трудов содержит свыше 200 наименований, среди них монографии: «Планирование параллельных вычислительных процес- сов», «Параллельные процессы в вычислительных системах: планирова- ние и организация», «Нейронные сети: распознавание, управление, при- нятие решений».
Оглавление Предисловие................................................ 12 Введение................................................... 14 Лекция 1. Параллельные структуры вычислительных систем . ... 20 1.1. Два уровня распараллеливания....................... 20 1.2. Классификация параллельных ВС...................... 22 1.3. «Фон-Неймановские» и «не-Фон-Неймановские» архитек- туры .................................................. 24 1.4. Системы с общей и распределенной памятью........... 27 1.5. Способы межмодульного соединения (комплексирования) 28 1.6. «Исторические» модели.............................. 29 1.6.1. Векторная ВС ПС-2000 ........................ 29 1.6.2. Матричные ВС ................................ 32 1.6.3. ВС Крей-1 («Электроника ССБИС»).............. 36 1.6.4. МВК «Эльбрус-2».............................. 37 1.6.5. Проект МВК «Эльбрус-3»....................... 39 Лекция 2. Микропроцессорные системы и способы распараллели- вания ................................................. 41 2.1. Мультимикропроцессорные вычислительные системы ... 41 2.2. Направление «мини-супер» призвано поддержать персо- нальный компьютер ..................................... 45 2.3. Распределенный и разделяемый вычислительный ресурс второго уровня. Решающие поля ...................... 48 2.4. Способы распараллеливания.......................... 50 Лекция 3. Распараллеливание в ВС на уровне исполнительных уст- ройств ................................................ 56 3.1. Конвейеры операций................................. 56 3.2. Векторные конвейеры. «Зацепление» векторов......... 58 3.3. Выполнение операций на стеке....................... 59 3.4. Обобщенная процедура динамического распараллелива- ния в многофункциональном АЛУ.......................... 63 Лекция 4. Параллельная обработка стека и статическое распаралле- ливание в решающем поле................................ 70 4.1. Подстеки и их взаимодействие....................... 70 4.2. Статическое распараллеливание в АЛУ. VLIW- и EPIC- архитектуры............................................ 80
Лекция 5. Аппаратная поддержка языка пользователя — основная концепция мультипроцессорных систем.................... 83 5.1. Проблема повышения уровня языка пользователя ..... 83 5.2. Поддержка типов — теговая архитектура............. 86 5.3. Стековый механизм выполнения процедур............. 87 5.4. Обработка массивов................................ 90 5.5. Выполнение циклов................................. 93 5.6. Ускорение условных переходов ..................... 93 Лекция 6. Оптимальное потактовое расписание выполнения работ в многофункциональном арифметическо-логическом устройстве . 95 6.1. Задача оптимальной компоновки «длинных» командных слов 95 6.2. Два подхода по скорости и «оптимальности»........... 96 6.3. «Быстрая» компоновка «длинных» командных слов....100 6.4. Оптимизированная компоновка «длинных» командных слов 111 Лекция 7. Оптимальное программирование в архитектуре управле- ния каждым тактом .....................................120 7.1. Расчет нейросети .................................120 7.1.1. Программирование трехадресных команд.......120 7.1.2. Компоновка «длинных» команд.................121 7.2. Пример оптимизированной компоновки «длинных» ко- мандных слов для ВС с синхронными ИУ...................124 Лекция 8. Оптимальное программирование процессоров ЕР1С-ар- хитектуры..............................................134 8.1. Оптимизация ветвления при решении задач сортировки на процессоре ЕР/С-архитектуры............................134 8.2. Оптимизация предикатных вычислений при решении за- дач поиска на процессоре ЕР/С-архитектуры..............149 Лекция 9. Вычислительные системы нетрадиционной архитектуры 155 9.1. Однородные вычислительные структуры (среды).......155 9.2. Ассоциативные вычисления и ВС.....................159 9.3. ВС Connection Machine.............................163 9.4. Нейронные сети и нейрокомпьютеры..................165 Лекция 10. Асинхронная ВС на принципах «data flow»........169 10.1. Структура и программирование.....................169 10.2. Виртуализация ресурса............................175 10.3. Дисциплина обращения к памяти данных.............178
Лекция 11. Программирование задач для асинхронной ВС архитек- туры «data flow» .....................................183 11.1. Численное интегрирование .......................183 11.2. Умножение матриц................................185 11.3. Решение системы линейных уравнений методом Гаусса . . 187 11.4. Основы трансляции с языков высокого уровня......192 11.4.1. Общая концепция...........................192 11.4.2. Операторы присваивания....................194 11.4.3. Непрерываемые участки программы...........198 11.4.4. Операторы цикла...........................200 Лекция 12. SPMD-технология на базе симметричной ВС.......204 12.1. Архитектура.....................................204 12.2. Программирование................................210 12.2.1. Векторная операция свертки................211 12.2.2. Распараллеливание по опорному одномерному мас- сиву .............................................214 12.2.3. Распараллеливание по двумерному опорному массиву217 Лекция 13. Задача логического вывода и когерентность кэш-памяти в ВС SPMD-архитектуры.................................221 13.1. Обработка базы знаний...........................221 13.2. Проблема когерентности кэш-памяти решается совместно с проблемой «data flow»...............................230 13.2.1. Проблема управления когерентностью кэшей и ее совмещение с синхронизацией параллельных вы- числений .........................................230 13.2.2. Процедура совмещения когерентности и синхрони- зации ............................................232 13.3. Применение механизма предикатов в ВС 8РМО-архитектуры236 Лекция 14. Параллельные технологии решения информационно- логических задач .....................................239 14.1. Реализация языка логического программирования ПРО- ЛОГ на ВС SPMD- архитектуры.......................239 14.2. SPMD-технология обработки списковых структур....246 14.2.1. Нахождение последнего элемента списка.....246 14.2.2. Поиск и исключение элемента списка........254 Лекция 15. Применение SPMD-технологии при построении сете- вых баз данных с циркулирующей информацией............257 15.1. Принцип работы БД с циркулирующей информацией . . . 257 15.2. Архитектуры ротационных БД......................261 15.3. Эффективность и технические требования..........265
15.4. Сетевые базы данных с циркулирующими запросами-пред- ложениями .............................................268 15.5. Многосерверные сетевые БД с циркулирующей информа- цией ..................................................271 Лекция 16. Сетевые технологии параллельного программирования 276 16.1. Концепция построения вычислительных комплексов на базе локальной вычислительной сети........................276 16.2. Сложность алгоритма и проблема распараллеливания . . . 278 16.3. Требования к средствам операционного взаимодействия в локальной вычислительной сети..........................282 16.3.1. Анализ сетевых топологий и обоснование архитек- туры сети, необходимой для организации распреде- ленных вычислений..................................282 16.3.2. Управление обменом в сети типа «шина»......286 16.3.3. Локальная сеть Ethernet ...................289 16.4. Организация параллельного решения задачи в локальной сети................................................290 Лекция 17. Параллельные и сетевые технологии решения задач ли- нейного программирования ..............................295 17.1. Предпосылки методов .............................295 17.2. Метод прямого перебора при решении задачи линейного программирования.......................................296 17.2.1. Графический метод решения и его обобщение . . . . 296 17.2.2. Общий алгоритм перебора....................301 17.2.3. Пример применения параллельной процедуры пря- мого перебора......................................303 17.2.4. Сложность алгоритма прямого перебора.......304 17.3. Параллельный аналог «симплекс-метода»............305 17.3.1. Пример.....................................305 17.3.2. Общий алгоритм.............................312 17.3.3. Сложность алгоритма........................315 17.3.4. План параллельных вычислений...............315 17.4. Параллельное решение задачи целочисленного линейного программирования.......................................316 Лекция 18. Параллельные методы расчета транспортной сети . . . 320 18.1. Прямой перебор и аналог «симплекс-метода» при решении транспортной задачи без ограничения пропускной способ- ности коммуникаций........................................320 18.1.1. Постановка задачи и планы решения..........320 18.1.2. Параллельный алгоритм решения..............321
18.1.3. О применении схемы Гаусса решения систем линей- ных уравнений в транспортной задаче................334 18.2. Транспортная задача с ограниченными пропускными спо- собностями коммуникаций ................................336 18.2.1. Постановка задачи и планы решения...........336 18.2.2. Пример......................................337 18.3. Параллельный алгоритм нахождения максимального пото- ка в сети............................................. 342 18.3.1. Исходные построения ........................342 18.3.2. Алгоритм....................................344 18.3.3. Пример......................................344 18.3.4. Параллельное выполнение алгоритма...........351 Лекция 19. Некоторые задачи нелинейного программирования и на- хождение опорного плана для задачи линейного программирова- ния ....................................................353 19.1. Параллельное решение задач НП при линейных ограниче- ниях ...............................................353 19.2. Параллельное решение «плоской» задачи НП..........356 19.3. Метод нормалей нахождения опорного плана для решения задачи линейного программирования ......................358 19.3.1. Предпосылки метода..........................358 19.3.2. Принцип внешней точки.......................359 19.3.3. Основные предположения......................362 19.3.4. Особенности применения косинуса как функции меры угла..........................................366 19.3.5. Алгоритм. Пример ...........................371 19.3.6. Развитие стратегии решения задачи ЛП........373 19.3.7. Оценка сложности ...........................376 Лекция 20. Параллельное программирование — аппарат исследова- ния операций ...........................................378 20.1. Неформальная постановка задач параллельного програм- мирования ВС............................................378 20.2. Граф-схемы параллельных алгоритмов................379 20.3. Временные оценки на информационных графах ........385 20.4. Нижняя оценка минимального числа процессоров, необ- ходимого для выполнения алгоритма за заданное время . . 395 20.5. Нижняя оценка минимального времени выполнения дан- ного алгоритма на ВС ...................................396 20.6. Решение задачи 1 распараллеливания для однородных ВС . 398 20.7. Решение задачи 2 распараллеливания для однородных ВС . 405
Лекция 21. Организация и оптимизация параллельных процессов . 409 21.1. Общая схема параллельных вычислений при обслужива- нии потока заявок (в АСУ)..............................409 21.2. Особенности параллельного вычислительного процесса в системе реального времени..............................410 21.3. Централизованные и децентрализованные ВС.........413 21.3.1. Классификация..............................413 21.3.2. Централизованное диспетчирование...........414 21.3.3. Децентрализованное диспетчирование в многока- нальном и многоциклическом режиме..................415 21.4. Комбинированное диспетчирование в ВС с очередью ... 419 21.5. Концептуальные основы распараллеливания в МВК се- мейства «Эльбрус» .....................................425 21.5.1. Управление процессами в МВК семейства «Эльбрус» 425 21.5.2. Распараллеливание в МВК. Семафоры..........427 21.6. Реализация конвейера на симметричной ВС..........429 21.7. Технология data flow на уровне процедур и процессов в сим- метричной ВС ..........................................430 Лекция 22. Организация параллельной обработки информации в АСУ коллективного пользования..........................433 22.1. Схема организации параллельного процесса.........433 22.2. Диспетчирование..................................437 Лекция 23. Диспетчирование параллельных вычислительных систем440 23.1. Диспетчер последовательного назначения...........440 23.1.1. Частичная упорядоченность работ отсутствует . . . 440 23.1.2. Диспетчер распределения частично упорядоченно- го множества работ в однородной ВС.................442 23.1.3. Формальное описание алгоритма диспетчера .... 446 23.2. Диспетчирование неоднородной ВС..................449 23.2.1. Информационные графы с векторными весами вер- шин ...............................................449 23.2.2. Диспетчер последовательного назначения для неод- нородной ВС........................................451 Лекция 24. Синхронизация параллельных процессов...........457 24.1. Средства синхронизации параллельных процессов....457 24.2. Задачи синхронизации при использовании разделяемых ресурсов ..............................................464 24.2.1. Основные понятия...........................464 24.2.2. Задачи синхронизации.......................465
Лекция 25. Эффективность вычислительных систем............471 25.1. Оценка производительности ВС.....................471 25.2. Помехоустойчивые вычисления......................475 25.3. Особенности обеспечения надежности ВС............479 25.4. Оценка надежностных характеристик ВС при испытаниях . 481 Лекция 26. GRID-ТЕХНОЛОГИИ................................483 26.1. Основные направления исследований в области Grid-тех- нологий ...............................................483 26.2. Немного истории..................................486 26.3. Grid-технологии решения информационных задач.....487 26.4. Известные проекты Grid-технологии решения вычисли- тельных задач .........................................489 26.5. Основы проектирования Центра Grid-технологий.....490 Заключение................................................496 Литература................................................500
Предисловие Развитие вычислительных технологий и средств сопровождалось пониманием того, что работы надо делить между многими исполни- тельными устройствами. Распараллеливание — естественный жизнен- ный принцип, основанный на утверждении, что коллектив сильнее оди- ночки. Основной критерий эффективности распараллеливания заключа- ется в минимизации времени выполнения работы. Однако действенен и другой критерий — выбор системы исполнителей, обладающей мини- мальной стоимостью и способной закончить работу не позже указанного срока. Вычислительные системы с особой остротой на реальном техниче- ском уровне вобрали в себя принцип распараллеливания, развив его в самом широком многообразии применения. Наступила пора разрушить монополию, систематизировать и обобщить методы и технологии распа- раллеливания, обеспечить их эффективное применение во всех областях хозяйственной деятельности человека. Можно представить следующие направления развития параллель- ных технологий. Параллельные структуры отображают организацию и взаимодей- ствие исполнителей сложного комплекса взаимосвязанных работ. В вы- числительной технике — это проблема параллельного выполнения от- дельных программ и целых программных комплексов, отображенная вы- бором архитектуры процессоров и многопроцессорных вычислительных систем. Взаимодействие исполнительных устройств должно минимизи- ровать «накладные расходы» на организацию их взаимодействия. Параллельное программирование объединяет проблемы оптимально- го статического и динамического планирования выполнения комплек- сов взаимосвязанных работ при заданном составе и структуре взаимо- действия исполнителей. В абстрактной постановке, где достаточно сло- ва «вычислительная система» заменить словами «комплекс исполните- лей», проблема статического планирования также изложена. Динамиче- ское планирование параллельного процесса представлено схемами таких процессов и диспетчерами распараллеливания. Параллельные алгоритмы являются естественным результатом опти- мального решения задач распараллеливания. Применение многопроцес- сорных вычислительных систем, а, в особенности, бурно развивающи- еся сетевые технологии для решения задач высокой сложности - опти- мизационных, моделирования — стимулировали критический подход к
тем методам вычислений, которые были разработаны для математика- вычислителя, крутящего ручку арифмометра. Изменился критерий опти- мизации вычислительного процесса: не количество выполняемых опера- ций стало определяющим, а «длина критического пути». Указанное на- правление также рассматривается в книге. Книга рассчитана на студентов старших курсов технических и эко- номических вузов, аспирантов, инженеров-исследователей в области со- временных информационных технологий решения задач планирования и управления. Необходимый объем предварительных знаний базируется на стан- дартах курсов по информатике и основам ЭВМ.
Введение В соответствии с названием книги мы будем говорить как о прин- ципах работы параллельного компьютера, так и о методах организации и управления параллельным вычислительным процессом, а также о парал- лельных вычислительных методах решения задач. Но в более значитель- ной степени нас будут интересовать обобщения и расширение использо- вания методов параллельного планирования за границы узкого примене- ния в области вычислительных средств. Теперь не секрет, что «холодная война» стимулировала развитие вычислительных средств сверхвысокой (по тому времени) производи- тельности, призванных удовлетворить требования управления сложными объектами и системами в реальном масштабе времени. Отсутствие какой- либо внешней помощи вынуждало мобилизовать все внутренние науч- ные и производственные ресурсы, производя работы в режиме экономии средств и времени. Развитие элементно-конструкторской базы, основанное на физиче- ских принципах электроники, всегда (и это диалектически правильно) отстает от требований конкретно решаемых задач. Быстродействия од- ного компьютера недостаточно для, например, массового обслуживания группы перехватчиков, стартующих против налета баллистических целей. Своевременно пришло понимание того, что только структурными ме- тодами можно добиться необходимой производительности вычислитель- ных средств. Таким основным структурным методом является распарал- леливание вычислений. Сначала стало ясно, что вместо одной ЭВМ в систему управления необходимо встраивать несколько, решающих единый набор функцио- нально связанных задач. Такой коллектив ЭВМ получил название вычис- лительного комплекса (ВК). Информационная взаимосвязанность задач потребовала применения средств оперативного обмена данными внутри ВК и средств синхронизации. Однако временные затраты на организа- цию взаимодействия ЭВМ в ВК (накладные расходы) оказались весьма высоки. Возникла идея использования взамен разделенной оперативной памяти (ОП), реализованной в ВК, общей (разделяемой) ОП, которая свя- зывает несколько центральных процессоров. Проблема затрат времени на обмен оказалась решенной. Так зародилось понятие параллельной вычис- лительной системы (ВС). Впоследствии принципы распараллеливания стали применяться на всех уровнях разработки ВС: и отдельных устройств, и процессоров. От- метим, что такой способ распараллеливания, как конвейерный, исполь- зовался на раннем этапе создания ЭВМ и используется сейчас.
Приоритет в создании ВС на общей памяти принадлежит С. Крею, признанному «отцу супер-ЭВМ», главному конструктору системы CDC 6600, разработанной в 1963 году. Однако условия соперничества и сокры- тия информации определили независимость отечественных разработок. В нашей стране, в режиме строгой экономии средств, экспери- ментальная разработка альтернативных проектов была затруднительной. Крупные проекты осуществлялись для непосредственного внедрения. В этих условиях оказалось, что на малое число ученых-разработчиков при- ходилась армия ученых-исследователей, на теоретическом уровне обос- новывающих как принимаемые решения, так и оптимальную эксплуата- цию, а также пути дальнейшего развития. Здесь-то и появились результаты глубоких исследований, примене- ние которых, первоначально обращенное на ВС, имеет более широкую применимость во всех сферах управления, экономики и хозяйства. Необходимо отметить тех выдающихся ученых, чьими усилиями осуществлялась не только разработка, но и обоснование эффективности и целесообразности пути создания многопроцессорных ВС, ибо своевре- менно принятая техническая политика определяет эффективное разви- тие государства. (К сожалению, известна и негативная политика в обла- сти вычислительной техники, отвлекшая значительные технологические ресурсы.) Такими учеными являются: В. М. Бахарев, настойчиво пропа- гандировавший, продвигавший и руководивший исследованиями в об- ласти ВС на общей памяти; В. С. Бурцев и Б. А. Бабаян — конструкто- ры и ведущие разработчики семейства «Эльбрус», продолжающие борь- бу за честь Отечества и поныне; М. А. Карцев — теоретик ВС и разработ- чик семейства, по его словам, «универсальных спецпроцессоров», объ- единивших в одном вычислительном устройстве скалярные и векторные операции; Б. А. Головкин, исследовавший эффективность внедрения ВС в сложные управляющие системы. Какова же цель распараллеливания? Универсальным критерием, используемым при решении задач рас- параллеливания, является минимум времени выполнения совокупности работ, распределяемых между процессорами. Если несколько процессоров составляют ВС, то важной харак- теристикой ее эффективности (основные составляющие эффективно- сти — производительность, надежность, стоимость) при специализиро- ванном использовании (например, в составе автоматизированной систе- мы управления, АСУ) является коэффициент полезной загрузки к3. Для его определения находят коэффициенты загрузки процессоров: кц — ? ^реш
где Ti, i = 1,... ,n, — суммарное время занятости каждого процессора решением задачи на всем отрезке полного решения задачи, длиной Треш (рис.В.1). Тогда 1 п k3 = ~y/ki. п г=1 Если Pq — производительность одного процессора, то реальная произво- дительность Рве ВС, состоящей из п процессоров, при решении данной задачи (!) находится: Рве = пк^Ро, где Pq определяется классом решаемых задач. Тх (находится как суммарное время полезной работы процессора) Рис. ВЛ. Диаграмма параллельного выполнения информационно взаимосвязан- ных работ в ВС Какая догадка явилась предпосылкой организации параллельной обработки информации? Основное предположение об эффективности совместной работы нескольких процессоров при решении множества задач (функциональ- ных модулей) управляющей системы основывалось на возможности усреднения нагрузки при динамическом распределении работ между про- цессорами. Такое усреднение позволяет сгладить пиковую нагрузку на от- дельные процессоры, а, следовательно, снизить требования к их произ- водительности. Конечно, это справедливо в том случае, если увеличива- ющиеся накладные расходы, связанные с организацией динамического управления вычислительным процессом (диспетчированием) оправды- вают эти затраты. Пусть управляющая система обслуживает несколько объектов, каж- дый из которых требует затраты производительности Р, в соответствии со стадией обслуживания, как показано временными диаграммами на
рис. В.2. Начала обслуживания, а также длительность стадий обслужи- вания, случайно распределены во времени. На каждой стадии обслужи- вания используется общее для всех объектов подмножество программ — функциональных модулей. Тогда видно, что если за объектами жестко за- креплять процессоры ВС, то их производительность должна удовлетво- рять самой напряженной последней стадии обслуживания. Если же в со- ответствии со случайным взаимным смещением этой стадии все мно- жество функциональных модулей, требуемых для всех объектов, дина- мически распределять между процессорами, то такой пиковой нагрузки на один процессор в среднем можно избежать. То есть можно руковод- ствоваться результирующей диаграммой на основе суммирования тех, что изображены на рисунке. Конечно, такое допущение должно подтверждаться на основе моде- лирования реальных ситуаций, требований к эффективности управляю- щей системы и на основе разработок оперативных диспетчеров распарал- леливания. t Рис. В.2. Затраты производительности при обслуживании нескольких объектов Разработки в области ВС не могли не повлиять на практику парал- лельного планирования в широком диапазоне применения. Ведь задачи оптимального распараллеливания входят в класс задач исследования опе- раций, и это определяет контекст их исследования. Суть этих задач - в ми- нимизации времени выполнения статически заданного или динамически формируемого частично упорядоченного множества заданий на выпол- нение работ, а также в минимальном по стоимости наборе исполнителей, Достаточном для выполнения множества таких заданий за ограниченное время.
Вспомним время робких экономических реформ первой половины 1960-х годов, когда каждый проект сопровождался активным и обяза- тельным применением средств оперативного планирования (известная система ПЕРТ). В динамике выполнения проекта исследовалось графи- ческое временное представление взаимосвязанных работ, определялась длина критического пути, ранние и поздние сроки начала (окончания) работ, находились оптимальные расписания, перераспределялись работы между исполнителями. Отметим «неловкое» традиционное представление информации при решении указанных задач. Это — важный пример того, как непродуман- ное задание исходной информации влияет на сложность решаемых задач. В приложении к ВС (другой разработчик — другой подход) распа- раллеливаемое множество работ описывается иначе, и то, что было слож- но, становится простым. Так, например, определение длины критиче- ского пути — незначительная по трудоемкости процедура, выполняемая в составе более сложной операции оптимального планирования. В ВС используются простые диспетчеры динамического распределения работ, нетрудоемкость которых (при достигаемой близости к оптимальному ре- зультату) и разрешает их включение в операционную систему (ОС) ВС. Однако ВС способна не только делиться своими методами с управ- лением и планированием. Закономерно и обратное влияние: задачи предъявляют требования к архитектуре ВС, обеспечивающие их эффек- тивное решение. С учетом этого взаимного влияния подход к решению таких за- дач существенно расширяется. Дело в том, что многие методы вычис- лений (а речь идет о задачах высокой сложности — оптимизационных, информационно-логических, моделирования сложных систем и др.), со- здавались в эпоху, когда математик-вычислитель крутил ручку арифмо- метра. Минимизация числа операций была единственным критерием сложности метода, а многие ”интеллектуальные”действия при этом не учитывались. При программировании на ВС, как видно из рисунков, существен- ной является длина критического пути в информационном графе, опи- сывающем алгоритм или комплекс программ. При этом даже неважно, «стоят», дублируют счет или выполняют другую «лишнюю» работу неко- торые процессоры. Главное — минимизация указанной длины критиче- ского пути, как ограничения снизу времени решения, увеличение коэф- фициента загрузки ВС за счет минимизации накладных расходов на ор- ганизацию распараллеливания. Это требует пересмотра многих методов вычислений. В утверждение философского тезиса о том, что «развитие идет по спирали», идея объединения ЭВМ в единый ВК вновь проявилась в обра-
зе организации вычислительных сетей. Локальные, региональные, кор- поративные, глобальные сети (вплоть до паутины Интернет) представ- ляют универсальный и значительный ресурс для решения как информа- ционных, так и вычислительных задач высокой сложности. Это молодое направление исследований также нуждается в конкретизации и приложе- нии тех же идей распараллеливания, что применяются для оптимального программирования ВС. Отметим существование ряда отечественных школ, послуживших развитию параллельных технологий как важного теоретического и прак- тического научного направления. Такие школы возглавляли И. В. Прангишвили, С. Я. Виленкин, В. В. Игнатушенко и др. — в области создания микропроцессорных век- торных ВС и ВС с перестраиваемой структурой. Новосибирская шко- ла (Ю. Г. Косарев, В. Е. Котов, А. С. Нариньяни и др.) пропагандирова- ла универсальные, многофункциональные структуры ВС и значительно продвинулась в теоретическом обосновании параллельных вычислитель- ных процессов. Плодотворной была Таганрогская школа, возглавляемая А.В. Каляевым, которая защищала идею многопроцессорных ВС с про- граммируемой структурой. С началом «перестройки» закончились оче- редные попытки «догнать и перегнать» на основе расширенного воспро- изведения идей С. Крея в рамках проекта «Электроника ССБИС», осу- ществляемого В.А. Мельниковым — конструктором замечательной ЭВМ «БЭСМ-6». В 1967 году в издательстве «Советское радио» вышла моногра- фия Ю. С. Голубева—Новожилова «Многомашинные комплексы вычис- лительных средств», которую можно считать первой отечественной пуб- ликацией, отображающей применение параллельных технологий в вы- числительных системах. Однако в более общем применении следует ука- зать, например, на монографию С. И. Зуховицкого и И. А. Радчика «Ма- тематические методы сетевого планирования», вышедшую в издательстве «Наука» в 1965 году. И все же первым теоретическим осмыслением ново- го направления следует считать монографию Д. А. Поспелова «Введение в теорию вычислительных систем», вышедшую в издательстве «Советское радио» в 1972 году. Следует отметить и дальнейшую роль Д.А. Поспелова в развитии идей компьютерных технологий — от элементно-логической базы и основ оперативного управления до искусственного интеллекта. Основная цель предлагаемой книги — обобщение, перенесение и развитие того, что известно применительно к вычислительным системам, в более широкую область экономической, социальной и другой деятель- ности человека.
Лекция 1. Параллельные структуры вычислительных систем Лекция посвящена начальному знакомству с основными структурны- ми решениями, воплощенными в параллельных вычислительных системах. Производится их классификация. Приводятся «исторические» примеры па- раллельных ВС. Ключевые слова: уровни распараллеливания, потоки команд и дан- ных, «Фон-Неймановские» и «не-Фон-Неймановские» архитекту- ры, разделяемая и распределенная память, матричный коммутатор, векторные и матричные ВС. 1.1. Два уровня распараллеливания Развитие вычислительной техники характеризуется тем, что на каж- дом этапе новых разработок требования к производительности значи- тельно превышают возможности элементной базы. Это обусловлено задачами сложных систем управления в реальном времени, централизованным решением задач в сетях, имитационным мо- делированием сложных процессов (например, в ядерной физике), опе- ративным планированием и управлением и решением других задач ис- следования операций, преодолевающих «проклятие размерности». Такие задачи требуют концентрации вычислительных мощностей, постоянно поддерживая высокую актуальность проблемы создания супер-ЭВМ. Уже давно стало ясно, что только структурными методами можно уравнять возможности вычислительных средств и требуемые скорости решения на них задач. Под структурными понимают методы распарал- леливания работ. К распараллеливанию прибегают при проектировании отдельных устройств ЭВМ — устройств управления, буферов команд, ка- налов обращения к памяти и модулей памяти, многофункциональных арифметическо-логических устройств (АЛУ), повсеместно применяемых конвейеров и т.д. Но к распараллеливанию же прибегают и в проекти- ровании совместной работы многих процессоров при параллельной или распределенной обработке информации, вводя в обращение термин «вы- числительная система (ВС)». Технический прогресс, несомненно, сказывается на росте частоты работы элементной (элементно-конструкторской) базы, на повышении степени интеграции, но благодаря ему появляются все новые задачи,
требующие еще более значительного роста производительности вычис- лительных средств. Это можно считать законом, приводящим к новым уловкам при совмещении работы устройств ВС, при увеличении их коли- чества в системе, при увеличении их эффективности в процессе решения задач. Под эффективностью работы устройства в составе ВС понима- ют степень его участия в общей работе ВС при решении конкретной задачи — коэффициент загрузки устройства. Распараллеливание работ оправдано, если приводит к существенному росту усредненного по всем устройствам коэффициента загрузки оборудования при решении задач. Это непосредственно сказывается на времени решения. Сегодня говорят не о специальном классе задач, а о задачах, ориентирующих ВС на уни- версальность, что обусловлено современными областями применения. Важным революционизирующим моментом стал переход на микро- процессорную элементно-конструкторскую базу, обусловившую постро- ение мультимикропроцессорных ВС. Сложилось представление о двух основных уровнях, на которых в ВС применяются практические методы распараллеливания: — на уровне программ, процессов, процедур (первый уровень рас- параллеливания) ; — на уровне команд и операций (второй уровень распараллелива- ния). Эти уровни обусловили уровни структуризации ВС на пути превра- щения ее в супер-ЭВМ. Современным практическим воплощением пер- вого уровня структуризации являются однородные многопроцессорные ВС на общей (разделяемой) оперативной памяти. Они получили назва- ние симметричных ВС за обеспечение «равноправия» составляющих мо- дулей. Окончательное признание симметричных ВС положило конец по- иску «экзотических» архитектур, эффективных лишь при решении опре- деленных классов задач. Универсальность симметричных ВС, возмож- ность реализации на них любых вычислительных процессов с высокой эффективностью оборудования иллюстрируются многими применения- ми и анализируются ниже. Уровень команд и операций наиболее ярко представлен многофунк- циональными АЛУ и их обобщением — решающими полями, представ- ляющими разделяемый вычислительный ресурс многих процессоров. Некоторые современные проекты ВС в разной степени предполагают та- кой ресурс. Здесь основная проблема — полная загрузка отдельных ис- полнительных устройств (ИУ) в процессе выполнения программы. Различают два способа реализации такой загрузки: динамический и статический.
Динамическая загрузка осуществляется аппаратурой в процессе вы- полнения программы. Она использует упрощенные алгоритмы распарал- леливания. Статическая загрузка предусматривается при трансляции програм- мы. Транслятор оптимизирует использование оборудования, также решая задачи распараллеливания. Это выражается в формировании «длинных» командных слов, задающих работы устройствам АЛУ в каждом машин- ном такте. Основная сложность распараллеливания заключается в соблюдении частичной упорядоченности распределяемых работ. Поэтому решение за- дач синхронизации параллельного вычислительного процесса сопрово- ждает все усилия по организации совместной работы устройств. Это ска- зывается и при решении всех задач эффективного использования рассло- енной многоуровневой памяти ВС. Отечественный опыт создания семейства МВК (многопроцессор- ных вычислительных комплексов) «Эльбрус», модели которого относятся к симметричным ВС, и последующее проектирование позволили проана- лизировать, разработать и применить ряд существенно новых, важных и перспективных решений в распараллеливании как самого вычислитель- ного процесса, так и работы отдельных устройств. Разработка пронизана такими решениями, они ложатся в основу проектирования развития се- мейства, являются основой обобщений и дальнейшего исследования воз- можности применения. 1.2. Классификация параллельных ВС Потоки команд и потоки данных. Общепринята удачная классифика- ция ВС, которую предложил в 1970 г. Г. Флин (США). Основным опреде- ляющим архитектурным параметром он выбрал взаимодействие потока команд и потока данных (операндов и результатов). В ЭВМ классической архитектуры ведется последовательная обра- ботка команд и данных. Команды поступают одна за другой (за исклю- чением точек ветвления программы), и для них из ОЗУ или регистров так же последовательно поступают операнды. Одной команде (операции) соответствует один необходимый ей набор операндов (как правило, два для бинарных операций). Этот тип архитектуры — «один поток команд — один поток данных», О КОД (SISD - «Single Instruction, Single Data») условно изображен на рис. 1.1. Тип ОКМД— «один поток команд — много потоков данных» (SIMD — «Single Instruction — Multiple Data») охватывает ВС, в которых одной ко- мандой обрабатывается набор данных, множество данных, вектор, и вы- рабатывается множество результатов. Это векторные и матричные систе-
Процессор Поток данных для обработки Поток команд Поток данных после обработки Память Рис. 1.1. ВС типа 0К0Д(818И) мы, в которых по одной команде выполняется одна и та же операция над всеми элементами массива — вектора или матрицы, распределенными между процессорными (обрабатывающими) элементами ПЭ или процессо- рами. Принцип обработки показан на рис. 1.2. Потоки данных для обработки Потоки данных после обработки Рис. 1.2. ВС типа 0КМД(81МИ) Отечественные векторные ВС — ПС-2000, ПС-2100. Допускают ор- ганизацию матричной обработки. Классический пример матричной ар- хитектуры - ILLIAC-1V (США). К типу МКОД — «много потоков команд — один поток данных» (MISD — «Multiple Instruction — Single Data») принято относить векторный конвейер (обычно в составе ВС, чтобы подчеркнуть основной использу- емый принцип вычислений), например, в составе ВС Сгеу-1, «Электро- ника ССБИС». На векторном конвейере производится последовательная обработка одного потока данных многими обрабатывающими устрой- ствами (ступенями, станциями) конвейера. К такому же типу относится ВС, реализующая макроконвейер (ВС «Украина»). В ней задача, решаемая циклически, «разрезается» на по- следовательные этапы, закрепляемые за отдельными процессорами. За- пускается конвейер многократного выполнения цикла, составляющего задачу. Принцип обработки показан на рис. 1.3.
Конвейер процессоров Рис. 1.3. ВС типа МК0Д(М18И) Тип МКМД — «много потоков команд — много потоков данных» (MIMD — «Multiple Instruction — Multiple Data») соответствует более пол- ному и независимому распараллеливанию. К этому типу относятся, на- пример, все многопроцессорные вычислительные комплексы (МВК) се- мейства «Эльбрус». 1.3. «Фон- Неймановские» и «не-Фон-Неймановские» архитектуры Немного истории. Первую ЭВМ создал в 1939 г. в США профес- сор Джон Атанасов, болгарин, со своим аспирантом К. Берри. Две ма- лые ЭВМ, созданные ими в период 1937—1942 гг., были прототипами большой ЭВМ АВС для решения систем линейных уравнений, которая в 1942 г. доводилась по устройствам ввода-вывода и должна была войти в строй в 1943 г., но призыв Атанасова в армию в 1942 г. воспрепятствовал этому. Проект электронной ЦВМ Эниак (Electronics Numerical Integrator and Computer) был сделан в 1942 г. Д. Моучли и Д. Эккертом и осуще- ствлен в 1945 г. в Муровской электротехнической лаборатории Пенсиль- ванского университета. В 1946 г. Эниак был публично продемонстриро- ван в работе. В нем впервые были применены триггеры. Рождение Эниак считают началом компьютерной эры, посвящая ему научные симпозиу- мы и другие торжественные мероприятия. (Международный симпозиум, посвященный 50-летию первой ЭВМ, был проведен и в Москве в июне 1996 г.) Однако еще в начале 40-х годов XX века Атанасов поделился с Мо- учли информацией о принципах, заложенных в ЭВМ АВС. Хотя Моучли впоследствии утверждал, что он не воспользовался этой информацией в патенте на Эниак, суд не согласился с этим. Вернувшись из армии по-
еле войны, Атанасов узнал, что более мощная ЭВМ Эниак уже создана, и потерял интерес к этой теме, не поинтересовавшись, насколько Эниак похож на его ЭВМ АВС. Известный английский математик Алан Тьюринг был не только те- оретиком по информации и теории алгоритмов, автором теоретического автомата «машины Тьюринга», но и талантливым инженером, создавшим в начале 1940-х годов первую работающую специализированную ЭВМ. Эта ЭВМ под названием «Колосс» была сконструирована и сделана им совместно с X. А. Ньюменом в Блетчи (Англия) и начала работать в 1943 г. Сообщения о ней своевременно не публиковались, т. к. она использова- лась для расшифровки секретных германских кодов во время войны. Основные архитектурно-функциональные принципы построения ЦВМ были разработаны и опубликованы в 1946 г. венгерским математи- ком и физиком Джоном фон Нейманом и его коллегами Г. Голдстайном и А. Берксом в ставшем классическим отчете «Предварительное обсу- ждение логического конструирования электронного вычислительного устройства». Основополагающими принципами ЭВМ на основании это- го отчета являются: 1) принцип программного управления выполнением программы, и 2) принцип хранимой в памяти программы. Они легли в основу понятия фон-Неймановской архитектуры, широко использующей счетчик команд. Вернемся к настоящему. Счетчик команд отражает «узкое горло», которое ограничивает поток команд, поступающих на исполнение, их по- следовательным анализом. Альтернативной архитектурой является «не-фон-Неймановская» ар- хитектура, допускающая одновременный анализ более одной команды. Поиски ее обусловлены необходимостью распараллеливания выполне- ния программы между несколькими исполнительными устройствами — процессорами. Счетчик команд при этом не нужен. Порядок выполне- ния команд определяется наличием исходной информации для выпол- нения каждой из них. Если несколько команд готовы к выполнению, то принципиально возможно их назначение для выполнения таким же ко- личеством свободных процессоров. Говорят, что такие ВС управляются потоком данных (data flow). Общая схема потоковых ВС представлена на рис. 1.4. Программа или ее часть (сегмент) размещается в памяти команд ПК, состоящей из ячеек команд. Команды имеют структуру {код операции, операнд 1, ..., операнд £, адрес результата 1, ..., адрес результата М}
Рис. 1.4. «Идеальная» потоковая ВС В командах проверки условия возможно альтернативное задание ад- реса результата (ИЛИ — ИЛИ). Адреса результатов являются адресами ПК, т. е. результаты выполнения одних команд в качестве операндов мо- гут поступать в текст других команд. Команда не готова к выполнению, если в ее тексте отсутствует хотя бы один операнд. Ячейка, обладающая полным набором операндов, переходит в возбужденное состояние и пе- редает в селекторную сеть информационный пакет (токен), содержащий код операции и необходимую числовую и связную информацию. Он по- ступает по сети на одно из исполнительных устройств. Там же операция выполняется, и в распределительную сеть выдается результирующий па- кет, содержащий результат вычислений и адреса назначения в ПК (воз- можно, за счет выбора альтернативы, т. е. такой выбор — тоже результат). По этим адресам в ПК результат и поступает, создавая возможность акти- визации новых ячеек. После выдачи токена в селекторную сеть операнды в тексте команды уничтожаются, что обеспечивает повторное выполне- ние команды в цикле, если это необходимо. Селекторная и распределительная сети образуют коммуникационную сеть ВС. Ожидаемая сверхвысокая производительность такой системы мо- жет быть достигнута за счет одновременной и независимой активизации большого числа готовых команд, проблематичном допущении о бескон-
фликтной передаче пакетов по сетям и параллельной работы многих ис- полнительных устройств. Существует ряд трудностей, в силу которых «не-фон-Неймановские» архитектуры не обрели технического воплощения для массового приме- нения в «классическом», отраженном выше, исполнении. Однако многие устройства используют данный принцип, но чаще всего взаимодействие процессоров при совместном решении общей задачи и их синхрониза- ция при использовании общих данных основаны на анализе готовности данных для их обработки. Это дает основание многим конструкторам за- являть, что в своих моделях они реализовали принцип data flow. 1.4. Системы с общей и распределенной памятью Системы с общей (разделяемой) оперативной памятью образуют со- временный класс ВС — многопроцессорных супер-ЭВМ. Одинаковый доступ всех процессоров к программам и данным представляет широ- кие возможности организации параллельного вычислительного процес- са (параллельных вычислений). Отсутствуют потери реальной производи- тельности на межпроцессорный (между задачами, процессами и т. д.) об- мен данными (рис. 1.5а). Общая оперативная память Рис. 1.5. ВС с общей (а) и распределённой (б) памятью Системы с распределенной памятью образуют вычислительные ком- плексы (ВК) — коллективы ЭВМ с межмашинным обменом для сов- местного решения задач (рис. 1.56). В ВК объединяются вычислительные средства систем управления, решающие специальные наборы задач, вза- имосвязанных по данным. Принято говорить, что такие ВК выполняют Определенные вычисления, а сами ВК называют распределенными ВК. Другое, противоположное воплощение принципа МИМД — мас-
спроцессорные или высокопараллельные архитектуры, объединяющие сот- ни — тысячи — десятки тысяч процессоров. В современных супер-ЭВМ наметилась тенденция объединения двух принципов: общей (распределяемой) и распределенной (локаль- ной) оперативной памяти (ЛОП). Такая структура используется в проекте МВК «Эльбрус-3» и «Эльбрус-ЗМ» (рис. 1.6). Рис. 1.6. Схема ВС с модулями локальной памяти 1.5. Способы межмодульного соединения (комплексирования) Различают два противоположных способа комплексирования: с об- щей шиной (шинная архитектура) и с перекрестной (матричной) коммута- цией модулей ВС (процессоров, модулей памяти, периферии). На рис. 1.7 представлена система с общей шиной. Шина состоит из линий, по которым передаются информационные и управляющие сигна- лы. Шина используется в режиме разделения времени, при котором лишь один модуль в данный момент работает на передачу. Прини- мать принципиально могут все модули, хотя преимущественно инфор- мация при выдаче в нее адресуется. Применяется в микро- и мини-ЭВМ при сравнительно небольшом числе модулей. Практически производится разделение шины на управляющую, адресную и шину данных. В высокопроизводительных ВС для возможности одновременного обмена многими парами абонентов используется перекрестная или мат- ричная коммутация. Матричный коммутатор можно представить (прямоугольной) сет-
Рис. 1.7. Схема ВС с общей шиной кой шин. К одному концу каждой подсоединен источник-потребитель информации (рис. 1.8). Точки пересечения — узлы этой сетки — пред- ставляют собой управляющие ключи, которые соединяют или разъединяют соответствующие шины, устанавливая или прекращая связь между моду- лями. Реализуется связь «каждый с каждым». Одновременно могут свя- зываться многие (до п/2) пары модулей. На рис. 1.8а — перекрестная связь между процессорами в ВС с рас- пределенной памятью, на рис. 1.86 — между п процессорами и т модуля- ми ОП. 1.6. «Исторические» модели 1.6.1. Векторная ВС ПС-2000 Разрабатывалась как проблемно-ориентированная ВС для задач об- работки геофизической информации, информации со спутников в ин- тересах геологии, картографии, обработки изображений, моделирования поведения среды и т.д. Является типичной иллюстрацией типа ОКМД. Схема ВС приведена на рис. 1.9. Основу ПС-2000 составляет параллельный процессор с общим по- током команд ППС-2000, содержащий до 64 ПЭ. Примечание. Отмечая типичные архитектурные особенности моде- лей, иллюстрируя их на архитектурах ВС, ставших классическими, уде- лим второстепенное внимание быстро устаревающим характеристикам этих ВС. Однако отметим, что ПЭ ППС-2000 — 24-разрядный микро- процессор с производительностью 3 млн оп./с, а это было значительным Достижением в начале 1980-х годов. Соседние ПЭ связаны регулярными каналами РК для оперативно- *о обмена данными. В связи с проблемной ориентированностью ВС это
б) Процессоры ED- ЕП— п , Коммутатор 1| I 2 I I т I Модули памяти Рис. 1.8. Матричные коммутаторы: а) — перекрёстная коммутация процессоров, б) — коммутация процессоров и модулей памяти обеспечивает быстрый обмен при обработке «соседними» ПЭ «соседних» же элементов поверхностей, конечно же, информационно взаимосвязан- ных. Связь с помощью РК — циклическая, в частности, ПЭ1 с помощью РК связан с ПЭ64. Т. е. при «прокатывании» 64 ПЭ по длинной последо- вательности обрабатываемых элементов поверхности ПЭ1 и ПЭ64 явля- ются «соседними»: после элемента поверхности, обрабатываемого ПЭ64, следует элемент поверхности, обрабатываемый ПЭ1. Затем пошли даль- ше, превратив векторную ППС-2000 в матричную ВС. Ввели сегментирование множества процессоров (процессоров реша- ющего поля). 64 ПЭ разбиваются или на 8 сегментов по 8 ПЭ, или на 4 сегмента по 16 ПЭ, или на 2 сегмента по 32 ПЭ. Это осуществляется,
Рис. 1.9. Схема ВС ПС-2000 прежде всего, за счет установления связи с помощью РК между первым и последним ПЭ каждого сегмента. Тогда при обработке поверхности ПЭ «прокатываются» циклически не только по «длинному» вектору, но и, при сегментировании, по матричным элементам поверхности, как будет по- казано далее. Для общей связи всех элементов ППС-2000, включая УУ, исполь- зуется магистральный канал — общая шина. По магистрали микрокоманд каждому ПЭ сообщаются команды, микропрограммы операций и микро- команды из УУ. ППС-2000 имеет распределенную память. В ППС-2000 предусмотрена двухуровневая схема управления: на уровне микрокоманд и команд. Память для их хранения — в УУ. На микрокомандам уровне пишутся отдельные фрагменты задачи — под- программы процедур, на командном — последовательность обращения к этим подпрограммам. Основным, задающим, является вычислительный процесс в мони- торной подсистеме МПС. В ней в режиме разделения времени могут вы- полняться несколько задач. С ППС-2000 в данный момент может быть связана только одна задача. Т. е. ППС-2000 по отношению к малой ма- шине (типа СМ-2), выполняющей функции МПС, является интеллекту- альным терминалом с последовательным доступом. В обычном режиме набор процедур, выполняемых в ППС-2000, по запросам со стороны МПС, определяется заранее. Микропрограммы, ре- ализующие этот набор процедур, загружаются в память ППС-2000 зара- нее. Если в ходе вычислительного процесса в МПС возникает необходи- мость в какой-либо процедуре из этого набора, задача запускает соответ- ствующую микропрограмму и передает ей необходимые данные. Возможна и динамическая загрузка микропрограмм в память ППС-2000.
1.6.2. Матричные ВС Матричная ВС также является типичным представителем ОКМД, расширением принципа векторных ВС. Классическим примером, прототипом и эталоном стала ВС ILLIAC IV, разработанная в 1971 г. в Иллинойском университете и в начале 1972 г. установленная в Эймском научно-исследовательском центре NASA (Ка- лифорния). Одна последовательность команд программы управляет работой множества 64 ПЭ, одновременно выполняющих одну и ту же операцию над данными, которые могут быть различными и хранятся в ОП каждого ПЭ. (Производительность — до 200 млн. оп./с) В целом структура центральной части может быть представлена ана- логичной векторной ВС (рис. 1.10). Рис. 1.10. Схема обмена в матричной ВС УУ — фактически простая вычислительная машина небольшой про- изводительности и может выполнять операции над скалярами одновре- менно с выполнением матрицей ПЭ операций над векторами или матри- цами. Посылает команды в независимые ПЭ и передает адреса в их ОП. К центральной части подключена система ввода-вывода с управля- ющей машиной В-6500, устройство управления вводом-выводом, файло- вые диски, буферная память и коммутатор ввода-вывода. Операционная система, ассемблеры и трансляторы размещаются в памяти В-6500. Почему же ВС — матричная? ПЭ образуют матрицу, в которой информация от одного ПЭ к дру- гому может быть передана через сеть пересылок данных при помощи спе-
циальных команд обмена. Регистры пересылок (рис. 1.11) каждого г-го ПЭ связаны высокоскоростными линиями обмена с регистрами пересы- лок ближайшего левого (г - 1-го) и ближайшего правого (г + 1)-го ПЭ, а также с регистрами пересылок ПЭ, отстоящего влево на 8 позиций от данного (г - 8)-й и отстоящего вправо на 8 позиций от данного (г + 8)-й, при этом нумерация ПЭ рассматривается как циклическая с переходом от 63 к 0 (нумерация возрастает по mod 64) слева направо и от 0 к,63 справа налево. Рис. 1.11. Конфигурация «быстрых» связей в ВС ILLIAC-4 Расстояния между ПЭ в сети пересылок и соответствующие пути пе- редачи информации задаются комбинациями из (-1, +1, -8, +8). Предусмотрено маскирование ПЭ. Каждый ПЭ может индексиро- вать свою ОП независимо от других ПЭ, что важно для операций матрич- ной алгебры, когда к двухмерному массиву данных требуется доступ как по строкам, так и по столбцам. Доступ к ОП имеют АУ соответствующего ПЭ, УУ системы и под- система ввода-вывода. Управление доступом и разрешение конфликтов при доступе к ОП осуществляет УУ системы.
Система эффективна при решении задач большой размерности, ис- пользующих исчисление конечных разностей, матричной арифметики, быстрого преобразования Фурье, обработки сигналов и изображений, линейного программирования и др. Например, приближенные методы решения задач математической физики и, прежде всего, — системы дифференциальных уравнений ис- пользуют-исчисление конечных разностей (конечно-разностные методы решения, «метод сеток»). Рис. 1.12. Решение задачи методом «сеток» Кратко рассмотрим план решения подобной задачи на матрич- ной ВС. Пусть необходимо решить уравнение в частных производных дх2 ду на области В: ( 0 х А | 0 < у < В Граничные условия: Л0,у) = /1(у), ЛА у) = Л (у), Л$,0) = f3(x), f(x, В) = f4(x). Частные производные можно выразить через конечные разности
несколькими способами, например: df fjj fjj . dx a hx hx f (/г+lj ~ fij) ~ (fij ~ ~ %fij + A-1J . 9x2 itj ~ h2 h2 1 df ~ fij-l dy 2hy Подставив полученные выражения в уравнение, получим основное рекуррентное соотношение для нахождения значения функции через ее значения в соседних четырех узлах: fij = 4" 0,5/г—l,j — — fi,j—1)’ Распараллеливание вычислений и «прокатывание» матрицей ПЭ области В — многократные, до получения необходимой точности — оче- видны. А именно: первоначально в одном цикле итерации 64 ПЭ по выве- денной формуле рассчитывают 8x8 узловых значений функции близ вер- шины координат, «цепляя» при этом граничные значения. Затем произ- водится смещение вправо на следующую группу узловых значений функ- ции. По окончании обработки по горизонтали производится смещение по вертикали и т.д. При следующей итерации процесс повторяется. От итерации к итерации распространяется влияние граничных условий на рассчитываемые значения функции. Процесс сходится для определения значений функции-решения в узлах сетки с требуемой точностью. Замечания. Вернемся к отечественной разработке ПС-2000 (ПС- 2100) — векторной ВС. В ней предусмотрена возможность сегментации процессоров, при которой последний процессор в сегменте связывается регулярным каналом (аналог высокоскоростной линии) с первым. Все 64 процессора могут составить один сегмент, могут быть сформированы два сегмента по 32 ПЭ, четыре по 16, 8 по 8 ПЭ. Итак, получается идеаль- ная схема для «покрытия» двумерной подобласти обсчитываемой обла- сти. Правда, отсутствуют быстрые связи по вертикали, что должно быть возмещено хранением всей информации по столбцам в ОП каждого ПЭ. Зато, при смещении процессоров на смежную подобласть по горизонта- ли, последний ПЭ предыдущей подобласти остается «левым» для первого в новой подобласти. Т. е. при таком смещении сохраняется регулярность фактических связей между узлами сетки. ВILLIAC- IV такая регулярность сохранялась бы, если бы существо- вали быстрые связи между ПЭ7 и ПЭО, ПЭ15 и ПЭ8 и т. д., то есть цикли- чески по строкам матрицы.
Как видим, такие связи учтены при более поздних разработках мат- ричных ВС. 1.6.3. ВС Крей-1 («Электроника ССБИС») ВС Кгеу-1, несмотря на последующие разработки, остается этало- ном типа МКОД. В России разработан аналог — векторно-конвейерная ЭВМ «Электроника ССБИС», отличающаяся некоторыми увеличенны- ми параметрами комплектации. Структура ВС показана на рис. 1.13. Рис. 1.13. Схема ВС Кгеу-1 Предназначена для выполнения как векторных, так и скалярных операций, Имеет 64 буферных (выравнивающих) регистра для 24-битовых
адресов (В-регистры), 64 буферных (выравнивающих) регистров для 64- битовых слов данных (Т-регистры). В-регистры в свою очередь пополня- ют буфер для одной из основных групп регистров машины — 8 адресных регистров, а Т-регистры — для группы 8 скалярных регистров. Адресные регистры используются и как индексные. Третья основная группа реги- стров — 8 векторных регистров по 64 64-битовых слов. Регистр длины вектора определяет число операций, выполняемых по векторным коман- дам, т. е. действительную длину вектора. Маска вектора определяет эле- менты, над которыми выполняется операция. Буфер команд состоит из четырех ЗУ, каждое из которых — из 64 16- разрядных регистров. Представляет 4 программы, выполняемые в муль- типрограммном режиме. (В «Э-ССБИС» — 16 таких ЗУ.) 12 специализированных функциональных блоков-конвейеров (в «Э- ССБИС» 16 блоков) выполняют арифметические, логические операции и сдвиг. Уровней конвейера — от 2 до 14. Блоки являются независимыми. Несколько функциональных блоков могут работать одновременно. Воз- можно «зацепление» векторов при выполнении операций вида А х В + С, когда два или более конвейеров выстраиваются в один и результат с од- ного немедленно поступает как операнд на другой. Таким образом, параллелизм в обработке данных организуется с по- мощью: 1) одновременного использования различных функциональных бло- ков и различных векторных регистров; 2) применения режима «зацепления» векторов. (Нас интересует архитектура, но не катастрофически стареющие ха- рактеристики. Однако для справки: такт машины 12,5 нс, цикл обраще- ния к ОЗУ 50 нс, производительность считается: 38 млн. скалярных оп/с и 80 млн. векторных оп/с.) 1.6.4. МВК «Эльбрус-2» Представляет тип МКМД. Имеет общую оперативную память и пе- рекрестный коммутатор. Является основой сложных автоматизирован- ных систем управления, работающих в реальном времени, использовался в космических исследованиях, а также в области ядерной физики. Производительность (информация имеет историческую ценность) в 10-процессорном варианте — до 120 млн оп/с (12,5 млн оп/с на од- ном процессоре). Максимальный объем ОП — 16 млн 72-разрядных слов (144 Мбайт), максимальная пропускная способность каналов ввода- вывода — 120 Мбайт/с. Эти характеристики позволили решить многие проблемы применения супер-ЭВМ, но сегодня не впечатляют.
Рис. 1.14. Общая схема МВК «Эльбрус-2» Принципиальные предпосылки разработки: 1. Аппаратная поддержка ЯВУ. 2. Параллелизм на двух уровнях — мультипроцессорная обработка (распределение процессов между процессорами), конвейерная обработка команд и параллельная обработка данных в многофункциональном АЛУ (10 ИУ). В МВК могут входить от 1 до 10 ЦП, от 1 до 32 модулей ОП и от 1 до 4ПВВ. Каждый ПВВ имеет 40 каналов связи: 8 быстрых (аналог селектор- ных) каналов (БК) для магнитных барабанов и дисков и 32 стандартных (СК) для прочих устройств ввода-вывода. Работа с удаленными объектами по линиям связи осуществляется с помощью процессоров передачи данных (их — до 16), которые являются самостоятельными модулями с собственной системой команд и внутрен- ней памятью. Все компоненты системы работают параллельно и независимо друг от друга и динамически распределяются операционной системой между задачами. ЦП МВК «Эльбрус» имеет безадресную систему команд, основан- ную на ПОЛИЗ и выполняемую на стеке. Обрабатывает числовые дан- ные в 32 разряда (полслова), 64 разряда (слово), 128 разрядов (двойное слово). Нечисловая информация может быть представлена в виде бито- вых, цифровых или байтовых наборов. Каждое слово сопровождается 6- разрядным тегом, определяющим его тип. Два разряда используются в аппаратном контроле.
1.6.5. Проект МВК «Эльбрус-3» Так как ассемблерный язык исключен из интерфейса пользователя, то аппаратная реализация (она отражена в системе команд — в машинном языке) МВК «Эльбрус-3» значительно отличается от «Эльбрус-2». Струк- тура МВК представлена на рис. 1.15. Секция Рис. 1.15. Общая схема МВК «Эльбрус-3» Здесь ООП — общая оперативная память (8 секций (блоков) по 4 мо- дуля; модуль — 32 Мбайт); МКТ — модульные комплексы телеобработки (аналог ППД — в «Эльбрус-2»); ЛОП — локальная оперативная память, 4—16 Мбайт. Принципы, лежащие в основе разработки: 1. Программная совместимость на уровне ЯВУ (Эль-76 — ЯВУ- ассемблер) с другими моделями «Эльбрус». 2. Теговая архитектура. 3. Дальнейшее развитие многопроцессорности на общей ОП, что повышает производительность и структурную надежность. Пиковая про- изводительность одного (из 16) процессора достигает 700 млн. оп/с при такте машины 10 нс. 4. Архитектура с длинным командным словом обеспечивает микро- распараллеливание между 7 ИУ АЛУ на уровне операций (2 ИУ сложе-
ния, 2 — умножения, одно — деления, 2 — логических), а также парал- лельное обращение по 8 каналам в ЛОП или ОП. 5. Семь конвейерных и независимых ИУ обеспечивают загрузку процессора работами в каждый такт. 6. Управление машиной позволяет контролировать каждый такт. Т. е. «длинная» команда выдается каждый такт, непосредственно запуская устройства без дополнительного динамического аппаратного планирова- ния их загрузки. 7. Оптимизация распределения ресурсов возлагается на высокооп- тимизирующий транслятор с ЯВУ Эль-76 и с других языков высокого уровня. 8. Функционально разделенное СОЗУ снижает конфликты при об- ращении и отражает типы хранимых данных. Оно состоит из ассоциатив- ного буфера команд в 2 тыс. слов, буфера стека в 1 тыс. слов для хранения верхних уровней локальных данных выполняемых процедур, буфера мас- сивов в 512 слов и ассоциативной памяти глобалов (общих данных про- цедур) в 512 слов.
Лекция 2. Микропроцессорные системы и способы распараллеливания Лекция посвящена проблемам комплексирования микропроцессоров в вычислительной системе. Рассматриваются транспьютерные технологии и способы межпроцессорного обмена данными. Обсуждается идея применения микропроцессорной ВС как внешнего устройства персонального компьютера или рабочей станции. Исследуется вопрос объединения вычислительного ре- сурса многопроцессорной системы в единое решающее поле для его оптими- зированного совместного использования. Производится классификация спо- собов распараллеливания. Ключевые слова: суперскалер, мультимикропроцессорные ВС, «мини-супер», семафор, RISC — архитектура, решающее поле, способ распараллеливания по управлению и по информации. 2.1. Мультимикропроцессорные вычислительные системы В настоящее время выбор сделан в пользу многопроцессорных сим- метричных ВС типа MIMD, обеспечивающих виртуализацию вычисли- тельных ресурсов. Основу такой ВС составляет суперскалер, сосредо- точивший в себе все способы достижения максимального быстродей- ствия при выполнении одиночной программы. Векторные и векторно- конвейерные процессоры и системы получили своё место. Их эффек- тивность как самостоятельных установок могла быть достаточно высо- кой только при решении специальных задач и тестов. Поэтому доста- точно быстро выяснилось, что эти установки могут выполнять функции интеллектуальных терминалов при решении основной задачи на другом универсальном вычислительном средстве и выполнять лишь отдельные его заявки. Сегодня стало окончательно ясно, что первые эффективны лишь в роли специализированных вычислительных устройств для реше- ния специальных задач. Вторые твердо заняли место в составе много- функциональных арифметическо-логических устройств (АЛУ) суперска- леров, ибо без конвейеров мы не мыслим себе выполнение всех опера- ций ВС. Складывается и структура памяти ВС, которая может совмещать в одной установке все способы доступа: от разделяемой (общей) до распре- деленной оперативной памяти. Однако ограниченные возможности эф-
фективной работы с общей памятью часто диктуют иерархическую струк- туру ВС, где уровни иерархии (кластеры) отличаются или способом до- ступа к оперативной памяти, или тем, что каждый кластер имеет свою собственную физическую память в общем адресном пространстве. При этом принцип буферизации, основанный на многоуровневой по быстро- действию (и, конечно, — различной по технологии) памяти, на активном использовании Кэш-памяти, продолжает развиваться. Кэш-память, как память самого высокого уровня, претерпевает функциональное разбие- ние в зависимости от типа данных, для хранения которых она предназна- чена, либо, в зависимости от вида обработки, — программ или данных. Все сказанное выше подтверждает перспективность структурных ре- шений при проектировании многопроцессорного комплекса «Эльбрус-3» и его микропроцессорного развития «Эльбрус-ЗМ», «Эльбрус-2К». Таким образом, структура «длинного командного слова» (архитектура VLIW, ле- жащая в основе EPIC) попадает в разряд классических. Сейчас микропроцессор, сконцентрировавший все достижения ми- кроэлектроники, является основной составляющей элементно-конст- рукторской базы ВС. Поэтому понятие «мультимикропроцессорные ВС» пришло на смену понятию «микропроцессорные ВС». Анализ современных мультимикропроцессорных ВС позволяет вы- делить те развиваемые характерные решения, которые в условиях микро- миниатюризации и снижения энергоемкости, «экономного» логического развития обеспечивают необходимые свойства универсального примене- ния. Такими решеними являются следующие. 1. Многопроцессорные кристаллы. Воспроизведение многопроцес- сорной ВС на одном кристалле в значительной степени характерно для сигнальных вычислительных средств, специализирующихся на обработ- ке двух- и трехмерных изображений, которые применяются в цифровом телевидении и радиовещании, при передаче изображений по каналам связи и др. Такие средства эффективно используются в качестве нейро- компьютеров. Например, на одном кристалле MVP (Multimedia Video Processor) семейства TMS 320 C80 (фирма Texas Instrument) расположены 4 32- разрядных цифровых сигнальных процессора (DSP — Digital Signal Pro- cessor) с фиксированной запятой (ADSP-0 — ADSP-3). Их особенность — высокая степень конвейеризации и до 64 бит длина командного слова для параллельного выполнения нескольких операций. Система команд со- держит команды над битовыми полями и структурами данных, несущими графическую информацию. Такая специализация обусловила понятие — DSP-архитектура.
Процессоры работают независимо. Т. е. ВС — типа MIMD — (Multiple- Instruction, Multiple-Data). Программируются отдельно на ассемблере или ЯВУ. Данными обмениваются через общую внутрикристальную па- мять. Каждый из ADSP содержит КЭШ-память команд (2 Кбайта) и че- рез матричный коммутатор Crossbar получает доступ к 32 из имеющихся 50 Кбайт быстродействующей статической внутренней памяти. Память расслоенная — поделена на сегменты. Если два и более процессора в од- ном цикле попытаются обратиться к одному сегменту, аппаратная систе- ма управления доступом с циклическим изменением приоритета (round robin prioritization) позволит сделать это только одному процессору. 32-разрядное АЛУ ADSP может работать как два 16- или четыре 8-разрядных АЛУ. Этого достаточно для обработки видеоизображений. Специальные блоки ускоряют обработку графики. Блоки генерации ад- ресов формируют кольцевые (бесконечные) буферы. Аппаратно поддер- жаны три вложенных цикла. ЯТЗС-процессор управляет четырьмя ADSP с помощью диспетчера. Диспетчер и планировщик заданий тесно взаимодействуют с контрол- лером пересылок. Кроме того, управляющий процессор самостоятельно выполняет вычисления и обеспечивает обмен с внешними устройствами. Содержит встроенный блок плавающей арифметики и набор векторных операций с плавающей запятой, оптимизированных для обработки изоб- ражений, звука и трехмерной графики. 2. Транспьютерная технология. Представленная выше архитектура обладает такой конструктивной законченностью, которая позволяет как встраивать ее в некоторую систему, так и организовать взаимодействие нескольких кристаллов. Это обеспечивается развитыми средствами свя- зи и обмена данными. Возможность комплексирования привлекла внимание еще на ран- нем этапе развития микропроцессоров (в середине 1980-х годов) и при- вела к построению транспьютеров — микропроцессоров, снабженных развитыми средствами комплексирования. Таким образом, создавались «кирпичики», на основе которых можно было создавать сложные струк- туры. Эта тенденция не только сохранилась, но является необходимым средством построения мультимикропроцессорных ВС. Преследуя многофункциональность средств обмена, не обязатель- но требовать их размещения на одном кристалле с центральным про- цессором. Так, фирма Analog Devices предлагает микропроцессоры ADSP- 21060/62 SHARC («АКУЛА») для цифровой обработки сигналов, специ- ально предназначенные для комплексирования. Средства комплексирования «АКУЛЫ»:
• магистраль для подключения 6 «АКУЛ» и одного ХОСТ-процессора (управляющего, с привилегированным доступом к магистрали, а также к памяти каждого процессора — через специальный порт); • сигнальные регистры в составе каждого процессора, непосред- ственно связанные (одной ножкой) с каждым из других процессо- ров — для контроля их состояния; • ЛИНКи — каждый процессор имеет 6 выходов (ЛИНКов) для непо- средственной связи «процессор - процессор». 3. Общее адресное пространство комплексируемых микропроцессо- ров «АКУЛА» обеспечивает псевдообщую память и исключает необходи- мость программной организации обмена данными. Если адрес физиче- ски принадлежит ОП другого процессора, то обмен организуется автома- тически, без вмешательства пользователя (т. е. программно не предусмат- ривается). 4. Межпроцессорный (магистральный) обмен инициируется в том слу- чае, если адрес считывания или записи принадлежит адресному про- странству другого процессора (единичный обмен). Аналогично возника- ют групповые пересылки данных с использованием «чужого» адресного пространства. Пользователь не составляет программу обмена, даже для контролле- ра обмена данных. Достаточно указать «чужие» адреса. Процессоры обмениваются сигналами состояния. Поэтому каждый процессор знает, кто является «хозяином» магистрали, т. е. ведет обмен, и свой приоритет в очереди к магистрали. По завершении каждого обме- на производится циклическая смена приоритетов процессоров, которым нужна магистраль. Процессор с максимальным приоритетом становится «хозяином». Обмен может прерываться только ХОСТ-процессором. Микропроцессор утверждается в роли основы элементно-конструк- торской базы ВС, и это поняли ведущие разработчики. В этом смысле привлекает внимание трансформация интересов «от- ца суперкомпьютеров» С. Крея, который признал определяющую роль принципа MIMD при построении ВС Cray SuperserverfMOO System (С5640), выпускаемой корпорацией Cray Research в сотрудничестве с компанией SUN Microsystems (сотрудничество с фирмой SUN ныне характерно и для ведущих российских разработчиков). Система предполагает наращиваемую конфигурацию от 4 до 64 про- цессоров SuperSPARC. Принято компромиссное решение на основе клас- сической схемы разделения (общей) ОП при многопроцессорной обра- ботке и распределенной памяти при параллельной обработке массивов. Чтобы работать с частично распределенной памятью в ОЗУ, ВС имеет
в любой конфигурации 4 шины. Шина использует сетевую технологию «коммутации пакетов». Это позволяет находить путь обмена единицами информации в соответствии с занятостью или освобождением шин. В целом, архитектуру следует считать шинной, хотя наличие несколь- ких шин делает ее промежуточной между шинной и использующей мат- ричный коммутатор. 2.2. Направление «мини-супер» призвано поддержать персональный компьютер То, что говорилось выше, «по умолчанию» соответствует разработке супер-ЭВМ, предназначенных для решения особо сложных задач в соста- ве систем управления в реальном времени, моделирования сложнейших физических процессов, решения задач исследования операций, задач ис- кусственного интеллекта, выполнения роли майнфреймов и серверов в локальных, корпоративных и глобальных сетях. Супер-ЭВМ уникальна, мало тиражируема, цена ее высока. С другой стороны, ничто уже не может остановить «победного ше- ствия» персональных компьютеров. Область применения их стала все- объемлющей. Они используются и там, где могут справиться с задачами, и там, где уже не справляются, несмотря на применение современных су- перскалеров. Тогда целесообразно поставить следующую проблему. Введем в состав персонального компьютера (PC), как его внешнее устройство, мультимикропроцессорную систему (мультипроцессор), ис- пользование которого в монопольном и однозадачном режиме может обеспечить успешное решение задач повышенной сложности. Действительно, разрешение этой проблемы позволило бы заполнить определенную нишу между супер-ЭВМ и PC, вывести персональный компьютер на уровень мини-супер-ЭВМ. Применение мультипроцессо- ра PC в однопрограммном режиме, при жестком распределении памяти, использование (см. далее) прогрессивной технологии «одна программа — много потоков данных» позволяют существенно снизить издержки про- изводительности на работу ОС, легко «врезать» их в современные опе- рационные системы компьютеров. Сборка такой системы должна про- изводиться на основе существующей микропроцессорной элементно- конструкторской базы, с минимальным использованием вновь разраба- тываемых элементов. Здесь воспроизводится упомянутая выше идея о наличии монитор- ной системы, на которой решается основная задача, и о наличии интел- лектуального терминала, который берет на себя функции, обеспечиваю- щие общую эффективность системы.
Общая схема такой установки показана на рис. 2.1. Выбраны кон- кретные значения параметров. Рис. 2.1. Схема ВС для персонального компьютера Мультимикропроцессорную приставку к персональному компьюте- ру целесообразно разработать на основе исследования принципов по- строения локально-асинхронной архитектуры (5РЛЮ-технологии). Важ- ным достоинством архитектуры является сведение традиционных функ- ций ОС на уровень команд. Т. е. система команд мультипроцессора тако- ва, что позволяет реализовать функции управления параллельным про- цессом, не требуя запуска процедур ОС. Способствует простоте управле- ния параллельным процессом также монопольный и однозадачный ре- жим использования мультипроцессора. Ниже мы подробнее остановимся на принципах 5РЛШ-технологии. Предполагая первоначальное знаком- ство с этими принципами, отметим следующее.
Известно (см. далее), что семафоры — универсальное средство син- хронизации. Однако семафоры традиционно используют ОС. Чтобы это- го избежать, семафоры следует реализовать с помощью предикатного ме- ханизма, т. е. с использованием памяти предикатов. Семафорный механизм может быть эффективно реализован с помо- щью механизма закрытия адресов (памяти закрытых адресов). Тогда, в общем случае применения семафоров, должны быть введе- ны команды следующего вида. Считать по семафору (Сч(С) А). Считывание по адресу производит- ся в случае, если указанный семафор (реализованный в памяти регистро- вого типа, наряду с индексными и базовыми регистрами) открыт. Если се- мафор закрыт, реализуется ожидание данного ПЭ без прерывания (т. е. в данном применении пользователь может быть допущен к операциям над семафорами типа «жужжать»). Записать по семафору (Зап(С) А). Запись по адресу производится аналогично предыдущей команде. При использовании памяти закрытых адресов необходима лишь ко- манда Закрыть адрес. Любое последующее считывание по этому адресу циклически возобновляется (в режиме «жужжания») до тех пор, пока по этому же адресу другой процессор не произведет запись. В случае использования механизма предикатов адрес некоторой бу- левой переменной записывается в специальные разряды командного сло- ва. Команда, для которой указанный в ней предикат имеет значение О, выполняется, в соответствии с кодом операции, в спекулятивном режиме в двух модификациях: • ожидается присвоение данному предикату значения 1 (в режиме «жужжания»); • пропускается выполнение данной команды. ПЭ реализует идею Я/5С-архитектуры и представляет собой функ- ционально законченное устройство, состоящее из микропроцессора, схем обрамления и локальной оперативной памяти (ЛОП). Локальная па- мять процессора содержит область для хранения стеков вычислительного процесса, в том числе — стеков подпрограмм и вложенных циклов. В дру- гих областях этой памяти хранятся модификаторы, дескрипторы масси- вов и локальные величины. Здесь же находятся микропрограммы, реали- зующие систему команд ВС. Общая (разделяемая) память (ОП) содержит М модулей с общим ад- ресным пространством и реализует принцип интерливинга, предполагаю- щий, что смежные ячейки памяти находятся в разных модулях. Синхронизатор предназначен для обеспечения одновременного пус- ка программ или их модулей.
Возможно использование простейших коммутаторов для обмена ПЭ с модулями памяти. 2.3. Распределенный и разделяемый вычислительный ресурс второго уровня. Решающие поля Произведем некоторые обобщения. Итак, второй уровень распараллеливания предполагает распреде- ление команд, инструкций, операций, элементарных функций и других несложных процедур — для выполнения исполнительными устройства- ми процессоров или в общем вычислительном ресурсе симметричной ВС. Здесь существуют свои проблемы, связанные с «элементарным» харак- тером операций, небольшим объемом содержащихся в них работ, с их еще большей критичностью по отношению к «накладным расходам» на организацию и синхронизацию. Мы предполагаем, что исполнительные устройства ВС образуют вычислительный ресурс второго уровня (распа- раллеливания). Сложились традиции построения этого ресурса, где основное вни- мание уделяется построению многофункциональных АЛУ. Однако в ря- де архитектур пока еще робко пробивает себе дорогу объединение АЛУ в единый разделяемый ресурс системы — построение решающих полей. Проработка этой идеи проводилась неоднократно в отечественной практике разработки ВС. Она проявлялась во включении в состав ВС спе- циализированных процессоров на правах интеллектуальных терминалов для эффективного выполнения определенных операций. Это были век- торные процессоры с доступом от нескольких ЦП (ПС-3100), векторный сопроцессор в ПС-2100. Эта же идея фактически воплощена в семействе «Эльбрус», допускающем включение в свой состав спецпроцессоров — эмуляции других систем, векторно-конвейерных модулей и др. При реализации идеи решающего поля проблема выбора и разви- тия вычислительного ресурса неотделима от выбора вариантов архитек- туры системы вообще. Единственным средством обоснования и исследо- вания этого выбора является моделирование. Построение детерминиро- ванных имитаторов позволяет с любой детализацией выявить целесооб- разные технические решения и обосновать язык системы. Целью стоха- стических моделей является оценка эффективности различных архитек- тур на основе полноты полезной загрузки оборудования. На основе традиций разработки многопроцессорных симметричных вычислительных систем можно сделать вывод о практике и тенденции развития вычислительного ресурса второго уровня.
Все модели семейства МВК «Эльбрус» предполагают наличие в со- ставе АЛУ процессора нескольких исполнительных устройств (ИУ), спе- циализированных по типам операций. Тогда в целом для ВС можно ска- зать, что вычислительный ресурс второго уровня является распределенным и неоднородным (рис. 2.2). Рис. 2.2. ВС с распределённым решающим полем Выше говорилось, что использование ресурса второго уровня неот- делимо от общих идей функционирования процессоров ВС — от их ар- хитектуры и от архитектуры ВС в целом. Поэтому сказанного о распреде- ленном ресурсе недостаточно, надо говорить и о способе его использова- ния. Так, в МВК «Эльбрус-2» применена динамическая загрузка ИУ в процессе выполнения последовательности безадресных команд програм- мы, которую подробно рассмотрим в лекции 3. Обобщенный алгоритм такой загрузки основан на промежуточном переводе безадресных команд в трехадресные. Появление адресов аргументов и результатов в каждой команде позволяет на основе совместного анализа нескольких команд, представленных в «окне просмотра», выявлять их частичную упорядочен- ность и выделять независимые команды для одновременного выполне- ния. Это — адресный метод распараллеливания, который рассматривался в архитектуре data flow. Команды проходят стадии обработки, как показа- но на рис. 2.3. Однако проект МВК «Эльбрус-3», породивший микропроцессорное воплощение — МВК «Эльбрус-ЗМ», — основан на использовании идеи «длинного» командного слова и управления каждым тактом системы. Динамическое распределение работ между ИУ заменено статическим — предписанием каждому ИУ, что он должен начать делать в данном такте, в «длинном» командном слове, в соответствующих позициях, записаны инструкции каждому ИУ.
Рис. 2.3. Схема оптимизатора-компоновщика «длинных» командных слов Это означает, что решение проблем оптимального использования ИУ, их синхронизации при выполнении данного алгоритма возлагают- ся на оптимизирующий транслятор. Он фактически производит диспет- чирование, оптимальное планирование параллельного вычислительного процесса на одном процессоре. 2.4. Способы распараллеливания Различают два основных способа распараллеливания: по управлению и по информации. Первый способ — представление алгоритма задачи в виде частично- упорядоченной последовательности выполняемых работ. Затем в резуль- тате диспетчирования реализуется оптимальный план выполнения работ в ВС при ограничениях на время выполнения всего алгоритма или за ми- нимальное время. Основой является представление алгоритма граф-схемой G, отража- ющей информационные связи между работами (задачами, процессами,
процедурами, операторами, макрокомандами и т. д.), на которые разбит алгоритм. Граф G — взвешенный, ориентированный, без контуров. Для исследования графа и диспетчирования используют матрицы следования S; их дополняют столбцом Т весов — получают расширенные матрицы следования S* (рис. 2.4). Рис. 2.4. Исходная информация для распараллеливания Здесь предполагаем, что ВС — однородная, с общей (разделяемой) памятью, т. е. потерями времени на обмен между работами можно прене- бречь. Пусть ВС содержит два процессора (п = 2). Тогда в результате опти- мального распределения получим план (рис. 2.5). Рис. 2.5. Временная диаграмма параллельного выполнения работ План действительно совпадает с оптимальным, т. к. длина расписа- ния Т = 7, что совпадает с длиной критического пути в графе, Ткр = 7 (путь 1 —> 3 —> 4). В общей схеме организации параллельного вычислительного про- цесса (см. далее) важно раскрыть интерпретацию потока макроинструк- Ций в виде, удобном для работы диспетчера. Сейчас мы определили, что такой вид — это матрица следования. Значит, в случае необходимости
автоматического формирования матрицы следования надо определять информационную взаимосвязь макроинструкций в пределах видимости, т. е. в «окне просмотра». Таким образом, по текущему содержимому «окна просмотра» надо формировать текущий вид матрицы следования. В упрощенном виде подобная задача решается, например, когда по формируемому потоку трехадресных команд определяется их информа- ционная взаимосвязь и определяется возможность одновременного вы- полнения этих команд. Обобщим эту задачу. Представим себе, что поток макроинструкций следует через «окно просмотра» так, что для планирования оптимальной загрузки процессо- ров диспетчер может анализировать некоторое множество этих макроин- струкций и из них выбирать вариант назначения их на процессоры для выполнения. Каждая макроинструкция может интерпретироваться и как процедура, где можно выделить имя множество {ам} входных пара- метров, множество {/Зм} выходных параметров. На рис. 2.6 отображено «окно просмотра», через которое следует поток макроинструкций. Рис. 2.6. Обработка «окна просмотра» Составим по его содержимому соответствующую матрицу следова- ния размерности т х т: («11 «12 ... aim ....................... О^тп1 &т2 • • • ®тт 1,еслием„ /0, О, в противном случае;
= ({<*4 Г) {&„}) U ({/34 П {aj U {/34) для всех и < /г. По матрице следования S диспетчер производит назначение. После выполнения макроинструкций они исключаются из «окна прросмотра», оставшиеся макроинструкции уплотняются вверх, а снизу «окно просмотра» пополняется новыми макроинструкциями. С учетом вновь поступивших макроинструкций уточняется текущий вид матрицы следования S и процесс диспетчирования продолжается. По такой же схеме, а именно, на основе первого способа распаралле- ливания — по управлению — решается другая важная задача распаралле- ливания: компоновки длинных командных слов в оптимизирующем трансля- торе. Назначение работы на ИУ осуществляется здесь в виде записи со- ответствующей инструкции в позицию длинного командного слова, со- ответствующую ИУ Т. е. план параллельного выполнения работ (команд, операций) фиксируется в длинных командных словах, в которых преду- смотрены инструкции каждому ИУ, которые они должны начать выпол- нять с данного такта. Второй способ распараллеливания — по информации — использует- ся тогда, когда можно распределить обрабатываемую информацию между процессорами для обработки по идентичным алгоритмам (по одному ал- горитму). 1. Рассмотрим задачу умножения матриц А х В = С: (dll • • • aim \ / ^11 • • • &1т \ / Сц . . • С±т \ ...............I X I..............I = I...............I ttml ••• amrnJ \Ьт1 ••• ^mm/ \Cml ••• С/пт/ Cij = ajkbkj ♦ fc=l Развернем матрицу — результат С — в линейный (одномерный) мас- сив, переименуем ее элементы и заменим два индекса на один: сц С12 Clm C21 C2m C31 Cmm di d2 dm dm+1 d2m ^2тп+1 d>m2 Пусть ВС содержит п процессоров. Выберем следующий план счета элементов матрицы С: процессор 1 считает элементы di, di+n, di+2n5 • • • процессор 2 считает элементы d2, с?2+п, с?2+2п, • • • процессор п считает элементы dn, d2n, dzn,... По-видимому, все они будут выполнять одну и ту же программу, но обрабатывать разные наборы данных. (Мы снова столкнулись с целесо- образностью ЗРЛГР-технологии.)
Здесь не потребовалась какая-либо синхронизация параллельного вы- числительного процесса. 2. Рассмотрим задачу счета способом «пирамиды». Эту задача подробно исследуется при изучении ВС типа SPMD. Рас- смотрим предварительно, какая синхронизация нам здесь потребуется. Пусть необходимо перемножить все элементы некоторого массива {ai, аг,..., аю}. Каждый элемент занимает одну ячейку памяти. Пусть число процессоров в ВС п = 4. Чтобы распараллелить этот процесс, при- мем схему счета «пирамидой» (рис. 2.7). Рис. 2.7. Граф-схема выполнения операции «свёртки» Количество уровней операций в ней ] log2 m[=] log2 Ю[= 4 (]ж[ — бли- жайшее целое, не меньшее х). Расширим массив, дополнив его ячейками, в которых будем хранить промежуточные частные произведения. Тогда весь план счета примем та- ким, как показано на рис. 2.8. Отмечены процессоры, выполняющие ука- занную операцию. Следовательно, надо так написать программу, одну для всех процес- соров, предусмотрев необходимую переадресацию для выборки и вычис- ления «своих» данных, чтобы по ней выбирались два соседних элемента этого удлиненного массива, а результат их умножения отправлялся в оче- редную ячейку этого «удлинения». Возникает только одна трудность: для первых пяти произведений данные есть, а вот последующие произведения должны выполняться то- гда, когда для них будут найдены исходные данные. Значит, процессоры, которым выпало произвести такие умножения, должны «уметь» обнаруживать отсутствие данных и дожидаться их появ- ления. Т. е. требуется синхронизация процессоров по использованию об- щих данных.
<Х 1 59 1 £ (Е*^ (Е^ СЕ^ ® ® (ЕЕ^ ® ® ® ® 2 3 4 1 Рис. 2.8. Схема выполнения операции свёртки четырьмя процессорами Здесь распараллеливание по данным смыкается с распараллелива- нием по управлению. Возможная схема общей для всех процессоров программы — на рис. 2.9. Она реализована в примере для ВС типа SPMD. Общая синхронизация ВС I Запрет обращения по считыванию к ячейке, в которую будет помещён результат операции I ____ Выполнение операции, запись результата в “закрытую”ячейку, снятие запрета на использование этой ячейки I _ Переадресация или выход Рис. 2.9. Схема программной синхронизации при выполнении операции «свёрт- ки»
Лекция 3. Распараллеливание в ВС на уровне исполнительных устройств Изучается проблема второго уровня распараллеливания — уровня ис- полнительных устройств. Рассматривается организация конвейеров опера- ций, векторных конвейеров, выполнения операций на стеке. Исследуют- ся принципы динамического распараллеливания в многофункциональном арифметическо-логическом устройстве. Ключевые слова: конвейер операций, векторный конвейер, «зацеп- ление» векторов, стек, вершина стека, польская инверсная запись, безадресная система команд, адресный способ распараллеливания. 3.1. Конвейеры операций Выполнение любой операции складывается из нескольких последо- вательных этапов, каждый из которых может выполняться своим функ- циональным узлом. Это легко показать на операциях сложения и умно- жения. Выполнение деления мантисс (порядки вычитаются) чаще всего производятся с помощью вычитания из делимого делителя, сдвига влево полученного остатка, нового вычитания делителя из результата сдвига и т. д. В некоторых ВС находится обратная величина делителя с помощью аппроксимирующих полиномов. Затем делимое умножается на эту вели- чину. Пусть задана операция, выполнение которой разбито на п последо- вательных этапов. Пусть — время выполнения z-ro этапа. При последо- вательном их выполнении операция выполняется за время п ^посл = ^г[с]? г=1 а быстродействие ЭВМ или одного процессора ВС, выполняющего толь- ко эту операцию, составит 5Посл = т— = *п осл 2-/г=1 Выберем время такта — величину tr = max{tj и потребуем при раз- биении на этапы, чтобы для любого г = 1,..., п выполнялось условие ti -I- ^(г+i) modn > tr- Т. е. чтобы никакие два последовательных этапа
(включая конец и новое начало операции) не могли быть выполнены за время одного такта. Функциональные узлы, выполняющие последовательные этапы од- ной операции, целесообразно выстроить в единую конвейерную линию, где устройство, выполняющее некоторый этап, закончив его для опера- ции над одним набором данных, переходило бы в следующем такте к вы- полнению этого же этапа той же операции для другого набора исходных данных. Например, на рис. 3.1 представлен конвейер выполнения операции сложения. -----► Загрузка операндов (этап 1) Выравнивание порядков (этап 2) Сложение мантисс (этап 3) Нормализация (этап 4) Запись результата (этап 5) Рис. 3.1. Выполнение операции сложения на конвейере Пусть реализуется поток команд одного процессора или существует доступ к этому устройству нескольких процессоров так, что в каждом так- те возможно задание на выполнение сложения новой пары чисел. Тогда временная диаграмма работы конвейера может иметь вид, представлен- ный на рис. 3.2. Рис. 3.2. Схема заполнения конвейера
Максимальное быстродействие процессора при полной загрузке конвейера составляет 5КОн = ^-[операций/с]. tr Число п — количество уровней конвейера, или глубина перекрытия, т. к. каждый такт на конвейере параллельно выполняются п операций. Чем больше число уровней (станций), тем больший выигрыш в быстро- действии может быть получен. В проекте МВК «Эльбрус-3» АЛУ его ЦП имеет конвейерные ИУ сложения (п = 5), умножения (п = 5), деления (п = 8 для полусловного формата, — 32 разряда, п = 16 для словного формата). Логические опера- ции также выполняются на конвейере с п = 2. Известна оценка И- *$кон * ^посл т.е. выигрыш в быстродействии получается в § - п раз. Реальный выигрыш в быстродействии оказывается всегда меньше, чем указанный выше, поскольку: 1) некоторые операции, например, над целыми, могут выполнять- ся за меньшее количество этапов, чем другие арифметические операции. Тогда отдельные станции конвейера будут простаивать. 2) при выполнении некоторых операций на определённых этапах могут требоваться результаты более поздних, ещё не выполненных эта- пов предыдущих операций. Приходится приостанавливать конвейер. 3) поток команд порождает недостаточное количество операций для полной загрузки конвейера. 3.2. Векторные конвейеры. «Зацепление» векторов Наряду с использованием конвейеров для обработки единичных (скалярных) данных, используют так называемые векторные конвейе- ры, единичной информацией для которых являются вектора — масси- вы данных. Применение векторных конвейеров определило класс ВС — векторно-конвейерных ВС, сегодня ещё являющихся основой построения некоторых супер-ЭВМ — ВС сверхвысокой производительности. Для эффективности векторно-конвейерных ВС (например, для под- готовки алгоритмов решения задач на ВС "Электроника-ССБИС") необ- ходима векторизация задач. Это — такое преобразование алгоритма, при котором максимально выделяются (если не вся задача сводится к этому)
элементы обработки массивов данных одинаковыми операциями. Сюда входят все задачи, основанные на матричных преобразованиях, обработ- ка изображений, сигналов, моделирование поведения среды и т.д. В основе векторного конвейера лежит то же самое разбиение опе- рации на уровни или этапы выполнения, но он дополняется средствами аппаратной поддержки, позволяющими по информации о векторах ор- ганизовать последовательную загрузку конвейера элементами векторов, учитывая их длину. Пусть необходимо выполнить операцию С = А х В, т. е. cj — aj+bj, j = 1,..., N. Пусть на регистрах СОЗУ записаны вектора А и В. Груп- па регистров отведена для результатов С. Для управления этим процес- сом известны дескрипторы векторов Da, Db, De, где Da = {aQ, ha, N }, a = А, В, C, ha — шаг переадресации. Если загрузка векторов произво- дится всегда в одни и те же регистры АЛУ, то достаточно знать значение 7V. Может задаваться маска М длиной N, состоящая из нулей и единиц. Каждый элемент М соответствует элементу вектора-результата С. Если элемент rrij = 1 (логическая переменная), то операция получения Cj производится, в противном случае соответствующие элементы векторов пропускаются. Это применимо для альтернативного счёта в соответствии со значением логических переменных. Пусть операция умножения выполняется за три этапа. Тогда можно представить временную диаграмму получения N результатов при пред- положении о назначении функциональных устройств (рис. 3.3). В составе АЛУ может быть два и более конвейерных устройств, спе- циализированных каждое для выполнения некоторой операции. Тогда возможно и эффективно «зацепление» векторов, иллюстрируемое приме- ром на рис. 3.4 для выполнения сложной операции над векторами: D = А х В + С. Здесь два конвейера образовали один, с глубиной перекрытия п = пх + п_|_. Очередной результат умножения немедленно направляется на конвейер сложения, куда параллельно направляется необходимый со- множитель. 3.3. Выполнение операций на стеке В вычислительной технике повсеместно используется такая структу- ра данных, как стек. Его применение при выполнении арифметических и логических операций в арифметическо-логическом устройстве (АЛУ) позволяет реализовать безадресную систему команд, что, в свою очередь, дает возможность минимизировать число обращений к оперативной па- мяти, осуществить буферизацию при многоуровневой памяти, кодиро- вать большое число команд в одном слове.
Рис. 3.3. Умножение векторов на конвейере Рис. 3.4. «Зацепление» векторов Рассмотрим механизмы обработки информации на стеке и форми- рования безадресных команд. Прежде всего — об идее применения безадресных команд. Рассматривая структуру команд, мы можем отметить, что практи- чески команды бывают одно-, двух-, трехадресные. Трехадресная коман- да, как правило, по законченности соответствует одному оператору, т.к. отображает действие над двумя операндами и результат. Двухадресная ко- манда - это такая команда, где один из адресов подразумевается (напри-
мер, аккумулятор или сумматор), или результат направляется по одному из указанных адресов. То же касательно одноадресной команды: по числу адресов - число обращений к памяти, не считая считывания самой ко- манды. Возникает вопрос: можно ли отделить загрузку регистров сверхопе- ративного запоминающего устройства (СОЗУ) от собственно выполне- ния команды, сделать эту загрузку опережающей, выполнение команды производить только с использованием подразумеваемых адресов СОЗУ и при этом в целом минимизировать количество обращений к ОП? Ответ приводит к структуре безадресных команд и к выполнению операций на стеке. Стек представляет собой множество последовательно пронумеро- ванных регистров СОЗУ или ячеек ОП, снабженное указателем вершины стека УВС, в котором автоматически при записи и считывании устанав- ливается номер (адрес) последнего занятого регистра — вершины стека. При записи в стек (загрузка стека) слово пишется в следующий по номеру регистр, а УВС увеличивается на единицу. При считывании извлекается слово с адресом, указанным в УВС. Затем УВС уменьшается на единицу. Таким образом, в стеке реализуется правило ’’последний пришел - первый ушел”. Адреса памяти фигурируют только в командах загрузки стека и за- писи из стека в память. Значения выражений можно вычислять полностью безадресным способом. Команда, состоящая только из кода операции, извлекает из стека один или два операнда, выполняет операцию и заносит результат в стек. На рис. 3.5 приведен пример преобразования стека при выполнении трех команд программы. Вычисления с использованием стеков удобно задавать, описывать и программировать с помощью польской инверсной (бесскобочной) запи- си арифметических выраженийЯОЛЙЗ (предложил польский математик Лукашевич в 1929 г.). Запись производится по правилу «читаем арифме- тическое выражение слева направо и последовательно друг за другом вы- писываем встречающиеся операнды». Как только окажется, что все опе- ранды некоторой операции выписаны, записываем знак этой операции, условно учитываем вместо операндов и знака операции потенциальное имя ее результата. Это может породить возможность записи новой опе- рации; или же будем продолжать выписывать операнды, если условно учтенный результат не позволяет записать знак операции. Запись на ПО- ЛИЗ состоит из цепочек имен и цепочек операций.
Загрузка стека изЯ,(Я)=4 Рис. 3.5. Выполнение команд на стеке Например, у := (fc + (Z — тп))(а — b) —> yklmn X-1- ab — X := Последовательность символов в ПОЛИЗ может рассматриваться как программа вычисления значения данного выражения, если под имена- ми понимать команды загрузки стека (кроме случая, когда имени следует знак операции :=, тогда это имя определяет запись из стека), а под зна- ками операций — безадресные команды, содержащие только коды опе- раций. Удобно ввести команду видаЗл У — записи из стека по адресу У Тогда мы получим окончательный вид программы klmn X —h ab — x3nY (3.1) Не будем отображать УВС, интерпретируя стек магазинной памятью. То- гда схема выполнения данной программы сводится к представленной на рис. 3.6.
Рис. 3.6. Выполнение программы на стеке 3.4. Обобщенная процедура динамического распараллеливания в многофункциональном АЛУ В многопроцессорном вычислительном комплексе «Эльбрус-2» ис- пользуется динамическое распределение работ между исполнительными устройствами АЛУ. При этом успешно разрешается противоречие между безадресной системой команд, предполагающей их выполнение на сте- ке, и возможностью одновременной загрузки многих исполнительных устройств. При ближайшем рассмотрении стек представляется сугубо после- довательностной структурой. Работа со стеком, как через ’’узкое горло”, производится с использованием его вершины, и в случае многофункци- ональных АЛУ (т.е. АЛУ, состоящих из набора нескольких специализи- рованных по операциям исполнительных устройств) представляется про- блематичной. Казалось бы, стек по самой своей природе не предназначен для распараллеливания. Однако это не так, что и было продемонстриро- вано в МВК ”Эльбрус-2”. Здесь мы обобщим данный опыт. Формирование потока трехадресных команд В ИУ АЛУ в основном выполняются двуместные операции. Для вы- полнения такой операции надо знать код операции, адреса двух операн- дов (как правило, — в СОЗУ) и адрес результата. Т.е. АЛУ в общем случае оперирует трехадресными командами вида в А2А3.
Для эффективного использования многофункционального АЛУ на- до в каждый момент иметь в рассмотрении большое число таких команд, чтобы на их основе производилась полная загрузка заданиями и парал- лельная работа всех ИУ. Значит, надо иметь некоторый буфер команд АЛУ (рис. 3.7), в кото- ром формируется и поддерживается в достаточном количестве множество команд данной структуры. Готовые к выполнению команды из этого бу- фера назначаются на ИУ. Буфер «снизу» пополняется устройством управ- ления новыми командами взамен назначенных для выполнения. Рис. 3.7. Обработка буфера команд АЛУ В ЦП МВК «Эльбрус-2» для загрузки 10 ИУ разной специализации просматривается до 30 команд. Такой буфер и есть «окно просмотра», через которое проходят ис- полнительные команды, сформированные на основе выполняемой про- граммы, т — максимальное число команд в «окне просмотра». Буфер мо- жет заполняться УУ после базирования и индексации команд. Выше говорилось, что стек максимально снижает число обращений к ОП. Кроме того, ПОЛИЗ — естественный и простой результат транс- ляции с любого алгоритмического языка. Однако выполнение операций на стеке заключается в последовательном преобразовании его вершины. Это, казалось бы, исключает параллелизм, Но и на ПОЛИЗ он виден. Например, по приведенной выше записи можно выделить первые парал- лельные операции счета: - +ИШ х Зп Y
— две двуместные операции умножения и вычитания, которыми можно бы было загрузить два ИУ. Значит, чтобы распараллелить выполнение программы на стеке, на- до выполнить промежуточный перевод программа в ПОЛИЗ —> поток команд через «окно просмотра» — динамически, в процессе выполнения программы. Т.е. от безадресной системы необходимо перейти к системе программирования, использую- щей адреса. Тогда команды будут иметь вид тех процедур, о которых го- ворилось выше. Для этого предполагается, что стек формируется не на основе дан- ных, как выше, а на основе их адресов в СОЗУ, вне стека. Т.е. данные и промежуточные результаты располагаются в регистрах СОЗУ, а их адре- сами загружается стек; в стеке представлены не данные, а их адреса. Та- кой стек называется адресным стеком. Расположение же данных (вклю- чая промежуточные результаты) в СОЗУ планируется аппаратно, динами- чески так, чтобы оптимально использовать ограниченный объем СОЗУ (или предоставляемой его области) при достижении максимального па- раллелизма. Быстрые регистры СОЗУ являются распределяемым ресур- сом. Подобная общая схема работы АЛУ представлена на рис. 3.8. Рассмотрим работу блока динамического распределения регистров. Он обрабатывает два списка адресов регистров СОЗУ: адресный стек и список свободных регистров. Ранее мы видели, что в программе ПОЛИЗ есть три вида команд: загрузка стека, выполнение операции, запись из стека. Каждая из этих команд порождает трехадресную команду следующим образом. Загрузка стека порождает трехадресную команду, в которой адрес считываемой величины в памяти указывается по первому адресу форми- руемой команды. По третьему адресу указывается первый адрес из списка свободных регистров. Этот адрес образует новую вершину адресного сте- ка. (Т.е. регистр с этим адресом образует новую вершину стека, на кото- ром производится счет.) Команда выполнения операции порождает трехадресную команду, где одним из операндов является вершина стека. Если операция одномест- ная, адрес, стоящий в вершине адресного стека, становится первым адре- сом команды. Если операция двуместная, то адрес из вершины адресного стека становится вторым адресом формируемой команды, а первым ад- ресом становится адрес, составляющий второй уровень адресного стека. Третий адрес берется из списка свободных регистров. Использованные адреса операндов исключаются из адресного стека и переводятся в конец
Рис. 3.8. Схема распараллеливания выполнения команд списка свободных регистров. Адрес регистра, составивший третий адрес сформированной команды, т.е. адрес результата, включается в адресный стек как его новая вершина. Запись из стека порождает трехадресную команду, где первый ад- рес — адрес из вершины адресного стека, третий адрес —.адрес записи (в СОЗУ или ОП). Использованный адрес из вершины адресного стека исключается из этого стека и записывается в конец списка свободных ре- гистров. Пример. ПОЛИЗ программа А := (а + b) : (m X п) —> АаЬ + тпх ::= —> ab + тпХ : ЗпА В таблице 3.1 представлен перевод программы из безадресной систе- мы команд в трехадресную. Адресный способ распараллеливания Продемонстрируем общий подход при реализации адресного распа- раллеливания, используемого после формирования трехадресных команд. Пусть в буфере команд АЛУ, или в «окне просмотра», формируется
Таблица 3.1 № Адресный стек Список свободных регистров Формируемые команды е Ai а2 Аз "Т- Г1, г2, Гз, Г4, г5, г6 Сч <а> Г1 2 Г1 Г2, Гз, Г4, Гз, Г6 Сч <Ь> Г2 3 Г2, Г1 Гз, Г4, Гз, гв + Г1 г2 Гз 4 Гз Г4, Гз, Гв, Г1, г2 Сч <т> Г4 5 Г4, Гз Гз, Гв, Г1, г2 Сч <п> Гз 6 Гз, Г4, Гз Гв, Г1, г2 X г4 Гз Гв 7 Гб, Гз Г1, Г2, г4, Гз • гз Гв Г1 8 Г1 Г2, Г4, Гз, Гз, Гв Зп Г1 <А> поток трехадресных команд, как рассматривалось выше: {0j Aji Aj2 Aj2}. Очевидно, что одновременно или с перекрытием во времени могут вы- полняться такие две команды, каждая из которых не использует в ка- честве операнда результат выполнения другой. Если же команда меня- ет значение некоторой величины, то предшествующие команды в «окне просмотра» должны раньше выполнения данной команды успеть исполь- зовать предыдущее значение. При этом должна соблюдаться последова- тельность присваивания значений одной величине. Пусть ctj — логическая переменная (признак), соответствующая возможности назначения j-й команды для выполнения. Тогда в процессе назначения команд на ИУ J-я команда может быть назначена для выпол- нения в соответствии со значением истинности следующих предикатов: «1 = 1 OLj = (Aji А1з) A (Aj2 / А1з) A (Aji / А23)Л A(Aj2 А23) Л ... л (Aj-1 Aj-1,3) Л (Aj2 / Aj__i,3)A A(Aj3 Ац) Л (Aj3 Ai2) Л ... Л (Aj3 / Aj_i,i)A л(А?з / Л’-1,2) л (А?з / 4/-1,з) j = 2,..., тп. При наличии незанятых ИУ необходимой специализации или при наличии свободных регистров в буферах этих ИУ, команды с призна- ком ctj = 1 назначаются для выполнения. Так, в АЛУ процессора МВК ”Эльбрус-2”каждое специализированное конвейерное ИУ имеет неболь- шой буфер, в которые записываются назначенные команды.
Назначенные команды снабжаются признаком назначения fy и не исключаются из «окна просмотра» до сигнала ИУ о завершении выпол- нения. Это необходимо для исключения преждевременного начала вы- полнения других команд, использующих результат данной. Легко видеть, что в каждой из одновременно выполняющихся ко- манд, на разных ИУ, в данном случае используются адреса СОЗУ, кото- рых нет ни в одной из других команд. Т.е. одновременно работающие ИУ используют непересекающиеся множества адресов. Это исключает кон- фликты обращения к регистрам СОЗУ, ускоряет работу. В таком случае говорят, что ИУ полностью сегментированы. Хотя в общем случае работы на общих вычислительных ресурсах (решающих полях) это необязатель- но. Пример. Пусть «окно просмотра» вместило в себя весь фрагмент ра- нее рассмотренной программы. АЛУ содержит необходимые устройства сложения, умножения и деления, а также два одновременно работающих канала обращения к ОП. Последовательное преобразование содержимо- го «окна просмотра» показано на рис. 3.9. Данный способ распределения команд, потребовавший промежу- точного перевода безадресных команд в трехадресные, эффективен в случае многофункционального АЛУ. Универсальные исполнительные устройства, образующие АЛУ, — решающие поля, могут потребовать раз- работки других способов распределения работ.

Лекция 4. Параллельная обработка стека и статическое распараллеливание в решающем поле Рассматривается проблема параллельного выполнения программы, ко- торая представлена в безадресной системе команд, имитирующей выполне- ние операций на стеке. Параллельная обработка стека применима к програм- мам счёта арифметических операторов, содержащих условия. Это позволяет значительно сократить количество условных переходов. Ключевые слова: решающее поле, цепочки имен и операций, стек, вырожденный подстек, ссылка, оператор if-then-else, VLIW- архитектура, £Р/С-архитектура. 4.1. Подстеки и их взаимодействие В процессорах супер-ЭВМ используются многофункциональные АЛУ, состоящие из специализированных по операциям исполнитель- ных устройств. Широкое применение микропроцессоров позволяет ре- ализовать в составе АЛУ решающие поля на основе универсальных ис- полнительных устройств, которые могут выполнять последовательности команд или целые процедуры. Рассмотрим возможность динамического распараллеливания в таких АЛУ при выполнении арифметических опе- раторов программы в безадресной системе команд процессора, воспро- изводящей выполнение работ на стеке. Существуют пути обобщения такой структуры ВС на основе ком- плектации многопроцессорных ВС на общем вычислительном ресурсе, - решающем поле. Такая структура в наибольшей степени адекватна кон- цепции двух основных уровней распараллеливания: уровня программ и уровня команд. Процессор в обычном смысле выполняет функции устройства управ- ления - управления выполнением программы. Исполнительные коман- ды выполняются процессорными элементами (ПЭ) решающего поля РП, которые составляют общий вычислительный ресурс ВС. Т.е. РП выпол- няет заявки процессоров на выполнение операций. При этом порядок использования ПЭ определяется динамически в соответствии с потоком команд программы и с возможностями их параллельного выполнения. Однако при такой структуре и универсальности ПЭ целесообразно распределять между ними не отдельные команды, а группы команд или законченные операторы. И принимать решение об этом можно на осно- ве анализа бесскобочной записи (польской инверсной записи — ПОЛИЗ)
арифметических операторов программы, или, что то же самое, — на осно- ве потока безадресных команд программы. Выясняется, что производить распределение (распараллеливание) можно, минуя промежуточный пе- ревод команд из безадресной формы в трехадресную, — непосредственно по тексту программы. Тогда, если представить, что программа в ПОЛИЗ предполагает ее непосредственное выполнение на стеке, то, следовательно, производится распараллеливание обработки стека. Работа одного стека сводится к па- раллельной работе нескольких взаимосвязанных подстеков данного сте- ка. Каждый подстек реализуется на стеке выделенного для этого ПЭ. Ес- ли предположить, что данные находятся в СОЗУ и не подлежат переме- щению при организации совместной работы ПЭ, то для их обработки це- лесообразно организовать в локальной регистровой памяти каждого ПЭ адресные стеки, как это рассматривалось выше. Процессорный элемент и его адресный стек со своим окружением показан на рисунке 4.1. Рассмотрим арифметическое выражение А := а — (Ь X (с + d) — е : /) : (g х h X i)
Его бесскобочная запись Aabcd + хе/ : —gh х гх : — :=. Запишем программу, произведя очевидное оптимизирующее преоб- разование, сокращающее количество цепочек имен и операций, abcd+ xef : —ghi х X : — ЗпА. Составим информационный граф G, соответствующий порядку выполнения операций на стеке при счете значения этого выражения (рис. 4.2.). Рис. 4.2. Граф-схема счёта арифметического выражения Строить этот граф будем в порядке выполнения операций. Сначала изобразим вершины а, Ь, с, d в соответствии с вызовом их в стек. Затем изобразим вершину +, соответствующую сложению end. Затем — вер- шину х, соответствующую умножению b на с + d. Так как цепочка опе- раций закончилась, изобразим вершины е и / и т.д. В результате после- довательных действий развернется граф G, иллюстрирующий параллель- ную структуру алгоритма счета значения данного выражения. Выделены подструктуры, которые могут выполняться параллельно. Важный вывод на основе анализа графа: можно независимо (и па- раллельно) извлекать из памяти величины по всем именам, составляю- щим цепочки имен в ПОЛИЗ. Те. можно их заблаговременно считывать в любой последовательности, в том числе и параллельно. Однако при возможности последовательного обращения к памяти предпочтительным
является анализ цепочек имен слева направо, а каждой цепочки — спра- ва налево, т.к. использование величин в операциях производится справа налево. (В нижеследующих примерах загрузка стеков производилась тра- диционно.) Тогда разовьем стековый механизм, позволяющий производить рас- параллеливание вычислений. По числу цепочек имен (и операций) в ПОЛИЗ сформируем несколь- ко подстеков, каждый из которых имеет свою вершину. Подстеки, сфор- мированные для счета одного выражения, упорядочены так, что каж- дый из них может обладать ссылкой на свой правый подстек (кроме по- следнего). Левый по отношению к данному подстек образуется цепочкой имен, находящейся в бесскобочной записи непосредственно левее це- почки имен, соответствующей данному подстеку. Каждому подстеку ста- вится в соответствие следующая за цепочкой имен цепочка операций и разрешается ее выполнение. На рисунке 4.3,а показаны сформированные подстеки и их начальная загрузка (не по стековому принципу — последо- вательно через вершину, а по возможности параллельно или с перекры- тием во времени). Определим возможный вариант реализации: подстеки могут запол- няться не соответствующими величинами, а их адресами в СОЗУ. Т.е. тра- диционные приемы использования КЭШ-памяти должны быть примене- ны здесь. Взаимосвязь подстеков следует из неравенства длин цепочек имен и соответствующих им цепочек операций. Возможны ситуации: 1) подстек выродился в свою вершину, но цепочка операций оказа- лась не исчерпанной при том, что первая из этих операций - двуместная; такой подстек назовем не полностью вырожденным; 2) цепочка операций исчерпалась, но на подстеке содержится одна или более величин (или их имен, адресов), — такой подстек назовем вы- рожденным; если на подстеке находится единственная величина, состав- ляющая вершину, то такой стек назовем полностью вырожденным. Если данный подстек не полностью вырожденный, то последую- щая операция возможна над вершиной этого подстека и вершиной левого подстека, если тот является вырожденным или полностью вырожденным. Если левый подстек также не полностью вырожденный или выпол- нение на нем возможных операций не закончилось, то данный подстек находится в состоянии ожидания. Для выполнения операции над верши- нами двух подстеков (если правый подстек является вырожденным) пра- вый подстек переводится на данный подстек так, что его вершина стано- вится новой вершиной данного левого подстека. Ссылка правого подс- тека заменяет собой ссылку левого подстека. Таким образом, на основе
1 2 3 а) d f i с h е b g Ссылка 3 а Ссылки нет Ссылка 2 : - + X х х : - 1 2 3 б) с + d e-f h х i b Ссылка 3 g а — Ссылки нет Ссылка 2 х : - X 1 2 3 Рис. 4.3. Взаимодействие подстеков двух подстеков формируется один и появляется возможность дальнейше- го выполнения операций из цепочки. При правильной бесскобочной записи каждый не полностью выро- жденный подстек дождется возможности продолжения выполнения опе-
раций за счет вырожденного или полностью вырожденного левого под- стека. Он, в свою очередь, превратится в вырожденный или полностью вырожденный и пополнит левый не полностью вырожденный, если та- кой имеется. Окончательное значение данного выражения образуется в вершине единственного оставшегося полностью вырожденного подсте- ка, не содержащего ссылку на правый подстек. Продолжим рассмотрение примера, для простоты считая одинако- вым время выполнения всех операций. На первом шаге (в первом такте) выполняются операции на всех подстеках (рис. 4.3,6). После этого подстек 2 оказывается не полностью вырожденным; в дальнейшем он будет ждать вырождения левого — под- стека 1. После выполнения операций на втором шаге (рис. 4.3,в) подстек 1 оказывается вырожденным, его дополняет подстек 2 со своей ссылкой на третий подстек, который становится правым для первого. Подстек 3 ока- зывается не полностью вырожденным, он ждет вырождения своего лево- го подстека. После выполнения операций на третьем шаге (рис. 4.3,г) подстек 1 оказывается вырожденным; он дополняется подстеком 3. После выполнения операций на подстеке 1 на четвертом и пятом шагах получается окончательный результат. При произвольных временах выполнения операций динамическая картина меняется, но правила взаимодействия подстеков те же. Таким образом, все подстеки образуют очередь заданий, которые распределяются между операционными или исполнительными универ- сальными устройствами — ПЭ для выполнения. ПЭ действительно об- разуют распределяемый ресурс системы, в общем случае — многопроцес- сорной, и назначаются динамически по необходимости. Реализуется кон- цепция виртуальных исполнительных устройств или процессорных эле- ментов решающего поля. Усложним пример, введя в рассмотрение арифметические операто- ры, содержащие условие, а также образующие сложные конструкции с использованием условий. Пусть необходимо распараллелить счет арифметического выраже- ния Y := (а + е : /) X if а х I с then if I < д х h then А else А + I else с x (h + 16). Предварительно необходимо распространить правила формирова- ния ПОЛ ИЗ для отображения условий. Целесообразно оставлять на месте разграничители if, then, else. Знак операции, в которой участвует условное
выражение, необходимо предпосылать каждому альтернативному опера- тору. Тогда легко на этом примере представить формирование безадрес- ной программы счета значения арифметического выражения: aef : + if al X с then if Igh х < then А X else оператор if оператор if оператор then оператор /Лея Al + х elsech,16+ х х ЗпУ оператор else оператор else Процессор, как указывалось ранее, выполняя функции лишь устрой- ства управления, производит последовательный анализ символов про- граммы. Обнаружив цепочку имен, он выделяет ПЭ и настраивает его на обработку этой цепочки и последующей цепочки операций. При на- хождении каждой следующей цепочки имен, если анализ производится вне условного оператора, он формирует ссылку «левого» подстека на свой ’’правый”. Однако после формирования последнего (а возможно — един- ственного) подстека оператора ifон формирует ему ссылку на два подсте- ка: первого подстека оператора then и первого подстека оператора else — после их анализа. Преобразование выделенных для счета подстеков, т.е. процессор- ных элементов, можно проследить по таблице, где столбцы соответству- ют ПЭ, а строки — изменению их состояния во времени. Таблица 4.1: Такты (шаги) Номер 0 занятого ПЭ (стека) 1 2 3 4 5 6 1 а 2 е а а 3 Ссылка 1 е а Ссьирса 1 1 а Ссылка 2 с 4 е а Ссылка 1 : + Зпу 1 а Ссылка 2 X с Ссылка 3 1 5 e.f а Ссылка 1 + 3пу а X 1 Ссылка 2 с Ссылка 3 9 1 Ссылка 4 А
6 а + е : f Ссылка 1 Зпу с а X 1 Ссылка 3 h g 1 Ссылка 4 А Нет ССЫЛКИ X А 7 а + е : / Ссылка 1 Зпу Операция: ахЦс Ссылка 3, 6 h 9 I Ссылка 4,5 х S А Нет ССЫЛКИ X 1 А Нет ссылки с 8 а 4-е : / Ссылка 1 Зпу Пусть а X 1 = с Ссылка 3 9 X h I Ссылка 4,5 А Нет ссылки X 1 А Нет ссылки +х с Нет ссылки 9 а + е : / Ссылка 3 Зпу Операция: 1 < gxh Ссылка 4,5 А Нет ссылки X А + 1 Нет ссылки X 10 а + е : / Ссылка 3 Зпу Пусть 1 > gxh Ссылка 5 А + 1 Нет ссылки X 11 а + е: f Ссылка 3 Зпу А +4 Нет ССЫЛКИ X 12 А -|- 1 а + е: f Нет ссылки X Зпу Рассмотрим работу системы по шагам (тактам), для упрощения предполагая, что каждая операция выполняется за один такт. В первом такте процессор, анализируя программу символ за симво- лом, начинает анализ первой цепочки имен. Из вычислительного ресурса назначается ПЭ 0, и он начинает формирование адресного стека в своем локальном СОЗУ. Во втором такте, «запустив» формирование первой цепочки, про- цессор находит вторую цепочку имен. За ней закрепляется ПЭ 1. Т.к. определилось место обработки этой, правой для предыдущей цепочки имен, цепочки, то процессорному элементу 0 сообщается ссылка на свой правый подстек — Ссылка 1. В этом же такте в адресный стек ПЭ 0 за- гружается адрес е. Однако процессор зафиксировал тот факт, что он при анализе программы вошел в оператор if-then-else на первом лексикогра- фическом уровне. В третьем такте ПЭ 0 загружает в свой стек адрес/ ПЭ 1 загружает адрес /, а процессор находит следующую цепочку, за которой закрепляет
ПЭ 2. Ссылку на этот процессорный элемент он сообщает ПЭ 1, а ПЭ 2 загружает в свой стек единственный адрес с. В четвертом такте ПЭ 0 загружает в свой стек цепочку операций. Такие же действия выполняет и ПЭ 1. За первой цепочкой имен опера- тора then закрепляется ПЭ 3. Тогда ПЭ 2 получает ссылку пока только на этот процессорный элемент, на котором находится один из его правых подстеков. ПЭ 3 загружает адрес I в свой адресный стек. Однако процес- сор фиксирует тот факт, что он вновь входит в оператор if-then-else на вто- ром лексикографическом уровне. В пятом такте процессор анализирует оператор then. За первой (единственной) его цепочкой имен закрепляется ПЭ 4. Он загружает в свой адресный стек адрес А. ПЭ 3 загружает в свой стек адрес g и получа- ет ссылку на ПЭ 4. ПЭ 0 и ПЭ 1 выполняют операции из своих цепочек операций. ПЭ 2 находится в состоянии ожидания. В шестом такте процессор приступает к анализу первой цепочки имен оператора else на втором лексикографическом уровне. За этой це- почкой имен закрепляется процессорный элемент 5, который загружает в свой адресный стек адрес А. При этом ПЭ 4 не только не получает ссыл- ки на правый подстек, но и получает подтверждение об отсутствии такой ссылки. Это необходимо, т.к. значение А является одним из альтернатив- ных значений арифметического выражения. ПЭ 0 продолжает счет. Т.к. в пятом такте на стеке ПЭ 1 выполнение всех возможных операций за- кончилось, а ПЭ 2 пребывал в ожидании именно этого, то в соответствии со своей ссылкой ПЭ 1 переводит адресный стек ПЭ 2 в вершину своего адресного стека. Свою ссылку он заменяет ссылкой ПЭ 2. Оттуда же он берет цепочку операций. (В общем случае он спереди дополняет свою це- почку операций.) ПЭ 2 освобождается, т.е. переводится в общий ресурс системы. ПЭ 3 загружает в свой адресный стек адрес А. ПЭ 4 загружа- ет цепочку операций, формируя тем самым не полностью вырожденный подстек. В седьмом такте процессор закончил анализ оператора else на вто- ром лексикографическом уровне и приступает к анализу оператора else на первом лексикографическом уровне. За цепочкой имен этого оператора закрепляется ПЭ 6. В его адресный стек загружается адрес с. ПЭ 5 загру- жает в свой адресный стек адрес /. Т. к. на его подстеке считается другое альтернативное значение арифметического выражения, то подтвержда- ется отсутствие ссылки на правый подстек. Т. к. на двух лексикографиче- ских уровнях определились подстеки, на которых выполняются операто- ры else, то определились и вторые ссылки в ПЭ 1 и ПЭ 3. ПЭ 3 вводит цепочку операций. Пусть при выполнении процессорным элементом 1 операции отно- шения в восьмом такте оказалось справедливым равенство. Тогда резуль-
тат счета значения арифметического оператора определяется результатом выполнения оператора then на первом лексикографическом уровне. Т.е. ссылка на два альтернативных оператора должна определиться в соответ- ствии с выбором, — на ПЭ 3. Это и производится в данном такте. Од- нако в этом же такте ПЭ 6 еще продолжает формирование информации для счета; ему процессор сообщает об отсутствии ссылки на правый под- стек, т.к. это единственный подстек счета альтернативного оператора ehe на первом лексикографическом уровне. ПЭ 5 загружает себе цепочку опе- раций. Т. к. адресный стек ПЭ 1 стал полностью вырожденным, то ожидаю- щий его левый подстек — в ПЭ 1 в девятом такте переводит его к себе, точнее, то, что от него осталось, ссылку на ПЭ 3. ПЭ 2 освобождается и переходит в ресурс системы. Теперь в ресурс системы переводится и ПЭ 6. ПЭ 3 выполняет операцию отношения. ПЭ 4 находится в состоянии ожидания, а ПЭ 5 выполняет очередную операцию из своей цепочки опе- раций. В десятом такте предположим, что в результате выполнения опе- рации отношения процессорным элементом 3 оказалось справедливым неравенство, определяющее необходимость выполнения оператора eke на втором лексикографическом уровне. Тем самым определяется значе- ние ссылки ПЭ 3 на правый подстек. ПЭ 4 дополняет общий вычисли- тельный ресурс системы. Т. к. ПЭ 5 содержит не полностью вырожденный подстек, ожидаю- щий, кто его подхватит для дальнейшей обработки, то в соответствии со своей ссылкой ПЭ 3 в одиннадцатом такте переведет на свой адресный стек содержимое адресного стека и поля ссылки, а также цепочку опера- ций — процессорного элемента 5. ПЭ 5 дополняет вычислительный ре- сурс системы. В двенадцатом такте полностью определилось завершение счета процессорным элементом 0. Рассмотренная на принципиальном уровне схема распределения ра- бот в решающем поле ВС содержит ряд направлений развития, устраня- ющих ее недостатки. Ее главным недостатком является привязанность к способу форми- рования польской инверсной записи выражений. Размножение "малень- ких'параллельных стеков (подстеков) в системе, кроме привлечения из- лишне большого числа процессорных элементов к счету, с очевидностью увеличивает накладные расходы на управление их работой. Хотелось бы иметь больше возможностей управления детализацией распределяемых работ. Следовательно, программа должна быть предварительно оптими- зирована.
На пути оптимизации программы на ПОЛИЗ, т. е. в безадресных ко- мандах, видны два уровня. Первый из них предполагает «укрупнение» стеков на основе алгебры их преобразований. Так, в нашем примере явно просматривается целесообразность за- мены al х с <—► calx >. Эта замена позволяет использовать один стек вместо двух. В первом примере мы упомянули очевидную замену gh X i X —► ghi XX. Она также исключает излишнее «измельчение» работ. Однако таких преобразований, приводящих к укрупнению и сокра- щению числа подстеков, может быть недостаточно. Поэтому следующий уровень преобразований может использовать сформированные транслятором указания о неделимых операторах, вы- полняющихся на одном стеке, т.е. одним процессорным элементом. Для этого могут использоваться операторные скобки, указывающие, что их содержимое выполняется на стеке одного ПЭ. Это может сделать излиш- ними даже те преобразования по укрупнению подстеков, о которых мы говорили только что. Например, программа счета значения арифметического выражения с условиями, которую мы рассматривали выше, может после оптимиза- ции иметь вид aef : +if(al х с then if Ighx < then Ах else Al + xelse chl6 + x X 3nY Здесь выделена конструкция в таких операторных скобках. Хотя наши примеры оказались не столь богатыми для демонстра- ции подобных укрупнений работ, сложные программы вычислительного характера в таком укрупнении, несомненно, нуждаются. 4.2. Статическое распараллеливание в АЛУ. VL/ИЛ- и ЕР/С-архитектуры С развитием архитектурной сложности ВС и с проектированием больших интегральных схем появилось новое направление в развитии ар- хитектур — использование принципа программного управления каждым так- том машины. Это значит, что программа состоит из команд, задающих в
такте выполнения инструкции каждому ИУ АЛУ. Команда изображает- ся «длинным командным словом» (отсюда название РТЛК-архитектура, verylonginformationv^ord). В нем предусмотрены позиции, соответствую- щие каждому ИУ Они указывают, какую работу должно начать выпол- нять каждое ИУ При этом учитывается состояние данного ИУ, времен- ные соотношения для ранее инициированного поступления на него ин- формации и т.д. Т.е. состояние всех устройств процессора планируется программно, статически, не оставляя элементов динамического плани- рования, как рассматривалось выше. Так, в проекте МВК «Эльбрус-3» длина командного слова состав- ляет 320 разрядов. В нем задано управление каждым из семи ИУ (два — сложения, два — умножения, одно — деления, два логических), их взаи- модействием, считыванием операндов и записью результатов, передачей управления. Так как управление всеми устройствами явное, то вся работа по оп- тимальному распараллеливанию возлагается на транслятор. Однако состояние не всех устройств может быть точно предсказа- но на каждый момент времени. Когда необходимо обращение к ОП, из- за непредсказуемости эффекта расслоения памяти и возможности кон- фликтов при одновременном обращении и других процессоров исполь- зуются элементы динамического планирования обращений к ОП. Тогда жесткое использование данных, считанных из ОП в регистры стека в СОЗУ (в МВК «Эльбрус-3» стек велик и распространяется на ОП, оперативно используемая его часть в СОЗУ называется буфером стека) планируется транслятором по минимальному значению количества так- тов обращения к ОП. Синхронизация же с учетом большего числа тактов обращения осуществляется с помощью битов значимости. Каждый регистр буфера стека и буфера массивов имеет бит значимо- сти, который полагается равным нулю при выдаче заявки на считывание из ОП в этот регистр и полагается равным единице при приходе требуе- мого числа. Тогда, если в команде производится обращение к регистру, в который еще не поступило число, производится пропуск такта, выполне- ние команды NOP (No Operation). Операция повторяется неоднократно до завершения считывания. Транслятор должен с опережением планировать обращения к ОП, чтобы минимизировать число пустых тактов. Широко используется непосредственная передача результатов с од- них ИУ на другие. Для этого результаты операций сохраняются несколько тактов в протоколе результатов работы каждого ИУ Однако «длинные» команды непроизводительно расходуют память, и с развитием архитектуры заменены командами переменной длины. В результате проводимых исследований, в контексте разработок
крупнейших зарубежных фирм, сложилось представление об архитектуре микропроцессора, используемого в многопроцессорной вычислительной системе, на основе совместного применения всех существующих спосо- бов оптимизации параллельной обработки информации. Однако эффективность распараллеливания зависит от решения (ста- тического или динамического) задач оптимального планирования за- грузки оборудования. Поиск в этом направлении привел к целесооб- разности EPIC-архитектуры (ExplicitlyParallelInstructionComputing)^oj^ пользователя (транслятора) выражается как система команд с явным па- раллелизмом. Такая система команд позволяет планировать загрузку всех устройств процессора в каждом такте. Планирование производится в ста- тическом режиме при трансляции или программировании задачи и фак- тически заключается в построении потактового расписания работ, т.е. формирования ”длинных”командных слов (VLIW), в позициях которых указано, к выполнению какой работы должно приступить каждое испол- нительное устройство (ИУ) в данном такте. Важной особенностью £Р/С-архитектуры является возможность па- раллельного ветвления в двух случаях: при выполнении команд условного перехода и при выполнении конструкций if-then-else в составе арифме- тических операторов. Условный переход в «традиционном» исполнении грозит остановкой конвейера. В £Р/С-архитектуре предусмотрен запуск дополнительного конвейера по команде подготовки перехода за несколь- ко тактов до ветвления. Интенсивное ветвление в выполняемой програм- ме способно привести к лавинообразному запуску дополнительных кон- вейеров и необходимости статистической оценки достаточного их коли- чества при обосновании средств аппаратной поддержки. Поэтому второй случай ветвления, осуществляемого внутри линей- ного участка программы, предпочтителен, хотя также приводит к избы- точности оборудования, используемого при вычислениях.
Лекция 5. Аппаратная поддержка языка пользователя — основная концепция мультипроцессорных систем Рассматривается проблема использования языка высокого уровня в ка- честве ассемблера — единственно доступного языка пользователя, включа- ющего сложные алгоритмические конструкции. Их применение эффективно липп» при наличии средств аппаратной поддержки. Такая поддержка выпол- нена в отечественном семействе «Эльбрус». Ключевые слова: ассемблер, автокод, язык высокого уровня, дина- мические и статические языки, теговая архитектура, типовый кон- троль, процесс, процедура, статическая цепочка, динамическая це- почка, активация, лексикографический уровень, дескриптор масси- ва, элемент цикла, условный переход. 5.1. Проблема повышения уровня языка пользователя Существуют три уровня алгоритмических языков: ассемблеры, авто- коды, языки высокого уровня (ЯВУ). Ассемблеры — машинно-ориентированные языки, низкого уровня, допускающие трансляцию «один в один». Автокоды — также машинно-ориентированные языки допускаю- щие конструкции, не транслируемые «один в один». (Некоторая класси- фикация языков исключает автокоды, предполагая, что ассемблер может обладать макросредствами (такой ассемблер - макроассемблер), обеспе- чивающими его лаконичность.) ЯВУ — не машинно-ориенторованные (проблемно-ориентирован- ные) языки, обладающие лаконичностью, большим набором вырази- тельных средств, обеспечивающие свободную рекурсивную структуру, с вложенными условными выражениями, с процедурной нотацией и ин- фиксными арифметическими выражениями. ЯВУ — язык пользователя- алгоритмиста, которому нет необходимости опускаться на уровень ма- шинного представления, в том числе до уровня машинных команд. Поэтому современная идея разработки ВС заключается в следую- щем: минимально доступный уровень языка пользователя должен соответ- ствовать языку высокого уровня. Однако ранее это был не более чем лозунг,
т.к. трансляторы с ЯВУ для известных машин значительно менее эффек- тивны (по дайне программы и по времени ее выполнения), чем трансля- торы с ассемблеров. Повысить эту эффективность можно за счет аппарат- ной реализации конструкций ЯВУ: аппаратной поддержки типов данных, выполнения процедур, в т.ч. вложенных и рекурсивных, циклов, органи- зации и индексации одномерных и многомерных массивов, выполнения условных операторов и т. д. В этом случае ЯВУ для данной ВС макси- мально приближается к уровню ее ассемблера, оставаясь для пользова- теля языком высокого уровня. Введение в машинный язык сложных операций, соответствующих конструкциям ЯВУ, служит повышению производительности. Есть другой аспект повышения уровня входного языка (самого низкого уровня языка пользователя): создание семейств программно- совместимых ВС. Совместимость на уровне ассемблеров (реализована в ЕС ЭВМ) значительно сдерживает развитие новых поколений, оставляя их в рамках неизменных архитектурных решений. Требование совмести- мости на уровне ассемблера-ЯВУ предоставляет широкие возможности поиска, выбора, развития поколений, что видно на примере развития проектов МВК «Эльбрус». Каждая система может иметь свой внутренний машинный язык, обусловленный своими архитектурными особенностя- ми, т.е. своей для каждой модели аппаратной поддержкой языковых кон- струкций. Он не доступен пользователю и проявляется только в объект- ном коде — коде оттранслированной программы, к которой пользователь отношения не имеет. Насколько могут быть архитектурно отличны модели, говорит хотя бы то, что в основе ЦП «Эльбрус-2» лежит безадресная система команд с динамическим распределением работ между ИУ, а в основе ЦП «Эльбрус- 3» — «длинное» командное слово со статическим планированием исполь- зования ИУ В проектах МВК «Эльбрус» исключено ассемблерное программиро- вание. Исключение уровня ассемблера значительно упростило создание системного программного обеспечения, разработку сложных систем ре- ального времени и др. Оно позволило в несколько раз поднять произво- дительность труда программистов в наиболее сложных областях приме- нения. Ранее говорилось, что в основу операционных устройств современ- ных ВС положены микропроцессоры с достаточно развитой системой ко- манд. В соответствии с идеей ЛАУС-архитектуры на основе этой системы команд создаются микропрограммы системы команд ВС. Т. е. пользова- тель, программирующий на ассемблере, владеет системой команд, реали- зованных микропрограммно. В этом случае трансляция с ЯВУ произво-
дится в систему команд ВС, а уж с нее с помощью микропрограмм про- изводится воздействие на аппаратуру: систем система кома икроком программист транслятор микропрограммы схемы машины (компиляция) (интерпретация) Отсутствие ассемблерного программирования при достаточно раз- витой системе команд микропроцессора — процессора RISC-архитектуры позволяет транслировать непосредственно в микрокоманды, исключая необходимость системы команд ВС. Она не нужна ни пользователю, ни транслятору: программист транслятор схемы машины (компиляция) Такая идеология обсуждается в связи с развитием семейства «Эль- брус». Однако здесь нет полной ясности из-за того, что для эффективно- сти системы трансляции непосредственно в систему команд микропро- цессора требуется действительно развитая система его команд. Дело в том, что любая трансляция использует два принципа — ком- пиляции и интерпретации. Существует оптимальное соотношение этих принципов при реализации трансляции. Компиляция на язык слишком низкого уровня (с которого затем производится интерпретация аппарат- но), кроме собственной сложности и трудоемкости, приводит к значи- тельному увеличению объектного кода. Надо учитывать, что по сравне- нию с «ручным» программированием транслятор и без того дает програм- мы, по объему и по времени выполнения значительно (раза в два) ме- нее эффективные. Такая неэффективность усугубляется низким уровнем языка, на который производится трансляция. Значит, необходим проме- жуточный «оптимальный» язык, на который целесообразна компиляция, а с него затем — интерпретация. Таким языком и может быть машинно- ориентированный ассемблерный язык ВС. Это соответствует как общей идее /УЗС-архитектуры, достаточно себя зарекомендовавшей, так и тому очевидному факту, что комплексирование большого количества микро- процессоров в ВС дает новое качество, выражающееся в развитой систе- ме команд ВС. В такой системе команд в частности должны отражаться
способы организации и синхронизации параллельных процессов. Не все команды реализуются только комплектующими микропроцессорами, а требуют использования и других средств ВС. Таким образом, на практике целесообразность полного отсутствия ассемблерного программирования может не подтвердиться. Повышать же уровень входного языка пользователя за счет разви- тия системы команд ВС, т. е. обеспечения аппаратно-микропрограммной поддержки языковых конструкций, целесообразно в любом случае. 5.2. Поддержка типов — теговая архитектура Рассмотрим лишь те средства поддержки языковых конструкций, которые определяют концептуальный подход, реализуемый в семействе «Эльбрус». ЯВУ по способу работы с типами данных делятся на два класса: с динамическими и статическими типами, или на динамические (не типи- зованные) и статические (типизованные) языки. В статических языках тип данных задается однажды на все время их существования. (В Паска- ле— в описании, для динамических переменных — в описании ссылок). В динамических языках указание типа сопровождает каждое вхождение данных в текст программы и, вообще говоря, может меняться на протяже- нии жизни этих данных. Например, одной величине можно в одном месте программы присвоить тип целое, а в другом — битовый набор. (Скажем, при моделировании ВС мы можем с помощью операций целочисленной арифметики вычислить адрес, затем надо произвести структурное иссле- дование этого адреса, к примеру — выделить группу разрядов этого адреса ит.д.) Как говорилось выше, в МВК семейства «Эльбрус» как основной язык пользователя реализован динамический язык. Для пользователя он — ЯВУ, для машины — ассемблер. Каждая величина сопровождается указанием типа, для чего в каждом машинном слове предусмотрены до- полнительные разряды, в которые пишется тег — код соответствующего типа. Аппаратно реализованные типы в «Эльбрусе-2»: целое 32-разрядное, целое 64-разрядное, вещественное 32-разрядное, вещественное 64-разрядное, вещественное 128-разрядное, битовый набор 64-разрядный, дескриптор мас- сива, косвенное слово, метка процедуры, метка перехода, семафор. Введение тегов, не исключающее применение статических ЯВУ, определило понятие теговой архитектуры. Теги обеспечивают: 1) аппаратное управление алгоритмами обработки данных. Данные на входе ИУ распознаются по типам, и ИУ настраивается на вид обработ- ки: например, сложение целых, сложение вещественных и т. д.;
2) упрощение трансляции, т. к. сокращается количество кодов опе- раций; 3) семантический контроль вычислений: возможна сигнализация (прерывание) в том случае, когда выполняется операция, не соответству- ющая типу данных (например, операция, которая не должна произво- диться над адресной информацией); 4) контекстную защиту данных: а) каждая процедура выполняет- ся над отведенной ей областью памяти, в) известны области памяти тех процедур, внутри которых она запущена, и с) все это образует адресный контекст выполняющейся процедуры. Он определяется совокупностью до- ступных ей дескрипторов массивов (сегментов), описывающих области доступной памяти. Дескрипторы, как адресная информация, обладают тегами. Аппаратура осуществляет контроль над тем, чтобы над адресной информацией не выполнялись действия, приводящие к расширению ад- ресного пространства, т. е. к нарушению защиты памяти. Контекст может меняться только при процедурных переходах и полностью определяется меткой процедуры. Метка — тоже адресная информация, и действия над ней также контролируются аппаратурой. Изменить метку нельзя; по ней можно только вызвать новую процедуру. Таким образом, аппаратный контроль адресной информации с по- мощью тегов исключает возможность обращения за пределы того адрес- ного пространства, которое было выделено данной процедуре. Это «по- путное» свойство теговой архитектуры исключает необходимость других средств защиты данных, хотя статус защиты может указываться для нужд пользователя или ОС в дескрипторах массивов. Пункты 3 и 4 определяют типовый контроль, осуществляемый с по- мощью тегов; 5) реализацию формирования параметров процедур «по ссылке» и «процедурой». Адреса для команд записи и считывания задаются операн- дами адресного типа. Формирование параметров процедур «по ссылке» производится в следующем случае: если результат считывания — адрес- ная информация, то операция считывания автоматически повторяется по новому адресу, и так до тех пор, пока не будет считано значение друго- го типа. Второй случай — формирование параметров процедур «процеду- рой»: если результат считывания — имя процедуры, то она автоматически запускается, и результат ее выполнения рассматривается как считанное значение. 5.3. Стековый механизм выполнения процедур Современная концепция программирования наЯВУ с широким ис- пользованием процедур наиболее полно была реализована в МВК се-
мейства «Эльбрус». (Хотя процедурный механизм реализуется уже повсе- местно, даже на уровне микропроцессоров.) Для построения сложных программных комплексов и возможности распараллеливания задача представляется в виде одного или нескольких взаимодействующих процессов. Процессы — это логически завершенные, преимущественно значи- тельные по объему работы (программы), на которые можно и целесооб- разно разбить решаемую задачу (выполняемый алгоритм). В МВК одновременно могут выполняться, т. е. находиться в актив- ном состоянии, несколько процессов, не более числа процессоров. Про- цесс отображен элементарной рабочей программой, формируемой из об- ращений к процедурам. Возможен любой способ соподчинения (вложен- ности) процедур. Воспроизводится выполнение процедур на стеке. Описания процедур (сегменты процедур) хранятся отдельно (рис. 5.1) Существует словарь сегментов данной программы, сформированный при трансляции. В нем хранятся дескрипторы сегментов, в которых указано место в памяти, объем и др. Один из базовых регистров Во каждого про- цессора во время выполнения программы указывает на ее словарь сег- ментов. Номер выполняемой команды находится в регистре номера ко- манды (RNK) и (в отличие от адреса ячейки в традиционных ЭВМ) состо- ит из номера сегмента и смещения — адреса внутри сегмента. Программа Процедура А Процедура В Процедура С Словарь Сегменты сегментов Рис. 5.1. Организация программных сегментов В СОЗУ каждого процессора организован стек для данных выполня- емых процедур (рис. 5.2) в составе выполняемого процесса — стек про- цесса. В вершине стека находятся данные и отражается выполняемая в дан- ный момент процедура (эта область называется активацией процедуры)
Рис. 5.2. Выполнение программы на стеке самого высокого на данный момент уровня иерархии (вложенности). При завершении выполнения процедуры в вершине стека, отведенная ей об- ласть СОЗУ возвращается в ресурс. При запуске же вложенной проце- дуры формируется новая вершина стека, т. е. новая активация. Вся ин- формация о данных прерванных процедур как бы погружается на один уровень ниже. Каждая активация начинается со связующей информации, состоящей из маркера стека МкС (в нем ссылка на МкС охватывающей процедуры, в которой описана данная процедура) и управляющего слова возврата УСВ (в нем информация для возврата в запустившую процеду- ру). МкС образуют статическую цепочку, УСВ — динамическую цепочку. Примечание. Процедуры могут быть описаны внутри других проце- дур; информация об этом содержится в МкС. В этом случае МкС образу- ют статическую цепочку. Запускаться же процедуры могут произвольно из разных процедур; эта информация содержится в УСВ. Тогда УСВ об- разуют динамическую цепочку. Уровень вложенности г (лексикографическийуровень) отображен в ба- зовом регистре Bi, содержащем начало активации этой процедуры.
Адресация данных в активации процедуры при ее выполнении про- изводится с помощью адресных пар (г, j), т. е. адрес СОЗУ = (Bi)+j. Примечание. Процедура программируется в памяти «от нуля», вклю- чая распределение ее данных. Тогда с помощью базирования она может свободно перемещаться по памяти, включая расположение в выделенной области СОЗУ на стеке. Уровень вложенности ^(лексикографический уровень) отображен в базовом регистре Bi-с одним и тем же адресом регистра в СОЗУ каждого процессора; он содержит начало активации этой процедуры. Область выражений — это область активации процедуры, где запо- минается состояние стека АЛУ, на котором выполняется собственно счет, в случае прерываний и процедурных переходов. Стек АЛУ и регистры ЦП, необходимые для восстановления счета процедуры, образуют аппа- ратную вершину стека. Рассмотрим на примере (рис. 5.3) иерархическую структуру фраг- мента программы, где в процедуре А (первый лексикографический уро- вень, ЛУ1) последовательно используются процедуры В и D (ЛУ2), а в каждой из них последовательно запускается процедура (ЛУЗ). Рассмотренная организация выполнения процедур приводит к их свойству повторной входимости. Одна и та же процедура может выпол- няться одновременно на стеках разных процессоров или одного процес- сора, запускаться рекурсивно и т. д. Средства ОС предусматривают случаи, когда процедура или множе- ство процедур не помещаются в отводимой памяти СОЗУ, число лекси- кографических уровней превышает допустимое и т.д. В связи с этим, об- ласть СОЗУ, отводимая под стек в процессоре «Эльбрус-3», называется буфером стека. 5.4. Обработка массивов Переменные с индексами, т. е. элементы одно- и многомерных мас- сивов, представляют большие трудности при трансляции и выполнении, если не обеспечены средствами аппаратной поддержки на уровне ЯВУ. Так как основная работа внутри процедуры производится с реги- страми СОЗУ, то обращение к переменным с индексами сводится к двум операциям: считыванию и записи. Пусть объявлен трехмерный массив А[0 : Р - 1; 0 : Q - 1; 0 : R - 1]. В тексте программы встретилось обращение к элементу этого массива A[i,j, к]. Надо установить адрес этого элемента. Какой подход может ле- жать в основе аппаратной поддержки установления адреса элемента мас- сива по значениям индексов?
СТЕК ПРОЦЕССОРА (ПРОЦЕССА) Рис. 5.3. Преобразование стека Важно учесть, что память линейна, одномерна (пронумерована сво- ими адресами). При заданных транслятору значениях P,Q,R трехмерный массив А сводится в ней к одномерному массиву длиной Р х Q х R, рас- положенному начиная с некоторого адреса а, как показано на рис. 5.4. При этом шаги переадресации по индексам составляют /^ = 1, hj = Р, hk = Р х Q. При заданных г, к < А[г, к] >= a + i + Pxj + PxQxk. Значит, существует принципиальная возможность рассчитать адрес переменной с индексами, заданной в символах ЯВУ, в том числе аппарат- но. Однако необходимость выполнения операций сложения и умноже-
Р-1 0 1 Р-10 1 Р-1 7 = 6-1 | к=0 i: 0 1 Р-10 1 Р-10 1 Р-1 ф ф • * * ф ф ф * ф * ф ф * * • ф I_______izU I____izl______I I________iz£zl__I k = R-l Рис. 5.4. Преобразование трёхмерного массива в линейный ния приводит к целесообразности аппаратно-программного метода. Он используется в МВК «Эльбрус». В общем случае для нахождения адреса индексованной переменной запускается процедура ОС. Средства же аппаратной поддержки исполь- зуются полностью для оптимизации обработки массивов в цикле. При этом количество измерений массива ограничено тремя. Итак, массив занимает сплошную неразрывную область памяти. На- чало и размер области (в данном случае a, PQR), а также формат элемен- тов массива и статус обращения (защита по записи или считыванию) опи- сывает дескриптор массива. Изменение каждого индекса означает «про- хождение» по памяти с постоянным шагом. Величины шага по памяти (например, как выше ft, hj, hk) в каждом измерении упакованы в специ- альном слове — паспорте массива. Дескриптор и паспорт массива, а также индексы по измерениям яв- ляются достаточной информацией для обращения к элементу массива. Предполагается, что в выполняемом цикле параметр цикла совпада- ет с одним из индексов массива. Т. е. от цикла к циклу необходимо изме- нять адрес элемента массива на шаг переадресации по этому индексу. В составе ИУ АЛУ ЦП «Эльбрус-2» есть устройство индексации. (Аналогичные устройства есть в составе многих ВС.) В нем содержится ассоциативная память АП, в которой для данного массива запоминается адрес очередного элемента и шаги переадресации. При первом выполне- нии цикла, т. е. при первом обращении к массиву, по дескриптору, пас- порту и начальным значениям индексов вычисляются адрес требуемого элемента и шаг переадресации по параметру цикла. Они заносятся в АП. При следующих обращениях к массиву в этом же цикле из АП извлекает- ся адрес элемента, складывается с шагом переадресации и одновременно
с использованием как адреса нового элемента, заносится в АП вместо ад- реса старого элемента. АП рассчитана на хранение информации о шести массивах. Время вычисления адресов элементов в цикле для шести мас- сивов — 1 такт. Предусмотрен механизм автоматической предварительной «подкач- ки» элементов массива из ОП в ассоциативное ЗУ массивов. При этом темп подкачки данных, как правило, превышает темп использования. 5.5. Выполнение циклов Обычно аппаратно поддерживают такие «предсказуемые» операто- ры цикла, как оператор цикла с параметром в Паскале: for i := to Е2 do, если Ег < E2,i = Ei, + 1, ..., Е2; for i := E± downto E2 do, если E± > E2, i = Ei,Ei - 1, ..., E2. (ПАСКАЛЬ — алголоподобный язык; в Алголе этому циклу соответствует цикл типа арифметической прогрессии. Циклу типа пересчет соответствует заголовок вида /or i := Е while В do, где Е — арифметическое выраже- ние, В — условный оператор. Аналог существует в Паскале. Такой цикл реализуется с помощью условного перехода.) Аппаратно реализуется элемент цикла в трех регистрах СОЗУ {СЦ, ГЗЦ, Анц}, где СЦ — Счетчик Цикла (фиксирует значение параметра цикла), ГЗЦ — Граничное Значение Е2 параметра Цикла, Анц — Адрес начала цикла. Используется команда типа КЦ — Конец Цикла, по ко- торой (СЦ) сравнивается с (ГЗЦ); в случае равенства (СЦ):= 0 и произ- водится выход из цикла (на следующую команду). В случае неравенства — (СЦ):= (СЦ) + 1 и безусловный переход по Анц. Вход в цикл про- изводится по команде ЦИКЛ с параметрами, задающими (СЦ) = Е± и (ГЗЦ) = Е2. По этой же команде фиксируется адрес Анц — следующей команды (или метки начала цикла). Однако, если до этого (СЦ) / 0, то производится вход во вложенный цикл. Тогда элемент цикла прерывае- мого заносится в стек элементов циклов. При выходе из цикла произво- дится, если необходимо, восстановление внешнего цикла. Так реализуется система вложенных циклов. 5.6. Ускорение условных переходов Непредсказуемые условные переходы останавливают работу кон- вейеров. Используются условные переходы с предпочтением. Например, две модификации одного условного перехода по результату сравнения двух величин УП1 < а >< b > С
используются, когда можно предсказать, что с большой вероятностью а < Ь; если ожидается, что скорее а b , то используется другая моди- фикация УП2<а><Ь>С. В этих случаях загрузка конвейера производится в направлении бо- лее вероятного ветвления. В случае противоположного направления ветв- ления останавливается конвейер, отменяются соответствующие действия и запускается конвейер по другому направлению. Очевидно, что в цикле предпочтителен переход на начало. Вариантом этого правила послужил принцип условного выполне- ния, используемый в МВК «Эльбрус-2», как следствие развитого парал- лелизма и конвейеризации. (Команда условного перехода поступает на анализ раньше, чем необходимое условие будет рассчитано и провере- но.) Он заключается в опережающем выполнении команд программы по- сле команды условного перехода до проверки условия. Все выполняемые команды помечаются признаком условного выполнения на всех уровнях их выполнения. Если в результате проверки условия управление должно быть передано следующей команде, этот признак уничтожается, выпол- нение команд продолжается. Если должен быть переход по адресу, уни- чтожаются все помеченные команды (на всех станциях конвейера). На- чинается выполнение ветви программы по адресу перехода. В проекте ЦП МВК «Эльбрус-3» пошли дальше. Условный переход организуется двумя командами: подготовки перехода и собственно перехо- да, Команда подготовки перехода ставится на несколько тактов раньше ветвления. По ней находится в ассоциативном БК адрес перехода. Если такого в БК нет, то организуется подкачка в него участка программы с этого адреса. Команды с адреса перехода поступают на дополнительный буфер дешифрации команд, т. е. на дополнительный конвейер. Так начи- нают выполняться обе ветви в режиме условного выполнения. При вы- полнении условия по самой команде перехода без задержки продолжает- ся выполнение нужной ветви. Память предикатов применяется для минимизации числа условных переходов при выполнении условных арифметических выражений. Она позволяет хранить значения булевых переменных, полученных при про- верке условий. Планирование альтернативных действий может выпол- няться в спекулятивном режиме. Это означает, что в команде может ука- зываться имя булевой переменной. Операция может быть выполнена, ес- ли значение этой переменной равно 1. В противном случае ее выполне- ние либо пропускается, либо — в зависимости от принятых условий — в режиме «жужжания» ожидается (например, при считывании) присваива- ние этой переменной значения 1.
Лекция 6. Оптимальное потактовое расписание выполнения работ в многофункциональном арифметическо-логическом устройстве Рассматривается проблема составления потактового расписания рабо- ты процессора, управляемого в каждом такте. Компоновка «длинных» ко- мандных слов производится на завершающей стадии трансляции и харак- терна для суперскалеров VLIW- и ЕР/С-архитектуры. Освещаются как не оптимизированная, «быстрая», компоновка, так и компоновка, использую- щая решающие правила на основе исследования графа работ внутри непре- рываемого участка программы. При компоновке учитываются и команды ви- да if-then-else, не использующие условный переход. Ключевые слова: суперскалер, «длинное» командное слово, статиче- ское распараллеливание, диспетчер, NOP — отсутствие операции, информационный граф, поздние сроки начала выполнения, объем последующих работ. 6.1. Задача оптимальной компоновки «длинных» командных слов Под суперскалером будем понимать центральный процессор (ЦП) вычислительной системы (возможно, многопроцессорной), не выпол- няющий векторных операций по одной команде, но использующий все современные способы достижения максимальной производительности. В частности, его арифметическо-логическое устройство (АЛУ) содержит несколько конвейерных исполнительных устройств (ИУ), специализиро- ванных по типам операций. Программирование работы таких АЛУ тре- бует выявления параллелизма и составления расписания загрузки ИУ в каждом машинном такте. Это приводит к модели «длинного» командно- го слова (VLIW-архитектура), где каждая позиция слова соответствует ин- струкции для соответствующего ИУ. Конечно, программный код должен отражать сжатие информации, и окончательный вид программы реализу- ет переменную длину командного слова (как в 2ГР/С-архитектуре). Такая перекомпоновка «длинных» командных слов, как промежуточной фор- мы представления параллельного расписания, не представляет серьезных трудностей, ибо рутинная перекодировка не связана с решением слож- ных оптимизационных задач. Потактовое расписание должно быть полу- чено, для какой бы архитектуры оно не предназначалось.
Развитие ВС сопровождается возложением многих функций управ- ления на аппаратуру, т. е. усложнением схем, но развивается и встречная тенденция — априорного планирования параллельного процесса, возло- жения таких функций на транслятор. Транслятор планирует оптимальное использование каждого ИУ. То есть традиционные функции транслятора дополняются функциями диспетчера — оптимизатора, формирующего на уровне машинного языка «длинные» командные слова. Структура «длинного» командного слова в ВС, где управление про- изводится каждым тактом машины, такова: | инструкция ИУ1 | инструкция ИУ2 |......| инструкция ИУп | ИУ могут быть следующих типов: сложения, умножения, деления, логических операций, связи с ОП, оперативного обмена ИУ-ИУ и др. Поиски подходов к решению задачи статического распараллелива- ния на этапе трансляции с неизбежностью приводят к имитации динами- ки выполнения параллельной программы. Эта неизбежность обусловлена высокой (экспоненциальной) сложностью точного решения задач распа- раллеливания, их высокой размерностью, необходимостью учета многих особенностей вычислительного процесса. Таким образом, целесообразно использовать эвристические методы распараллеливания, применяемые при диспетчировании ВС. Именно на этом пути эффективно использу- ются простые алгоритмы диспетчеров параллельных ВС, при ограниче- ниях лишь на способ представления оптимального расписания. В то же время «статический подход» значительно расширяет возможности рас- параллеливания, допуская различную степень приближения расписаний к точным оптимальным. Возможно «быстрое» построение расписаний, более отстоящих от точных минимальных, а возможен глубокий анализ, вплоть до применения методов точного решения задач распараллелива- ния. Ниже мы представим конкретные алгоритмы, в интересах обобще- ния — наименее обусловленные детальным рассмотрением особенностей системы команд ВС. 6.2. Два подхода по скорости и «оптимальности» Сделаем сразу же предположение, основанное на анализе целесооб- разного подхода: все методы, приемы и алгоритмы распараллеливания, которые рассматриваются для случая динамического распределения ре- сурсов и составления расписаний, их (ресурсов) оптимального исполь- зования, должны быть эффективно применены для распараллеливания в статическом режиме, т. е. вне времени выполнения программы.
Представим общую схему распараллеливания алгоритма, записан- ного в виде программы на некотором алгоритмическом языке (рис. 6.1). Поскольку нас интересует статическое распараллеливание, мы по возможности ликвидируем фактор динамического выявления выполня- емой ветви алгоритма. Тогда формирование потока выполняемых команд (макрокоманд) трансформируется в последовательное выделение линей- ных участков программы (блок 1). Известно, что основная проблема распараллеливания заключается в необходимости соблюдения частичной упорядоченности работ, синхро- низации выполнения тех работ, для которых задан порядок следования, обусловленный преемственностью информации. Обнаружение этой свя- зи операций должно быть простым и однозначно следующим из формы представления алгоритма. Это значит, что программа линейного участка должна быть переписана так, чтобы облегчить выявление взаимно неза- висимых работ, или, наоборот — взаимосвязанных работ. Но может ока- заться целесообразным, чтобы такая взаимосвязь выявлялась и описыва- лась отдельно. Все это и отражает на схеме блок 2. Ниже мы покажем, что достаточно эффективным представлением линейного участка программы служит ПОЛИЗ — польская инверсная за- пись, фактически представляющая собой программу в безадресных ко- мандах. Получение такой записи является естественным промежуточным результатом трансляции. Следующие блоки приведенной схемы отражают технологию непо- средственной компоновки командных слов линейного участка програм- мы на основе имитации выполнения работ в ЦП и действий диспетче- ра, который динамически назначает новые работы для выполнения. Ко- мандные слова — форма представления задаваемого им расписания. Здесь и кроется возможность воплощения различных компромиссных спосо- бов диспетчирования — по быстродействию и по степени приближения расписаний к точным минимальным. Как каждый имитационный процесс, процесс динамического дис- петчирования оперирует модельным временем — счетчиком тактов рабо- ты ВС. Увеличивая модельное время на такт, мы устанавливаем состояние ИУ ЦП, выполняющих назначенные им ранее операции, в настоящий момент времени (блок 3). При этом нас интересуют те работы, выпол- нение которых закончилось (блок 4) — ведь частичная упорядоченность задач обусловлена именно тем, что выполнение одних работ «разрешает» начало выполнения других. Поэтому в блоке 5, с учетом закончившихся работ, выявляются все те задачи (часть их могла остаться с предшествующих шагов составления расписания), которые могут быть начаты в данном текущем такте рабо-
НАЧАЛО КОНЕЦ Рис. 6.1. Схема компоновки «длинных» команд
ты ЦП. Однако множество таких работ может оказаться и пустым. Тогда, если ЦП обладает такими средствами синхронизации, которые позволя- ют ждать возможности выполнения операций до появления необходимых аргументов, можно перейти к анализу состояния ИУ ЦП в следующем такте, отметив, что в данном такте задание отсутствует (NOP — отсут- ствие операций). Такая синхронизация в «Эльбрус-3» производится при считывании в регистры СОЗУ: с помощью битов значимости. Если в ВС подобная синхронизация не предусмотрена, то формируемая программа в явном виде будет обладать «дырками», соответствующими NOP’aM, или специальным указанием на их количество. Блок 6 принципиально важен. Именно в нем реализуется основное решающее правило назначения работ для их выполнения, т. е. — опти- мизированное назначение. Существует некоторое количество хорошо за- рекомендовавших себя на практике решающих правил, использующихся при диспетчировании параллельных ВС. Одно из них статистически обосновано и применимо для однород- ных ВС: «Из множества работ, выполнение которых можно начать в дан- ный момент времени, в первую очередь назначать работу с максималь- ным временем выполнения». Однако мы рассматриваем модель неоднородного АЛУ ЦП, и будем пользоваться в порядке приоритета следующими решающими правила- ми: «Из множества работ, выполнение которых можно начать в данный момент времени, в первую очередь назначать работу с минимальным из максимальных сроков начала выполнения». Если этому главному критерию соответствует не единственная рабо- та, то мы будем пользоваться для назначения таких работ дополнитель- ным правилом: «Из множества работ с одинаковым значением главного критерия назначения в первую очередь назначать задачу с максимальным суммарным временем выполнения работ, включающим саму работу и все те задания, которые ей следуют непосредственно или транзитивно в со- ответствии с частичной упорядоченностью». Рассматривая пример, мы поясним сказанное, а сейчас отметим, что отсутствие оптимизации есть также оптимизация, ибо ускоряет реше- ние задачи в целом. Т. е. мы можем при компоновке командных слов не пользоваться никаким критерием назначения, никаким решающим пра- вилом. Это значит, что мы будем в этом случае компоновать командные слова в произвольном порядке выявления тех работ, которые можно на- значать, и в соответствии с составом ИУ. Такая постановка задачи также правомочна и требует специального исследования методом моделирова- ния. Мы предварительно разберем ее на примере.
Именно исходя из сказанного, можно говорить о компромиссе меж- ду скоростью компоновки и степенью ее оптимальности. Блок 7 отражает способ формирования расписания работы устройств АЛУ в анализируемом такте, тот способ, который нас интересует, — в ви- де командного слова. В блоке 8 обеспечивается возможность дальнейшего наблюдения за выполнением начавшихся работ, имитации времени и ожидания момен- тов окончания их выполнения исполнительными устройствами — для возможности дальнейшего распараллеливания или его окончания. 6.3. «Быстрая» компоновка «длинных» командных слов Рассмотрим пример счета значений выражений операторов присва- ивания, составляющих линейный участок программы. Пусть линейный участок программы соответствует счету следующих выражений: А := ab — cd\ В := if (А : х > О V --+ Ц- > 0) then (а2 + tyd : 2 else с~ < (6.1) if (А — I: d) > 0 then Q~*~ С else у, с — d о + d С := (А + В) : ex ifa>b then a elseb. Составим план загрузки ИУ, не вдаваясь в частные особенности си- стемы команд. Т. е. мы сначала произведем компоновку «длинных» ко- мандных слов на основе совместно выполняемых операций, но не команд. Особенности системы команд могут потребовать «размножения» неко- торых полученных командных слов с учетом необходимости подготови- тельных операций засылки в регистры, передачи данных между ИУ и др. Но это уже не повлияет на результат произведенного распараллеливания выполнения операций, а будет служить только его обслуживанию. Запишем программу выполнения линейного участка (6.1) в ПОЛИЗ: ab х cd х — => А; if Ах : 0 > da : +cd— : 0 > V then а2 | b 4- d х 2 : else if Aid : —0 > then ad + c x cd— : (6.2) elseac + bd+ :=> B; AB + c : ifab> then a elsebx => C.
Предположим, что все данные, необходимые для выполнения ли- нейного участка, первоначально находятся в ОП. Тогда очевидно, что для минимизации потерь времени на считывание неоднократно используе- мых данных из ОП в СОЗУ и для того, чтобы ускорить использование данных в производимых над ними операциях, с учетом низкой скорости работы ОП по сравнению со скоростью работы операционных устройств, необходимо считывание из ОП, обусловленное цепочками имен, произ- водить в следующем порядке. Цепочки имен надо просматривать слева направо (рассматривая за- пись (6.2) как линейную). Внутри же каждой цепочки считывание по име- нам (по адресам данных, возможно, найденным на основе переменных с индексами) надо производить справа налево, — для скорейшего начала выполнения цепочек операций, следующих за цепочками имен. С учетом этого замечания, составим информационный граф G сче- та данного линейного участка. При этом количество тактов выполнения каждой операции (кроме считывания, где время — случайная величина, принадлежащая известному диапазону) считаем заданным. Веса — вы- бранное для примера время выполнения операций — сопровождают вер- шины в графе. Ярусно-параллельная форма информационного графа наглядно по- казывает возможность поярусного распределения информационно неза- висимых работ между ИУ для их одновременного выполнения. Однако такое выполнение в общем случае сдерживается реальной картиной ди- намической загрузки ИУ, которая обусловлена разным временем выпол- нения операций, объемом работ, предшествующих выполнению каждой конкретной операции. Поэтому распределение заданий и формирование на его основе командных слов должно быть не поярусным, а определять- ся в динамике имитации работы ИУ Можно имитировать выполнение линейного участка на стеке, как это приводилось в лекции 4. Однако там это рассматривалось в рамках одного оператора присваивания и в динамике действительного выпол- нения. Линейный участок при статическом анализе, как в примере, мо- жет содержать несколько таких операторов. В таком случае вводится до- полнительный существенный элемент частичной упорядоченности ра- бот, который необходимо использовать при программировании совмест- ного выполнения операторов присваивания. В нашем примере значение А — результат выполнения первого опе- ратора присваивания используется при счете второго и третьего операто- ров присваивания. То же касается значения В. Это налагает ограничения на порядок выполнения операторов присваивания, требует синхрониза- ции их параллельного выполнения. Ведь при составлении информаци-
онного графа, определяя последовательность операций считывания, мы пропустили считывание А и В, т. к. ясно видим, пока не формально, что эти величины не считываются, а рассчитываются. Информацию об этом надо как-то «сообщить» компоновщику командных слов. То есть мы пока не выделили в формальном виде всей информации о частичной упорядо- ченности работ, содержащихся в линейном участке программы. Целесообразно применить уже проверенный (реализованный в «Эльбрус-2») способ трансляции программы линейного участка, запи- санного в ПОЛИЗ, — в программу в трехадресных командах. Такие ко- манды соответствуют законченным операторам выполнения одно- и дву- местных операций и содержат лаконичную, но полную информацию о порядке использования и преобразования данных, в том числе — общих. Воспользуемся изложенным в лекции 4 алгоритмом перевода про- граммы из ПОЛИЗ в трехадресные команды, следуя приведенным выше рекомендациям относительно считывания. Однако с учетом многоразо- вого использования некоторых величин придется расширить и возмож- ности использования списка свободных регистров, изменить алгоритм назначения отмеченных в нем регистров. Снабдим этот список таблицей соответствия — указанием, какой регистр какой величине соответству- ет. Эту таблицу будем составлять при формировании команд начального считывания из ОП. Для исключения повторного считывания при анализе других линей- ных участков, может быть организована преемственность указанных та- блиц соответствия. То есть в общем случае можно считать, что такая та- блица уже существует и ее необходимо только уточнить. Алгоритм формирования трехадресных команд. 1. Для формирования группы команд начального считывания из ОП, выпишем в обратном порядке все цепочки имен, отделив их одну от другой и исключив из них имена констант и переменных, встречающихся в таблице соответствия или которым присваивается новое значение, т. е. находящимся правее знака => . В примере такая запись имеет вид ba; de; х; ale; de; a; b; d; dl; da; с; de; са; db; с; ba; a; b. (6.3) 2. Исключая повторный анализ, сформируем последовательно ко- манды считывания по первым именам каждой цепочки. Формирование каждой команды считывания производим по правилу: в слове с соответствующим кодом операции по первому адресу за- писываем адрес данной величины в ОП (с учетом индексирования пере- менной), по третьему адресу указываем очередной используемый адрес регистра из списка свободных регистров. В таблицу соответствия запи- сываем строку, отмечающую место хранения считанной величины для ее
использования в линейном участке как локальной величины. Корректи- руем список свободных регистров, соответственно, на количество вновь занятых регистров, увеличив размер D использованной области. Примечание. Оперируя адресами величин, мы, конечно же, имеем в виду математические адреса, однако предполагаем их принадлежность ОП или СОЗУ. Продолжая рассмотрение примера, приступим к формированию программы в трехадресных командах. Окончательный результат пред- ставлен в таблице 6.1. Команды 1-5 — сформированная группа команд считывания при первом выполнении данного шага алгоритма. Исключаем имена, использованные в сформированной группе ко- манд считывания, из вспомогательной записи (6.3). В нашем примере по- лучим запись /;/. (6.3) 3. Повторяем выполнение шага 2 до исчерпания вспомогательной записи. При втором выполнении шага 2 в примере сформируется команда 6. 4. На основе таблицы соответствия адресов произведем подстановку в программу на ПОЛИЗ вместо имен — адресов соответствующих вели- чин в СОЗУ. 5. Просматриваем слева направо цепочки операций. Если в цепочке имен, стоящей перед первой операцией в анализируемой цепочке, есть хотя бы одно имя - для одноместной операции, и хотя бы два имени — для двуместной, и оба имени уже являются адресами из использованного диапазона (1 - D) списка свободных регистров (Аи В в нашем примере не скоро будут заменены таким адресом), формируем трехадресную команду по следующим правилам: а) записываем код операции; б) по первому адресу команды записываем первый справа адрес в предшествующей цепочке имен, если операция одноместная, или второй справа адрес, если операция двуместная; в) по второму адресу команды записываем первый справа адрес в предшествующей цепочке имен — для двуместных операций; г) по третьему адресу пишем первый адрес из списка свободных ре- гистров, включив его в диапазон использованных адресов, D := D + 1. Заменяем использованную комбинацию «операция плюс два (одно) имени из предшествующей цепочки имен» на адрес результата этой опе- рации, т. е. третий адрес команды. В нашем примере величины b, d, ж, а, с, I находятся соответственно в регистрах Г1,г2,гз,г4,г5,гб. Тогда могут быть сформированы 11 ко- манд 7—17, результаты выполнения которых будут находиться в регистрах
г? — ri?- Исходная запись программы в ПОЛ ИЗ примет вид Г7Г8— => А; ifAx : 0 > сг$ + Рю : 0 > V then гцЬ + d х 2 : else (6.5) if Аг ±2 - 0 > thenr^c х r14 : elser^r^ :=> В; АВ + с : ifr17 then a elsebx => С. 6. Если => — первая операция в цепочке операций и предшествую- щее имя принадлежит диапазону D и представляет собой выродившуюся запись оператора присваивания, то трехадресная команда записи форми- руется по следующим правилам: а) по первому адресу пишется адрес — последнее имя из предше- ствующей цепочки имен; б) по третьему адресу пишется адрес рассчитанной величины в ОП. Производится замена имени данной величины в текущем виде запи- си программы на адрес регистра, в котором она получена. Породившая же команду конструкция из записи исключается. 7. Если найден разделитель if и после него, и после последующих разделителей then и else стоят по единственному имени, в двух словах фор- мируется четырехадресная команда if-then-else. В ней по адресу записи (у нас — по третьему адресу первого слова) записывается первый адрес из списка свободных регистров (с коррекцией значения £>), по первому ад- ресу первого слова записывается адрес условия, по вторым адресам — ад- реса альтернатив. Конструкция if-then-else в записи программы заменяет- ся сформированным адресом результата. Описание алгоритма закончено. Мы продолжим рассмотрение примера компоновки трехадресных команд, начатое параллельно с описанием алгоритма. При следующем просмотре записи на ПОЛИЗ сформируются ко- манды 18—23 и запись примет вид Г18 => A; if ах : 0 > Г19Г9 : 0 > V then r2odx : 2 else if Arц — 0 > thenr^^r^ : elser22 => B; (6.6) AB + c : r23 x => C. Теперь формируются следующие шесть команд, и запись принимает вид (/Г24О > Г25О > V thenr^Z: elseifr^Q > then (6.7) Г28 else if Г22 => B\ r^B + с : Г23 x => C. Аналогично формируются команды 30-33, в результате чего за-
пись (6.7) преобразуется if Г29Г30 V then Г31 else if r32 then Г28 else Г22 B\ risB + с : Г23 x => C. Затем формируются команды 34 и 35, и запись (6.8) обретает вид ifr33 then гы else гм => В; Г1&В + с : Г23Х => С. Затем формируется команда 36, и запись принимает вид Г35 => В; ^18^35^ + с : Г23Х => С. Аналогично формируются остальные команды. Для дальнейшего рассмотрения компоновки «длинных» командных слов необходимо выбрать структуру таких слов, обусловленную составом ИУ в АЛУ процессора. Для определенности, но во избежание громоздких построений, будем считать, что АЛУ содержит два ИУ сложения, одно — умножения, одно — деления и одно — логическое. Времена выпол- нения операций мы выбрали при построении информационного графа (рис. 6.2). Таким образом, «длинное» командное слово содержит пять по- зиций, каждая из которых жестко связана с одним ИУ. Первые две пози- ции соответствуют ИУ сложения, а далее — в том порядке, как перечис- лено выше. Формирование «длинных» командных слов, осуществляющих счи- тывание, не представляет интереса. Здесь в еще большей степени все определяется конкретной структурой команды. Для краткости изложе- ния мы даже можем считать, что считывание указывается во всех по- зициях команды, допуская одновременный «запуск» нескольких считы- ваний. Напомним, что асинхронное выполнение считываний, обуслов- ленное множеством возможных конфликтов при обращении процессо- ров многопроцессорной ВС к расслоенной оперативной памяти, в МВК «Эльбрус-3 (ЗМ)» синхронизируется с помощью битов значимости тех ре- гистров СОЗУ, в которые эти считывания производятся. Так что обработ- ка считываемых данных будет правильной и возможной только по по- ступлении данных в эти регистры. Выше говорилось, что компоновка командных слов производится на фоне имитации выполнения команд. В лекции 3 показано, каким образом на основе трехадресных ко- манд можно установить их частичную упорядоченность. Там приводится
Таблица 6.1 № КОП ^1 А2 Аз а Счетчик (1-й такт) Счетчик (2-й такт) Счетчик (3-й такт) 1 Сч <ь> Г1 2 Сч <d> ?2 3 Сч <х> Гз 4 Сч <а> Г4 5 Сч <с> Гб 6 Сч <z> Гб 7 X П Г1 Г7 1 5 4 3 8 X Г2 Г8 1 5 4 9 • Гб Г4 Г9 1 7 6 5 10 - Гб Г2 По 1 3 2 1 11 т Гд 2 Гц 1 5 12 • Гб Г2 Г12 1 7 6 13 + Г2 Г13 1 3 2 1 14 - Гб Г2 Г14 1 3 2 15 + Г4 Гъ П5 1 3 2 16 + Г1 Г2 Г16 1 3 17 > Г4 Г1 Г17 1 2 1 Исключ. 18 - Г7 Г8 Г18 19 + Гб Г9 Пэ 20 + гц Г1 Г20 21 X ИЗ Гб Г21 22 Г1б Г1б Г22 23 If... Г17 Гд Из 2 Г1 24 Зп Г18 <А> 25 • П8 гз Г24 26 :ri9 ПО Г25 27 X Г2О Г2 Г26 28 - П8 Иг Г27 29 • Г21 Г14 ?23 30 > Г24 Г29 31 > Г25 По 32 • Г26 2 Г31
Таблица 6.1. Продолжение № КОП Ai A2 A3 a Счетчик (1-й такт) Счетчик (2-й такт) Счетчик (3-й такт) "33 > Г27 Г32 34 A Г29 Г30 Гзз 35 If... Г32 Г28 Г34 Г22 “36 If... ГЗЗ Г31 Г35 Г34 37 3n Г35 <B> 38 + П8 Г35 Г36 39 . Г36 Г5 Г37 40 X Г37 Г23 Г38 41 3n Г38 <0 система предикатов, установление истинности которых позволяет выяв- лять динамически те команды, которые могут выполняться одновремен- но. Однако способ формирования трехадресных команд, сопровождаю- щий действительное их выполнение, значительно сложнее того, который мы рассмотрели здесь и который ориентирован на последующий стати- ческий анализ. Действительно, взаимный анализ команд (каждой «ниж- ней» по отношению ко всем «верхним») при рассмотренном способе рас- пределения быстрых регистров может быть ограничен лишь проверкой на несовпадение первого и второго адресов каждой команды с третьи- ми адресами всех команд, находящимися выше этой. Если совпадения нет, такая команда может выполняться немедленно, и на основе несколь- ких таких команд может формироваться очередное «длинное» командное слово. Значит, определение трехадресных команд, на основе которых мо- жет формироваться командное слово, производится в результате выявле- ния в каждом такте команд i е 1, ..., N, (N — длина линейного участка), для которых имеет значение «истина» (с^ = 1) предикат Q1 = 1 Q2 = Д21 V А22 / А13 ................................... (6.11) Qi = Ай V Ai2 / Ai3 V А23 V ... V Ai-1,3
Рис. 6.2. Граф-схема непрерываемого участка программы Выявленные команды со значением оц = 1, и использованные при компоновке командного слова, как бы начинают выполняться. Для ими- тации этого выполнения эти команды снабжаются счетчиком тактов вы-
полнения. Этот счетчик сначала «взводится» — ему задается время вы- полнения команды. Затем, при имитации состояния системы в последу- ющих тактах, значения таких счетчиков уменьшаются, и по достижении нулевого значения команда исключается из рассмотрения — из первона- чально полученного текста в трехадресных командах. Это служит изме- нению результатов сравнения в (6.11) при анализе оставшихся команд, появлению новых команд, на основе которых могут формироваться ко- мандные слова, и т. д. Алгоритм 1 компоновки «длинных» командных слов. 1. Формируем группу команд считывания. Исключаем команды счи- тывания из записи программы в трехадресных командах. 2. Полагаем t = 0 (t — модельное время, номер такта). 3. Полагаем t := t+1. Приступаем к компоновке очередного команд- ного слова. Если это слово — первое, переходим к выполнению шага 6. 4. Уменьшаем на единицу значения всех счетчиков времени команд, ранее назначенных (условно) на выполнение, т. е. включенных в команд- ные слова ранее. 5. Исключаем из записи программы в трехадресных командах те ко- манды, для которых значения счетчиков стали нулевыми. 6. Пересчитываем для всех команд значения а по (6.11). 7. Выполняем непосредственно компоновку очередного командного слова, стремясь заполнить все его позиции: Записываем в первую позицию команду сложения, если такая есть среди команд со значением а = 1 и она ранее не была «назначена» (не имеет отличного от нуля значения счетчика). В случае успешной записи «взводим» ее счетчик тактов выполнения. То же пытаемся сделать с каждой позицией «длинного» командного слова. Возможно получение «пустых» командных слов, требующих пропус- ка такта (NOP — no operation) из-за неготовности операндов. 8. Проверяем: есть среди команд в программе не назначенные ко- манды? Если да — переходим к выполнению шага 2, если нет — компо- новка «длинных» командных слов линейного участка закончена. Описание алгоритма закончено. Пропустим формирование команд считывания в рассматриваемом примере. Эти команды отчеркнуты в таблице 1 как уже условно выпол- ненные. Легко определить а7 = а8 = ... = ai7 = 1 (наглядно отображено графом). Тогда первое командное слово имеет вид 1 .| 10 | 13 I 7 I 9 I 17 I Здесь мы для краткости не переписываем всю команду, а ставим лишь номер ее трехадресного эквивалента в таблице 1.
Взводим счетчики числа тактов выполнения использованных («на- значенных») команд, как показано в той же таблице. Компонуем второе командное слово, уменьшив значения всех счет- чиков на единицу, но не достигнув при этом времени окончания выпол- нения каких-либо команд, т. е. пользуясь тем же множеством ранее выде- ленных команд: 2 .| 14 | 15 | 8 | 12~| | В третьем такте исключается команда 17, т. к. ее счетчик достигает нулевого значения. Появляется новое значение агз = 1- Формируемая «длинная» команда имеет вид 3 .| 16 I I 11 I ~[~23~| В следующем такте исключим из программы (табл. 3.1) команды 10 и 13 (команда 17 исключена ранее, а команды 1—6 мы отказались рассмат- ривать подробно). Новый вид используемой программы в трехадресных командах отобразим таблицей 6.2, из которой исключены строки, остав- шиеся без изменения. Появились две «не назначенные» команды со значением а2о = a2i = 1. Тогда следующее командное слово имеет вид 4 .| 20 | | 21 | ~| | В следующем такте исключаются команды 14,15 и 23. Новые значе- ния а и счетчиков отражены в таблице 6.3, где также исключены не изме- нившиеся строки. Не появилось ни одной новой команды со значением а = 1. Значит, следующая команда — пропуск такта: 5-1 I I I I П В следующем такте исключим из рассмотрения команды 7 и 16 и т. д. Окончательно скомпонованная программа, начиная с шестого ко- мандного слова, представлена таблицей 6.4. «Пустые» команды — про- пуски тактов — пропущены. К сожалению, наш пример, продемонстрировав трудности компо- новки «длинных» командных слов, не лежит в русле бурной агитации за применение таких слов. Программа оказалась слишком длинной и весь- ма «разреженной», и никакая архитектура (в том числе EPIC) не скроет факта малой загрузки ИУ. Рекомендации для такой ситуации изложены ниже. • Считать в такой структуре следует действительно сложные, но рас- параллеливаемые выражения.
№ коп -41 Аг Аз а Счетчик (4-й такт) Счетчик (5-й такт) 7 X Т4 Г1 т7 1 2 1 8 X Г5 Г2 Г8 1 3 2 9 . Гб Г4 гд 1 4 3 11 т Г4 2 Гц 1 4 3 12 • Гб Г2 П2 1 5 4 14 - Гб Г2 П4 1 1 0 15 + Г4 Гб Пб 1 1 0 16 + Г1 Г2 Г1б 1 2 1 18 - Г7 Г8 Г18 19 + Гб Гд rig 20 + ГЦ Г1 Г20 1 3 2 21 X ПЗ Гб Г21 1 5 4 22 • Г1б Пб Г22 23 If... Г17 Г4 Г23 1 0 Г1 24 Зп Г18 <А> ... • Необходимо стремиться к одновременному счету многих независи- мых выражений. Хорошей основой для эффективного использова- ния оборудования является счет условий и альтернативных опера- торов в условных выражениях, а также — сложных конструкций на базе таких выражений. 6.4. Оптимизированная компоновка «длинных» командных слов При оптимизированной компоновке «длинных» командных слов необходимо более полно задавать информацию о частичной упорядочен- ности работ, обусловленной графом на рис. 6.2. То есть необходимо ис- пользовать полное описание этого графа. При решении задач параллель- ного программирования для этого используются квадратные (размер т равен числу трехадресных команд линейного участка) нуль — единичные матрицы следования S, дополненные столбцами весов — времен выпол-
Таблица 6.3 № коп А1 А2 АЗ а Счетчик (5-й такт) Счетчик (6-й такт) 7 X Г4 Г1 г7 1 1 0 8 X Г5 Г2 Г8 1 2 1 9 Гб Г4 Г9 1 3 2 11 т Г4 2 Гц 1 3 2 12 • Гб Г2 Г12 1 4 3 16 + Г1 Г2 Г1б 1 1 0 18 - Г7 Г8 Г18 19 + Гб Г9 Г19 20 + Гц Г1 Г20 1 2 1 21 X Г13 Гб Г21 1 4 3 22 • Г15 Г1б Г22 24 Зп Г18 <А> ... Таблица 6.4 № «4-» «+» «X» «:» ЛОГ 6. 18 22 7. 27 8. 19 9. 28 21 25 24 10. 26 11. 29 12. 33 16. 30 17. 32 31 19. 34 21. 35 23. 36 25. 38 37 28. 39 34. 40 40. 41
нения работ. Такая матрица для нашего примера представлена на рис. 6.3. При этом работы, отраженные в графе, мы заменили номерами соответ- ствующих трехадресных команд в таблице 6.1. Иначе говоря, мы можем забыть про изображение графа, а воспользоваться лишь программой в трехадресных командах. NB ь* со а> о 7 CXJ со £ ю со £ со а> 8 ст 8 Я ст ю СТ со СТ ст со СТ 8 ст ст СТ ст 8 3 8 8 ст 8 8 $ t г 9 7 0 5 98 46 8 0 5 98 46 9 0 7 96 40 10 0 3 103 33 11 0 5 97 39 12 0 7 103 33 13 0 3 100 36 14 0 3 105 31 15 0 3 105 31 16 0 3 105 31 17 0 2 125 10 18 1 1 0 3 103 41 19 1 0 3 103 33 20 1 0 3 102 34 21 1 0 5 103 33 22 1 1 0 7 108 28 23 1 0 2 127 8 24 1 0 1 134 1 25 1 0 7 106 30 26 1 1 0 7 106 30 27 1 0 5 105 31 28 1 1 0 3 110 26 29 1 1 0 7 108 28 30 1 0 2 113 23 31 1 0 2 113 23 32 1 0 7 110 26 33 1 0 2 113 23 34 1 1 0 2 115 21 35 1 1 1 0 2 115 19 36 1 1 1 0 2 117 19 37 1 0 1 134 1 38 1 1 0 3 119 16 39 1 0 7 122 13 40 1 1 0 5 129 6 41 1 0 1 134 1 Рис. 6.3. Матрица следования Тогда, по аналогии с (6.11), если при совместном анализе двух ко- манд (г-й и j-й, i > j) первый или второй адрес «нижней» команды совпадает с третьим адресом «верхней» команды, то элемент матрицы S
на пересечении г-й строки и j-ro столбца полагается равным единице (ptij = 1), в противном случае он равен нулю. Матрица следования ациклических графов всегда, выбором нумера- ции работ, может быть сведена к треугольной, что показано на рисунке выделением диагональных элементов. Чтобы установить приоритеты работ для оптимизации расписания их выполнения, выберем значение времени, заведомо не меньшее време- ни их совокупного выполнения. Таким временем может быть суммарное время выполнения всех работ линейного участка или длина критического пути. Выбрав необходимую верхнюю оценку времени выполнения линей- ного участка, рассматривая эту оценку как директивный срок, найдем поздние сроки начала выполнения работ. Алгоритм нахождения этих сро- ков и алгоритм нахождения суммарного объема работ, следующих каждой работе (будем называть такой объем работ объемом последующих работ), приведены ниже. Алгоритм нахождения поздних сроков начала выполнения ра- бот по треугольной матрице следования. 1. Производим циклический обзор справа налево столбцов матри- цы S, пусть j — очередной из необработанных еще столбцов. Если все столбцы обработаны, выполнение алгоритма заканчивается. 2. Если j-й столбец не содержит единичных элементов, полагаем TjV(T) = Г. Переходим к выполнению шага 1. 3. Если j-й столбец содержит единичные элементы, выбираем эле- менты Tj(T) множества {rj+i(T), ..., тт(Т)}9 соответствующие номерам единичных элементов j-ro столбца. 4. Полагаем Tj(T) = min{rjV(T)} - tj. Выполняем шаг 1. Описание алгоритма закончено. Алгоритм нахождения объемов (07) последующих работ. Этот алго- ритм содержит две части. В первой части производится дополнение мат- рицы следования всеми транзитивными связями, позволяющими зафик- сировать полную фактическую упорядоченность работ. Вторая часть со- держит нахождение указанных объемов. Алгоритм нахождения транзитивных связей. 1. Организуем просмотр сверху вниз строк матрицы следования S. 2. В очередной г-й строке организуем просмотр элементов в порядке увеличения j номеров столбцов, j < i. 3. Если (г, J) = 1, изменяем строку i ее сложением со строкой j по операции дизъюнкции. Алгоритм нахождения объемов работ.
1. Организуем просмотр справа налево столбцов j матрицы следова- ния S. 2. Находим множество {г} единичных элементов j-ro столбца. На- ходим tj. г Описание алгоритма закончено. На рис. 6.3 даны значения величин, найденные по приведенным ал- горитмам, однако транзитивные связи не указаны, чтобы избежать загро- мождения рисунка. Теперь можем считать, что сформирована вся исходная информация для оптимизированной компоновки «длинных» командных слов. Алгоритм 2 оптимизированной компоновки «длинных» командных слов. 1. Формируем группу команд считывания. Исключаем команды счи- тывания из записи программы в трехадресных командах. 2. Полагаем t = 0 (t — модельное время, номер такта). 3. Полагаем t := t + 1. Приступаем к компоновке очередного ко- мандного слова. 4. Уменьшаем на единицу значения всех счетчиков времени команд, ранее назначенных (условно) на выполнение, т. е. включенных в команд- ные слова ранее. Если назначения команд еще не было, переходим к ша- гу 6. 5. Исключаем из матрицы следования S строки и столбцы, соответ- ствующие тем трехадресным командам, для которых значения счетчиков стали нулевыми. 6. Находим множество R нулевых строк матрицы следования S, со- ответствующих некоторой группе трехадресных команд с нулевыми зна- чениями счетчиков времени выполнения (т. е. не назначенных ранее). 7. Выполняем непосредственно компоновку очередного командного слова, стремясь заполнить все его позиции: записываем в первую позицию команду сложения с максимальным значением среди подобных команд сложения в R. Если с таким значе- нием имеется более одной команды, из них выбирается команда с мак- симальным значением в. В случае успешной записи, «взводим» счетчик тактов выполнения «назначенной» команды. Команду исключаем из R. То же пытаемся сделать с каждой позицией «длинного» командного слова. Возможно получение «пустых» командных слов, требующих пропус- ка такта (NOP — по operation) из-за неготовности операндов. 8. Проверяем: S = 0 A R = 0? Т. е. не остались ли не «назначенные» команды? Если остались — переходим к выполнению шага 2, если нет — компоновка «длинных» командных слов линейного участка завершена.
Описание алгоритма закончено. Сведем в таблицу 6.5, по тактам выполнения, действия процесса формирования программы в «длинных» командных словах по рассмат- риваемому примеру. «Взведение» счетчиков отмечает те такты — номера «длинных» команд, — которым эти команды соответствуют. Для кратко- сти не будем каждый раз изображать изменяющуюся матрицу следова- ния, приведенную на рис. 6.3 в первоначальном виде, со всей сопутствую- щей информацией. Сформированная программа в «длинных» командных словах приведена в таблице 6.6. Начальная пересылка данных опущена. Оптимизированная программа, как и программа, полученная в ре- зультате «быстрой» компоновки, в нашем примере планирует 40 тактов процессора. Специально выбран пример с высокой связностью работ, чтобы проверить правильность алгоритмов. Любая архитектура выявля- ет возможность распараллеливания лишь в том случае, если эта возмож- ность существует.
Таблица 6.5 Такты 1 2 3 4 5 6 7 8j9|10|11|12|13|14|15|16|17|18|19| 20 7 5 4 3 2 1 0 Исключение строки и столбца из матрицы S 8 5 4 3 2 1 0 Исключение ... 9 7 6 5 4 3 2 1 0 Исключение ... 10 3 2 1 0 И включение ... 11 5 4 3 2 1 0 Исключение ... 12 7 6 5 4 3 2|1|0|Исключение ... 13 3 2 1 0 И сключение ... 14 3 2 1 0 Исключение ... 15 3 2 1 0 Исключение ... 16 3 2 1 0 Исключение ... 17 2 1 0 И включение ... 18 3 2 1 0 | Исключение ... 19 3 2 1 0 Исключение ... 20 3 2 1 0 Исключение ... 21 5 4 3 2 1 0 Исключение ... 22 7 6 5 4 3 | 2 | 1 | 0 | Исключение ... 23 2 1 0 И сключение ... 24 1 0 Исключение ... 25 7 6 5 4 3 2 1 0 Искл. 26 7 6 5 4 3 2 1 » Искл. 27 5 4 3 2 1 0 Исключение ... 28 3 2 1 0 Исключение ... 29 7 6 5 4 3 2 1 0 Исключение.. 30 2 1 0 31 2 1 32 7 6 5 4 3 2 1 33 2 1 0 Исключение.. 34 35 2 1 0 Искл. 36 37 38 39 40 41
Таблица 6.5. (продолжение с учетом исключенных команд) Такты 21|22|23|24|25|26|27|28|29|30|31[32|33|34|35|36|37|38|39| 40 30 Исключение ... 31 0 Исключение ... 32 0 Исключение ... 34 2 1 0 Исключение ... 36 2 1 0 Исключение ... 37 1 0 Исключение ... 38 3 2 1 0 Исключение ... 39 7 6 5 4 3 2 1 0 Исключение... 40 5 4 3 2 1 0 41 1
Таблица 6.6 № «+» «4-» «X» «:» лог 1. 10 13 11 9 17 2. 14 7 12 3. 15 16 8 23 4. 21 5. Пустое слово (NOI 6. 20 1 22 1 \ 7. NOP 8. 18 19 9. 27 29 10. NOP 11. 28 25 24 12. 26 13. NOP 14. I 1 32 | 33 15. NOP 16. 1 | | 35 17. NOP 18. 30 19. 31 20. NOP 21. 1 1 34 22. NOP 23. 1 1 1 1 36 24. NOP 25. 38 1 1 1 1 37 26. NOP 27. NOP 28. 1 1 I 39 1 "акты 29—34 пустые (NO Р) 35. 40 1 "акты 36—39 пустые (NO Р) 40. 1 1 1 1 41
Лекция 7. Оптимальное программирование в архитектуре управления каждым тактом Обсуждаются вопросы технологии и рекомендации для оптимально- го программирования процессора VLIW- или EPIC-архитектуры, управля- емого в каждом такте. Приводится пример составления программы расче- та нейронной сети. Рассматривается оптимизированная компоновка команд- ных слов одной из «исторических» архитектур (предположительно - 5Э73) с элементами синхронизации исполнительных устройств. Ключевые слова: нейрон, синапсическая связь, синхронизация ис- полнительных устройств, длина критического пути, транзитивные связи. 7.1. Расчет нейросети Попробуем выработать рекомендации по совместному программи- рованию обработки вариантов счета, обработки элементов массива и др., что позволяет увеличить эффективность использования многофункцио- нальных АЛУ. Методы вычислений отличаются регулярностью действий. На их основе можно строить эффективные схемы вычислений с использовани- ем многофункциональных АЛУ, в том числе — в архитектурах, сводящих- ся к «длинным» командным словам. Рассмотрим пример распараллеливания типичного фрагмента обра- ботки нейросети в режиме распознавания. Он демонстрирует способ оп- тимальной реализации на процессоре, где АЛУ содержит несколько ис- полнительных устройств (ИУ) различной специализации, функций ней- рокомпьютера. Максимальная загрузка всех устройств возможна тогда, когда в каждом линейном участке программы предусмотрена обработка не одного, а нескольких нейронов сети. Покажем это на фрагменте алго- ритма имитации работы нейронов в режиме распознавания, т. е. в режи- ме, требующем максимальной производительности нейрокомпьютера. 7.1.1. Программирование трехадресных команд В режиме распознавания в простейшей модели нейрона решается задача суммирования взвешенных, в соответствии с регулируемыми на этапе обучения весами {wj, i = 1, ..., п, синапсов — значений синапси- ческих сигналов {xi} и сравнение полученной суммы с порогом h. Если
сумма превышает порог, происходит возбуждение нейрона с величиной у: У = \ п △ = 52 wixi ~ г=1 О, при △ > О, при △ 0. Для п = 3 запишем в трехадресных командах программу одновре- менной обработки двух нейронов. Это двукратное повторение одной и той же последовательности команд, отличающейся используемыми адре- сами (табл. 7.1). Таблица 7.1 № КОП Ai >12 A3 1 X <Мц> <ЯГЦ> Г1 2 X <W12> <Ж12> Г2 3 X <W13> <ЯГ13> гз 4 + Г1 Г2 Г4 5 + ГЗ Г4 Г5 6 - Г5 <hi> Гб 7 > re Г7 8 If... Г7 Гб <У1 > 0 9 X <W21> <Ж21> Г8 10 X <W22> <Х22 > Г9 11 X <W23> <ЯГ23> ПО 12 + Г8 Г9 П1 13 + По Г11 Г12 14 - П2 <h2> Г13 15 > ПЗ Г14 16 If... П4 Г13 <У2> 0 Очевидно, программа совместной обработки трех нейронов будет содержать трехкратное повторение такого же участка и т. д. 7.1.2. Компоновка «длинных» команд Выше было показано, что при решении задач параллельного про- граммирования для полного задания информации о частичной упорядо- ченности работ целесообразно использовать квадратные (размер т равен
числу трехадресных команд линейного участка) нуль-единичные матри- цы следования S, дополненные столбцами весов — времен выполнения работ. Такая матрица для нашего примера представлена в таблице 7.2, где кроме весов указаны также поздние сроки т начала выполнения команд (для суммы всех времен выполнения работ Т = 56) и объемы в последу- ющих работ. Эти значения найдены по приведенным выше алгоритмам. Если при совместном анализе двух команд (i-й и j-й, г > j) первый или второй адрес «нижней» команды совпадает с третьим адресом «верхней» команды, то элемент матрицы S на пересечении г-й строки и j-го столбца полагается равным единице (а^- = 1), в противном случае он равен нулю. Этот алгоритм формирования матрицы следования предполагает некоторые ограничения на способ программирования. В общем случае такой совместный анализ команд должен быть дополнен анализом на несовпадение третьего адреса команды со всеми адресами вышеследую- щих команд. В приведенной матрице отражены и транзитивные связи. Таблица 7.2 Т т в 1 5 38 18 2 5 38 18 3 5 41 15 4 1 1 3 43 13 5 1 1 1 1 3 46 10 6 1 1 1 1 1 3 49 7 7 1 1 1 1 1 1 2 52 4 8 1 1 1 1 1 1 1 2 54 2 9 5 38 18 10 5 38 18 11 5 41 15 12 1 1 3 43 13 13 1 1 1 1 3 46 10 14 1 1 1 1 1 3 49 7 15 1 1 1 1 1 1 2 52 4 16 1 1 1 1 1 1 1 2 54 2 Выберем структуру АЛУ, содержащую два ИУ сложения, два — умножения, два — логических. Остальные ИУ нам в примере не пона-
добятся. В командных словах также предположим обязательное присут- ствие позиций, соответствующих этим ИУ. В таблице 7.3 отражена временная диаграмма условного назначе- ния (формирования «длинного» командного слова) и имитации выпол- нения трехадресных команд. Алгоритм формирования, выполнение ко- торого сопровождается исключением из матрицы S строк и столбцов, со- ответствующих «выполненным» командам, изложен выше. Таблица 7.3 Такты: 1 2 3 4 5 6 7 8191101111121131141151161171181191 20 1 5 4 3 2 1 0 Исключаем строку и столбец из матрицы S 2 5 4 3 2 1 0 Исключаем ... 3 5 4 3 2 1 0 Исключаем ... 4 3 2 1 0 Исключаем ... 5 3 2 1 0 Исключаем ... 6 3 2 1 0 Исключаем ... 7 2 1 0 Исключ. 8 2 1 1 0 Iй 9 5 4 3 2 1 0 Исключаем ... 10 5 4 3 2 1 0 Исключаем ... 11 5 4 3 2 1 0 Исключаем ... 12 3 2 1 0 Исключаем ... 13 3 2 1 0 Исключаем ... 14 3 2 1 0 Исключаем... 15 2 1 0 Искл. 16 2 1 1 0 «Назначенные» работы (трехадресные команды) и такты, в которые они назначены, соответствуют «длинным» командам. Как видно из та- блицы — диаграммы, программа изобилует пропусками тактов, NOPами. Предположим наличие средств синхронизации, аналогичное ис- пользованию битов значимости. Т. е. предположим, что регистры СОЗУ имеют биты значимости, «взводящиеся» в начале выполнения тех ко- манд, в которых предусмотрена запись в эти регистры. Тогда считыва- ние из этих регистров невозможно до окончания выполнения тех опе- раций, по которым в них производится запись. Отсюда следует возмож- ность ликвидации всех NOPok в программе. В данном примере оконча- тельный вид формируемой программы представлен в таблице 7.4. Несмотря на то, что мы не можем считать рассмотренный в основ- ной части пример характерным, он наводит на мысль о необходимости
Таблица 7.4 № + + X X ЛОГ ЛОГ 1 1 2 2 9 10 3 3 11 4 4 12 5 5 13 6 7 15 7 8 16 полного статистического анализа целесообразности оптимизации ком- поновки «длинных» командных слов. Сложность такой компоновки, воз- можно, компенсируется простотой получения программы в результате «быстрой» компоновки, если учитывать совокупную стоимость разработ- ки и выполнения программ. Очевидно, что эта проблема требует изуче- ния на основе моделирования. Архитектура ВС с управляемой в каждом такте работой исполни- тельных устройств выявляет определенные правила по организации вы- числений. На примере показана целесообразность совместной обработки нескольких элементов массива - в обобщенном понятии. Такая обработ- ка обеспечивает максимальную загрузку оборудования, т. е. максималь- ное значение коэффициента загрузки исполнительных устройств АЛУ. 7.2. Пример оптимизированной компоновки «длинных» командных слов для ВС с синхронными ИУ Выше мы указывали, что все сделанное теперь требует перекомпо- новки, сжатия каждого слова для получения командных слов перемен- ной длины. Каждое слово (впереди указывается его длина) должно нести смысловую нагрузку: «что и какое именно устройство должно в данном очередном такте начать выполнять». Рассмотрим еще один, более конкретный пример компоновки «длин- ного» командного слова для ВС, разрабатываемой в 1970-е годы. Проект, основанный на архитектуре «в остаточных классах», не получил должно- го освещения в годы «холодной войны», тем более, что авторы сами пере- стали настаивать на его воплощении. Но это был, по-видимому, первый в мире опыт реализации принципа «длинного» командного слова.
Пусть АЛУ процессора ВС состоит из трех многофункциональных блоков ИУ, работающих синхронно. Два блока — универсальные, они содержат специализированные по операциям ИУ (будем называть их основными ИУ) и с их помощью выполняют основной набор опера- ций. Третий блок ИУ обеспечивает обмен СОЗУ (с регистрами которо- го и только которого работают основные ИУ) с памятью других уровней. Синхронизация работы блоков ИУ осуществляется заданием инструкции каждому из них в соответствующей части командного слова. Т. е. любое командное слово состоит из трех частей, в каждой из которых может быть записана одна инструкция. В первых двух частях содержатся инструкции первому и второму блокам основных ИУ, в третьей — инструкция ИУ об- мена. Возможно отсутствие инструкций отдельным блокам ИУ, что экви- валентно простоям ИУ в их составе. Для выполнения каждой основной инструкции назначается ИУ определенного типа из числа свободных. При отсутствии свободных ИУ для выполнения хотя бы одной инструкции командного слова выполне- ние этого командного слова (а следовательно, и программы) задержива- ется. Предположим, что инструкции, назначенные для выполнения од- новременно (в один машинный такт), выполняются назначенными для этого ИУ синхронно за одинаковое и равное для всех операций число ма- шинных тактов t0 — 2. Обмен выполняется за время ti = 1. Предположим, что в ВС для уплотнения записи программы исполь- зуются элементы адресного распараллеливания, а именно: — командное слово не выполняется, если хоть один операнд его ин- струкции, представленный адресом СОЗУ, совпадает хоть с одним ре- зультатом предыдущих to - 1 командных слов; — внутри командного слова инструкции обладают приоритетом, убывающим слева направо. Блокировка выполнения инструкции осуществляется в соответ- ствии с адресным способом распараллеливания в том случае, если в ней в качестве операнда фигурирует адрес, являющийся в еще не выполнен- ной инструкции более старшего приоритета адресом результата. Если вы- полнение второй основной инструкции задерживается, то вместе с ней задерживается выполнение и инструкции обмена. Таким образом, будем считать, что пропуск необходимого числа тактов производится автомати- чески. Пусть необходимо написать оптимальную программу счета величин f = Ь2/х2 4- а/Ь2 11 f7.1) д = af — t3(d — с)
Программа до оптимизации, написанная «в линеечку», представле- на на рис. 7.1. №к КОП Ri Ri R3/A Пояснение 1 Счит. <«) A 1 2 Счит. В Считывание из ОП 3 Счит. <*> X J 4 Умн. <Ь) <b) (b2) 5 Умн <х) <x) (x2) 6 Дел. <Ь2) (x2) <*> k = b2/X2 7 Дел. <b2> </> l = a/b2 8 + <*> </> (f) 9 Зап. <f) F Запись результата в ОП 10 Счит. (t) T 11 Счит. D 12 Счит. <с> C 13 Умн. <0 <0 (t2) 14 Умн. <0 <d <d 15 - (d) <c) (.d-c) 16 Умн. {а} (ft 17 Умн. <d {d-c} <P> p = t3(d-c) 18 - <af) <P> <g) 19 Зап. G Рис. 7.1. Исходная последовательная программа В позициях Ai и R? указываются первый и второй адреса операндов. Это адреса СОЗУ. R3 — адрес результата в СОЗУ, А — адрес считывания или записи в ОП. Использован набор инструкций, содержание которых ясно из их записи. На рис. 7.2 представлен информационный граф G , отражающий взаимосвязь инструкций. Другим цветом отмечены работы по обмену. В графе G можно найти длину Ткр критического пути. Опыт подска- зывает: практические возможности распараллеливания линейного участ- ка программы таковы, что правомерно считать достаточным количество ИУ для выполнения оптимизированной программы за время Т^. Зна- чит, мы заранее можем для данного линейного участка считать заданным ограничение времени его выполнения Т = При необходимости лег- ко предусмотреть в алгоритме динамическую коррекцию этого значения. Это позволяет использовать значения поздних сроков окончания выпол-
Рис. 7.2. Граф-схема алгоритма нения работ и сформулировать более эффективное при данном примене- нии решающее правило, приведенное ниже: среди множества инструкций, выполнение которых может начаться с данного момента времени, преимущественным правом назначения облада- ют инструкции, имеющие минимальное значение позднего срока окончания выполнения при текущем значении длины критического пути. Если несколь- ко инструкций обладают минимальным значением позднего срока окончания выполнения, то в первую очередь назначаются инструкции с максимальным суммарным временем выполнения, которые включают время выполнения данной инструкции и сумму времен выполнения всех инструкций (на основе транзитивных связей!), использующих результат данной инструкции. На рис. 7.3 представлена диаграмма выполнения работ (инструк- ций), иллюстрирующая нахождение поздних сроков окончания их вы- полнения при Т = Ткр = 12. На рис. 7.4 представлена расширенная матрица следования S*, где для j-й инструкции, j = 1, ..., 19, указано время tj ее выполнения, поздний срок окончания выполнения r2j (12), а также значение Qj — сум- марное время выполнения всех инструкций, которым данная инструкция предшествует. Эти значения отыскиваются в результате введения транзи- тивных связей в матрицу S, что также показано на рисунке.
6 1 7 4 11 8 2 5 12 14 16 9 3 10 13 15 17 18 19 t 0 1 2 { .... 3 Рис. 7.3./] 1 1 5 Диаграмма i 1 6 7 выполнени 1 8 9 я работ 0 № 1 2 3 4 5 6 7 8 9 10 п 12 13 14 15 16 17 18 19 ‘j #12) 0) 1 1 3 11 2 1 1 15 3 1 1 13 4 1 2 3 14 5 1 2 3 12 6 1 1 1 1 2 5 10 7 1 1 1 2 5 10 8 1 1 1 1 1 1 1 2 7 8 9 1 1 1 1 1 1 1 1 1 12 1 10 1 3 10 11 1 5 8 12 1 5 8 13 1 2 5 9 14 1 1 2 7 7 15 1 1 2 7 7 16 1 1 1 1 1 1 1 1 2 9 5 17 1 1 1 1 1 1 2 9 5 18 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 11 3 19 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 1 Рис. 7.4. Расширенная матрица следования Имитируя изменение текущего времени t и определяя состояние вы- числительного процесса (на рис. 7.5 отражено изменение матрицы S в процессе компоновки программы), начнем формирование оптимизиро- ванной программы с первого командного слова.
№ 1 4 5 6 7 8 9 10 И 12 13 14 15 16 17 18 19 Т/12) 1 1 3 11 4* 2 3 14 5 2 3 12 6 1 1 2 5 10 7 1 1 2 5 10 8 1 1 1 1 1 2 7 8 9 1 1 1 1 1 1 1 12 1 10 1 3 10 11 1 5 8 12 1 5 8 13 1 2 5 9 14 1 1 2 7 7 15 1 1 2 7 7 16 1 1 1 1 1 1 2 9 5 17 1 1 1 1 1 1 2 9 5 18 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 11 3 19 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 1 Рис. 7.5. Матрица следования после первого шага компоновки команд 1. t = О, Я = {1,2,3,10,11,12}, {t2j€t?(12)} = {3,1,1,3,5,5}, {OjeR} = {11,15,13,10,8,8}. После переупорядочения (по неубыванию значений t2j(12), а для равных указанных значений — по невозраста- нию значений {0^#} = {2,3,1,10,11,12}. В первое командное слово за- писываем инструкцию 2. Ее номер заносим в множество {а} — множе- ство назначенных, но не выполненных инструкций; каждая инструкция в нем снабжена счетчиком времени выполнения, который уменьшается при моделировании изменения времени. Равенство счетчика нулю сви- детельствует о выполнении инструкции. Т. к. в командное слово записана инструкция обмена, и в Я отсутствует информация об основных инструк- циях, которые можно записать в это же слово, то после перебора всех эле- ментов R полагаем t = 1 и переходим к заполнению следующего команд- ного слова. Исключаем из матрицы S строку и столбец, соответствующие инструкции 2, т. к. к новому моменту времени она будет выполнена. 2. t = 1, R = {1,3,4,10,11,12}. После упорядочения по r2j^R и Oj^R R = {3,4,1,10,11,12}. Запишем во второе командное слово инструкцию
3. После исключения ее номера из R вновь найдем инструкцию 4, гото- вую к выполнению. Ее записываем в это же командное слово. Так как ин- струкция обмена в командное слово уже записана, а основных в R больше нет, перейдем к заполнению третьего командного слова. Положим t = 2 и исключаем из матрицы S строку и столбец, соответствующие выполнен- ной к этому моменту времени инструкции 3 (рис. 7.5). Назначенные для выполнения, но не выполненные к данному моменту времени инструк- ции (отмеченные в {а}) будем отмечать знаком *. 3. t = 2, R = {1,5,10,11,12}. После упорядочения по r2j^R и Oj^R R = {5,1,10,11,12}. Запишем в третье командное слово инструкции 5 и 1. Положим t = 3, преобразуем матрицу следования S, исключив из нее строки и столбцы, соответствующие назначенным инструкциям. 4. t = 3, после упорядочения R = {5,10,11,12}. Запишем в четвер- тое командное слово последовательно инструкции 10,13. Положим t = 4, исключим из S строки и столбцы, соответствующие выполненным к дан- ному моменту времени инструкциям 5 и 10 (рис. 7.6). № 5 6 7 8 9 И 12 13 14 15 16 17 18 19 tj #12) 5 2 3 12 6 1 2 5 10 7 2 5 10 8 1 1 1 2 7 8 9 1 1 1 1 1 12 1 11 1 5 8 12 1 5 8 13* 2 5 9 14 1 2 7 7 15 1 1 2 7 7 16 1 1 1 1 2 9 5 17 1 1 1 1 1 2 9 5 18 1 1 1 1 1 1 1 1 1 1 1 2 11 3 19 1 1 1 1 1 1 1 1 1 1 1 1 1 12 1 Рис. 7.6. Матрица следования после второго шага компоновки команд 5. t = 4,7? = {6,7,11,12},{t2j€h(12)} = {5,5,5,5}, {0jeR} = {10,10,8,8}. После упорядочения R = {6,7,11,12}. Запишем в пятое ко-
мандное слово инструкции 6,7,11. Полагаем t = 5, исключаем из S стро- ки и столбцы, соответствующие выполненным к этому моменту времени инструкциям 13 и 11. 6. t = 5, R = {12,14}. Инструкции 12 и 14 запишем в шестое команд- ное слово. Положим t = 6, исключаем из матрицы S строки и столбцы, Рис. 7.7. Матрица следования после третьего шага компоновки команд 7. t = 6, R = {8,15}. Инструкции 8 и 15 записываем в седьмое ко- мандное слово. Т. к. инструкция обмена в ней не записана и существуют инструкции, находящиеся в процессе выполнения, продолжим компоно-
8. t = 7, R = 0. Продолжим (в соответствии с приоритетом при вы- полнении!) попытку заполнения седьмого командного слова. Положим 4 = 8, исключим из S строки и столбцы, соответствующие инструкциям 8 и 15 (рис. 7.9). № 9 16 17 18 19 #12) 9 1 12 1 16 2 9 5 17 2 9 5 18 1 1 2 11 3 19 1 1 1 1 12 1 Рис. 7.9. Матрица следования после пятого шага компоновки команд 9. t = 8, R = {9,16,17}. В седьмое командное слово записываем ин- струкцию обмена 9. Положим t = 9, исключим из матрицы S строку и столбец, соответствующие инструкции 9. 10. t = 9,7? = {16,17}. В восьмое командное слово запишем ин- струкции 16 и 17. Так как инструкция обмена не записана и {а} / 0, продолжим попытку заполнения восьмого командного слова. Положим t = 10. К этому моменту времени не заканчивается выполнение ранее назначенных инструкций, матрица следования сохраняет прежний вид (рис. 7.10). № 16 17 18 19 tj #12) 4 16* 2 9 5 17* 2 9 5 18 1 1 2 11 3 19 1 1 1 1 12 1 Рис. 7.10. Матрица следования после шестого шага компоновки команд Положим t = 11. К этому моменту времени выполняются инструк- ции 16 и 17. Исключим из матрицы S строки и столбцы, соответствующие этим инструкциям (рис. 7.11). 11. t = 11, R = {18}. Запишем инструкцию 18 в девятое команд- ное слово. Полагаем t = 12. К этому моменту нет инструкций, выполне- ние которых закончено, a R = 0. Полагаем t = 13, продолжаем попытку
№ 18 19 tj Ж12) 9 18 2 11 3 19 1 1 12 1 Рис. 7.11. Матрица следования после седьмого шага компоновки команд заполнения девятого командного слова. К этому моменту заканчивается выполнение инструкции 18. Исключим строку и столбец, соответствую- щие этой инструкции, из матрицы S. 12. t = 13, R = {19}. Инструкцию обмена 19 запишем в девятое ко- мандное слово. Матрица следования исчерпана, составление программы (рис. 7.12) заканчивается, через один такт t = 14 заканчивается и ее вы- полнение. № КОП *1 Rl RJA коп Rl Ri RJA КОП R\ Rl R1/A 1 Сч В 2 Умн. Сч <Х> X 3 Умн. W W и Сч А 4 Умн. Сч Т 5 Дел. <?> 0 Дел. (?) <0 Сч D 6 Умн. <?> Сч W С 7 + W — (с) {d-c} Зп F 8 Умн. Умн. <Р> 9 - <р> Зп <е) G Рис. 7.12. Программа в окончательном виде Перебор возможных вариантов убеждает в том, что полученное вре- мя выполнения скомпонованной программы минимально. На рис. 7.13 представлена диаграмма выполнения программы. Рис. 7.13. Временная диаграмма выполнения программы Однако длина программы может быть уменьшена на одно команд- ное слово хотя бы за счет записи инструкции 8 в шестое командное слово со смещением всех последующих инструкций.
Лекция 8. Оптимальное программирование процессоров ЕР1С-архитектуры Освещается проблема организации интенсивного ветвления вычисле- ний с помощью механизма предикатов без традиционного использования команд условного перехода, значительно увеличивающего время выполне- ния программы. Применение предикатов характерно для процессоров EPIC- архитектуры, лежащей в основе новейших разработок ряда «Эльбрус». Рас- сматриваются примеры таких ветвящихся алгоритмов, как сортировка и по- иск, в которых теоретическая оценка сложности значительно отличается от сложности, практически достижимой при программировании. Ключевые слова: память предикатов, сложность алгоритмов, про- граммистская модель, сортировка, поиск, спекулятивные вычисле- ния. 8.1. Оптимизация ветвления при решении задач сортировки на процессоре ЕР/С-архитектуры Выше предложен алгоритм компоновки «длинных» командных слов внутри линейного участка программы для ИЕ/Ж-архитектуры, которые затем могут быть преобразованы в командные слова £77С-архитектуры — в частности, сжатые и имеющие переменную длину. Логические кон- струкции разрешались на основе команды if-then-else, предполагающей немедленное (без возможности предварительного запоминания) исполь- зование предиката — значения булевой переменной. Это обусловило пла- нирование одновременного выполнения оператора-условия и альтерна- тивных операторов счета от момента ветвления «назад». Однако наличие регистровой памяти для хранения предикатов, задающих ветвление, зна- чительно расширяет возможности £Р/С-архитектуры. Альтернативный счет или ветвление по времени могут быть отделены от счета значения условия, предварительно найденного и хранимого. Поэтому такую важ- ность получает применение методов диспетчирования параллельного вы- числительного процесса не только при трансляции программ, но и при эвристическом оптимальном программировании «вручную». Очевидно, что для разных задач различна и актуальность механиз- мов ветвления. Существуют задачи, для которых этот механизм является основным средством решения. По-видимому, такие задачи целесообраз- но выбрать в качестве тестовых для оценки эффективности ветвления.
В теории алгоритмов на задачах сортировки принято оценивать воз- можность снижения сложности алгоритмов. Основным элементом реше- ния этих задач являются альтернативные действия, исключающие счет и основанные только на пересылках данных. Таким образом, основная на- грузка приходится на механизмы ветвления. Понятие сложности определяется характером зависимости времени выполнения алгоритма от основных параметров — размера задачи, длины массива и т. д. При этом важна не точная зависимость, а именно ее харак- тер, в связи с чем на самом высоком уровне сложность делится на по- линомиальную и экспоненциальную. Полиномиальная сложность может характеризоваться максимальной степенью вхождения основного пара- метра в эту зависимость. Так, например, сложность О(п2) «пузырьково- го» алгоритма сортировки в результате ухищрений может быть снижена до оценки О(п log2 п), где п — длина массива. Однако выше речь идет о сложности алгоритма, а не о его реали- зации на компьютере. Компьютер, в результате слабой «профпригодно- сти», может внести значительные коррективы сложности в худшую сто- рону. Конечно, не всегда в этом случае виноват компьютер. При расче- те сложности зачастую не учитываются объективно существующие затра- ты на организацию вычислительного процесса. Например, древовидная (графовая) структура требует значительных вычислительных затрат на об- служивание. Человек, производя сортировку «вручную», на неформаль- ном уровне с легкостью производит логические действия, которые весьма трудоемки для компьютера. Таким образом, необходимо: а) представить обобщенную программистскую модель процессора £Р/С-архитектуры; б) произвести экспериментальное, «вручную», достаточно деталь- ное планирование программ сортировки различными методами, пресле- дуя цель минимизации времени (числа тактов) решения. В то же время, составляя планы программ сортировки, будем выска- зывать предположения или рекомендации относительно возможностей системы команд процессора. Обобщенная программистская модель процессора £Р/С-архитектуры Под программистской моделью понимают то, что «видит» програм- мист (транслятор) в вычислительной системе и что достаточно для напи- сания «хорошей» программы. Ранее это называлось «инструкцией поль- зователю», однако применительно к современной архитектуре требуются более глубокие знания принципов работы оборудования. Так как нас интересует программа в виде расписания работы ис-
полнительных устройств (ИУ) арифметическо-логического устройства (АЛУ), будем составлять планы компоновки таких расписаний, ориенти- руясь на ИШР-архитектуру, т. е. на £77С-архитектуру в «распакованном» виде, где позиции слов (слоги) закреплены за ИУ. Ограничиваясь плани- рованием «длинных» команд, будем составлять блок-схему с выделением строк блоков — прообразов команд и с расположением блоков в столб- цах, соответствующих ИУ. Для данной задачи достаточно рассматривать два логических ИУ. Пусть также используются два ИУ обмена информацией. Для оценки принципиальных возможностей оптимального программирования ука- занные параметры АЛУ несущественны. Предположим, что все ИУ конвейерные, т. е. известно количество тактов счета результатов. Существуют средства синхронизации, при ко- торых по указанному адресу записи считывание невозможно до окон- чания этой записи. При «близком» расположении команды, использу- ющей нерассчитанный результат, автоматически выполняется пропуск такта (тактов), т. е. команда NOP (No Operation). (Технически такая син- хронизация производится либо на основе взаимного анализа адресов те- кущего контекста, либо с помощью битов значимости регистров, «взво- димых» при организации записи в эти регистры и «сбрасываемых» при окончании записи, что разрешает считывание из этих регистров.) Предикатные (логические) вычисления выполняются с помощью адресуемой памяти (файла) предикатов1. Значения предикатов — буле- вых переменных рассчитываются логическими ИУ. В каждом слоге ко- манды может быть указан адрес (имя) предиката для спекулятивных вы- числений, т. е. для выполнения (невыполнения) инструкции в зависимо- сти от значения соответствующей булевой переменной. Предполагается аппаратная поддержка циклов, основанная на авто- матическом переиспользовании (переименовании) регистров и исключа- ющая остановки конвейера выполнения команд. Сортировка с помощью прямого включения Целью сортировки является переформирование массива данных в порядке их невозрастания. Данный метод заключается в том, что исходный массив условно де- лится на две части: уже отсортированную и еще не отсортированную. Первоначально отсортированная часть содержит лишь один, первый, элемент массива. Затем на каждом шаге первый элемент неотсортирован- ной части вставляется в отсортированную часть на свое место с учетом упорядоченности. 1 Вопреки традиции, более правильно — значений предикатов.
Пусть задан массив а[1... 12] = {6,2,4,3,4,7,10,9,5,8,0,1}. В табл. 8.1 отражен процесс сортировки по шагам, где курсивом выделена упорядоченная часть массива. Известны [10] оценки общего числа Сср сравнений и Mnep пересы- лок: Сер = (п2 + п - 2)/4, Miep = (п2 + п - 2)/4, что подтверждает оценку О(п2). Таблица 8.1. Сортировка с помощью прямого включения Исходный массив 6 2 4 3 4 7 10 9 5 8 0 1 Шаг 1 2 6 4 3 4 7 10 9 5 8 0 1 Шаг 2 2 4 6 3 4 7 10 9 5 8 0 1 ШагЗ 2 3 4 6 4 7 10 9 5 8 0 1 Шаг 4 2 3 4 4 6 7 10 9 5 8 0 1 Шаг 5 2 3 4 4 6 7 10 9 5 8 0 1 Шаг 6 2 3 4 4 6 7 10 9 5 8 0 1 Шаг 7 2 3 4 4 6 7 9 10 5 8 0 1 Шаг 8 2 3 4 4 5 6 7 9 10 8 0 1 Шаг 9 2 3 4 4 5 6 7 8 9 10 0 1 Шаг 10 0 2 3 4 4 5 6 7 8 9 10 1 ШагИ 0 1 2 3 4 4 5 6 7 8 9 10 Однако, пытаясь запрограммировать этот метод для параллельного АЛУ, мы сталкиваемся с преобладанием операций, выполняемых над эле- ментами массива строго последовательно: — размещение каждого элемента в уже упорядоченной части масси- ва должно быть выполнено до конца, т. к. размещение каждого предыду- щего элемента позволяет начать размещение следующего; — поиск места расположения очередного элемента сопровождается последовательным анализом и перемещением пропускаемых элементов. Метод явно нуждается в модификации, что при наличии других, ни- же рассматриваемых, методов сортировки вряд ли целесообразно.
Сортировка с помощью прямого выбора Общий принцип алгоритма: 1. Выбирается наименьший элемент массива. 2. Найденный элемент меняется местами с первым элементом. 3. Выбирается наименьший из оставшихся п — 1 элементов, п — 2 элементов и т. д. и меняется местами с первым элементом оставшейся ча- сти массива. Процесс продолжается до тех пор, пока справа не останется один, самый большой элемент исходного массива. Сложность алгоритма составляет О(п2). В табл. 8.2 показана по шагам сортировка того же массива. Курсивом выделены меняющиеся на каждом шаге местами первый и минимальный элементы неупорядоченной части массива. Основная процедура, многократно применяемая в алгоритме — процедура нахождения минимального элемента среди уменьшающегося множества элементов. Рассмотрим эту процедуру отдельно. В ней реализуется операция преобразования вектора (массива) в скаляр, что также соответствует сло- жению или умножению всех элементов массива. Эта операция является составной частью скалярного умножения, численного интегрирования и т.д. Возможности распараллеливания ограничены информационной связностью промежуточных результатов. Единственно возможная парал- лельная схема счета — счет способом «пирамиды», при котором произво- дится попарное сравнение и нахождение меньшего элемента внутри па- ры, затем попарное сравнение результатов первого сравнения и т. д. — до получения окончательного результата. Длина критического пути при реа- лизации всех возможностей распараллеливания (при достаточном коли- честве ИУ) не менее ] log2 n[t, где t — время элементарной, образующей операции (сравнения и возможной пересылки). При использовании небольшого числа ИУ возможна их практиче- ски полная загрузка на всем протяжении счета при наличии средств син- хронизации, «страхующих» опережающее использование ^сформиро- ванных данных. Представим схему счета «пирамидой» при нахождении минималь- ного элемента массива, на основе которой составим план программы для процессора £Р/С-архитектуры. Предварительно расширим данный мас- сив, дополнив его п — 1 элементами — промежуточными результатами анализа, а также (последний элемент) результатом поиска. Для схемы счета «пирамидой» не принципиальна четность или сте- пень «двойки» значения п. На рис. 8.1 представлена схема для п = 7. Стрелки указывают на направление движения информации, ai — — значения предикатов — результатов попарного сравнения элементов.
Таблица 8.2. Сортировка с помощью прямого выбора Исходный массив 6 2 4 3 4 7 10 9 5 8 0 1 Шаг1 0 2 4 3 4 7 10 9 5 8 6 1 Шаг 2 0 1 4 3 4 7 10 9 5 8 6 2 ШагЗ 0 1 2 3 4 7 10 9 5 8 6 4 Шаг 4 0 1 2 3 4 7 10 9 5 8 6 4 Шаг 5 0 1 2 3 4 7 10 9 5 8 6 4 Шаг 6 0 1 2 3 4 4 10 9 5 8 6 7 Шаг 7 0 1 2 3 4 4 5 9 10 8 6 7 Шаг 8 0 1 2 3 4 4 5 6 10 8 9 7 Шаг 9 0 1 2 3 4 4 5 6 7 8 9 10 Шаг 10 0 1 2 3 4 4 5 6 7 8 9 10 Рис. 8.1. Схема счёта «пирамидой» Рисунок иллюстрирует простой цикл сравнения и пересылок мень- ших элементов. Единственным условием правильного выполнения опе- рации является, как говорилось ранее, синхронизация, исключающая ис- пользование результата сравнения до окончания его формирования. При длине массива, значительно превышающей количество ИУ, эффективен механизм ожидания рассчитываемого результата, т. е. задержки выполне- ния команд при попытке считывания до записи. Задержки начнутся толь- ко на последнем этапе выполнения «пирамиды». Однако отметим преимущества принудительного программного ре- шения проблемы синхронизации с помощью команды закрытия адресов по считыванию до окончания записи по этим адресам. Такая команда позволяет предварительно закрыть адреса данных an+1 - а,2П-1 • Их откры- тие при записи в ходе выполнения программы обеспечивает правильное выполнение «пирамиды» во времени.
План программы выполнения данной процедуры представлен на рис. 8.2. Иллюстрируется «развернутый» цикл, где ромбами обозначены операции сравнения оц = сц < a^i. Пересылки помечены предикатами или их отрицаниями, в соответствии со значениями которых они произ- водятся. Считаем, что значение предиката может быть использовано че- рез два такта, что определяет взаимное смещение пересылок и сравнений при формировании «длинных» командных слов. При формировании про- граммы необходимо учесть организацию цикла, индексацию и т. д. Одна- ко важно отметить, что все ветвление в данном проекте программы вы- полнено без остановок конвейера. On-l а2л-1 ап-1 -а2п-2^ а2п-\ Рис. 8.2. План программы счёта «пирамидой» Тогда очевиден план программы сортировки с помощью прямого выбора. Процедура нахождения минимального элемента выполняется в цикле над уменьшающейся на единицу длиной массива. Найденный эле- мент меняется местами с первым элементом этого массива. Очевидно, в этом случае условный переход не используется.
Пузырьковая сортировка Алгоритм этой сортировки заключается в последовательном сравне- нии и смене мест (если необходимо) пар соседних элементов массива. Процесс продолжается до тех пор, пока обмены не прекратятся. Слож- ность алгоритма также составляет О(п2). Легко видеть, что последовательный учет результатов предыдущего сравнения (последовательное всплытие «пузырьков») не допускает рас- параллеливания. Алгоритм нуждается в модификации. Для эффективного распараллеливания на процессоре £Р/С-архи- тектуры необходимо при одном обзоре массива отделить процедуру срав- нения элементов и формирования значений предикатов от процедуры пересылки, т. е. организовать множественное всплытие «пузырьков». Для этого при каждом обзоре текущее (частично упорядоченное) множество элементов разбивается на пары. При первом (нечетном) об- зоре первая пара включает первый элемент массива. При втором (чет- ном) обзоре группирование начинается со второго элемента и т.д. Вну- три пар элементы упорядочиваются, при необходимости меняясь места- ми так, чтобы слева стоял меньший элемент. Наличие обменов при каж- дом просмотре фиксируется. Их прекращение свидетельствует об окон- чании сортировки массива. В табл. 8.3 по шагам (обзорам) отражена сортировка ранее рассмот- ренного массива. Формируемые на каждом шаге пары элементов выде- лены. При четном п нечетные шаги сортировки требуют анализа к = п/2 пар элементов, четные шаги требуют анализа к = (п/2) -1. При нечетном п к = [п/2] пар элементов. План программы (внутренний цикл развернут) представлен на рис. 8.3. Здесь а; = аг(г+1) < «г+1(г+2); индексация выполнена с учетом попеременного формирования пар соседних элементов и с учетом их пе- реименования после пересылки; к — индекс последней анализируемой пары элементов; /3 — предикат, принимающий значение «1», если опера- ция, при которой он указан, выполняется. Предполагается, что при выхо- де за границу массива операция над элементами не производится. Далее предполагается возможность взаимного обмена данными, инициирован- ная в одном командном слове. Программа не предполагает использование условных переходов и соответствует «теоретической» сложности, хотя время выполнения алго- ритма при данной комплектации АЛУ сокращается почти в четыре раза по сравнению с применением одного ИУ.
Таблица 8.3. Модифицированная пузырьковая сортировка Исходный массив 6 2 4 3 4 7 10 9 5 8 0 1 Шаг 1 2 6 3 4 4 7 9 10 5 8 0 1 Шаг 2 2 3 6 4 4 7 9 5 10 0 8 1 ШагЗ 2 3 4 6 4 7 5 9 0 10 1 8 Шаг 4 2 3 4 4 6 5 7 0 9 1 10 8 Шаг 5 2 3 4 4 5 6 0 7 1 9 8 10 Шаг 6 2 3 4 4 5 0 6 1 7 8 9 10 Шаг 7 2 3 4 4 0 5 1 6 7 8 9 10 Шаг 8 2 3 4 0 4 1 5 6 7 8 9 10 Шаг 9 2 3 0 4 1 4 5 6 7 8 9 10 Шаг 10 2 0 3 1 4 4 5 6 7 8 9 10 Шаг 11 0 2 1 3 4 4 5 6 7 8 9 10 Шаг 12 0 1 2 3 4 4 5 6 7 8 9 10 Сортировка Шелла Данный метод относится к «улучшенным». Он предполагает после- довательные этапы разбиения исходного массива на несколько групп и их независимую сортировку. Однако следует с осторожностью относиться к «улучшенным» ме- тодам сортировки, требующим значительных подготовительных работ и ориентированным на человека — вычислителя, для которого логический анализ действий не представляется сложным, а потому выносится за об- ласть учета трудоемкости. В компьютерной программе должно быть все учтено посредством формализованных действий. На ранее выбранном массиве продемонстрируем сортировку Шел- ла. Сначала выполняется четверная сортировка: группируются и сорти- руются элементы массива, отстоящие друг от друга на расстоянии 4. Рас- сматриваемый массив будет разбит на четыре группы элементов: =
Рис. 8.3. План программы пузырьковой сортировки {6,4,5}, А2 =’ {2,7,8}, Аз = {4,10,0}, А4 = {3,9,1}. Каждая группа сор- тируется одним из известных способов. Элементы возвращаются в мас- сив с соблюдением тех же начала и расстояния, с которыми они извлека- лись. Тогда результатом четверной сортировки будет последовательность 4, 2,0,1,5,7,4,3,6,8,10, 9. На втором проходе элементы полученной последовательности пе- регруппировываются — теперь каждый элемент группы отстоит от дру- гого на две позиции. В данном случае сформируются две группы: В± = {4,0,5,4,6,10} и В2 = {2,1,7,3,8,9}. Сортировка внутри групп (двойная сортировка) и возвращение в исходный массив на соответствующие ме- ста приводят к последовательности 0,1,4, 2,4,3, 5,7,6,8,10,9. На третьем проходе окончательно производится обычная (одинар- ная) сортировка всей последовательности, при которой число пересылок сведено до минимума.
Исследования по выбору расстояний привели к теоретическому об- основанию оценки сложности алгоритма, как О(п1,2). Эта сложность основана на минимизации требуемых пересылок. Вполне очевидно, как существенно усложняется логика программы. Кроме того, если в заключение все равно необходимо выполнить еди- ничную сортировку, то при планировании спекулятивного режима в рам- ках предикатных вычислений совершенно безразлично, выполняется ли операция пересылки, на которую выделены время и средства, или нет. Так что действительная сложность алгоритма, достигаемая на компью- тере, значительно превосходит сложность алгоритмов сортировки, рас- смотренных ранее. Применение данного метода, очевидно, нецелесообразно на про- цессоре EPIC- архитектуры. Сортировка с помощью дерева Алгоритм сортировки предполагает следующие действия. 1. Реализуется и запоминается «пирамида» нахождения минималь- ного элемента массива — формируется двоичное дерево, вершины кото- рого отмечены сравниваемыми элементами массива (рис. 8.4). 2. Найденный элемент исключается из рассмотрения, освобождая занятые им вершины дерева (отмечены темным). 3. Элемент первого уровня сравнения переводится на освободивше- еся место. 4. В результате попарного сравнения элементов, начиная со второго уровня, вновь отыскивается минимальный элемент и т. д. На рис. 8.4а представлено двоичное дерево для нахождения мини- мального элемента 0 в ранее рассмотренном массиве. После исключения этого элемента находится минимальный элемент 1 из оставшихся, как показано на рис. 8.46. После исключения этого элемента, элемент 5, как результат первого уровня сравнений, продвигается в вершину следующего уровня. Мини- мальный элемент находится, как показано на рис. 8.4,в. Следующий шаг демонстрируется на рис 8.4,г и т.д. — до полного опустошения дерева. Данный алгоритм имеет «теоретическую» сложность O(nlog2n), рассчитанную на основе оценок числа сравнений и пересылок и не учи- тывающую обслуживание древовидной структуры. Известно, что графо- вые структуры, которые для параллельного компьютера на уровне об- работки целесообразно представлять матрицами следования, приводят к оценкам сложности не менее О(п2). Очевидно, что программа анали-
Рис. 8.4. Сортировка с помощью дерева: а — нахождение минимального элемен- та 0, б — нахождение элемента 1, в — нахождение элемента 2, г — нахождение элемента 3.
за графического представления отношений между элементами массива сложна и трудоемка, хотя во многом зависит от изощренности програм- миста. Учитывая информационную связность процесса, многократно ис- пользующего «пирамиду» (требуется использование средств синхрониза- ции) при не регулярном расположении элементов (затруднено нахожде- ние сравниваемых элементов при динамически меняющейся структуре дерева), следует высказать сомнение о целесообразности реализации ме- тода на процессоре EPIC- архитектуры. Быстрая сортировка 1. Приблизительно в середине массива выбираем элемент х. 2. Последовательно перебирая элементы слева, находим элемент ai > х. Если такого нет, за искомый элемент принимаем х. 3. Аналогичный поиск элемента < х производим справа от х. Ес- ли такого нет, за искомый элемент принимаем х. 4. Меняем местами элементы а* и в случае их неравенства. 5. Продолжаем процесс, пока исходный массив не разделится на два, где левый подмассив содержит элементы, не большие всех элементов, со- ставляющих правый подмассив. 6. Шаги 1 — 5 применим рекурсивно для каждого из подмножеств. Сложность данного алгоритма, учитывающая лишь операции срав- нения и пересылки, но не организацию вычислений, составляет О(п log2 п) Аппарат предикатных вычислений предусматривает спекулятивный режим выполнения операций. Это означает, что минимизировать чис- ло операций (пересылок) нет необходимости, поскольку для выполнения этих операций выделены время и ресурсы, независимо от того, будут ли они выполнены. Избежать лишних пересылок можно с помощью услов- ных переходов, но они-то и нежелательны. Кроме того, организация об- мена местами элементов, когда эти места определяются в результате по- иска, усложняет логику программы и адресацию данных, вносит элемент последовательного анализа. Представим модификацию алгоритма быстрой сортировки, обеспе- чивающую простоту программной реализации. 1. Приблизительно в середине массива выбираем элемент х. 2. Сравниваем с этим элементом все элементы массива. Элементы, меньшие х, образуют множество А, элементы, равные х, образуют мно- жество В, остальные элементы входят в множество С. 3. Повторяем рекурсивно по отношению к множествам АиС (эле- менты В уже находятся на своем месте) шаги 1 и 2 до исчерпания образу- ющихся подмножеств, а следовательно, до завершения сортировки.
В табл. 8.4 отображен процесс быстрой сортировки рассмотренного ранее массива. На каждом шаге производится преобразование всех сфор- мированных на предыдущем шаге подмножеств (отмечены фигурными скобками), т.е. всего массива. Курсивом выделены элементы, относи- тельно которых производится разбиение подмножеств. Программу целесообразно планировать на основе циклически за- пускаемой процедуры разбиения каждого ранее сформированного под- множества вида А и С на три новых, как указано в модифицированном алгоритме. При этом множества вида В пропускаются, так как для их эле- ментов сортировка закончена. Таблица 8.4. Пример быстрой сортировки Исходный массив 6 2 4 3 4 7 10 9 5 8 0 1 Шаг 1 {6 2 4 3 4 5 0 О {7} {Ю 9 8} Шаг 2 {2 0 1} {3} {4 4} {6 5} 7 {8} {9} {10} ШагЗ {0} {2 1} 3 4 4 {5} {6} 7 8 9 10 Шаг 4 0 {1} {2} 3 4 4 5 6 7 8 9 10 Однако опытный программист здесь может обнаружить «скрытые» пересылки, обусловленные необходимостью «склеивания» динамически формируемых подмассивов, с их неопределенным, переменным началом. Необходимо учесть, что каждое разбиение на подмножества не меняет их суммарную длину. То есть подмножества формируются «на том же месте», и пересылки носят локальный характер внутри одних подмножеств, не нарушая структуру и расположение других. При организации программы разбиения массива приходится все же пользоваться значительным объемом дополнительной памяти. Только подмассив А может располагаться (накапливаться) с начала разбиваемого массива. Подмассивы В и С, во избежание многократной коррекции рас- положения, целесообразно накапливать отдельно. При этом начала под- массивов А и В, а также В и С, должны отстоять друг от друга не менее чем на длину разбиваемого массива. Экономия памяти достигается лишь тем, что после каждого разбие- ния производится «склейка» массивов А, В и С на месте разбитого мас- сива. Следует учесть, что каждое расширение используемой памяти при- водит к увеличению числа «промахов» при обращении в кэш, а потому нежелательно. План выполнения основной процедуры разбиения в применении к исходному массиву, в виде «развернутого» цикла, показан на рис. 8.5.
«Склейка» массива на прежнем месте Рис. 8.5. План программы быстрой сортировки Таким образом, разбиение может производиться с использованием дополнительной памяти и продолжаться до вырождения подмножеств, что в конечном итоге приведет к получению упорядоченного массива. Необходимо отметить, что время выполнения программы суще- ственно зависит от организации кэша. Ведь сложность, помимо времен- ной составляющей, имеет составляющую, отражающую затраты памяти. Так, если большой массив представляется в кэше по частям, то совмест-
ная обработка элементов, близко расположенных в памяти, имеет более низкую вероятность «промаха», чем элементов, далеко отстоящих друг от друга. Это замечание может служить еще одним доводом в пользу моди- фицированной пузырьковой сортировки. Быстрая сортировка требует значительного увеличения затрат сверх- оперативной памяти, что на деле может снизить быстродействие, т. к. приводит к увеличению числа «промахов» при обращении в кэш и, сле- довательно, к росту степени использования операционной системы в вы- числительном процессе. В этом отношении модифицированная «пузырьковая» сортировка универсальна, проста в реализации и не требует дополнительных ресур- сов памяти. Сортировка методом прямого включения также дает хорошую за- грузку исполнительных устройств. Однако необходимость синхрониза- ции пересылок на последнем этапе выполнения основной процедуры на- хождения минимального элемента массива методом «пирамиды» может приводить к «разреженности» в выполнении команд во времени, к появ- лению пропущенных тактов. Следует учесть и необходимое увеличение вдвое объема используемой памяти. Другие известные методы сортировки, как правило, ресурсоемки и не реализуют «теоретическую» сложность алгоритмов при программной реализации, включая программы процессора £Р/С-архитектуры. Таким образом, отметим, что £Р/С-архитектура наиболее приспо- соблена к реализации двух модифицированных методов сортировки: «пу- зырьковой» и быстрой. Сложность первой — О(п2), сложность второй, улучшенной, — O(nlog2n). Программная реализация этих методов до- статочно проста, затраты на управление выполнением программы (ин- дексация, циклы) минимальны. Принцип предикатных вычислений и спекулятивного режима выполнения операций дает значительный эф- фект и исключает применение условных переходов. Он позволяет пол- ностью загружать работой исполнительные устройства процессора, обес- печивая высокую эффективность распараллеливания. 8.2. Оптимизация предикатных вычислений при решении задач поиска на процессоре ЕР/С-архитектуры Выше указывается на существование задач, для которых основным средством решения является механизм ветвления. В процессорах «тради- ционной» архитектуры ветвление производится с помощью последова-
тельных логических проверок и условных передач управления. Архитек- тура процессора £Р/С-архитектуры предусматривает предикатный меха- низм, позволяющий хранить условия ветвления — булевы переменные и производить спекулятивные вычисления, т. е. выполнять операции, ес- ли указанное при них логическое переменное имеет значение ИСТИНА (1). Это значительно снижает вес условных переходов в программе (хо- тя и поддержанных запуском дополнительного конвейера), а то и вовсе исключает их. Если в задачах сортировки используются анализ и пересылки от- дельных элементов массива, то в задачах поиска производится совмест- ный анализ «массив с массивом», что значительно затрудняет решение проблемы минимизации числа условных переходов. Поиск является одним из наиболее часто встречающихся действий при программировании. Отметим важность таких задач, как текстовый анализ, выделение подструктур генетического кода, нормальные алго- ритмы Маркова, кусочная аппроксимация временных рядов и др. Задача поиска формулируется следующим образом. Заданы массивы А = {ai, ..., ап} (текст) и В = bi, ..., bm (слово, эталон). Необходимо найти первое вхождение (индекс г) в массив А та- ких следующих подряд т элементов {а;, аг+1, • • •, аг+m-i}, что аг+j-i = bj^j = 1, ..., т. Прямой поиск Самый простой алгоритм поиска заключается в последовательном просмотре текста — элементов множества А и их сравнением с первым элементом В. При положительном результате сравниваются следующие элементы массивов и т. д. В случае появления отрицательного результата сравнения дальнейший анализ массива А продолжается со следующего элемента. Сложность этого поиска составляет O(nm). В табл. 8.5 представлен пример прямого поиска по шагам. Каждый шаг обусловлен переходом, в случае несовпадения элементов, к анализу, начиная со следующего элемента массива А. Таблица 8.5. Пример прямого поиска Массив К р О к О д и л Эталон к О д Шаг1 к О д Шаг 2 к О д ШагЗ к О д
На рис. 8.6 представлен план программы прямого поиска. Каж- дая явно наблюдаемая строка соответствует параллельно выполняемым командам, отображенным в одном «длинном» командном слове. Стол- бец соответствует одному исполнительному устройству (ИУ). Внутрен- ний цикл попарного сравнения элементов массивов показан в разверну- том виде. Выход успешный Выход безуспешный Рис. 8.6. План программы прямого поиска
Предусмотрено многократное выполнение команды условного пе- рехода на продолжение циклического перебора элементов массива А. Эти команды выполняются в спекулятивном режиме и требуют единствен- ной подготовительной команды запуска дополнительного конвейера. В случае первого несовпадения элементов массива и эталона единственный раз выполняется условный переход. Начальное смещение команд сравнения выполнено в предположе- нии о необходимости двух тактов для возможного использования резуль- тата. Следует признать высокую эффективность распараллеливания — высокий коэффициент использования ИУ и достижимость «теоретиче- ской» сложности алгоритма. КМП-поиск Данный алгоритм предложен Д. Кнутом, Д. Морисом и В. Праттом [10] и основан на соображении, что в процессе сравнения накапливается полезная информация, которую можно использовать в последующем по- иске, «перескакивая» по тексту вперед. А именно, если произошло совпа- дение при сравнении текста с несколькими начальными символами сло- ва, а затем последовал отрицательный результат сравнения, то для про- должения поиска необходимо сместиться по тексту на число совпавших символов. В табл. 8.6 показан пример поиска по данному алгоритму. Совпав- шие символы на каждом шаге выделены курсивом. Показано, что в слу- чае совпадения двух символов сдвиг слова для последующего сравнения производится на две позиции. Однако иллюстрируется упрощенный подход. Действительный ал- горитм значительно сложнее и основан на предварительном исследова- нии слова В — на составлении таблицы значений, определяющих вели- чину сдвига при частичном совпадении символов. Такая обработка слова оправдана при значительных размерах текста и при многократном поиске вхождения слова. Авторы утверждают, что сложность метода составляет O(n -I- т). На рис. 8.7 представлен план программы для упрощенного варианта КМП-поиска. Анализ этого плана показывает, что, несмотря на услож- нившуюся логику, возможно получение компактной программы при некоторых допущениях относительно особенностей выполнения опера- ций. Например, считаем, что условный переход, обозначенный в «длин- ной» команде, выполняется после окончания выполнения всех опера- ций, предусмотренных в этой же команде. Структура программы подтверждает принципиальную достижимость «теоретической» сложности упрощенного алгоритма КМП-поиска (она,
Таблица 8.6. Поиск по КМП-алгоритму Текст е л е - е л е — с р У б и л и Е л ь Слово е л ь Шаг 2 е л ь ШагЗ е л ь Шаг 4 е л ь Шаг 5 е л ь Шаг 15 1 1 1 1 1 1 1 1 1 1 1 1 1 1 И и 6 конечно, выше той, что объявлена авторами). Однако общий случай, тре- бующий расчета специальных таблиц сдвига слова-эталона вдоль текста, приводит к высокой трудоемкости и к сложной логике программы. При существовании других методов полиномиальной сложности использова- ние такого метода нецелесообразно. О применении БМ-поиска КМП-поиск дает выигрыш только тогда, когда неудаче предшество- вало некоторое число совпадений. В этом случае искомое слово (эталон, образ) сдвигается по тексту более чем на одну позицию. Однако совпадение символов встречается гораздо реже, чем несов- падение. В связи с этим, Р. Буер и Д. Мур предложили [10] метод, где сравнение символов начинается не с начала, а с конца слова. При обна- ружении расхождения между словом и текстом слово сдвигается вправо. Для определения длины сдвига, как и в общем случае КМП-поиска, ис- пользуется ранее построенная таблица. Иногда слово сдвигается вправо на всю свою длину. Сложность метода имеет порядок О(п). Для КМП-поиска удается построить упрощенный вариант, допус- кающий эффективное программирование. Однако указанная сложность БМ-поиска, по-видимому, носит рекламный характер и не учитывает за- трат трудоемкости как на предварительную подготовку таблиц, так и на развившуюся логику программы. Реализация противоположных направ- лений анализа слова и текста, переменной длины их относительного сме- щения при наличии многих альтернатив порождает программу весьма большого объема и значительного времени выполнения. Очевидно, что объявленная «теоретическая» сложность алгоритма недостижима даже на параллельном процессоре £Р/С-архитектуры. Таким образом, зачастую объявленная «теоретическая» сложность
Выход успешный Выход безуспешный Рис. 8.7. План программы КМП-поиска алгоритмов не затрагивает все подготовительные работы или неизбеж- ные затраты на организацию вычислительного процесса, которые зна- чительно увеличивают реальную сложность, достигаемую при оптималь- ном программировании. Это касается и задач поиска при их реализа- ции на процессоре столь развитой архитектуры, какой является EPIC- архитектура. Учитывая высокое быстродействие при развитом параллелизме, а также полиномиальную сложность методов, целесообразно применение таких методов поиска, как прямой поиск и упрощенный КМП-поиск.
Лекция 9. Вычислительные системы нетрадиционной архитектуры Рассматриваются некоторые «нетрадиционные» архитектуры, отража- ющие альтернативный поиск и эффективные решения при создании совре- менных архитектур многопроцессорных вычислительных систем. Среди та- ких архитектур: однородные вычислительные среды, легшие в основу транс- пьютерных сетей; «гиперкуб», совмещающий адресацию со структурой свя- зей, систолические матрицы. Исследуется способ построения самообуча- ющихся систем управления на основе применения ассоциативной памяти. Приводится пример практического построения масспроцессорной системы. Изучаются вопросы построения нейрокомпьютеров. Ключевые слова: процессорный элемент, однородная вычислитель- ная структура, транспьютерная сеть, систолическая матрица, «ги- перкуб», ассоциативная память, ситуационное управление, само- обучающаяся система управления, интеллектуальный терминал, нейрокомпьютер. 9.1. Однородные вычислительные структуры (среды) Однородные вычислительные структуры или среды (ОВС), как прави- ло, относятся к типу МКМД и представляют собой регулярную решетку из однотипных процессорных элементов (ПЭ). Каждый ПЭ обладает алгоритмически полным набором операций, а также операциями обмена или взаимодействия с другими ПЭ. Например, решетка с регулярными связями процессоров может быть такой, какая изображена на рис. 9.1. ОВС относится к ВС с распределенной памятью. Реализуется на основе микропроцессоров. С 1985 г. стало развиваться направление разработки транспьютеров ~ в интегральном исполнении соответствующих ПЭ ОВС. Т. е. ОВС в этом случае строится как транспьютерная сеть. Транспьютер — интегрально (в одном чипе или кристалле) выпол- ненное семейство системных компонент, в составе которых: процессор, таймер, память, каналы последовательного ввода-вывода, контроллер внешней оперативной памяти.
Рис. 9.1. Однородная вычислительная среда Транспьютер вместе с языком программирования Occam (основной язык программирования транспьютеров) позволяет создавать ВС типа МКМД. Легко видеть, что актуальность транспьютеров значительно снижа- ется в связи с развитием интеграции при построении микропроцессоров, с развитием их функций. Мы видели, что современный микропроцессор значительно превысил те функции, в том числе по обеспечению взаимо- действия, которые предполагалось реализовать в транспьютере. На ОВС можно строить вычислительные процессы по разным схе- мам. Хорошо реализуются конечно-разностные схемы, обработки изоб- ражений, геофизические задачи, моделирования поведения среды (аэро- динамические и гидродинамические задачи). Систолическая схема вычислений. Представляет собой конвейер, в котором данные проходят обработку «волной» с одной границы ОВС — входа к другой границе — выходу. Следом за одной может следовать другая волна и т. д. (рис. 9.2). В этом случае ОВС — систолическая матри- ца. На рисунке: в первом такте на вход подаются данные задачи 2, а за- дача 1 решается процессорами первой строки систолической матрицы; в следующем такте задача 2 решается первым уровнем, а задача 1 — вто- рым уровнем процессоров, на вход подаются данные задачи 3; на третьем уровне происходит очередное аналогичное смещение и т. д. Стрелками показано возможное перемещение обрабатываемой информации. Ранее отмечалось, что фактически конвейеры в составе многофунк- циональных АЛУ строятся для каждой операции отдельно. Есть конвей- еры сложения, умножения и т. д.
Рис. 9.2. Схема систолических вычислений Однако систолическая схема вычислений позволяет построить уни- версальный программируемый конвейер, настраивая каждую строку мат- рицы процессоров на параллельное выполнение уровней конвейеров раз- личных операций в порядке их следования. То есть операции могут дина- мически загружать систолическую схему, как это обусловлено следовани- ем команд выполняемой программы. Таким образом, в систолической матрице процессоров, ориентиро- ванной на применение в АЛУ, распараллеливание «в длину» успешно со- четается с распараллеливанием «в ширину», как и при решении произ- вольного потока задач. С помощью ОВС реализуется и ВС типа «гиперкуб». Гиперкуб — пространственное обобщение рассмотренной плоской решетки, где адресация процессоров (и соответственно, блоков распреде- ленной памяти) ставится в зависимость от структуры связей между ними. Проводится аналогия с n-мерным пространством. Рис. 9.3. Вычислительная система «гиперкуб»: а — двумерный, б — трёхмерный, в — четырёхмерный Возьмем единичный квадрат в двухмерном пространстве с верши- ной в начале координат (рис. 9.3а). Пусть его вершины соответствуют
процессорным элементам (ПЭ), а ребра — связям между ними. Пусть код, образованный координатами вершин, — адрес ПЭ. Тогда видно, что свя- зи между ПЭ существуют тогда, когда адреса отличаются не более чем в одном разряде. Тоже самое можно обнаружить для п = 3 (рис. 9.3,6), п = 4 (рис. 9.3в) ит.д. Значит, в общем случае ВС типа «гиперкуб» формируется следую- щим образом. Ее образуют 2П ПЭ, каждый ПЭ соединен ровно с п ПЭ. При длине адреса ПЭ, равной п, непосредственно связаны ПЭ, у кото- рых адреса разнятся не более чем в одном разряде. Структура типа «гиперкуб» обладает важными свойствами. 1. Из структуры «гиперкуб» легко получаются более простые структу- ры. Например, при п = 3 легко получается матричная ВС, на которой, в частности, хорошо решать задачи в конечных разностях. Как мы видели ранее, для этого удобна плоская решетка, где существуют непосредствен- ные (не транзитные) связи между тремя ПЭ (столбец составляют только два ПЭ, поэтому нет необходимости в связях в двух направлениях), как показано на рис. 9.4. Здесь можно в дополнение к адресам ввести (вре- менно) нумерацию ПЭ и поставить эти номера в соответствие адресам. Рис. 9.4. Матричная ВС на основе двумерного гиперкуба Процессоры образовали фрагмент плоской решетки для реализации конечно-разностного метода (метода сеток). Процессоры «прокатывают- ся» по области, на которой строится решение, например, задачи числен- ного интегрирования. 2. Второе важное свойство «гиперкуба» — возможность выделения задаче необходимых связных областей вычислительных ресурсов. Эти об- ласти соответствуют пространствам меньшей размерности, чем размер- ность всего «гиперкуба». Это означает, что т. к. процессоры адресуемы внутри некоторого адресного пространства, то каждой решаемой задаче может быть выделен вычислительный ресурс в пределах какого-то масси- ва со сквозной нумерацией процессоров. В n-мерном пространстве этот
массив принадлежит подпространству меньшего измерения. Т. е. значи- тельная часть разрядов адреса длины п для всех процессоров, образующих ресурс данной задачи, совпадает, а меняются только несколько последних разрядов. Например, предположим, что в предыдущем примере мы располага- ли не 3-мерным, а 6-мерным «гиперкубом». Пусть планирующая система в составе ОС из всего адресного пространства ПЭ 000000 ч-llllll выде- лила нам массив 101000 ч-101111, т.е. определенное 3-хмерное подпро- странство всего пространства процессоров. В это же время пусть другой задаче выделен массив 000000 ч- 001111, т. е. четырехмерное подпростран- ство и т. д. Как и для других ОВС, здесь предполагается наличие распределен- ной памяти. При формировании общего адресного пространства примем, что старшие разряды адреса памяти совпадают с адресом ПЭ. 9.2. Ассоциативные вычисления и ВС Главное отличие ассоциативной ВС от обычной системы последова- тельной обработки информации состоит в использовании ассоциативной памяти или подобного устройства, а не памяти с адресуемыми ячейками. Ассоциативная память (АП) допускает обращение за данными на основе их признака или ключевого слова: имени, набора характеристик, за- дания диапазона и т. д. Распространенный вид АП — таблица с двумя столбцами: «запрос- ное поле — ответное поле». Строка таблицы занимает регистр памяти. По ключевому слову обрабатываются запросные поля: производится поиск на основе сравнений и выдается результат из одного (или более) ответ- ных полей. При помощи маскирования можно выделить только те поля в ключевом слове, которые нужно использовать при поиске для сравнения. Типичными операциями сравнения, выполняемыми ассоциативной памятью, являются: «равно — не равно», «ближайшее меньше чем — бли- жайшее больше чем», «не больше чем — не меньше чем», «максимальная величина — минимальная величина», «между границами — вне границ», «следующая величина больше — следующая величина меньше» и др. Т. е. все это есть операции отношения и определения принадлежности. Поскольку ассоциативные ВС характеризуются только активным использованием АП в вычислениях, то в целом эти ВС обладают обыч- ными свойствами, могут производить сложные преобразования данных и принадлежать типу ОКМД (STARAN, РЕРЕ) или МКМД. Для парал- лельного обращения (для ускорения поиска) АП разбита на модули (32 модуля — в STARAN).
Когда в 1980 г. был провозглашен так называемый «Японский вызов» о построении ВС сверхвысокой производительности, то одним из пунк- тов была указана необходимость самого широкого использования прин- ципов самообучающихся систем — систем, способных накапливать опыт и выдавать результат решения задачи без счета самой задачи. Это значит, что применение ассоциативных ВС неотделимо от проблемы искусствен- ного интеллекта. Предположим, мы пользуемся значениями функции у = /(х). Мы можем запрограммировать счет этой функции на PC, и каждый раз, когда нам надо, задаем х и запускаем программу, пользуясь прекрасным совре- менным сервисом. Предположим, та же функция сложна, а ее счет — важный элемент алгоритма управления в реальном времени. Решение приходит сразу: за- дадим эту функцию таблично, а для ускорения выборки включим в ВС ассоциативную память. Предусмотрим на ней операции, позволяющие производить простейшую интерполяцию. А именно, для данного значе- ния х найти наибольший xi < х и наименьший х? х. Для них выбрать /(xi) и /(хз). Тогда вместо счета точного значения /(х) процессору оста- ется произвести хотя бы линейную интерполяцию 7(х) = /(хх) + Х2 — Х\ надо только быть уверенным в достижении нужной точности. Однако в повседневной жизни мы очень часто решаем труднофор- мализуемые задачи, когда алгоритм решения не очевиден. Но мы учимся, обретаем опыт, затем оцениваем складывающуюся ситуацию на «похо- жесть» и принимаем решение. Простейшая задача: как мы автоматически определяем, на сколько надо повернуть рулевое колесо, чтобы остаться на дороге? Ведь первый раз мы въезжали в бордюр! Значит, некая таблица постепенно сложилась и зафиксировалась в нашем сознании. Пожалуй, наиболее полно автоматически и с наибольшей практич- ностью решение задачи самообучения представлено в артиллерии, точнее — в правилах стрельбы. После занятия огневой позиции подготовка установок для ведения опЩ занимает много времени. На рассчитанных установках по каждой цели производится пристрелка, когда цель захватывается в широкую вил- ку, затем по наблюдениям вилка «половинится» до тех пор, пока на се- редине узкой вилки не переходят на поражение. После стрельбы следу- ет замечательная команда «Стой, записать...», по которой наводчик на щите орудия пишет номер цели и все пристрелянные установки по ней.
Такая работа проделывается и по фиктивным целям — реперам. Посте- пенно при «работе» на данной местности запоминаются пристрелянные установки по многим целям и реперам. С их появлением и развитием под- готовка данных по вновь появляющимся целям резко упрощается, т. к. сводится к переносу огня от ближайшей цели или репера, т. е. к внесению поправок по дальности и направлению. Доказано, что при этом достаточ- но сразу назначать захват цели в узкую вилку, т. е. пристрелка упрощается. Правила стрельбы существуют века, однако вряд ли кто-то осознавал те- оретически, что речь идет о реализации самообучающейся системы. Для трудноформализуемых задач управления или для увеличения про- изводительности вычислительных средств известно так называемое ситуационное управление. Оно заключается в том, что для каждого значе- ния вектора, описывающего сложившуюся ситуацию, известно значение вектора, описывающего то решение, которое следует принять. Если все ситуации отразить невозможно, должно быть задано правило интерполя- ции (аналог интерполяции, обобщенной интерполяции). Итак, пусть исходная ситуация характеризуется вектором X = {xi, ..., хт}, По значению X, т. е. по его компонентам, принимается ре- шение Y, также представляющее собой вектор, Y = {у1у ..., уп}. (Значения X uY могут определяться целыми и вещественными, буле- выми, Изначально они могут иметь нечисловую природу: «темнее — свет- лее», «правее — левее», «ласковее — суровее» и т. д. Мы не будем рассмат- ривать проблему численной оценки качественных или эмоциональных кате- горий,) Предположим, для любых двух значений и %25 а также Yi и Y2 определено отношение х^ (или наоборот), у^ уФ (или наобо- рот). Структура ассоциативной памяти и общий вид ее обработки показа- ны на рисунке 9.5. Пусть поступила входная ситуация X, для которой необходимо най- ти решение Y. В АП находятся два вектора Хг и Х2, минимально отлича- ющиеся по всем координатам от вектора X, для Для этих векторов там же записаны векторы решения Y± и Y2 соответственно. Однако если для ком- поненты xi выполняется условие Xi x^\xi ж^), то должно выпол- няться условие Xi (xi ж^), г = 1, ..., т. Таким образом, отыски- вается «вилка», которой принадлежит входная ситуация. Тогда, опираясь на известные решения на границах этой вилки, необходимо выдать про- межуточное решение для данной ситуации. Это можно сделать методом
Рис. 9.5. Структура и обработка ассоциативной памяти той же обобщенной интерполяции + i = i... г(Х,Х2) = т J=1 г(Х, Х2) и г(А\, Х2) (находится аналогично) — расстояния между векто- рами X и Х2, а также Хг и Х2. Если известно, что точность Y достаточна, принципиально возмож- но дополнение АП новой строкой т. е. информацией о новом полученном опыте. Однако динамика развития и уточнения АП как базы знаний пред- ставляется иной. Далеко не всегда по ошибочному принятию решений целесообразно развивать базу знаний. «Учение на ошибках» может при- вести к трагедии (или к частному срыву процесса управления), особенно на этапе обучения системы. Обучение системы целесообразно проводить на достаточно точной модели, максимально использующей точный расчет компонент решения. Применение модели для обучения используется не только на специаль- но предусмотренном этапе обучения системы, но и вне реального цикла
управления, т.е. когда система работает в режиме дежурства, параллельно с функциональным контролем. Тогда алгоритм ее работы представлен на рис. 9.6. Рис. 9.6. Самообучающаяся система управления 9.3. ВС Connection Machine В упомянутом выше «Японском вызове» провозглашалась необхо- димость объединения в одну систему десятков и сотен тысяч микропро- цессоров. А есть ли опыт создания таких систем? К такому опыту можно отнести семейство ВС, разработанное фир- мой Thinking Machine. Оно является единственной крупной коммерче- ской реализацией идей ОВС. СМ-1 выпущена в 1986 г. Через год была вы- пущена СМ-2 с удвоенной производительностью в 2,5 млрд.оп./с. О ней следует говорить в связи с попытками воспроизвести ее в нашей стране на архитектурном уровне.
СМ-2 комплектуется (рис. 9.7) из блоков параллельной обработки по 16 К узловых одноразрядных процессоров (элементарных процессоров — ЭП) каждый. В комплекс входят до 8 фронтальных ЭВМ, на которых реа- лизуется вычислительный процесс. (Следовательно, как в ПС-2000, соб- ственно блоки СМ образуют интеллектуальный терминал для выполне- ния операций по заявкам фронтальных (там — мониторной) ЭВМ.) Рис. 9.7. Схема масспроцессорной системы Connection Machine Узловой (матричный) коммутатор обеспечивает связь фронтальных ЭВМ с секвенсорами блоков параллельной обработки в соответствии с вы- числительным процессом и заявками пользовательских задач. Подсисте- ма ввода-вывода связывает блоки параллельной обработки с периферий- ными устройствами массовой памяти и графическими дисплеями. Секвенсор — специализированная 96-разрядная микро-ЭВМ управ- ления параллельной обработкой. На входе он получает поток высокоуров- невых команд виртуальной машины (образуемой множеством фронталь- ных ЭВИ) и аргументов. Они передаются от коммутатора. На выходе он
генерирует последовательность низкоуровневых команд элементарных об- рабатывающих процессоров, команды синхронизации и операций с па- мятью. Основные операции производятся над 32-разрядными данными. Для выполнения их используются по 32 элементарных процессора. По- этому каждые 32 ЭП имеют акселератор для выполнения операций с пла- вающей запятой, в том числе — с двойной точностью. Память (RAM — прямоадресуемая, с произвольным доступом) распре- деленная. Каждый ЭП имеет 64 Кбит. Т.е. общий объем памяти — 512 Мбайт (в 64 К-процессорном варианте). Пользователю архитектурные особенности СМ предоставляются на уровне набора команд параллельной виртуальной машины, отображен- ной в ассемблере Paris. Ассемблер обеспечивает богатый набор от про- стых арифметических и логических операций до высокоуровневых APL- подобных операций (APL — параллельный PL, ЯВУ). Реализован микро- программно в секвенсорах, и, как говорилось выше, этим обеспечивается преобразование потока высокоуровневых команд и аргументов на язы- ке Paris в последовательность элементарных операций обрабатывающих процессоров. СМ использует существующие программное обеспечение и среды, насколько это возможно. Языки программирования включают минимум расширений для поддержки параллельных конструкций, и пользователю нет необходимости изучать новый стиль программирования. 9.4. Нейронные сети и нейрокомпьютеры Применяемые нейросети являются моделями нейросетей живых ор- ганизмов, принципы которых были известны уже в 1940—1950 годах, а с развитием микроэлектроники стали реализуемыми. Нейросети как один из основных средств решения задач искусствен- ного интеллекта (ИИ) привлекательны высокой производительностью при решении задач экспертных систем, распознавания образов, ситуаци- онного управления, оптимизационных, — т. е. всех тех задач, которые мы привыкли решать не методом расчета, а на основе опыта, самообучения, наконец, интуиции. Высокая производительность, обусловленная самим методом, дополнительно достигается за счет больших возможностей па- раллельной обработки нейросети, как будет показано далее. Предварительным знакомством с системами ИИ можно считать рас- смотрение ассоциативных ВС. Характерно то, что исследование и вос- производство нейросетей первоначально проводились в рамках решения задачи построения ассоциативной памяти в совокупности с операциями ее заполнения, ведения и использования.
Принципы нейросети. Нейросеть содержит узлы — аналоги нервных клеток и их соединения — синапсические связи. Предполагается, что в че- ловеческом мозге свыше 100 млрд, нейронов. Фрагмент нейросети представлен на рис. 9.8. Рис. 9.8. Фрагмент нейронной сети Либо каждый нейрон управляем извне, либо сети строятся по прин- ципу самоуправления, используя обратные связи. А именно, можно регу- лировать значения весов синапсических связей {wj и значения порогов hi. Функции f бывают различны, но просты по объему вычислений. В простейшем случае f совпадает с линейной формой — указанным аргументом. Т. е. по всем дендритам с учетом их весов производится сум- мирование и сравнение с порогом. Величина превышения порога являет- ся величиной возбуждения нейрона. Она передается через его ветвящий- ся аксон в соответствии со связями данного нейрона. В некоторых сетях величина возбуждения нейрона может принимать только два значения: возбужден (1), не возбужден (0). В более сложном случае, например, в одной сети распознавания зри- тельных образов, где реализовано самоуправление, схема действия ней- рона показана на рис. 9.9. Это так называемые сигмоидные нейроподоб- ные элементы, более точно моделирующие процессы реального нейрона. В сети распознают входной слой, воспринимающий внешние возбу- ждения (например, на который подается видеоизображение), и выходной слой, определяющий результат решения задачи. Работа сети тактируется для имитации прохождения по ней возбуждения и управления им. Если это, например, видеоизображение, то его подача на входной
Рис. 9.9. Сигмоидный нейроподобный элемент слой возбуждает в некоторой конфигурации множество нейронов. Мож- но так построить сеть, что через некоторое число тактов окажется возбу- жденным один нейрон выходного слоя. Существуют два режима работы сети: режим обучения и режим рас- познавания. Пусть мы на входной слой подали и поддерживаем некоторый образ, например, букву А. Через некоторое время возбудится нейрон выходного слоя, который мы можем отметить как образ А. Т. е. его возбужденное состояние мы вос- принимаем как ответ: «Это буква А». Введем снова букву А, но с есте- ственными искажениями. Может возбудиться тот же нейрон, но может и другой. Мы хотим «научить» систему, заставить ее ответить, что это — буква А, т. е добиться возбуждения того же нейрона выходного слоя. Тогда по некоторому алгоритму (один из известных и весьма распро- страненных алгоритмов называется алгоритмом обратного распростране- ния ошибки; в нем воспроизводится подход, используемый в динамиче- ском программировании) мы меняем веса и пороги в сети на пути прохо- ждения возбуждения так, чтобы заставить возбудиться нужный нейрон. Так, предъявляя множество эталонов и регулируя параметры сети, мы производим ее обучение данному образу. (Математические проблемы несовместимости управления параметрами для разных эталонов оставим в стороне: в живой природе такой процесс проходит успешно.) Обучение заканчивается тогда, когда вероятность «узнавания» до- стигнет требуемого значения, т. е. необходимость корректировки пара- метров по предъявляемым эталонам возникает все реже. Теперь можно работать в режиме распознавания — в том ответственном режиме, для которого сеть создавалась. Предъявляем сети различные буквы. Можем быть уверены, что с большой вероятностью, если мы предъявим случайно
искаженную и даже зашумленную букву А (конечно, в допустимых пре- делах), сеть ее распознает, т.е. возбудится соответствующий нейрон вы- ходного слоя. Продолжим обсуждение применимости. Так, в экспертных системах требуются точные данные о ситуации, чтобы выдать соответствующее ей заключение. Нейронной сети такой подход «чужд». Она выдает ответ на вопрос: «на что похожа данная си- туация» и, следовательно, какое должно быть заключение. Т. е. нейросеть имитирует ассоциативное мышление. В связи с этим, получают распространение банковские системы (банковские пакеты для PC) — для обоснования финансовых операций, оценки финансового состояния различных фирм, обработки большого количества сделок и т.д. Крупнейшие банки мира используют нейросе- тевые методы решения своих задач. Известны применения для оценки состояния электроэнергетиче- ской системы, распознавания рукописных текстов и т. д. Важная область применения — ситуационное управление. Когда же говорят о нейрокомпьютерах, то сегодня это обычные по архитектуре ВС, а чаще — типа PC, на которых реализована нейросетевая задача. Однако обращает на себя внимание несложность вычислений и воз- можность распараллеливания. Известен опыт построения нейросетей на транспьютерах. Нейрон — один транспьютер. Транспьютеры жестко связаны между собой в соответ- ствии с топологией сети. С развитием микропроцессорных систем это стало представляться невыгодным, неуниверсальным, трудно отслеживающим изменения в се- ти — количества нейронов и их связей. Здесь целесообразно вернуться к рассмотрению ВС типа SPMD в ка- честве нейропроцессора. Она идеально соответствует требованиям зада- чи, если производить распределение нейронов между процессорами. Лег- ко просматривается план обработки нейросети как в режиме обучения (например, при реализации метода «обратного прохождения ошибки»), так и в режиме распознавания.
Лекция 10. Асинхронная ВС на принципах «data flow» Обсуждается проблема практического применения принципа data flow при построении асинхронных вычислительных систем. В таких системах коммутация взаимодействия процессорных элементов решающего поля для выполнения программы отделена от собственно вычислений и слабо зави- сит от них. Формулируются принципы составления программы коммутации и анализируется ее выполнение. Ключевые слова: процессор коммутации, процессор памяти, очередь заявок, виртуальный вычислительный ресурс, адресный генератор. 10.1. Структура и программирование Рассмотрим модель ВС, управляемую потоком данных (data flow), сочетающую в себе принципы «фон-Неймановской» и «не-фон-Нейма- новской» архитектур. Вычислительный процесс представлен не традиционной програм- мой, а программой коммутации исполнительных устройств — ПЭ и про- цессора памяти (рис. 10.1). Выполняет ее процессор коммутации (просто процессор). Обрабатывая команду за командой, и даже выполняя коман- ды перехода (т.е. работая по принципу «фон-Неймана»), он по каждой анализируемой команде сообщает некоторому выбранному для этого ПЭ решающего поля, в один из свободных регистров его буфера, код предпи- сываемой ему операции и адрес некоторого другого или даже этого же ПЭ, точнее, адрес регистра его буфера, куда следует отправить результат в качестве операнда. Этим он формирует отдельную инструкцию в буфере выбранного ПЭ. Таким образом, каждый регистр каждого буфера имеет места для за- писи кода операции, всех операндов (почему именно четыре, рассмот- рим далее), результата операции и адреса, по которому он должен быть отправлен. Каждый ПЭ «смотрит» на свой буфер и по мере своего освобожде- ния пытается выбрать для выполнения ту инструкцию, в текст которой поступили все операнды. Одним из ПЭ является процессор памяти, который в ходе анализа каждой команды процессором получает заявки к памяти данных и тоже располагает адресом регистра буфера ПЭ, куда он должен послать резуль- тат считывания. Для выполнения записи ПЭ располагает адресом заявки
Рис. 10.1. Схема потоковой ВС на запись в буфере процессора памяти (в очереди заявок), куда он пошлет нужный результат, после чего эта заявка сможет быть рассмотрена для вы- полнения. Таким образом, в ходе работы процессора коммутации исполнитель- ные устройства ВС оказываются информационно связанными между со- бой так, что могут работать асинхронно, но соблюдать преемственность в обработке данных. Параллелизм проявляется полностью и с максималь- ной естественностью, с минимальными накладными расходами. Принципиально возможно окончание работы процессора задолго до того как закончится выполнение работ решающим полем; сдерживают условные переходы и ограниченность вычислительного ресурса (в част- ности, объемы буферов). Упрощенно рассмотрим принцип программирования и даже транс- ляции для данной ВС. Пусть команда программы коммутации имеет трехадресную струк- туру в Ai А2 Аз , где Л i, А2 — адреса операндов (ОПД или регистра буфера),
Аз — адрес регистра буфера того ПЭ, который будет выполнять инструк- цию, сформированную на основе этой команды. При отсутствии виртуа- лизации ресурса такой адрес будем задавать парой (номер ПЭ, номер ре- гистра буфера). Пусть при п = 4 задано выражение А := ((а + 6)(с + d)(e + f + д) - hig) : (fc(Z - у/т)) n22J?3 Аа6 + Ы + хе/ + <? + xhi х j х — klrriy/— х ::= . По его записи на ПОЛИЗ легко построить информационный граф G (рис. 10.2), отражающий возможный параллелизм. Рис. 10.2. Параллельное выполнение арифметического выражения Данный граф имеет так называемую ярусно-параллельную форму, на- глядно иллюстрирующую возможность параллельного выполнения всех операций, которые составляют один ярус. Следуя разбиению на ярусы, сформируем команды (рис. 10.3), со- ответствующие первым возможным параллельным операциям. При этом для каждой операции назначим ПЭ и номер регистра его буфера, в кото- ром при выполнении программы коммутации будет формироваться со- ответствующая ему инструкция. Заявки к памяти данных формируются в озп. Для этого преобразуем запись на ПОЛИЗ: а А ь с е (+,1,1) (+,2,1) d7 f h j x —klm—>(</,!,2)—x
Nk КОП Ai а2 A3 1 + а ь (1,1) 2 + с d (2,1) 3 + е f (3, i) 4 X h i (4,1) 5 А т (1,2) 6 X (1,1) (2, 1) (2, 2) 7 + (3,1) g (3,2) 8 X (4,1) j (4,2) 9 — 1 (1,2) (1,3) 10 X (2,2) (3,2) (2,3) 11 X к (1,3) (3, 3) 12 — (2,3) (4,2) (4,3) 13 (4,3) (3,3) A Рис. 10.3. Программа коммутации Конструкции, объединенные стрелками, дают первые пять команд программы коммутации. Предположим, что эти пять операций выполнены. Результаты нахо- дятся на тех же регистрах. С учетом имен этих результатов (адресов зани- маемых регистров), перепишем запись на ПОЛИЗ. А(1,1)(2,1) х (3,1)^ + х(4,1)j х —fcZ(l,2) — х . Теперь условно выполняем операции следующего яруса, последова- тельно занимая для этого регистры буферов ПЭ: (i,i)^ (3,1)\ (4,1)\ *\ А (х,2,2) (+3,2) х (x,4,2)-fc (-, 1,3)х::= (2,1)^ (1,2)^ Записываем следующие 6—9 команды программы. После их условного выполнения запись на ПОЛИЗ преобразуется А(2,2)(3,2) х (4,2) — fc(l,3)x . Снова назначаем ПЭ-исполнители и преобразуем эту запись: (2,2) к А (х,2,3)(4,2) — (х,3,3) (3,2) (1,3) Это позволяет сформировать команды 10—11.
С учетом их условного выполнения формируется запись 4(2,3) (4,2)- (3,3) ::= По ней формируем выполнение единственной операции следующе- го яруса (2,3) \ А (—,4,3)(3,3) ::= (4,2) Формируем команду 12. Затем вновь преобразуем запись А(4,3)(3,3) ::= и записываем схему условного выполнения последней операции (4,3) \ А (:,1,4):= (з,з) Z Формируем команду 13. Этой командой показано, что принципи- ально выбор ПЭ и регистра его буфера могут производиться процессором (а не программистом или транслятором); тогда по третьему адресу можно сразу указывать адрес записи в память. Рассмотрим, как эта программа выполняется процессором коммута- ции (процессором). По команде 1 в регистр (1,1) записывается код операции «+»; в сво- бодных регистрах ОЗП (очереди заявок к памяти) формируются инструк- ции ПП (процессору памяти) «считать а — послать в (1,1), в первую по- зицию (в позицию первого операнда)», «считать Ъ — послать в (1, 1), во вторую позицию». По команде 2 формируются код операции в регистре (2,1) и две за- явки ПП на считывание и отсылку в (2,1). Аналогично выполняются команды 3 и 4. По команде 5 записывается код операции «у/» в регистр (1,2) и фор- мируется одна заявка на считывание т и отсылку в этот регистр. По команде 6 в регистр (1,1) записывается адрес (2,2), первая пози- ция, куда должен быть отправлен результат выполнения операции. Ана- логично, в регистр (2, 1) записывается адрес (2, 2), вторая позиция, как адрес отсылки результата. Так прослеживается выполнение всех команд. При выполнении команды 13, как уже говорилось выше, отсутствует явное задание ПЭ-исполнителя команды и адрес регистра в его буфере,
где соответствующая инструкция должна формироваться. Учитывая по- следовательную загрузку ПЭ, здесь должен быть указан адрес (1,4). Адрес записи результата указывается сразу, и это говорит о том, что процессор сам ведет учет и использование ПЭ. Действительно, при программировании используется виртуальный вычислительный ресурс (иллюстрация его будет ниже), т. е. используются математические адреса процессорных элементов. Преобразование мате- матических адресов ПЭ в физические, т. е. назначение ПЭ-исполнителей и запоминание этого назначения в таблицах производит адресный ге- нератор. Виртуализация вычислительного ресурса обеспечивает преем- ственность программ при разных комплектациях, мультипрограммный и мультипроцессорный режимы, когда с одним решающим полем связаны несколько процессоров коммутации. На рис. 10.4 представлена схема формирования и коммутации ин- струкций в регистрах буферов ПЭ и в очереди заявок к памяти. Рис. 10.4. Формирование инструкций процессорным элементам Почему же в регистре буфера ПЭ предусмотрены четыре позиции для операндов? Пятиадресные команды используются для выполнения команд ком- мутации типа «if - then - е&е». Запрограммируем счет выражения A:— ifa + b> с then if с- d> е then X else В - D else Q
Сформируем три команды для коммутации счета составляющих арифметических операторов (рис. 10.5). Затем последовательно исполь- зуем две команды УСЛ для коммутации внутренней и внешней конструк- ций типа «if - then - е&е». 1 + а ь (1,1) 2 — с d (2,1) 3 — В D (3,1) 4 УСЛ (2,1) е (4,1) X (3,1) 5 УСЛ (1,1) с А (4,1) Q Рис. 10.5. Программа коммутации условного выражения Команда УСЛ А1А2А3А4А5 интерпретируется как Аз := г/(А1) > (А2) then (А4) else (А5) и записывается в двух словах. 10.2. Виртуализация ресурса Как говорилось выше, при программировании используются вир- туальные адреса процессорных элементов в том случае, когда надо «на- звать» промежуточные результаты счета. Эти адреса можно рассматри- вать как адреса некоторой условной памяти, где каждой записи соответ- ствует единственное считывание, после чего адрес может быть переис- пользован. В общем случае произвольный объем программ при ограниченном ресурсе, в том числе объеме буферов, затрудняет статическое планирова- ние динамического использования буферов вычислителей. Составляемая программа должна быть инвариантна относительно состава решающего поля. Одновременное независимое выполнение нескольких программ в ВС, управляемой потоком данных в мультипроцессорном и мультипро- граммном режимах, требует организации многоканального доступа к сов- местно используемому вычислительному ресурсу, его динамического рас- пределения. При динамическом планировании использования вычисли- тельного ресурса коммутация вычислителей для выполнения отдельной программы может быть различной для каждой реализации в зависимости от условий совместного выполнения программ. Таким образом, возника- ет проблема виртуализации вычислительного ресурса, т. е. необходимость использования при программировании или трансляции условных, мате- матических адресов вычислителей и формирования по ним физических
адресов вычислителей в процессе выполнения программы на основе ди- намического распределения используемого ресурса. Для составления программы в математических адресах вычислите- лей предположим, что мы располагаем единственным условным вычис- лителем с буфером, объем которого определен адресным пространством. Тег адреса может указывать на то, что этот адрес адрес вычислителя. Сред- ствами виртуализации вычислительного ресурса в многоканальной ВС, содержащей m процессоров коммутации, являются адресный генератор АГ и таблицы соответствия TCk, к = 1, ..., т. Если любой из адресов = 1,2,3 (команды программы, выпол- няемой на fc-м процессоре), является математическим адресом вычисли- теля, производится обращение к TCk, состоящей из строк соответствия вида Ui —> (ij, Sj), где Ui — математический адрес некоторого вычисли- теля; — соответствующий ему физический адрес. В случае совпа- дения Ад = Ui фиксируется найденный физический адрес (г?-, а ис- пользованная строка исключается из TCk- Необходимость исключения строки следует из того, что каждый результат вычислений используется лишь один раз. При безуспешном обращении к TCk, АГ выдает очеред- ной физический адрес вычислителя в порядке последовательной загрузки вычислителей решающего поля и при наличии свободных регистров в их буферах. Одновременно для данного математического адреса и найден- ного физического, в первом свободном регистре ТСк формируется стро- ка соответствия. Если по третьему адресу команды не указан математический ад- рес вычислителя (например, указан адрес ОПД), то АГ в порядке по- следовательной загрузки вычислителей формирует физический адрес вычислителя-исполнителя данной команды. По этому адресу записыва- ется инструкция для выполнения операции, указанной в команде. В многопроцессорной ВС адресный генератор должен быть авто- номным быстродействующим устройством, которое, в соответствии с по- следовательной загрузкой вычислителей, выдает всем процессорам одно- временно адреса вычислителей для их использования при обработке ад- ресов команд. Для ускорения его работы может быть применен метод си- туационного управления. Метод предполагает, что в соответствии с наличием свободных реги- стров в каждом буфере-вычислителе и с учетом буферов, участвовавших в предыдущей выдаче, формируется новая группа адресов вычислителей. Использование этих адресов влияет на состояние буферов Bi и на опреде- ление в них новых свободных регистров, которые могут быть задейство- ваны далее. Принципиально возможны схемы, исключающие использование в программе коммутации адресов вычислителей для непосредственного
обмена данными. В этом случае вычислители получают операнды, рас- считанные на других вычислителях, только через ОПД. Это исключает необходимость реализации механизмов виртуализации вычислительного ресурса, но увеличивает время передачи данных и частоту обращения к ОПД. Более детально механизм виртуализации вычислительного ресурса рассмотрим на примере. Пусть на процессорах I и II независимо выполняются программы коммутации счета значений двух выражений, преобразованных в бесско- бочную запись: I: 4 := е х / + $ х (/Ш) —> Aef х ght + х + := II: В := (а + 6) х с + d —► Bab + с х d+ := На рис. 10.6 а представлены программы в математических адресах вычис- лителей. а) I' Nk КОП А 2 ^3 II' Nk КОП Л1 Л 2 Л3 0 е f Z>0 0 + a b Z>0 1 + h t bl 1 bO c bl 2 g bl b2 2 + bl d В 3 + ЬО Ь2 А б) 0 е f (1,1) + h t (2,1) + a b (3,1) g (2,1) (4,1) (3,1) с (1,2) + (1,1) (4,1) A + (1,2) d В t Процессор I Процессор II Рис. 10.6. Организация виртуального вычислительного ресурса: а — транслиро- ванные программы, б — программы при совместном выполнении Пусть при независимом выполнении программ коммутации на двух процессорах сдвиг по времени начала их выполнения привел к тому, что команда 2 программы I выполняется одновременно с командой 1 про- граммы II (рис. 10.6 б), за один такт работы процессора полностью обра- батывается одна команда программы. Предположим, что решающее поле содержит четыре вычислителя с номерами 1 — 4, которые используются для счета значений данных выражений.
В первом такте, начиная загрузку буферов вычислителей, АГ по впервые встретившемуся математическому адресу формирует физиче- ский адрес (1, 1) вычислителя, производящего операцию умножения. В ТС\ записывается строка соответствия г/0 —► (1,1). Во втором такте АГ выдает первому процессору физический адрес вычислителя (2, 1), второму — адрес (3, 1). В ТС\ формируется строка соответствия Ух —> (2,1), в ТС2 — уо —> (3,1). В третьем такте с помощью ТСх на первом процессоре формируется второй адрес (2, 1), а с помощью АГ — адрес вычислителя-исполнителя (4, 1). В ТСх формируется строка соответствия у2 —> (4,1), а строка ух —> (2,1) уничтожается. В этом же такте с помощью ТС2 на вто- ром процессоре вместо адреса у^ формируется адрес (3, 1) (соответству- ющая строка уничтожается), а с помощью АГ — адрес вычислителя- исполнителя (1,2). В четвертом такте с помощью ТСх формируются первый и второй адреса на первом процессоре, а с помощью ТС2 — первый адрес на вто- ром процессоре. Для выполнения команд АГ выделит вычислители (2, 2) и (3, 2), которые должны будут отправить результаты вычислений по ад- ресам А и В соответственно. Представим пример программы выполнения операции «свертки массива», т. е. преобразования вида «вектор-скаляр». В нем отражены ин- дексация и виртуализация вычислительного ресурса. Построим программу нахождения максимального элемента в масси- ве, с = max{ai, а2? • • •, Um}- Пусть bi — математические адреса ПЭ. По ним будут автоматически формироваться пары (номер ПЭ, номер регистра его буфера). ПЭ будут вы- полнять предполагаемые операции и хранить их результаты. Математиче- ские (виртуальные) адреса ПЭ принадлежат некоторой области адресного пространства или могут сопровождаться признаком или тегом. Тогда план вычислений для т — 7 может быть таким, как показано на рис. 10.7. Программа без пояснений приведена на рис. 10.8. Как видно из рисунка, принципиально просто реализуются базиро- вание, индексация и выполнение векторных операций. 10.3. Дисциплина обращения к памяти данных Так как процесс коммутации процессорных элементов, включая процессор памяти, отделен от процесса вычислений и исполнительные
Nk КОП h Ai h а2 h Аз 0 ЗАГ мх «ао» м2 <т> м4 1 ЗАГ м3 «с» м5 2 ЗАП Ml Ьо 3 ЦИКЛ м2 17777 4 ЗАП Ml 00001 м4 bl 5 МАХ м5 Ьо м5 Ь1 м2 Ьо 6 м+ Ml 00001 м2 00001 7 м+ м4 00001 м5 00002 8 кц 9 ЗАП м5 Ьо м3 0 ЗАГ Ml ««» М2+2 <п> Mi+1 00002 1 ЗАГ м2 Ml М3 «С» М2+1 00001 2 М+ м2 М2+2 М2+2 17777 3 ВМАХ Ml Mi 00001 м2 4 м+ м2 М2+2 5 ЗАП м2 17777 м3 Рис. 10.8. Программы нахождения максимального элемента в массиве: а — с тра- диционным набором команд, б — с использованием групповой операции
устройства работают асинхронно, важно обеспечить в ПП порядок обра- щения к ОПД, предусмотренный алгоритмом преобразования данных. В противном случае возникает возможность нарушения последовательно- сти изменения определенных данных, находящихся в памяти. Конкретно это означает, что последовательность обращения к каждой ячейке памяти по записи и считыванию в процессе выполнения операций должна быть такой, которая предусмотрена алгоритмом. Сохранение такого порядка облегчается последовательной обработ- кой команд на процессоре, допускающей упорядочение заявок к памяти в ОЗП. Здесь в основном воспроизводится та же схема обработки потока заявок, которая рассматривалась при динамическом распараллеливании на уровне команд в лекции 2. Рассмотрим фрагмент записи алгоритма: а := а + Ь; с := а х с. Он преобразуется в две команды коммутации: -{-aba хасс с очевидностью определяющие обязательное выполнение порядка обра- щения к ячейкам а и с. Считаем, что при обработке каждой трехадресной команды процес- сор (коммутации) формирует до трех заявок к ОПД: две на считывание (и отсылку по адресу ПЭ-исполнителя) и одну на запись. Адрес заявки на запись сообщается ПЭ-исполнителю, чтобы впоследствии он мог ее до- полнить записываемым кодом. В рассматриваемом примере для каждой команды формируются по три заявки к ОПД. Упорядочение по времени заявок к ОПД, в которых указан один и тот же адрес, обеспечивается тем, что при выборе для исполнения адрес ячейки ОПД, указанный в каждой заявке, сравнивается с адресами ячеек ОПД, указанными в еще не исполненных (находящихся в ОПД) заявках, пришедших ранее. Заявка может быть выполнена лишь в том случае, если выполнены все заявки по указанному в ней адресу, поступившие ранее. При анализе адресов каждой команды данного примера предполо- жим, что для выполнения первой команды АГ назначил адрес ПЭ (1, 1), а для выполнения второй команды — адрес (2,1). Процессор сформирует заявки к ОПД в следующем порядке: 1. «Считать а — послать в (1, 1), 1» (указана позиция операнда); 2. «Считать Ь — послать в (1, 1), 2»; 3. «За- писать в а (^^ ~ позиция неизвестного пока кода); 4. «Считать а — послать в (2, 1), 1»; 5. «Считать с — послать в (2, 1), 2»; 6. «Записать
в Очевидно, что заявки 1, 2 и 5 могут выполняться процессором памяти тотчас же после формирования. Выполненные заявки из ОЗП ис- ключаются. После выполнения ПЭ 1 команды сложения, записанной в регистре 1 его буфера, и отсылки результата в текст заявки 3 эта заявка может быть выполнена. Затем появляется возможность выполнения заявки 4, а после выполнения команды умножения, записанной в регистре 1 буфера ПЭ 2, и отсылки результата в текст заявки 6 — возможность выполнения и этой заявки. Тогда может быть предложен следующий (идеальный) алгоритм вы- полнения заявок к памяти данных. 1. Производится последовательный просмотр очереди заявок к па- мяти. 2. Если очередная заявка является заявкой на считывание по адре- су А (в ОП), анализируется, нет ли выше этой заявки (т. е. среди еще не выполненных заявок) заявки на запись по этомуже адресу. Если такая за- явка есть, данная заявка на считывание выполнена быть не может. Про- должаем выполнение 1. 3. Если выше данной заявки нет невыполненных заявок на запись по этомуже адресу, организуется считывание из ОП в указанный в заявке регистр. 4. Если очередная заявка является заявкой на запись по адресу А, производится анализ, указан ли в тексте заявки записываемый код ре- зультата вычислений. Если код еще не поступил, выполняется шаг 1. 5. Если заявка на запись сформирована полностью, производится анализ нет ли выше данной заявки (т. е. среди еще не выполненных за- явок) хотя бы одной заявки на запись или считывание по этомуже адресу. Если такая заявка существует, выполняется шаг 1. 6. Если выше данной заявки нет заявок, в которых указан тот же ад- рес А, выполняется запись в ОП по этому адресу. При аппаратной реализации такого алгоритма необходимо учесть мо- дульный принцип построения ОПД, допускающий возможность одно- временного выполнения заявок к разным модулям памяти. Предположим для определенности, что модули ОПД объединяются в блоки, которые адресуются старшими разрядами адреса. Внутри одного блока модули адресуются младшими разрядами адреса в соответствии с интерливингом. Остальная часть адреса — адрес ячейки в модуле памяти. Так как при анализе одной команды одним процессором может быть сформировано до трех заявок к памяти, то, считая по максимуму, что та- кое формирование происходит в каждом машинном такте, очевидно, что заявки должны выполняться с таким же темпом. Другими словами, необ-
ходимо, аккумулируя заявки к памяти в ОЗП, отделить процесс их вы- полнения от процесса поступления и организовать дисциплину выполне- ния таким образом, чтобы в каждом такте имелась возможность выбора до трех заявок к разным модулям памяти в однопроцессорной ВС. Итак, синхронизация выполнения заявок к ОПД должна удовлетво- рять двум требованиям: 1. Заявки к одной ячейке памяти должны выполняться в порядке вхождения адреса этой ячейки в текст программы — этим обеспечивается алгоритмически заданный порядок преобразования данных. 2. При обращении в разных заявках, находящихся в ОЗП, к ячейкам одного и того же модуля памяти целесообразно реализовать простейшую дисциплину устранения конфликта, при которой использование такого модуля производится также в порядке вхождения его адреса (в составе адресов ячеек ОПД) в текст программы. Очевидно, что дисциплина устранения конфликтов при обращении к одному модулю ОПД включает упорядочение обращения к одной ячей- ке. Т. е. при выполнении заявок из ОЗП к ОПД достаточно выполнять за- явки обращения к одной ячейке (независимо от того, запись это или счи- тывание) в порядке их поступления. Пришедшие одновременно заявки при анализе процессором одной команды упорядочиваются по необхо- димости в соответствии с номером адреса в команде. Такое упорядочение имеет единственный недостаток: возможны длительные задержки одних заявок к модулю памяти другими заявками к тому же модулю, несмотря на обращение в разные ячейки. Однако можно считать, что выбором достаточной глубины интерливинга (большого чис- ла модулей в блоке) можно добиться малой вероятности таких задержек. Это согласуется и с общим требованием минимизации числа обращений к оперативной памяти. Другим способом ускорения алгоритма выполнения заявок к ОПД является формирование и уточнение матрицы следования, связывающей все заявки в ОЗП. При каждом поступлении новой заявки формирует- ся соответствующая строка этой матрицы на основе совместного анализа адресов модулей памяти, указанных в пришедшей заявке, и таких же ад- ресов в других заявках, записанных ранее в ОЗП. При выполнении заявок строки и столбцы, им соответствующие, из матрицы следования исклю- чаются.
Лекция 11. Программирование задач для асинхронной ВС архитектуры «data flow» Приводятся примеры программирования в архитектуре асинхронной ВС на принципах data flow. Рассматриваются задачи численного интегриро- вания, умножения матриц, решения системы линейных уравнений. Исследу- ются основы трансляции с языков высокого уровня. Ключевые слова: метод «трапеций», матрица, метод Гаусса, оператор присваивания, непрерываемый участок, оператор цикла. 11.1. Численное интегрирование Найдем методом «трапеций» приближенное значение интеграла функции у(х) (рис. 11.1). Рис. 11.1. Схема численного интегрирования При построении программы вновь воспользуемся оптимальной схе- мой счета — способом «пирамиды» (рис. 11.2), приведенной на рис. 10.7 для случая п = 5. Здесь Vi — математические адреса вычислителей, при- чем i/i+1 = Vi +1. (Предполагаем, что либо на адрес вычислителя указыва- ет тег, либо он принадлежит определенной области адресного простран- ства.) Программа коммутации приведена на рис. 11.3.
Рис. 11.2. Схема счёта интеграла к КОП J1 Ai J2 Аг J3 Аз 0 ЗАГ Ml <2/о> М2 <п> 1 ЗАГ М3 <2/о > М4 2 J+ М3 М2 3 + Ml М3 4 • <2> 5 цикл М2 17777 6 ЗАП Ml 00001 Ml 7 + М4 ^0 М4 М3 ^0 8 J+ Ml 00001 М3 00001 М4 00002 9 кц 10 X М4 "о <Дж> »0 Рис. 11.3. Программа численного интегрирования По командам 0-2 коммутируется выполнение инструкций форми- рования содержимого индексных регистров-модификаторов Ml—М4. По командам 3 и 4 на вычислителе с математическим адресом щ формируется значение 0,5 х (у0 + уп).
Далее следует основной цикл реализации «пирамиды» — цикл на п — 1 повторений (команда 5). По команде 6 коммутируется последовательная загрузка вычислите- лей?/! ==> У1\У2 ==> У2,Уп-1 => Уп-1- По команде 7 коммутируются операции (Ц)) + (^1) ==^ упч (^2) + (^з) => *61+1 ? • • • ч (у2п-±) + (^2п-з) => У2п-2- Команда 8 служит для изменения значений индексных регистров. Команда 9 конец цикла. По команде 10 коммутируется умножение суммы значений функ- ции, сформированной на вычислителе с математическим адресом z/2n-2, на величину Дж. Напомним, что порядок использования математических адресов вычислителей обусловлен только требованиями организации цикличе- ской обработки массива данных с индексацией и переадресацией, т. е. продиктован законами программирования с учетом распараллеливания. При выполнении программы регистры буферов вычислителей назнача- ются адресным генератором исходя из требований динамического пла- нирования использования ресурсов. 11.2. Умножение матриц Воспользовавшись формулой вычисления элементов матрицы С = Ах В, п Cij = dikbkj ч ГДе = 1, . . . , ?2, к—1 (взяв для упрощения случай, когда все три матрицы — квадратные), запи- шем алгоритм умножения матриц в виде программы на некотором языке высокого уровня: for i := 1 step 1 until n do forj := 1 step 1 until n do begin := aM] x 6[i, j]; for к := 1 step 1 until n do c[i, j] := c[i, j] + a[i, j] x 6[fc, j] end Программа коммутации приведена на рис. 11.4. Дадим некоторые пояснения к ходу выполнения программы. В команде 0 значения < аОо > и < 6Оо > являются адресами начала размещения элементов матриц А и В в ОПД, N — имя переменной, со-
Nk КОП J1 Аг J2 Аъ J3 A3 0 ЗАГ <п> N Ml <«oo> М2 <600 > 1 ЗАГ М3 <coo> 2 ЦИКЛ <п> 3 ЗАГ М4 М2 4 ЦИКЛ <n> 5 X Ml M4 »2 6 ЗАГ М5 Ml M6 M4 M7 7 ЦИКЛ <п> 77777 8 J+ М5 00001 M6 <n> M7 00001 9 X М5 M6 10 + M7 M7 "2 11 кц 12 ЗАП М7 »2 М3 13 J+ М3 00001 M4 00001 14 кц 15 J+ Ml <n> М3 00001 16 КЦ Рис. 11.4. Программа умножения матриц держащей значение их размерности п. По команде 1 происходит загрузка адреса начала размещения элементов матрицы С. Команда 2 начинает цикл на п повторений (этот цикл заканчивает- ся командой 16). Команда 3 осуществляет настройку на первый столбец матрицы В, Команда 4 начинает первый вложенный цикл на п повторений. Цикл завершается командой 14. Команда 5 коммутирует счет первого слагаемого суммы (в первый раз должно быть произведено умножение «оо х boo). По команде 6 производится настройка индексных регистров, в частности, в первый раз будут выполнены действия (Л/5) := аоо; (Мб) •= boo] (Afy) := 0. Команда 7 начинает второй вложенный цикл (заканчивается коман- дой 11). По команде 8 производится коммутация переадресации по стро- ке матрицы А, по столбцу матрицы В и переадресации вычислителя. Ко- манда 9 — умножение, в первый раз выполняется коммутация действия «01 х 610 => 1-
По команде 10 в первый раз (т.е. при ее первом выполнении) за- коммутируется выполнение действия + z/2 => во второй раз — V1 + ^3 ^4 И Т. Д- Команда 12 задает запись элемента матрицы С. Команда 13 это переадресация по столбцу, а команда 15 переадреса- ция по строке. 11.3. Решение системы линейных уравнений методом Гаусса Суть метода заключается в сведении системы линейных уравнений с помощью линейных преобразований к ступенчатому виду. Тогда из по- следнего уравнения находится значение одного неизвестного. Поднима- ясь на одно уравнение вверх, с его помощью находим значение другого неизвестного и т. д. Т. е. предполагается некоторый «проход» по уравне- ниям системы сверху вниз, а затем обратный проход снизу вверх. Программу составим для произвольного значения п — числа урав- нений (неизвестных). Однако для наглядности зафиксируем п = 4. Итак, система уравнений имеет вид «00^0 + «01^1 + «02^2 + «03^3 = «04 < + «11^1 + «12^2 + «13^3 = «14 «20^0 + «21^1 + «22^2 + «23^3 = «24 «30^0 + «31^1 + «32^2 + «33^3 = «34 Умножим второе уравнение на п = «оо/«ю и вычтем из него первое уравнение. Получим новое уравнение, в котором коэффициенты нахо- дятся из выражения (1) «17 X «00 «1/ = —---------«0;, J «10 при этом (1) аю х аОо п «ю — «оо — и. «10 Аналогично, умножая все последующие (fc = 2,...) уравнения на со- ответствующие величины aOo/«fco и вычитая первое уравнение, избавим- ся от вхождения в них переменной xQ. Произведен первый шаг в получении ступенчатой системы уравне- ний (рис. 11.5). При этом мы, конечно, считаем, что аю / 0. Если это не так, но выполняется известное условие существования единственного ре- шения системы, то надо так переупорядочить (переобозначить) вхожде- ние переменных, чтобы нужный коэффициент был отличен от нуля. Та-
Рис. 11.5. Схема счёта методом Гаусса кое переупорядочение переменных в приведенной ниже программе пре- дусмотрено. На втором шаге вычитаем преобразованное второе уравнение из всех последующих уравнений, предварительно умноженных на гг = «и /«м • Таким образом мы избавляемся от вхождения в них второй пе- ременной и т. д. На последнем шаге таких преобразований получаем выражение для нахождения последней переменной. В нашем примере это (3) (3) «33 ^3 = «34 . Найденное значение х3 подставим в уравнение (2) , (2) (2) «22 ^2 + а>2^хг = а^. и найдем значение х2 и т. д. Программа коммутации представлена на рис. 11.6. По команде 0 загружаются число переменных в уравнении и адре- са коэффициентов. Команды 14-5 производят начальное формирование индексных регистров. Команда 6 начинает основной цикл на п - 1 повторений. По команде 7 загружаются модификаторы, причем после первого выполнения будут справедливы равенства: (М4) = аоо; (-М5) = «и; (Мб) = «01- Команда 8 проверяет равенство аОо = 0 и при несравнении задает переход на выполнение команды 22. По команде 9 также загружаются модификаторы, и после первого выполнения (при аю = 0) будут справедливы равенства: (Л/7) = аоо; (Ms) = аоо; (М9) =< Iq > .
Nk КОП J1 Ai J2 A2 J3 A3 0 ЗАГ <п> N A 1 ЗАГ R1 <п> <n+l> <n> Ml ' 2 J+ R1 17777 <n + l> 00001 3 ЗАГ R2 Rl R3 <n> М2 <aoo> 4 ЗАГ М3 <аоо> 5 J+ М2 <n+l> М3 <n> 6 ЦИКЛ Rl 7 ЗАГ М4 Ml M5 М2 M6 М3 8 == Ml 22 9 ЗАГ М7 Ml M8 Ml M9 <lo> 10 ЦИКЛ R2 11 / М7 00001 19 12 ЦИКЛ R3 13 ЗАП М8 M9 14 ЗАП М7 00001 M8 15 ЗАП М9 M7 00001 16 J+ М7 <n> M8 <n> M9 00001 17 КЦ 18 ПКЦ 22 19 J+ М7 00001 20 КЦ 21 ост 22 цикл R2 23 ЗАГ мю M5 Mil M6 24 М4 00001 31 25 Ml M4 00001 r 26 цикл R3 27 X мю г 28 - MU M10 29 J+ мю <n> MU <n> 30 КЦ 31 J+ М4 00001 M6 00001 32 КЦ 33 J+ Ml <n+l> М2 <n+l> М3 <n+l> 34 J+ R2 17777 R3 17777 35 КЦ Рис. 11.6. Программа решения системы линейных уравнений
Nk КОП J1 Ai J2 A2 J3 A3 36 ЗАГ R2 RI М2 X 37 J+ М2 RI 38 . М3 Ml М2 39 цикл RI 40 ЗАГ М4 Ml M5 М3 41 ЦИКЛ R2 42 J+ М4 17777 M5 17777 43 X М4 М2 44 - М5 M4 45 кц 46 j- Ml <n+l> М3 <n+l> 47 л- R2 17777 М2 17777 48 М3 Ml М2 49 кц Рис. 11.6. Окончание По команде 10 начинается вложенный цикл на п -1, ..., 1 повторе- ний поиска уравнения, у которого старший коэффициент не равен нулю. По команде 11 производится переход по условию; в первый раз при а10 = о — переход к выполнению команды 19. Команда 12 начинает очередной вложенный цикл. В первый раз вы- полняются действия: аоо => ^0) «01 => h и т. д. (команда 13), c&io «оо > «11 ==^ «01 и т. д. (команда 14), lQ => а10) 1г => ап ит. д. (команда 15) — таким образом, уравнения меняются местами. Выполнение цикла заканчивается по команде 17. После нахождения старшего ненулевого коэффициента и переста- новки уравнений поиск заканчивается, поэтому команда 18 задает при- нудительный выход из предыдущего цикла. Команда 19 позволяет произвести переход к анализу следующего уравнения. Останов по команде 21 означает, что все старшие коэффициенты ну- левые и поэтому нельзя построить треугольную матрицу с определителем, не равным нулю. Команда 22 начинает цикл на п - 1, ..., 1 повторений преобразо- вания уравнений. Команда 24, переход по сравнению, позволяет пропу- стить уравнение, у которого старший коэффициент равен нулю. Коман-
да 25 коммутирует деление, последовательно задавая вычисление аоо аоо г = —, —,... аю аго Команда 26 — начало вложенного цикла на n, п - 1, ..., 2 повторе- ний преобразования коэффициентов одного уравнения. В первый раз по командам 27 и 28 будут закомментированы вычисление и отсылка: аоо _______, ац х-------aoi => ац. аю По команде 31 увеличиваются на единицу значения индексных ре- гистров, что позволяет при следующей итерации цикла перейти к анализу следующего уравнения. Команда 33 в первый раз определяет переход от аОо к ; по коман- де 34 происходит уменьшение граничных значений параметров циклов. Команда 35 — конец самого внешнего цикла, т. е. конец «прямого хода». По командам 36 и 37 изменяется содержимое индексных регистров: (М2) =< xq >, (Zi) = (Я2) = п - 1, (М2) =< Хп-г >, а команда 38 коммутирует выполнение операции деления а?г—1,п Хп-' ~ ап-1,п-1 Команда 39 начинает цикл на п - 1 повторение, а команда 41 — вло- женный цикл на п - 1, п - 2, ..., 1 повторение. По командам 43 последовательно в каждой итерации цикла комму- тируется выполнение умножения: а?г—2,n—1 Я'п—1» ап_35п—1 X Хп—1 ИТ.д., а по команде 44 — вычитания: а?г—2,n—1 *= ап_2,п — ап-2,п-1 X хп—1 > ап—3,п—1 •= •— ап_з?п ап_з1П_i х хп—1 и т.д. После этого вложенный цикл заканчивается (команда 45), и изменя- ются значения индексных регистров (команды 46 и 47), что дает возмож- ность перейти к коммутации нахождения яп_2, хп_з и т. д. (команда 48). В первый раз а?г—2,п—2 Выполнение программы заканчивается по команде 49.
11.4. Основы трансляции с языков высокого уровня 11.4.1. Общая концепция Выбор определенной, охарактеризованной выше, структуры ПВС (ввиду смешанного характера реализованной в ней модели вычислений) ведет к необходимости решения задач наилучшего выбора входного язы- ка системы и методов трансляции программ во внутреннее представле- ние. В большинстве известных проектов потоковых ВС их разработчики в качестве входных языков используют специально создаваемые потоко- вые языки программирования, среди которых наиболее известны LAU, Vai, Id, SISAL. Все они обладают некоторыми общими свойствами, отра- жающими специфику потоковой обработки информации. Главное из них функциональный характер языка. Это означает, что программа состоит из функций, вырабатывающих значения, которые используются другими функциями в качестве аргументов. Функции только вырабатывают зна- чения, следовательно, они не имеют побочных эффектов. Другими свойствами потоковых языков являются: соблюдение пра- вила единственного присваивания, отсутствие глобальных переменных, отказ от возможности для программиста управлять распределением па- мяти. Все это позволяет предельно снизить ограничения на порядок вы- полнения операторов-функций. Например, программа на языке LAU, ориентированная на вычислительную систему со статическим представ- лением программ, целиком загружается в оперативную память. Устрой- ство управления анализирует готовность команд, используя специальные признаки, и выбирает (с помощью ассоциативного устройства) для ис- полнения команды, имеющие полный набор операндов. В каждый мо- мент времени в исполнительные устройства могут быть переданы все го- товые команды, вне зависимости от их последовательности в программе. В то же время базирование указанных языков на функциональной парадигме порождает ряд проблем, не находящих простого и эффектив- ного решения. В частности, любое (даже частичное) изменение структу- ры данных интерпретируется как порождение новой структуры, требую- щей полного дублирования исходной структуры. Понятно, что это влечет многократное увеличение нагрузки на память и коммуникационные се- ти. Информационные связи, существующие в программах, препятству- ют параллельному и независимому исполнению операторов. Очевидно, что свойства потоковых языков, указанные выше, служат именно устра- нению из программ информационных связей некоторых типов.
Например, операторы (11.2) и (11.3) во фрагменте программы a:=/i(zi, •хп) (11.1) Ь := Утп, а) (Н.2) а:=/з(*1, zi) (11.3) не могут быть выполнены одновременно, поскольку оператор (11.3) ме- няет значение переменной а, используемой оператором (11.2). Фактиче- ски же эти операторы независимы; зависимость возникает лишь в связи с повторным использованием одного и того же имени. В потоковых язы- ках, согласно правилу единственного присваивания, каждая переменная может быть использована в левой части оператора присваивания только один раз. Таким образом, в операторе (11.3) переменная а должна быть переименована, например, в с, и зависимость между вторым и третьим операторами исчезнет. В то же время информационная зависимость меж- ду операторами (11.1) и (11.2) устранена быть не может, и эти два опера- тора должны выполняться именно в указанном порядке. Очевидно (если оставить вне рассмотрения влияние принципа един- ственного присваивания на всю идеологию организации вычислений в некоторых моделях потоковой обработки), что точно такой метод пере- именования можно формально использовать и в любом традиционном процедурном языке. Причем, чтобы не налагать ограничений на исполь- зование программистом имен переменных, это переименование может быть произведено и на этапе трансляции. Методы анализа программы при этом аналогичны методам, применяемым в оптимизирующих транс- ляторах. Другие свойства потоковых языков, очевидно, тоже могут быть привнесены в традиционные алгоритмические языки. При выборе входного языка ПВС необходимо принять во внимание и следующие соображения. Любая программа на любом языке как запись выполняемого алгоритма содержит в себе всю информацию о возможно- сти ее параллельного исполнения. Речь может идти лишь о сложности ее извлечения. Часть информации может быть извлечена при трансляции и оптимизации программы и использована для организации параллельной обработки. Количество извлеченной информации зависит при этом от выбранного алгоритма решения задачи (существуют высокопараллель- ные алгоритмы решения многих, традиционно полагаемых последова- тельными, задач), от способа представлений информации (то есть фак- тически от языковых средств) и от методов трансляции. Другая часть ин- формации о возможностях параллельного выполнения программы может быть задана в явном виде. Действительно, во многих современных языках у программиста существует возможность явно указывать параллельные фрагменты программы. Следовательно, выбор языка влияет на качество
распараллеливания лишь частично. Очевидно, что проще включить в су- ществующий язык некоторые дополнительные возможности, чем разра- батывать новый язык. Поэтому, учитывая преобладающую долю математического обеспе- чения в общей стоимости современных вычислительных систем, целесо- образно оценить возможность использования существующих алгоритми- ческих языков в рассматриваемой потоковой вычислительной системе. 11.4.2. Операторы присваивания Определим оператор присваивания, используя общепринятую нота- цию, близкую к нормальной форме Бэкуса-Наура: <оператор присваивания> :: = <имя> := <выражение> Имя здесь имя простой переменной (переменные с индексами для упрощения не рассматриваем). Выражения могут быть арифметическими и логическими, простыми и условными. Синтаксис их аналогичен син- таксису соответствующих конструкций языков высокого уровня: <условное выражение> ::= if <отношение> then <выражение> else <выражение> | Выражения в правой части определения, в свою очередь, могут быть условными. Ограничитель «|» введен для упрощения определения кон- ца условного выражения. При трансляции условные выражения сначала преобразуются в бесскобочное представление, в котором все ограничи- тели if then, else, | сохраняют свой порядок, а заключенные между ни- ми арифметические и логические выражения приобретают вид польской инверсной записи. (Отметим, что, демонстрируя составление программ коммутации в лекции 10, мы уже фактически пользовались на уровне ин- туиции теми приемами трансляции, которые теперь хотим осознать.) Операторы присваивания преобразуются в бесскобочную запись так же, как и выражения, причем знак присваивания «:=» считаем относя- щимся к некоторой двуместной операции присваивания. Рассмотрим оператор присваивания: х := a -h b х if (m 4- п) > р then d + if т < q then r + t else r | elsec | Его бесскобочная запись имеет вид xabif тп + р > then dif mq < then rt + else r | else c | + := (11.4) Бесскобочная запись обрабатывается транслятором за несколько проходов по следующему алгоритму. 1. Взять первый элемент (FE) бесскобочной записи. NE := FE.N := 1. Перейти кп. 3.
2. Взять очередной элемент (NE). Если это последний элемент бес- скобочной записи, то при N > 2 перейти к п. 1, а при N 2 — перейти к п. 22. 3. Если NE — операнд, то перейти к п. 2. 4. Если NE — знак операции, то перейти к п. 8. 5. Если NE — ограничитель if, то перейти к п. 16. 6. Если NE — один из ограничителей then, else, 1, то перейти к п. 2. 7. Ошибка неопознанный элемент. 8. Если операция одноместная и имеется операнд, расположенный левее знака, то формируется команда ПВС. Если операнда нет, то перей- ти к п. 2. Из бесскобочной записи удаляются знак операции и операнд, а на их место подставляется математический адрес вычислителя, реализу- ющего эту операцию. Перейти к п. 10. 9. Если есть два операнда, расположенных непосредственно левее знака операции, то формируется исполнительная команда. Из бесско- бочной записи удаляются знак операции и два предшествующих опе- ранда. На их место подставляется математический адрес вычислителя- исполнителя. Если операндов нет, то перейти к п. 2. 10. Взять NE. Если это последний элемент бесскобочной записи, то перейти кп. 1. 11. Если NE — знак операции, то перейти к п. 10. 12. Если NE — операнд, то перейти к п. 13, иначе — перейти к п. 5. 13. Взять NE. 14. Если NE — знак операции, то перейти к п. 13. 15. Если NE — операнд, то перейти к п. 2, иначе — перейти к п. 5. 16. Подготовка четырехместной команды. Три раза взять NE. 17. Если три выбранных элемента образуют последовательность <операнд> <операнд> <знак>, то перейти к п. 18, иначе N := N - 3, перейти к п. 2. 18. Взять NE. Если это ограничитель then, то два раза взять NE и пе- рейти к п. 19. Иначе N := N - 4, перейти к п. 2. 19. Если два выбранных элемента образуют последовательность <операнд> else, то два раза взять NE. Перейти к п. 20. Иначе N := N - 2 и перейти к п. 2. 20. Если два выбранных элемента образуют последовательность <операнд> |, то перейти к п. 21. Иначе N := N — 2 и перейти к п. 2. 21. Формирование четырехместной команды. Изменение бесско- бочной записи. Вместо конструкции if ab® then с else d | , где a, b,c,d — операнды, а 0 — знак операции отношения, подставляется математиче- ский адрес вычислителя-исполнителя, на котором формируется резуль- тат четырехместной команды. Перейти к п. 10.
22. Выход. В этом алгоритме N — указатель на очередной рассматриваемый элемент бесскобочной записи. Действие «Взять NE» означает перемеще- ние указателя на следующий элемент, при этом значение N увеличивает- ся на единицу. Изменение значения ЛГ, в свою очередь, означает переме- щение указателя вправо или влево. Под элементом бесскобочной записи понимаются имена переменных, знаки операций, ограничители языка и математические адреса вычислителей. Если не указано противное, то по- сле выполнения действий, предписанных очередным пунктом алгоритма, происходит переход на следующий по порядку пункт. На рис. 11.7 представлена результирующая программа коммутации, получаемая при многопроходной обработке бесскобочной записи (11.4). (В командах опущены позиции индексов, поскольку они здесь не исполь- зуются.) Nk КОП Ai Аг Аз 0 + т п И) 1 + г t У1 2 УСЛ т Я У1 И г 3 + d У1 Уз 4 УСЛ Р И) У4 Уз с 5 X b У4 У5 6 + а У5 X Рис. 11.7. Программа коммутации Приведенный алгоритм трансляции формирует программу комму- тации на основе поярусного анализа графа, соответствующего оператору присваивания. При каждом проходе транслятором бесскобочной записи формируются все команды, операнды которых доступны в этот момент. При первом проходе формируются команда 0, задающая сложение опе- рандов т и п на вычислителе i/0, и команда 1, задающая сложение опе- рандов г и t на вычислителе . Бесскобочная запись принимает вид xabif vtfp > then dif mq < then v^etse r | else c | + := . При втором проходе не обнаруживается арифметических операций, готовых к выполнению. Формируется пятиадресная команда 2. Она зада- ет сравнение операндов т и q на вычислителе В зависимости от ре-
Лекция 11 Программирование задач для асинхронной ВС архитектуры «data flow» а-—==^^===^==^==^^^^=========^======^^==========^^===в=^^^^= зультата сравнения итогом выполнения данной команды (сформирован- ной по ней инструкции) будет результат счета на вычислителе или же г. Бесскобочная запись после второго прохода имеет вид xabif v$p > then dv2 + с | х+ := . Последующие проходы сформируют команды 3 и 4 и бесскобочная запись примет вид xabv± х + := . В результате последующих проходов формируются команды 5 и 6. Отметим, что команда 6 могла бы иметь вид -Ншб^бэ а бесскобоч- ная запись в этом случае приняла бы вид хщ := - Однако очевидно, что вместо указания математического адреса вычислителя-исполнителя в ко- манде 6 можно сразу указать адрес ОП, и по нему должен быть направлен результат операции, который будет выработан инструкцией, соответству- ющей команде 6. Поэтому новая команда записи не формируется, а уточ- няется команда 6. Вычислитель-исполнитель в ней указан неявно. Он вы- бирается с помощью адресного генератора. В связи с этим надо отметить, что явное задание вычислителей-исполнителей производится лишь в том случае, когда требуется использование результатов операций в качестве операндов. Алгоритм работы ПВС не подразумевает обязательного ука- зания в программе о том, на каком вычислителе будет выполняться опе- рация. Назначение вычислителей производится автоматически. Вместе с тем, при необходимости использования имен вычислителей- исполнителей для именования операндов можно формировать имена в широком диапазоне выбора, имеющем два крайних случая. Можно при каждом новом выборе значения математического адреса вычислителя использовать увеличенную (на единицу) величину ранее ис- пользованного значения. Именно так происходит в рассмотренном при- мере. Другой крайний случай основан на принципе «экономии» адресов вычислителей. Он опирается на то, что результат операции используется единственный раз. Это означает, что и каждое объявленное имя вычисли- теля используется только один раз. Поэтому после использования это же имя может объявляться повторно, и благодаря механизму виртуализации ресурсов никакой коллизии не произойдет. Так, в команде 3 для обозна- чения вычислителя-исполнителя вместо можно использовать матема- тический адрес 1/1. Вместо щ в команде 4 повторно можно использовать адрес г/2 ит. д.
11.4.3. Непрерываемые участки программы Наибольшая эффективность в работе ПВС может быть достигнута при значительном опережении процессом коммутации процесса вычис- лений, благодаря чему динамически обеспечивается достаточная загрузка вычислителей решающего поля. Поэтому желательно, чтобы программа коммутации, по возможности, состояла из крупных частей — непреры- ваемых (не содержащих команд условного перехода) участков, анализи- руемых транслятором как единое целое. Тогда транслятор, в основе кото- рого лежит отображение ярусно-параллельной формы алгоритма, может более эффективно раскрыть и отразить в программе возможности рас- параллеливания — за счет «близкого» расположения в тексте программы тех команд, которые порождают параллельно выполняющиеся инструк- ции. Крайним случаем является просмотр транслятором во время каждо- го прохода всего текста программы на алгоритмическом языке. Однако структура программы должна остаться «прозрачной». Как показывает анализ прикладных программ, один оператор при- сваивания редко содержит более десяти переменных в правой части. С другой стороны, несколько подряд расположенных операторов присваи- вания, содержащих в общей сложности несколько десятков переменных, ситуация, которая встречается достаточно часто. Поэтому желательно иметь возможность именно такую последовательность операторов при- сваивания считать непрерываемым участком программы. Рассмотрим фрагмент программы: R а х b + с х d; Р := R + d х р; R := т х п. При этом не обязательно соблюдается правило единственного при- сваивания. Запишем соответствующие этим операторам бесскобочные записи в одну строку: Rab х cdx + := PRdp х + := Rmnx := . (11.5) Пусть транслятор анализирует ее как единое целое. Тогда для со- хранения информационной зависимости между операторами необходи- мо следовать следующим правилам: 1. В процессе каждого прохода записи отмечаются в порядке следо- вания первая и все последующие переменные, стоящие правее знака при- сваивания «:=» (которым будет производиться присваивание), и отдель- но все встречающиеся операнды. Если NE — операнд, то анализируется, не совпадает ли он с какой-либо ранее отмеченной переменной, которой производится присваивание, кроме отмеченной последней. Если совпа- дает, то N := N + 1. Производится дальнейший анализ NE — переход к п. 2 изложенного выше алгоритма.
2. Если NE — переменная, которой производится присваивание (она находится правее знака «:=»), то наряду с отметкой ее в списке по- добных переменных проверяется, не совпадает ли она с какой-либо ра- нее отмеченной переменной, которой производится присваивание, или с любым операндом, входящим в запись левее NE. Если совпадает, то N := N + 1. Далее по алгоритму трансляции, изложенному выше. Эти два правила, которым следует работа процессора памяти, поз- воляют сохранить алгоритмически предусмотренный порядок присваи- вания нового значения переменным, согласованный с порядком исполь- зования значений одной и той же переменной. А именно, в программе коммутации команда, использующая результат другой команды, следу- ет обязательно за ней, а команда, изменяющая значение некоторой пе- ременной, следует обязательно за командами, использующими прежнее значение этой переменной или даже изменяющими его ранее. В алгоритм трансляции необходимо внести еще одно изменение. Если двуместная операция соответствует присваиванию, то после формирования команды пересылки или третьего адреса ранее сформи- рованной команды (при одновременном анализе нескольких операторов может быть выгоднее сформировать лишнюю команду пересылки, чем разыскивать ту команду, в которой надо изменить адрес вычислителя- ис- полнителя на адрес записи результата) операнды и знак операции присва- ивания удаляются из бесскобочной записи, как и прежде, но на их место ничего не подставляется. Программа коммутации представлена на рис. 11.8. Nk КОП Ai Аг Аз 0 X а b И) 1 X с d и 2 X d Р У1 3 X т п Уз 4 + И) У1 R 5 + R У2 У5 6 ЗАП Уз R 7 ЗАП v5 Р Рис. 11.8. Удаление операции присваивания После формирования команд 0 3 бесскобочная запись (11.5) при- мет вид ЯЦ)^1+ PRV2+ '= R^3 •= •
Первое вхождение в эту запись операнда R в качестве переменной, которой присваивается значение, блокирует формирование последую- щих команд, использующих этот же операнд. Поэтому при втором прохо- де формируется только команда 4, в которой первоначально по третьему адресу указан адрес вычислителя-исполнителя г/4. Бесскобочная запись принимает вид Rv± := PRv2+ := Rv$ := . Во время третьего прохода уточняется команда 4 подстановкой по адресу результата адреса переменной R. Первые три символа из записи исключаются. Тогда открывается возможность сформировать команду 5, использующую новое значение R. При этом вместо комбинации симво- лов Rv2+ формируется адрес вычислителя z/5. Поскольку слева все вхо- ждения R исключены, формируется команда 6 присваивания нового зна- чения R. При четвертом проходе формируется команда 7. 11.4.4. Операторы цикла Задача параллельного выполнения операторов цикла может решать- ся посредством либо распараллеливания по итерациям, либо распаралле- ливания операторов внутри тела цикла. Распараллеливание по итерациям может быть применено для распределения групп повторений тела цикла по процессорам ПВС. Распараллеливание же внутри тела цикла может производиться так же, как и для последовательности операторов. Определим оператор цикла типа арифметической прогрессии следу- ющим образом: <оператор цикла типа арифметической прогрессии> for <параметр цикла> : = Al step А2 until АЗ do S В этом определении А1,А2,АЗ — арифметические выражения, aS — оператор (тело цикла). В ПВС может быть использован подход, аналогичный «раскрутке» циклов. Оператор цикла транслируется в программу коммутации, схема ко- торой имеет вид, представленный на рис. 11.9. Команды 1 k - 1 соответствуют вычислению значений арифмети- ческих выражений Al, А2 и АЗ, если они не являются константами или именами переменных. Команда k — организация цикла (ЦИКЛ), коман- да N — конец цикла (КЦ). Между командами ЦИКЛ и КЦ расположены команды, соответ- ствующие телу цикла S. Эта часть программы коммутации образуется по
1 Вычисление арифметических выражений Al, A2 и АЗ K-\ к Начало цикла K+l S N-l N Конец цикла N+l ... Рис. 11.9. Программа цикла правилам трансляции соответствующей конструкции языка. В частности, если тело цикла — оператор присваивания (последовательность операто- ров присваивания), то трансляция его происходит по приведенному ал- горитму. Программа коммутации выполняется следующим образом. Сначала коммутируется выполнение команд вычисления значений а1,а2,аЗ вы- ражений Al, А2 и АЗ. Команда ЦИКЛ засылает в регистр счетчика цикла (СЦ) число повторений цикла: аЗ — al + 1 Р=—"а2-------- Далее осуществляется коммутация выполнения команд, составля- ющих тело цикла S. Если в теле цикла отсутствуют операторы перехода за границы цикла, то при обработке процессором команды КЦ содержи- мое регистра СЦ уменьшается на единицу. В случае неравенства его нулю коммутация продолжается с первой команды тела цикла. В противном случае далее коммутируется выполнение команды N + 1, следующей за командой КЦ. Таким образом, осуществляется непрерывная коммутация всего цикла, что обеспечивает возможность параллельного выполнения команд тела цикла. Такому одновременному выполнению могут мешать конфликты между итерациями, связанные с использованием одной и той же пере- менной во всех итерациях. Например, в цикле for i := 1 step 1 until 5 do begin x := а[г]; Я[г] := x x b; Q[z] := x/b; end
все итерации фактически будут выполняться последовательно, посколь- ку образуется очередь заявок к памяти на запись и считывание из ячейки с адресом х. В то же время очевидно, что информационно итерации друг с другом не связаны, поэтому можно добиться йх параллельного выполне- ния, применив переименование переменных. Переменная х заменяется на я[г], компоненту массива ж[1... 5]. Цикл принимает вид for i := 1 step 1 until 5 do begin ат[г] := a[i]; Я[г] := ят[г] x b; <Э[г] := x[i]/b; end Теперь все пять его итераций могут выполняться одновременно. Очень важно, что при асинхронном выполнении итераций не воз- никает ошибок, которые связаны с нарушением порядка вычислений, предписываемого логическими связями между переменными. Рассмот- рим следующий цикл fori := 1 step 1 untill do begin ят[г] := a[i]; Я[г] := ят[г] x b; R[i 4-1] := x[z]/b; print (R[i\, R[i 4-1]); end Все вычисления в обеих итерациях могут выполняться независимо друг от друга и одновременно. Правильная же работа операторов печа- ти гарантирована тем, что команды программы коммутации обрабаты- ваются процессором последовательно и заявки на запись и считывание к ячейке, в которой должно находиться значение Я[2], выдаваемые при коммутации выполнения первой и второй итераций, будут упорядочены. При трансляции операторов цикла итерационного типа, <оператор цикла итерационного типа> ::=for <параметр цикла> := А1,А2 while В do S, где Al, А2 — арифметические выражения, В — логическое выражение, S — оператор, образуется программа коммутации, содержащая команду условного перехода. Процесс коммутации, дойдя до команды условного перехода, при- останавливается, ожидая прихода (после выполнения соответствующих вычислений) информации о команде, начиная с которой его необходи- мо продолжить. Таким образом, в точках условного перехода процесс вы- числений «догоняет» процесс коммутации. Подобные ситуации крайне
Лекция 11 Программирование задач для асинхронной ВС архитектуры «data flow» нежелательны, поскольку приостановление процесса коммутации пре- кращает загрузку вычислителей решающего поля. Однако при наличии в вычислительной системе нескольких процессоров этот эффект сгла- живается: пока один процессор ждет результатов проверки условия, дру- гие продолжают обрабатывать свои программы коммутации и выдавать вычислителям, составляющим общий ресурс, команды для выполнения. Следовательно, использование циклов итерационного типа (так же, как и команд условного перехода), несколько замедляя выполнение програм- мы процессором, практически не отражается на загрузке вычислителей решающего поля.
Лекция 12. SPMD-технология на базе симметричной ВС Рассматривается архитектура вычислительной системы, основанная на принципе «одна программа — много потоков данных». Показывается, что этот принцип, реализующий распараллеливание "по информации", характе- рен и эффективен при решении задач, сводящихся к обработке больших мас- сивов данных, а также при решении задач на основе перебора многих вари- антов поиска такого решения. Представлены общая структура и основные особенности системы команд. Ключевые слова: SPMD-технология, память закрытых адресов, де- скриптор, дескрипторный элемент, опорный массив. 12.1. Архитектура Анализ задач, требующих вмешательства супер-ЭВМ, показывает, что все такие задачи — так называемые задачи «большой размерности», которые сводятся к обработке больших массивов данных. Для их решения целесообразно применять второй способ распараллеливания. Их слож- ность может быть как полиномиальной, так и экспоненциальной. В све- дении к обработке больших массивов данных кроется серьезное обобще- ние. Действительно, очевидность такого положения демонстрируется не только на традиционных задачах - векторных, матричных (обработки сиг- налов и изображений, картографии, геодезии и др.), конечно-разностных (во всем диапазоне сводимых к ним), моделирования поведения среды. Она проявляется на задачах, моделирующих многоканальный доступ к данным, на задачах одновременного управления множеством объектов, использования общих баз данных (в серверах), баз знаний, обработки нейросетей. Она же подтверждается на тех задачах, для которых сегодня считается трудным определение целесообразной стратегии распаралле- ливания. Это задачи оптимального планирования и исследования опе- раций, по сложности известные как NP-сложные задачи, подкласс задач экспоненциальной сложности. Большая часть таких задач решается ме- тодом «ветвей и границ», т.е. перебором вариантов. Можно считать, что каждый вариант условно (да и фактически) определяет элемент некото- рого динамически развиваемого массива. Значит, в распределении вари- антов при решении таких задач — путь к реализации второго способа рас- параллеливания.
Здесь нет возврата к традиционным векторным машинам. Обработ- ка разных элементов одного массива, к которой сводится задача, долж- на быть в целом асинхронной, по разным ветвям одного, а если надо, — по разным алгоритмам. Именно последнее замечание свидетельствует о возможности реализации и первого способа распараллеливания. Вместе с тем, необходимо обеспечить возможность синхронизации ВС при об- работке общих данных или другой реализации частично упорядоченных работ. Для решения отдельной задачи за минимальное время традицион- ные симметричные ВС требуют формирования в очереди «к процессору» большого числа, в общем случае взаимосвязанных, процессов отдельных программ, выполняющихся под управлением операционной системы. С увеличением числа процессоров в ВС растет сложность программирова- ния. Число процессов ограничено особенностями алгоритмов, отражен- ными в его информационно-логической граф-схеме. Не все возможности распараллеливания могут быть использованы, так как накладные расхо- ды на организацию вычислений при высокой детализации работ, поро- ждающих отдельные процессы, становятся неимоверно высоки. Значительный вес обрабатываемой информации, организованной в массивы, определил применение векторных ВС с синхронно работающи- ми процессорами при выполнении общей команды. Этот способ обра- ботки расширил возможность распараллеливания по данным, но ограни- чил ее локальным применением, хотя и такое применение оказывается достаточно эффективным для построения специализированных систем. При этом обработка однородных данных по разным ветвям алгоритма за- труднена. Ряд архитектур ВС основан на совмещении указанных способов параллельной обработки. Векторные процессоры включаются в ВС как операционные функциональные устройства, выполняющие специаль- ные команды в программе. Соответствующее этому преобразование ал- горитмов решения широкого круга задач превратилось в самостоятель- ную проблему (проблему векторизации задач), что не исключает поиска других архитектурных решений. Известен достаточный опыт экспериментального программирова- ния задач повышенной сложности на основе подобной технологии. Из сказанного выше следует вывод: необходимо на основе сим- метричной ВС построить ВС, в наибольшей степени приспособленную к распределению элементов больших массивов для обработки разными процессорами по идентичным алгоритмам. Обработка должна в общем случае производиться по разным ветвям. Должна быть синхронизация обращений к общим данным. Выполнение разных ветвей одной програм-
мы делает возможным выполнение разных программ разными процессо- рами. Тип таких ВС получил название SPMD: «Syngle Program — Multiple Data» (SPMD-технология). Тогда можно представить абстрактно общую архитектуру многопро- цессорной ВС, соответствующую современным представлениям о парал- лельном вычислительном процессе. Отметим лишь некоторые черты такой архитектуры, которые долж- ны быть обязательно восполнены при реализации — с помощью проце- дур ОС или микропрограммно — в системе команд процессора на сим- метричной ВС. «Идеальная» структура ВС SPMD-технологии приведена на рис. 12.1. Программа находится в памяти команд (ПК), откуда сегментами считы- вается в буферы команд БК* процессоров П*, i = 0,..., N - 1. БКг — ак- тивное устройство, способное считывать следующий сегмент программы на фоне выполнения предыдущего по входящей в сегмент команде. Память процессора ПП^ содержит область для хранения стеков вы- числительного процесса, в том числе — стеков подпрограмм и вложен- ных циклов. В других областях этой памяти хранятся модификаторы, де- скрипторы массивов и локальные величины. Через коммутатор К про- цессоры связаны с оперативной памятью данных (ОПД), состоящей из Р модулей Sp.p = 0,..., Р - 1, с независимым доступом. Модули объ- единены в блоки, внутри каждого из которых адресация осуществляется по принципу интерливинга. Память закрытых адресов (ПЗА) служит для синхронизации вычислений методом управления потоком данных: счи- тывание по отмеченным в нем адресам ОПД (и, следовательно, вычис- лительный процесс) задерживается до выполнения записи по этим адре- сам. Конфликт при одновременной попытке двух и более процессоров закрыть один адрес разрешается в пользу одного процессора, а попыт- ка повторного закрытия адреса воспринимается как попытка считывания по нему. Блок С предназначен для синхронизации Пг в необходимых слу- чаях — для одновременного начала выполнения программы с некоторой команды. Микропрограммирование, как и расширение набора операций на основе более простых, позволяет создать достаточно широкий набор сложных операций, определяющих систему команд ВС, ее машинный язык. Экспериментальное программирование позволило сформировать систему команд ВС, выявить множество целесообразных команд, кото- рыми дополняются традиционные команды, присущие всем ВС. В це- лом образовавшаяся система команд представляется полной, позволяю- щей добиться поставленной цели: реализовать управляемое распаралле-
Рис. 12.1. Структура ВС ливание, не прибегая к операционной системе, а также строить програм- мы инвариантными относительно числа процессорных элементов и длин массивов. Среди этих команд (в трехадресной интерпретации с использовани- ем индексных регистров) мы отметим следующие. ЗАГ — ЗАГрузка дескрипторного элемента или модификатора; ад- реса загружаемых дескрипторных элементов или модификаторов указы- ваются в позициях Д, I2,h- В позициях Л1, А2, A3 могут быть указаны адреса ЛОП или ОП. ЗАГД — ЗАГрузить Дескриптор; по адресам (Д), (12), (Гз) в памяти каждого процессорного элемента засылаются по восемь дескрипторных элементов, хранящихся в ОП, соответственно, с адресов (Ai), (А2), (А3). Таким образом, по одной команде можно загрузить до трех дескрипто-
ров в ЛОП каждого ПЭ. При загрузке каждого дескриптора выполняются операции := := 4- i(D^), к = 1,2,3. Эта начальная загрузка может производиться при первом выполнении основной части программы. ВЗЯТЬД-ВЗЯТЬ Дескриптор; выбирается дескриптор Dw в составе всех восьми элементов из массива дескрипторов, которому соответству- ет дескриптор D. Выбираемый дескриптор определяется значением де- скрипторного элемента D? = (Д). Он заносится по адресу D* = (/2) в ЛОП. При первом выполнении команды г-м ПЭ w = г. При j-м вы- полнении команды этим же ПЭ w = i 4- Nj. При выполнении команды сначала проверяется условие принадлежности выбираемого дескриптора массиву таких дескрипторов, (Г>7) (£>3)? При выполнении этого усло- вия дескриптор Dw на данном ПЭ формируется. Выполняется операция (D7) := (D7) 4- (D6), что при следующем выполнении данной коман- ды позволит выбрать дескриптор, номер которого на N превышает но- мер выбранного. При невыполнении условия управление передается по исполнительному третьему адресу без модификации Г>7. Данная команда позволяет распределять обработку записей в базах данных, базах знаний и нейросетях. Для другого применения этой команды можно указывать в позиции А адрес дескрипторного элемента D^, что обеспечивает по- следовательную выборку дескрипторов из массива дескрипторов при по- вторном выполнении команды в цикле. (Дескриптор занимает восемь ре- гистров, т. е. номер дескрипторного элемента может определяться тремя младшими разрядами его адреса.) ПРАД — ПРоверка АДреса; адреса, записанные в дескрипторных элементах в позициях Д и Д, сравниваются соответственно с адресами, записанными в дескрипторных элементах D3 дескрипторов массивов. Команда допускает одновременно два сравнения (для двух массивов), но может быть предусмотрено лишь одно. Если ((Д)) > ) V ((12)) > (£>з2^) (верхний индекс указывает на номер анализируемого дескриптора массива), осуществляется переход на выполнение команды, номер кото- рой указан по третьему адресу. В противном случае выполняется следую- щая команда. Данная команда контролирует переадресацию или началь- ное назначение элемента массива за пределами массива. ИЗМАД — ИЗМенить АДрес; выполняются операции (D^) = (А) := (D™) + (Di1}),(42)) = (h) := (Р^2)) + (Р^2)). пишется в позиции A, пишется в позиции 12. Выполнение операции сопро- вождается анализом, не превышает ли вновь найденное значение адреса значение адреса последнего элемента массива, указанного соответствен- но в дескрипторных элементах и ; если превышает, управление передается по третьему исполнительному адресу.
УЗАП — Условная ЗАПись; считывает по адресу, указанному в D7, и записывает по третьему исполнительному адресу, но лишь в том случае, если (D7) = (Г>з)- Команда позволяет при совместной обработке масси- ва записать единственный окончательный результат, полученный одним ПЭ. Если указанное равенство не выполняется, выполняется следующая команда. ЗАКРА — ЗАКРыть Адрес; значение адреса, записанное в дескрип- торном элементе D?, заносится в память закрытых адресов (распределен- ных между модулями ОП). СИНХ — команда синхронизации. По данной команде ПЭ посыла- ет в блок синхронизации сигнал. Обратный сигнал, по которому ПЭ при- ступает к выполнению следующей команды, приходит в том случае, если все ПЭ при выполнении данной команды в своих программах послали свои сигналы. Выполнение команды повторяется до получения обратно- го сигнала. Среди более сложных команд, которые могут быть реализованы с помощью развитого механизма дескрипторов, следует отметить следую- щие команды. ПОИСК1 — Поиск по образцу с фиксацией места совпадения. Поз- воляет продолжить поиск следующих совпадений. ПОИСК2 — Поиск по образцу с восстановлением при совпадении на начало массива. ДОПОЛМ — ДОПОЛнение Массива новым элементом, после до- полнения корректируется дескриптор. СБОРМ — СБОРка Массива; на основе дескрипторов двух массивов формируется массив-объединение со своим дескриптором. ИСКИ — ИСКЛючение из массива; из массива, заданного своим де- скриптором по исполнительному первому адресу, исключается элемент, который равен образцу, заданному по исполнительному второму адресу. (Команда применяется, например, при исключении из списка ссылки на удаляемый элемент.) ТАБЛ — вход в ТАБЛицу, адрес которой указан в первом испол- нительном адресе команды; таблица состоит из строк соответствия вида «запрос-ответ». ЭТАЛОН — «запрос» задается по первому исполнительному адресу, «ответ» записывается по третьему исполнительному адресу. ЗАПТАБ — ЗАПисать в ТАБлицу; в таблице, адрес которой указан по третьему исполнительному адресу, во всех строках, «ответы» которых сов- падают с образцом, заданным по первому исполнительному адресу, сме- нить «ответы» на заданный по второму исполнительному адресу. (Коман- да применяется, например, при смене варианта связывания переменных в логическом программировании.)
СТЕГ — Сравнение ТЕГов; тег кода, заданного по первому исполни- тельному адресу, сравнивается с константой, заданной по второму адресу. В случае неравенства управление передается по третьему адресу. М+ (М-) — команды изменения значений индексных регистров — модификаторов; одновременно могут изменяться до трех модифика- торов, адреса которых указываются в позициях Д,/2Дз- В позициях Ai, А2, Аз указываются адреса ЛОП, ОП или константы переадресации. ЦИКЛ — команда начала цикла; по первому исполнительному ад- ресу указывается граничное значение параметра цикла — количество по- вторений. Если необходимо, все данные внешнего прерываемого цикла записываются в стек циклов. КЦ — Конец Цикла; параметр цикла изменяется на единицу, по достижении максимального значения управление передается следующей команде; при этом, если необходимо, восстанавливаются данные внеш- него цикла из стека циклов. Если параметр цикла не достиг максималь- ного значения, управление передается команде, следующей за командой ЦИКЛ. 12.2. Программирование Здесь приведены примеры экспериментального программирования некоторых задач. Сложился общий подход, который заключается в вы- делении в каждой задаче опорного массива, распределяемого для обработ- ки разными процессорными элементами. Все другие структурированные данные «привязываются» к элементам опорного массива. Опыт програм- мирования показывает, что такая практическая возможность существует всегда. Опорный массив может быть любой размерности и структуры. В различных задачах это — массив, подвергающийся операции «свертки», сведенный к одномерному (линейному) массиву элементов матрицы, за- писей в списке, формируемых логических цепочек в задаче логического вывода, фреймов базы знаний и др. Представляется логичным распреде- ление нейронов для обработки нейросети. Т. е. нейроны должны состав- лять опорный массив. Легко просматривается план обработки нейросе- ти как в режиме обучения (например, при реализации метода «обратного прохождения ошибки»), так и в режиме распознавания. Эксперименталь- ное программирование логического вывода на языке ПРОЛОГ наводит на обобщение. А именно, принцип параллельного ветвления возможных вариантов преобразования сложной цепи полностью соответствует реа- лизации метода «ветвей и границ». И здесь целесообразно применение счетчиков для развития возможных вариантов ветвления. Это определяет возможность параллельного решения сложных задач оптимизации, осно-
ванного на переборе с возвратом и имеющего экспоненциальную слож- ность. 12.2.1. Векторная операция свертки Под операцией свертки понимается преобразование вектора в ска- ляр. Такой операции может соответствовать сложение или умножение всех элементов массива, нахождение максимума или минимума и др. Небольшая модификация этой операции позволяет получить скалярное произведение, произвести численное интегрирование. Найдем способом «пирамиды» произведение элементов массива {а„}, и = 0,..., к - 1. Пусть для наглядности N = 4. Для к = 10 схема сче- та приведена на рис. 12.2. Введены вершины аю,..., а17, соответствующие промежуточным результатам, и вершина а18, соответствующая результа- ту счета. У каждой вершины, обозначающей операцию, указан номер вы- полняющего ее процессора. Это закрепление операций за процессорами в программе жестко не планируется, так как программа не зависит ни от числа процессоров, ни от числа элементов в массиве. Однако при орга- низации программы порядок использования процессоров предусматри- вается и для известного их числа может быть предсказан. Рис. 12.2. Схема свёртки способом пирамиды
Пусть дескрипторы массивов, комплектом которых располагает каждый процессор в своей памяти, содержат дескрипторные элемен- ты, облегчающие аппаратную (микропрограммную) реализацию нахо- ждения и анализа адресов элементов массива. Каждый дескрипторный элемент выполняет определенную функцию; при отсутствии необходи- мости некоторые дескрипторные элементы могут не формироваться. Как дескриптор в целом, так и каждый его элемент адресуемы и располагают- ся в смежных регистрах. Сформируем в ПП$, г = О, ...,7V - 1, дескриптор £>i массива {ао, аг, «4,..., а2к-4}, содержащий восемь (максимальное количество) де- скрипторных элементов, D\ = {£>ю, •, £>17}- В £>ю содержится адрес ао первого элемента массива, £>ц содержит шаг h = 2 переадресации (пред- полагаем, что элементы массива {а^} в памяти расположены в смежных ячейках), D12 — количество к - 1 элементов, £>13 — адрес последнего («2fc-4) элемента массива. Элемент £>14 служит для организации авто- матической переадресации при последовательном обращении к данно- му массиву. В Z>i4 хранится адрес ао + jh для выборки элемента масси- ва при j-м (J = 0,1,...) обращении к нему (J может быть параметром цикла). После выполнения обращения этот адрес увеличивается на шаг h, т.е. выполняется операция (£>14) := (£>14) + (£>и). Следующая груп- па дескрипторных элементов предназначена для автоматического рас- пределения элементов массива между процессорами. В £>15 содержится адрес ао + ih, где i — номер процессора. Таким образом, каждый про- цессор формирует собственное значение £>15, располагая адресом реги- стра в своей памяти, содержащего значение г, для начального обраще- ния к «своему» элементу массива. В £>ю содержится значение Nh, ис- пользуемое для переадресации к следующему «своему» элементу массива с учетом числа процессоров. В £>i7 содержится текущее значение адреса ао + ih + jNh = (£>15) + J (£>1в), используемое для автоматической пере- адресации при последовательном (j = 0,1,...) обращении к дескриптору. При этом предполагается начальное обращение (при j = 0) к «своему» элементу массива и последующее изменение адреса элемента на величи- ну Nh, хранимую в £>i6. Сформируем дескриптор £>2 = {£>20, . ,£>27} для массива {ак, —,U2k-2} = {аю, ...,аю}. Отличие элементов этого дескриптора от элементов дескриптора £>i определяется другими значениями адресов первого и последнего элементов массива, а также шагом h = 1. В табл. 12.1 представлена программа счета. По команде 0 производится синхронизация системы для одновре- менного выполнения следующей команды. По данной команде каждый процессор посылает в блок С сигнал. Обратный сигнал, по которому про-
цессор приступает к выполнению следующей команды, приходит в том случае, если все процессоры при выполнении данной команды послали сигнал в С. Выполнение команды СИНХ повторяется до получения сиг- нала от С. Таблица 12.1 №* КОП А Аг I2 а2 h Аз 0 СИНХ 1 ПРАД £>15 £>25 007 2 ЗАКРА £>27 3 X £>17 £>17 001 £>27 4 УЗАП £>27 Z>23 - м 5 ИЗМАД £>17 £>27 007 6 БП 002 7 В По команде 1 (ПРоверка Адреса) адрес, записанный в дескриптор- ном элементе £>i5, сравнивается с адресом, записанным в дескриптор- ном элементе £>13, а адрес, записанный в дескрипторном элементе D25, сравнивается с адресом, записанным в £>23- (Команда допускает одно- временно два сравнения, но может быть предусмотрено лишь одно.) Ес- ли (£>15) > (£>1з) или (£>25) > (£>2з)5 производится переход на выпол- нение команды, номер которой указан по третьему адресу. В противном случае выполняется следующая команда. С помощью команды ПРАД в данном случае проверяется, принадлежат ли адреса, на которые перво- начально «смотрит» процессор, множеству адресов элементов массива. В примере при N > 9 результат проверки положителен для процессо- ров г = 0,1,..., 8. Это позволяет автоматически исключать остальные про- цессоры из счета; на них выполняется переход на конец программы. При N = 4 все процессоры приступают к выполнению следующей команды. По команде 2 (ЗАКРыть Адрес) адрес, записанный в дескрипторном элементе £>27, заносится в ПЗА. При первом выполнении на процессоре О (£>27) = аю, на процессоре 3 (£>27) = «13. По команде 3 выполняется операция умножения двух элементов массива. При первом выполнении команды на i-м процессоре и при дан- ном значении к в дескрипторном элементе D17 находится адрес а0 + 2г, в £>27 — адрес аю + г. Так как по А2 задано смещение, то сформируется адрес а0 + 2г +1. Таким образом, на процессоре 0 сформируется исполни- тельный вид команды ха0«1«ю, на процессоре 1 — ха2а3ац ит. д. После
выполнения команды и записи результатов в память адреса аю,а13 ис- ключаются из ПЗА. Очевидно, что при N > [к/2\ в исполнительном виде команды 3, сформированной на процессорах [к/2],..., N -1, используют- ся ранее закрытые другими процессорами адреса. Попытка выполнения этой команды, точнее, считывание по закрытым адресам, будет цикличе- ски возобновляться до тех пор, пока процессоры, закрывшие адреса, не выполнят умножение и не зашлют по этим адресам промежуточные ре- зультаты. Так реализуется управление потоком данных. По команде 4 (Условная ЗАПись) в случае (£>27) = (£>23) произво- дится считывание по адресу, указанному в дескрипторном элементе £>27, и запись по третьему адресу команды (М — модификатор, в котором ука- зан адрес результата произведения всех элементов массива). Напомним, что в £>23 указан адрес того элемента расширенного массива, в котором при счете способом «пирамиды» образуется окончательный результат. По команде 5 (Изменение АДреса) выполняются операции (£>17) := (£>17) + (£>1б); (£>27) := (£>27) + (£>2б). В данном примере (£>i6) = 8, (£>26) = 4. Выполнение каждой операции сопровождается анализом — не превосходит ли вновь найденное значение адреса последнего элемен- та массива, указанное соответственно в дескрипторных элементах £>13 и £>23. Если превосходит, управление передается на окончание выполнения программы. Команда 6 — команда Быстрого Перехода на выполнение коман- ды 2, т. е. на повторное выполнение цикла попарного умножения элемен- тов массива. В нашем примере следующий исполнительный вид команды 3 на процессоре 0 — ха8а9а14, на процессоре 1 — ха10аца15 и т. д. Выход за пределы массивов при повторном выполнении команды 5 приведет к окончанию счета на процессорах 1, 2 и 3. Процессор 0 по ко- манде 4 произведет запись окончательного результата по адресу, указан- ному в модификаторе 0. Третье выполнение команды 5 на процессоре 0 приведет к окончанию счета и на нем. Команда 7 является командой Возврата при обращении к данной программе как к процедуре. По этой команде одновременно с возвратом в программу, из которой было выполнено обращение, производится кор- рекция указателя вершины стека вложенных процедур. 12.2.2. Распараллеливание по опорному одномерному мас- сиву В ряде случаев в основу монопрограммирования может быть поло- жена идентичная обработка всеми процессорами элементов одного из массивов, называемого опорным. Целесообразно за опорный массив вы- бирать массив результатов, получаемых по фрагменту программы. Рас-
смотрим такой способ обработки на примере программы дискретного преобразования Фурье (ДПФ). Предварительно заметим, что алгоритм быстрого преобразования Фурье (БПФ) появился в результате необходимости сокращения общего количества операций на однопроцессорной ЭВМ. В многопроцессорной ВС определяющей является длина критического пути в информацион- ном графе после его распараллеливания. При реализации критического пути становится несущественным, занят ли один процессор, а другие сто- ят, или заняты все процессоры, хотя бы они и повторяли некоторые опе- рации. Поэтому применение алгоритма БПФ, как более сложного, ста- новится нецелесообразным. Пусть заданы R комплексных чисел Хг — Х^+гХг2\г — О, 1. Они преобразуются в R комплексных чисел Аг = 52 Хк ехР f-27r^k} = + гА<2) = 2тггАЛ ) R—1 + i ^2 sin fc=0 2irrk\ ~R~ J где Aj.1) и А(г2) — коэффициенты Фурье. Заданные коэффициенты и коэффициенты Фурье находятся в ОПД по адресам хи а: „л Х^ уД) Х^ Х^ Х^ * х) л0 >л0 >Л1 >Л1 > • • • > AR-V п\ Л(1) Л(2) А(1) Д(2) А(1) Д(2) а) ^0 ’^0 ’^1 ’Л1 > • • • ^R-l^R-1' Организуем параллельный процесс на основе динамического рас- пределения рассчитываемых коэффициентов Фурье между процессора- ми. В этом случае будем считать распределяемый массив j = 0,..., R - 1, состоящий из пар коэффициентов Фурье, опорным. Для описания всех подмассивов достаточно двух дескрипторов, со- ответствующих действительной части всех используемых комплексных чисел Dx = {Дхо, Дхь Дх2, Дхз, Дха} = {x,2,R,x + 2R - 2, х}, Da = {Дао, Да1, Да2, Даз, Даа, Да5, Дао, Dai} — = {а, 2, R, а + 2R — 2, а, а + 2г, 27V, а + 21} (указан начальный вид дескрипторных элементов). В табл. 12.2 представлена программа счета. Пропущены некоторые команды начального формирования дескрипторных элементов, в том числе команды, соответствующие операции (Даб) •= (Дао) + ЯДа1)- Команды 0-4 встречались ранее. Предполагаем, что для формиро- вания значений г, к, ПД достаточно пользоваться операцией за-
Таблица 12.2 КОП h Ai I2 A2 h A3 0 ЗАГ < г > < i > Dai DA5 1 ПРАД DA7 020 2 X < r > —2ir/R a 3 ЗАГ < к > h h 4 ЗАГ Dxi Dxo 5 ЦИКЛ Daz 6 X < к > a 0 7 cos 8 X Dx4 9 4- h h 10 м+ 0 11 X Dx4 0001 12 + h h 13 м+ < к > 0001 Dx4 Dxi 14 кц 15 ЗАП h Da7 16 ЗАП h Da7 0001 17 ИЗМАД Da7 020 18 м+ <r > <N> 19 БП 002 20 В грузки, применяемой для формирования модификаторов и дескриптор- ных элементов. При этом первоначально г присваивается значение но- мера процессора. При переводе в вещественные они сохраняют фактиче- ские значения. Процессор i приступает к счету Ai, если при выполнении команды 1 (Т?а7) не превосходит (Даз). По команде 5 (ЦИКЛ) формируется цикл на (Да2) = R повторений. По командам 6-12 формируются очередные слагаемые накапливае- мых в li и I2 значений и Предполагаем, что если в команде не указан адрес операнда, то операндом является содержимое сумматора. По команде 13 увеличивается значение к и значение дескрипторного элемента Dxi для перехода к счету следующих слагаемых, образующих А^иА^. По команде 14 Конец Цикла изменяется значение счетчика цикла,
и если оно не превышает значение, указанное в команде ЦИКЛ, управ- ление передается на повторное выполнение рабочей части цикла. По командам 15 и 16 найденные значения и записываются в память. По команде 17 выполняется операция (Т7д7) := (Da?) + (Dag)- Если после этого (Da?) > (Das), управление передается на выход из проце- дуры. В противном случае, по команде 18 значение г увеличивается на N в соответствии с распределением рассчитываемых значений Аг между процессорами. По команде 19 осуществляется переход на счет нового значения Аг. 12.2.3. Распараллеливание по двумерному опорному масси- ву Построим программу умножения матриц С = А х В размерности к, где каждый элемент матрицы-результата С находится: к-1 С цу = р=о где // — номер строки матрицы С; у — номер столбца. Представим множество элементов С одномерным массивом, обу- словленным расположением подряд строк этой матрицы: С = {Соо, • • • ,Co,fc-l,Cio, • . . , Cfc—l,fc—1} = {Cg, . . . Пусть каждый процессор П*, i = 0,..., N — 1, считает элементы с*+ w этого массива, j = 0,1,.... Для построения подпрограммы нахождения скалярного произведе- ния строки А и столбца В{ар] х {Ьр}, р = 0,..., к - 1, сформируем де- скрипторы с дескрипторными элементами, необходимыми для организа- ции счета только одним процессором: 7?i = {Z?io, 77ц, 77i2,7713, 7714} = {^о, 1, А;, ао + к — 1, ао}> 772 = {7720,7721,7722, 772з, 7724} = {&о, А;, оо, оо, Ьо}. Указаны начальные значения 77i4 и 7724, а неиспользуемые значения 7722 и 7723 полагаются заведомо большими. Так как мы условились распределять считаемые элементы массива С между процессорами, то сформируем на каждом процессоре дескриптор подмассива закрепленных за ним элементов: 77о = {77со, 77ci, 77с2,77сз? 77^4} = {соо + % N, оо, соо + к2 — 1, соо + £} (указано начальное значение 77с4, значение Dc2 не используется).
Таблица 12.3 №к КОП h Ai I2 А2 h Аз 0 ЗАГ а £>14 £>10 г>24 £>20 1 ЦИКЛ £>12 2 X Г>1 d2 3 + а а 4 кц 5 ЗАП а Г>3 6 В Подпрограмма нахождения скалярного произведения приведена в табл. 12.3. Все используемые команды ранее встречались. Использование в командах 2 и 5 адресов дескрипторов, которые, в отличие от адресов модификаторов и дескрипторных элементов, облада- ют специальным признаком, приводит к автоматической переадресации, производимой при выполнении этих же команд в цикле. Так, при выпол- нении команды 2, если (£>14) не превосходит (£>i3), а (£>24) не превосхо- дит (£>23), формируются исполнительные адреса AJ = Ai + (£>14), А% = Л2 + (£>24), после чего выполняются операции (£>14) := (£>14) + (£>ц); (£>24) := (£>24) + (£>21). Это обусловило необходимость восстановления значений £>14 и £)24 по команде 0. Аналогично, при выполнении ко- манды 5 готовится запись при следующем обращении к подпрограмме, (£>34) := (£>34) + ^. Пусть матрице А соответствует дескриптор массива первых элемен- тов ее строк, то есть дескриптор первого столбца £>а = {£>ао, £>Л1, £>А2, £>аз, £>Л4} = {<^оо> аоо + (& — 1)к, аоо} (указано начальное значение £>д4). Матрица В представлена дескрипто- ром массива первых элементов ее столбцов, то есть дескриптором первой строки £>в = {£>во, £>в?} = {^оо, 1, к, boo + к — 1, &оо, boo + % АГ, boo + О (указаны начальные значения £>В4 и Db?)- Программа умножения мат- риц (пропущены команды формирования и восстановления дескрипто- ров) представлена в табл. 12.4. По команде 10, выполняющейся первый раз при (£>в?) = boo + адрес, записанный в £>вт, сравнивается с адресом последнего элемента массива, записанным в £>вз- Если адрес указывает на принадлежность
Таблица 12.4 №fc КОП h Ai I2 A2 I3 ^3 10 ПРАД Db7 017 11 ПРАД Da7 020 12 ЗАГ Dio Da4 7713 Da4 D20 Db7 13 М+ Рз <k-l> 14 БПВ1 000 15 ИЗМАД Db7 017 16 БП 012 17 М- Db7 Db2 18 м+ Da4 Dai 19 БП 010 20 В элемента массиву, выполняется следующая команда. В противном случае управление передается на выполнение команды 17. По команде 11 производится аналогичная проверка принадлежно- сти элемента используемой строки матрицы А, адрес которого указан в Da4, массиву первых элементов ее строк. Если (Da4) > (Даз), управле- ние передается на выполнение команды 20 — выход из подпрограммы. По командам 12—13 формируются дескрипторные элементы де- скрипторов Di и £>2 для скалярного умножения очередной строки мат- рицы А на очередной столбец матрицы В — для получения очередного элемента матрицы С. По команде 14 производится обращение с возвратом в рамках одной задачи (без использования ОС) к процедуре счета скалярного произведе- ния (см. табл. 12.3). По команде 15 производится изменение адреса начального элемен- та столбца — переход к следующему столбцу с учетом предполагаемого закрепления элементов матрицы С за процессорами, а именно, произво- дится операция (Db?) •= (Рв7) + (77вб), где (7?вб) = N. Если после из- менения адреса новое его значение превышает максимальное, записан- ное в £>вз, осуществляется переход на выполнение команды 17. В про- тивном случае по команде 16 управление передается на выполнение ко- манды 12 — на подготовку счета и счет очередного элемента С. Команды 17 и 18 выполняются в случае, если измененный на зна- чение N адрес (£>в?) первого элемента столбца В превышает значение (£>вз) = boo + к - 1. Чтобы получить «координаты» того элемента С, к счету которого необходимо перейти, т. е. чтобы получить адреса перво-
го элемента столбца и первого элемента строки, на пересечении которых он находится, необходимо выполнить следующие действия: последова- тельно вычитать шаг (Г>в2), т.е. значение к, из вновь полученного ад- реса столбца В и прибавлять шаг (£>ai), т. е. это же значение к, к ранее использованному адресу первого элемента строки А (первоначально — к значению аОо) до тех пор, пока значение (Db?) не станет меньше или рав- но значению (1>вз)- По данным командам изменяются значения (£>в?) и (Т?А4). Затем по команде 19 управление передается на выполнение коман- ды 10, по которой в случае недостаточности коррекции дескрипторного элемента DB7 управление вновь передается на выполнение команды 17. Если коррекция элемента Db7 произведена успешно, по команде 11 мо- жет быть выяснено, что скорректированное значение (Д44) превосходит значение (Ваз)- Это означает, что следующий элемент матрицы С, к сче- ту которого пытается приступить процессор, принадлежит несуществую- щей строке, то есть процессор закончил выполнение своей доли работы. По команде 20 производится выход из подпрограммы.
Лекция 13. Задача логического вывода и когерентность кэш-памяти в ВС SPMD-архитектуры Продолжается рассмотрение SPMD-технологии и ее применения к ре- шению задач логического вывода. Исследуется проблема согласования опе- ративного совместного использования результатов счета, находящихся в кэш-памяти процессоров, до их поступления в общую память, — проблема когерентности кэшей. Предлагается решать эту проблему с помощью меха- низма закрытия адресов, что совпадает с общей идеей data flow. Освещается возможность применения памяти предикатов при решении задач по SPMD- технологии. Ключевые слова: база знаний, логическая цепочка, логический вы- вод, когерентность, глобалы, таблица закрытых адресов. 13.1. Обработка базы знаний Рассмотрим пример решения в упрощенной постановке одной из за- дач искусственного интеллекта — задачи полного вывода на основе си- стемы аксиом и последующего выбора кратчайшего пути, ведущего от «посылки» из данного множества к одному из заданных «следствий». Ре- шение этой задачи является важным элементом выбора кратчайшей по- следовательности управляющих воздействий, приводящих систему из од- ного состояния в другое. Эта же задача является важным элементом об- работки базы знаний — дополнением ее новыми знаниями посредством всех возможных выводов, автоматического доказательства теорем, кибер- нетического моделирования (например, направленного движения по ла- биринту) и т. д. Количество логических выводов в единицу времени является основ- ной характеристикой производительности перспективных ЭВМ. Тем вы- ше важность исследования всех аспектов решения данной задачи и преж- де всего — исследования возможности приспособления к ней архитекту- ры ВС. Представим следующую модель базы знаний. Пусть задано множество {ал}, А = 0, ..., т — 1, объектов-выска- зываний. Задана первичная система отношений следования, которую бу- дем называть системой аксиом, попарно связывающая объекты в пары вида «посылка-следствие» а7 —► а^, к е {0, ..., т — 1}. Отдельно выде- лим множество {ам} исходных высказываний, которые в системе аксиом
участвуют только как «посылки», и множество результирующих высказы- ваний {с^}, которые в системе аксиом участвуют только как «следствия». Остальные высказывания составляют множество {Ь„}. Таким обра- зом, {Ад} = {ам} U {М U {се}, {0, ..., т - 1} = {/z} U {i/} U {С}. (При движении по лабиринту {ам} — множество входов, {с$} — множе- ство выходов.) Необходимо связать объекты-высказывания всеми возможным^ ло- гическими цепочками вида a^i —* а^2 oiks (s — длина цепочки) на основе данной системы аксиом, не содержащими циклы (исключаю- щими вхождение одних и тех же объектов более одного раза), при этом Будем считать, что все логические цепочки, связывающие объекты- высказывания множества {ад} является системой аксиом, в каждой из которых высказывание-посылка принадлежит множеству {ам}. При этом каждая такая аксиома представляет логическую цепочку, длина которой равна двум. Все возможные логические цепочки на основе этой системы аксиом дополняют базу знаний до ее окончательного уже неизменяемого состояния. Примем следующий план параллельной обработки базы знаний: пусть г-й процессор выбирает очередную логическую цепочку (первый раз г-ю, затем номер увеличивается на N) и пытается дополнить базу зна- ний всеми возможными новыми цепочками на основе продолжения дан- ной одним объектом, не встречавшимся в ней ранее. То есть, множество логических цепочек образует опорный массив. Если последний элемент выбранной цепочки принадлежит множеству {с^}, ее продолжение уже невозможно. Процессоры выбирают и обрабатывают логические цепоч- ки до исчерпания возможности изменения базы данных; чтобы обнару- жить это, организуется индикация формирования хотя бы одним процес- сором новой логической цепочки. Конкретизируем пример. Пусть {ад} = {ао, di, аг, Ьз, 64,65, Ьб, су, се}. Система аксиом: ао Ьз> —* 64, а2 —> 65, Ьз —* С7,64 —* 65,64 —* Ьб, 65 —* 64, be —* С7, —> се- Первые три отношения образуют три логические цепочки - начальное значение базы знаний.
Пусть d — начальный адрес в ОПД базы знаний, по которому рас- полагается первая логическая цепочка. Каждая цепочка описывается де- скриптором с пятью дескрипторными элементами, необходимыми для обработки только одним процессором. Дескрипторы в ОПД располага- ются с адреса /. Таким образом, первоначально в ОПД имеем d)a0 -» b3 /)Di = {d, 1,2, d 4- 1, d} d 4~ 2)ai —> 64 f 4~ 5)D2 = {d 4- 2,1,2, d 4- 3, d 4- 2} d4-4)a2 —*65 /4-10)1)з = {d + 4,1,2,d + 5,d + 4}. Дескриптор Dq, описывающий массив дескрипторов логических це- почек, содержит восемь дескрипторных элементов и расположен в ОПД по адресу д. Его начальный вид д) Do = {/,5,3, /4-10,/, /,57V,/}. Будем считать, что при загрузке в память процессора адреса де- скрипторов совпадают с их именами. Аксиомы, не составляющие начальное значение базы знаний, обра- зуют в ОПД массив с начальным адресом 6, описываемый дескриптором Db в памяти каждого процессора, в нашем примере Db = {Ъ, 2,7,54-12, Ь}. И, наконец, в ОПД организован массив признаков {а0, • • •, ajv-i} обработки логических цепочек процессорами, описываемый дескрипто- ром Dn = {ао, 1,7V, ад-i, а0} в памяти каждого процессора. В табл. 13.1 представлена программа решения задачи, состоящая из двух частей: по командам 0-20 база знаний дополняется всеми возмож- ными логическими цепочками, по командам 21-30 выбирается цепочка минимальной длины, соединяющая некоторое исходное высказывание с результирующим. (При движении по лабиринту так может быть найден кратчайший путь, соединяющий вход и выход, а также указаны эти вход и выход, если они в лабиринте не единственные.) По команде 0 производится синхронизация ВС для одновременного начала выполнения следующих команд. По команде 1 (ЗАГрузка Дескриптора) по адресу дескриптора Do в памяти каждого процессора засылаются восемь дескрипторных эле- ментов, хранящихся в ОПД, начиная с адреса д. Выполняются операции (D07) := (D05) := (Doo) 4-г (Ди). Эта начальная загрузка производится при первом выполнении основной части программы, после чего по ко- манде 2 управление передается команде 4. По команде 3, с которой начинается цикл анализа очередной логи- ческой цепочки, формируются дескрипторные элементы D02 и D03 в со- ответствии с тем их текущим значением, которое было выработано в ходе совместного формирования всеми процессорами логических цепочек.
Таблица 13.1 №fc КОП h Ai I2 A2 I3 A3 0 СИНХ 1 ЗАГД Do 9 2 БП 004 3 ЗАГ D02 9 + 2 D03 9 + 3 4 ВЗЯТЬД D07 Ds 018 5 ЗАП <i> OiQ 6 Л DS3 <”c”> 004 7 ЗАГ Ml DS2 M2 DS3 DM Dbo 8 ' ПОИСК1 Db DS3 003 9 ПОИСК2 Ds Db± 0001 008 10 ЗАКРА Г 11 ЗАГ Dq2 9 + 2 D03 9 + 3 12 +Ц A)3 0002 MA 13 допол Da Db4 0001 MA 14 допол 9 Ds 15 ЗАП Г 16 ЗАГ DS2 Ml DS3 M2 17 БП 008 18 ЗАП <1> <i> QO 19 ПОИСК2 Dn 003 20 ЗАГД Do 9 21 СИНХ 22 УП <i> 024 23 ЗАП <oo> 1 + 2 24 ВЗЯТЬД Dq7 Ds 030 25 А DS3 <"c”> 024 26 ЗАКРА △ 27 УП DS2 1 + 2 029 28 ЗАПД Ds I 29 ЗАП △ 30 В По команде 4 (ВЗЯТЬ Дескриптор) выбирается дескриптор в соста- ве всех восьми дескрипторных элементов, определенный значением де- скрипторного элемента Д)7, и заносится по адресу Ds в памяти процес- сора. При первом выполнении команды (J = 0)г-м процессором выбира-
ется дескриптор Di+1. При j-м выполнении команды этим же процессо- ром выбирается дескриптор A+i+wj • При выполнении команды сначала проверяется условие принадлежности выбираемого дескриптора масси- ву таких дескрипторов, (Do?) не больше (£>оз)? При выполнении этого условия дескриптор Ds на данном процессоре формируется. Выполняет- ся операция (Do?) '= (Do?) 4- (Doe), что при следующем выполнении дан- ной команды позволит выбрать дескриптор логической цепочки, номер которой на N превосходит номер выбранной. При невыполнении усло- вия принадлежности управление передается команде 18 без модифика- ции дескрипторного элемента Do?. Для другого применения данной команды можно предположить возможность указания по первому адресу адреса дескрипторного элемен- та D04, что обеспечивало бы последовательную выборку дескрипторов из массива при повторном выполнении команды в цикле без учета номера процессора. По команде 5, выполняемой в случае, если г-й процессор присту- пает к обработке очередной логической цепочки, г-му элементу массива признаков присваивается значение 0. По команде 6 выделяется признак высказывания, хранящегося по последнему адресу анализируемой цепочки (он указан в Ds3). Если это результирующее высказывание, сопровождаемое признаком «с», осуще- ствляется переход на выборку дескриптора следующей логической це- почки — на выполнение команды 4. В противном случае выполняется следующая команда. По команде 7 запоминаются значения дескрипторных элементов DS2 и Ds3, а также восстанавливается значение дескрипторного элемента Dm . По команде 8 в массиве, описываемом дескриптором Db, находится высказывание, совпадающее с последним высказыванием (адрес его на- ходится в Ds3) анализируемой логической цепочки. Если такого выска- зывания нет, управление передается по адресу 3 — на анализ очередной логической цепочки с учетом возможности пополнения базы знаний дру- гими процессорами. В процессе поиска изменяется значение дескрип- торного элемента Db4 на шаг переадресации (величину, указанную в Dm) так, что в случае успешного поиска в Db4 записан адрес высказывания- посылки, совпадающего с высказыванием, адрес которого указан в Ds3. Команда 9 выполняется в случае, если по команде 8 найдена аксио- ма, посылка в которой совпадает с последним элементом анализируемой логической цепочки. Таким образом, эта цепочка может быть продолже- на соответствующим следствием. Его адрес в массиве аксиом, описыва- емом дескриптором Db, равен значению (Db4) 4- 1. Однако необходимо проверить, не входит ли уже заданное следствие в данную логическую це-
почку, т. е. не формируется ли цикл. Эта проверка и выполняется по ко- манде 9. По ней осуществляется поиск в массиве, описываемом дескрип- тором элемента, который совпадает с элементом по адресу (£>м) 4- 1. Если такого элемента нет, выполняется следующая команда, с которой начинается включение новой логической цепочки в базу знаний. В про- тивном случае осуществляется переход на поиск нового продолжения ло- гической цепочки — на команду 8. Отличие данной команды поиска от предыдущей заключается в том, что после ее выполнения восстанавлива- ется значение £>s4 : (Z>s4) := (£>so)- С помощью команды 10 осуществляется вход в критический блок дополнения базы знаний логической цепочкой, найденной процессором. Одновременное выполнение этого блока разными процессорами недопу- стимо. Поэтому по данной команде в ПЗА засылается адрес Г, выполня- ющий роль семафора. В силу особенностей команды ЗАКРА выполнить ее одновременно более одного процессора не могут. Тем более не может ее выполнить процессор, если адрес Г уже закрыт. После входа в критический блок, который в данный момент выпол- няется лишь одним процессором (остальные процессоры либо анализи- руют другие логические цепочки, либо ожидают входа в этот блок в своих копиях программы), этот процессор должен располагать последней ин- формацией о составе базы знаний, которую ему надлежит уточнить. По команде 11 в дескрипторе Dq уточняется информация о количестве де- скрипторов логических цепочек и адресе последнего из таких дескрипто- ров. По команде 12 в модификаторе Ма с помощью операции целочис- ленного сложения формируется адрес начала новой логической цепочки в базе знаний (Ма) := ((£>оз)) 4- ((Д)з) 4- 2). Действительно, первый ис- полнительный адрес данной команды равен содержимому D03, т.е. ад- ресу первого дескрипторного элемента дескриптора последней логиче- ской цепочки. В нашем примере при первом дополнении базы знаний (£>оз) = f 4- Ю. Содержимым же ячейки с этим адресом является адрес начала последней логической цепочки, (/ 4-10) = d + 4. Аналогично по второму исполнительному адресу в нашем примере первый раз будет вы- брано слагаемое ((£>оз) 4- 2) = (/ 4-12) = 2, равное длине последней логи- ческой цепочки в базе знаний. Таким образом, в нашем примере первый раз сформируется адрес начала новой логической цепочки (Ma) = d 4- 6. Команда 13 — Дополнение массива элементом по данному адресу. Массив, образуемый дополняемой логической цепочкой и описываемый дескриптором Ds, дополняется вновь найденным продолжением — вы- сказыванием, записанным по адресу (Db*) 4- 1. Адрес начала новой це- почки в базе знаний указан по третьему адресу команды. Корректируются
значения дескрипторных элементов (Р80) := (Ds3) := (De4) := (МА); (Ds3) := (£>«3) + (^»2); (ЗД := (Ds2) + 1. Новый элемент массива записывается по адресу (Д,з)- По команде 14 массив дескрипторов логических цепочек, описыва- емый дескриптором, который в ОПД располагается, начиная с адреса д, дополняется дескриптором Da вновь сформированной цепочки. Особен- ность выполнения этой команды обусловлена указанием адреса дескрип- тора в позиции 12. Так как третий адрес не указан, то место расположения нового массива не меняется. Тогда выполняются операции (<7 + 3) := (<? 4-3) 4-(<? 4-1); (# + 2) := (<?4-2)4-1. Дескриптор Ds записывается в ОПД начиная с адреса (д 4- 3). Командой 15 заканчивается выполнение критического блока: про- изводится запись по адресу Г. Открывается возможность входа в этот блок другого процессора. По команде 16 восстанавливаются дескрипторные элементы де- скриптора Ds ддя дальнейшего анализа выбранной логической цепочки и поиска других ее продолжений. Переход производится по команде 17. При этом дескрипторный элемент не восстанавливается, что обеспе- чивает продолжение анализа массива аксиом до его исчерпания. Команда 18 выполняется в том случае, если г-й процессор в резуль- тате выполнения команды 4 не выбрал логическую цепочку из базы зна- ний для последующего анализа возможности ее продолжения. Тогда г-му признаку массива признаков присваивается значение 1. По команде 19 последовательно анализируются все элементы мас- сива признаков, описываемого дескриптором Dn, на равенство нулю. При существовании хотя бы одного нулевого признака, свидетельствую- щего о том, что хотя бы один процессор анализирует логическую цепочку на возможность ее продолжения и дополнения базы знаний, управление передается на выполнение команды 3 — на повторную попытку выбора очередной логической цепочки. Если нулевого признака нет, т. е. ни один процессор не обрабатывает логическую цепочку, «насыщение» базы зна- ний закончено. По команде 20 каждый процессор уточняет в своей памя- ти окончательное значение дескриптора Do (см. выполнение команды 1). Выполнение второй части программы начинается с синхронизации системы (команда 21). Пусть дескриптор логической цепочки минимальной длины, закан- чивающийся любым результирующим высказыванием, формируется в ОПД с адреса I. Первоначально положим длину массива, указываемую в
дескрипторном элементе по адресу /4-2, равной заведомо большему чис- лу (команда 23). Однако параллельное выполнение этой команды всеми процессорами может оказаться нецелесообразным. Поэтому по команде 22 производится передача управления в обход выполнения команды 23 для процессоров с номерами i > 0. По команде 24 выбирается очередной дескриптор логической це- почки, определенный значением DQ7, и заносится по адресу Ds в памяти процессора. Если дескриптор выбрать не удается (см. выполнение коман- ды 4), управление передается на выход из подпрограммы. По команде 25 анализируется, является ли последний элемент це- почки, адрес которого указан в Ds3, результирующим высказыванием. Если не является, управление передается на выборку следующего де- скриптора логической цепочки — на выполнение команды 24. Команды 26—29 образуют критический блок, одновременное вы- полнение которого разными процессорами невозможно. По команде 26 закрывается семафор — адрес △. Если в результате выполнения команды 27 оказывается, что длина выбранной логической цепочки меньше длины, зафиксированной в / 4- 2 ранее, по команде 28 дескриптор Ds записывается в ОПД начиная с адре- са/. Засылкой по команде 29 производится выход из критического бло- ка. Так как в процессе формирования логических цепочек с ростом их номера длина не убывает, то достаточно не более чем однократного вы- полнения критического блока каждым процессором. По команде 30 осуществляется возврат из подпрограммы. Продолжим рассмотрение примера. Пусть для наглядности N = 4. Тогда по команде 4 процессоры 0,1,2 выберут для анализа три логических цепочки, первоначально составляющих базу знаний. Процессор 0 находит продолжение анализируемой логической це- почки ао —* Ьз —> с7 и дополняет ею базу знаний. Формируется дескрип- тор новой логической цепочки Z>4 = {с/ 4- 6,1,3, с/ 4- 8, с/ 4- 6}, и в ОПД уточняется дескриптор Dq = {/, 5,4, f 4-15, /, /, 20, /}. Процессор 3, который ранее тщетно пытался выбрать для анализа логическую цепочку, выполняя команды 4, 18, 19, 3, теперь по команде 18 выберет вновь сформированную цепочку. Процессор 1 формирует логическую цепочку -» 64 -» 65. По- видимому, он дольше будет искать это продолжение и для дополнения базы знаний войдет в критический блок своей копии программы после процессора 0. Формируется значение Z>5 = {с/ 4- 9,1,3, с/ 4-12, с/ 4- 9} и в ОПД — новое значение Do = {/, 5,5, f 4- 20, /, /, 20, /}.
Процессор 2 формирует логическую цепочку а2 &4- Так как используемая при этом аксиома еще дальше отстоит от начала в массиве аксиом, предположим, что этот процессор третьим войдет в критический блок и дополнит базу знаний. Процессор 1, продолжая поиск другого возможного продления ана- лизируемой логической цепочки, сформирует цепочку —» Ь4 —» Ь6. В табл. 13.2 представлены все логические цепочки базы знаний, ука- заны номера цепочек, на основе продления которых они получены, про- цессоры, их формирующие, и процессоры, на обработку которыми эти цепочки поступают далее. Таблица 13.2 Номер цепочки Логические цепочки базы знаний Номер продлен- ной цепочки Форми- рующий процессор Обрабаты- вающий процессор 1 ао ~* Ьз 0 2 0-1 —> 64 1 3 0-2 —► Ь$ 2 4 ао Ьз —* су 1 0 3 5 (Z1 —» &4 —» Ь$ 2 1 0 6 а2 —> 65 —> 64 3 2 1 7 (Z1 —» 64 —> Ьб 2 1 2 8 а>2 ~* Ьз —* 64 —* Ьб 6 1 3 9 Q1 —> 64 —> > С7 7 2 0 10 (Z1 —* 64 —> Ьб —> С8 7 2 1 11 а2 —> 65 —* 64 —* be —* С7 8 3 2 12 0-2 Ьз —> 64 —> Ьв —* с8 8 3 3 В частности, видно, что процессору 0 лишь однажды удалось сфор- мировать новую цепочку. Результат выполнения второй части программы очевиден.
13.2. Проблема когерентности кэш-памяти решается совместно с проблемой «data flow» 13.2.1. Проблема управления когерентностью кэшей и ее сов- мещение с синхронизацией параллельных вычисле- ний Основное противоречие, разрешаемое при проектировании симмет- ричных многопроцессорных ВС, — резкое различие скоростей работы операционных устройств и устройств оперативной (главной), прямоадре- суемой, разделяемой (общей) памяти (ОП). Для уравнивания этих скоростей используются два механизма: рас- слоение памяти и многоуровневая буферизация, выражающаяся в иерар- хии памяти. (Здесь мы не затрагиваем вопросов минимизации числа об- ращений к памяти при выполнении операций на стеке, построения мно- говходовой памяти и др.) Верхним уровнем буферизации памяти явля- ется многофункциональное СОЗУ, использующее технологию построе- ния операционных устройств и входящее в состав каждого процессора. Основные области СОЗУ предназначены для организации кэшей команд (чаще называют буфером команд) и кэшей данных. Текущая обработка данных производится с использованием этих кэшей и предполагает опе- ративное, по возможности — параллельное с обработкой данных, обнов- ление информации во взаимодействии с ОП. Программные коды на протяжении времени выполнения программ остаются неизменными, и потому проблема организации буфера команд ограничена проблемой подкачки и, возможно, быстрого изменения по- рядка считывания команд (для чего используется принцип ассоциатив- ной памяти). Проблема кэша данных сопряжена с проблемой когерентности — проблемой коррекции общих данных, оказавшихся в момент их обработ- ки размноженными и распределенными между кэшами разных процессо- ров. Данные, находящиеся в кэшах разных процессоров, могут быть из- менены одним процессором, что, в соответствии с алгоритмическим за- мыслом, должно или не должно стать предметом коррекции кэшей других процессоров. Например, решая конечно-разностным методом (методом «сеток») дифференциальное уравнение, мы при очередной итерации по рекур- рентному соотношению находим значение функции-решения в узле че- рез подобные решения в соседних узлах. Пусть вычислительный процесс построен так, что близкие узлы обрабатываются разными процессорами и области сетки оказались одновременно представленными в разных кэ- шах. Тогда, если некоторый процессор рассчитал новое приближение в
узле, то, по замыслу алгоритмиста-программиста, он, произведя необхо- димую запись в ОП, может не препятствовать другим процессорам ис- пользовать старое приближение в этом узле — до окончания шага итера- ции по всей сетке, сочтя такое препятствование сложным. Но, по замыс- лу же программиста, процессор может немедленно сообщить кэшам дру- гих процессоров новое значение функции в узле — для ускорения процес- са сходимости. Можно привести примеры, когда на разных процессорах запускаются процедуры с общими локальными данными (с одинаковы- ми виртуальными адресами), но с разной динамически складывающей- ся историей изменения значений. Можно себе представить, что все про- цессоры меняют значение некоторой величины в ОП по принципу «кто последний», но сами пользуются в дальнейшем своим значением. Здесь обмен уточненными значениями привел бы к ошибке. Значит, не всеми данными и не всегда надо обмениваться. Таким образом, в целом про- цесс когерентности должен быть управляемым и соотнесенным с замыс- лом программиста. В то же время надо помнить, что одна из главных функций кэша — отображение текущего состояния ОП в памяти на «быстрых» регистрах каждого процессора. Поэтому представляется, что отображать во всех кэ- шах любые изменения в ОП все же нужно. Просто в некоторых случаях это следует делать немедленно, а в других — не столь срочно. Необязательность немедленного соблюдения когерентности прин- ципиально может выражаться при программировании значением при- знака, по которому при расчете значения переменной и записи его в ОП исключается попытка замещения значения переменной новым в кэшах других процессоров. Это означает, что кэш будет обновлен «естествен- ным» путем — путем считывания из ОП данных или областей памяти в последующем счете. Если заведомо известно, что все процессоры работают по разным за- дачам, то эта проблема отсутствует. Но если процессоры работают в рам- ках одной задачи, проблема когерентности обретает актуальность. Особую актуальность эта проблема имеет в технологии SPMD, где максимальное внимание уделяется именно тому, чтобы на всех процес- сорах выполнялась одна и та же программа (см. целесообразность про- граммирования метода «сеток») при совместной обработке общих мас- сивов данных. Примером может служить одновременный запуск СУБД на разных процессорах при организации многоканального доступа к базе данных. При этом неизбежна синхронизация обработки отдельных об- щих данных или их подмассивов. Для такой синхронизации применяют- ся принципы data flow, которые при конкретной реализации могут ис- пользовать механизм семафоров, но могут воспользоваться и более «бы-
стрым» механизмом закрытия адресов. Он отмечает те адреса, или непо- средственно регистры, по которым запрещено считывание до поступле- ния в них данных. И если механизм семафоров эффективен на уровне программ (закрытый семафор вызывает прерывание и обращение про- цессора к очереди заданий), то механизм закрытия адресов ориентиро- ван на уровень команд: команда пытается считать значение, пока оно не поступит в регистр с «закрытым» адресом. Например, примитивная программа умножения всех элементов массива (одна из операций «свертки массива») может быть размножена и распределена между процессорами как программа умножения двух со- седних элементов и засылки результата в продолжение этого же массива. Процессоры «проходят» по всему расширяемому ими массиву, и когда-то некоторые из них пытаются умножать промежуточные результаты, кото- рые могут быть еще не получены. Тогда каждое умножение, при некото- ром предположении об общей синхронизации начала работы ВС, долж- но начинаться с закрытия адреса результата — для предотвращения его преждевременного использования. Засылка результата умножения в «за- крытый» регистр разрешает его использование. 13.2.2. Процедура совмещения когерентности и синхрониза- ции При непредсказуемом распределении данных по кэш-памяти (точ- нее, областей памяти, содержащих эти данные), правильную работу тако- го механизма нужно аппаратно поддержать. Процессоры должны опера- тивно обмениваться информацией о закрываемых и модифицированных данных. При отсутствии такого оперативного обмена иногда предполага- ют даже сброс всех кэшей, в той их части, где в них отображается состо- яние ОП, при каждой записи в ОП. Далее кэши начинают естественным образом формироваться заново. При «медленной» памяти, по сравнению с операционными устройствами, это равносильно прерыванию. В проекте «Эльбрус-3» элемент синхронизации, подобный закры- тию адресов, реализован битами значимости быстрых регистров. При ор- ганизации считывания в эти регистры из ОП их биты значимости «взво- дятся», что запрещает считывание из них. Биты значимости «сбрасыва- ются» по окончании записи в них. Нами уже была показана возможность расширения этого механизма для синхронизации выполнения рассмот- ренных выше векторных операций «свертки массивов». Применение ме- ханизма семафоров в этом случае было бы неэффективным. На алгоритмическом уровне решения задач мы знаем и учитыва- ем порядок преобразования конкретных данных. Именно этот порядок определяет частичную упорядоченность работ, впоследствии распреде-
ляемых между процессорами. Значит, синхронизация использования об- щих данных справедливо должна закладываться на уровне написания ал- горитма и реализовываться при трансляции с помощью наиболее про- стых средств синхронизации. Таким средством может служить расшире- ние принципа «закрытия» адресов, охватывающего решение проблемы когерентности кэшей. Типами данных, участвующими в поддержке когерентности кэшей, являются глобальные переменные («глобалы»), массивы (также глоба- лы) и их дескрипторы, а также — примитивы синхронизации или другая информация (в частности, информация о закрытых адресах), синхрони- зирующая параллельный вычислительный процесс. Локальные данные процедур не участвуют в сохранении когерентности кэшей. Всем указан- ным данным, как правило, соответствуют специальные области кэшей (СОЗУ), реализованные с помощью специфических механизмов их об- работки. Типизация данных и специализация областей кэша по типам данных конкретизирует и упрощает процедуры взаимного влияния кэ- шей. Но при этом некоторые величины, аппаратно поддерживаемые как глобалы, в действительности могут быть локальными данными, как было сказано выше относительно метода «сеток». Во всем диапазоне промежуточных решений, известны два край- них способа комплексирования модулей ВС (процессоров, модулей ОП и др.): на основе общей магистрали и на основе перекрестного (матрично- го) коммутатора. Магистраль разделяет время обменов. Коммутатор раз- решает одновременные не пересекающиеся обмены. В МВК Эльбрус-2 общая магистраль облегчает решение проблемы когерентности. Однако расслоение памяти немыслимо без коммутатора, тем более при большом числе процессоров и модулей памяти в системе. Практика построения се- мейства «Эльбрус» показала необходимость сочетания и того, и другого. Достаточно остановиться на проблеме обеспечения надежности, требу- ющей взаимного контроля процессоров и выполнения реконфигурации системы. Таким образом, существующую магистраль, осуществляющую в основном передачи «каждый — всем», целесообразно дополнить функ- циями обеспечения когерентности. Схема обеспечения когерентности представлена на рис. 13.1. В начале решения новой задачи, использующей, естественно, вирту- альные адреса, динамически переводимые в физические адреса ОП, в кэ- ше данных каждого процессора формируется первоначально пустая та- блица закрытых адресов решаемой задачи. Для этого целесообразно ис- пользовать ассоциативную память. По мере динамического заполнения, каждая строка этой таблицы (рис. 13.2) содержит виртуальный адрес (по мере конкретизации и упрощения организации работы ВС можно рас-
Процессор О Процессор п-1 Кэш данных Кэш данных Таблица закрытых адресов решаемой задачи Таблица закрытых адресов решаемой задачи ОП Модуль О Модуль т-1 Списки закрытых виртуальных адресов решаемых задач Рис. 13.1. Схема обеспечения когерентности смотреть вариант, когда это — физические адреса ОП), который запре- щено использовать до записи по нему рассчитанной величины. В этой же строке указан соответствующий адрес регистра в кэше. В программе в явном виде должны присутствовать команды закры- тия адресов. При этом должны быть указаны виртуальные адреса. Эти ад- реса пополняют динамически изменяемые списки закрытых виртуальных адресов решаемых задач, хранимые в ОП. По каждой команде закрытия адресов в соответствующих таблицах в кэшах всех процессоров, относя- щихся к этой задаче, (в общем случае не все процессоры могут решать одну и ту же задачу), формируется строка указанного ранее вида. Теперь каждое обращение к регистру кэша будет соотноситься с информацией в таблице, обеспечивая готовность остановить вычисления на процессо-
Таблица закрытых адресов решаемой задачи Ищни/ьный Адрес pci негра а »рес Рис. 13.2. Таблица закрытых адресов ре в ожидании поступления необходимых данных. Каждая же запись по виртуальному адресу (здесь-то и наблюдается алгоритмический уровень синхронизации, исключающий анализ любой записи промежуточного ре- зультата вычислений) сопровождается, наряду с записью в ОП, поиском во всех кэшах, связанных с данной задачей, этого виртуального адреса для соответствующей замены по нему. Одновременно производится поиск в таблицах закрытых адресов в кэшах всех процессоров, начиная со своего процессора. Строки с указанным виртуальным адресом исключаются, а в указанный в строке регистр поступает найденное значение. Если вычис- ления были приостановлены из-за отсутствия этих значений, они про- должаются. Как сказано выше, все таблицы одновременно поддержива- ются в ОП в виде списков закрытых адресов по каждой задаче, что необ- ходимо при прерываниях. И, как мы отметили выше, все эти действия могут выполняться при отсутствии признака необязательности. Мы не рассматриваем вопроса о том, как процессор находит дан- ные по виртуальным адресам в своем кэше. Это увело бы нас из области взаимодействия кэшей в область их устройства. В «Эльбрусах» достаточ- но примеров кэшей — и специализированных по типам, и использующих различные способы организации. Например, наиболее подходящий для нашего случая принцип ассоциативной памяти успешно применен в ас- социативном запоминающем устройстве глобалов. Рассмотренный принцип поддержки когерентности кэшей совмест- но с поддержкой синхронизации при использовании общих данных — управлением параллельным процессом по принципу data flow нуждает- ся в анализе и развитии в соответствии с конкретизацией схем вычис- лительных процессов. Это неразрывно связано с проблемой ориентации симметричной ВС и проведением моделирования и экспериментального программирования.
Таким образом, проблема когерентности кэшей обретает адресную, смысловую, алгоритмическую направленность в общем плане синхро- низации параллельных вычислений. Предложенное решение позволяет планировать лишь неизбежные действия, внося в решение проблемы ко- герентности элемент управления. 13.3. Применение механизма предикатов в ВС SPMD-архитектуры Предикатные вычисления предполагают наличие памяти для хране- ния булевых переменных: результатов логических операций сравнения, отношения, проверки условий и т.д., в общем случае — результата про- верки истинности некоторого высказывания. Система команд предпола- гает спекулятивный режим выполнения операций. Этот режим обеспечи- вает выполнение команды или задержку ее выполнения, а также пропуск команд в зависимости от значения некоторого предиката, соотнесенного этой команде. Адрес предиката указывается в соответствующих разрядах командного слова. В зависимости от кода операции, в случае, если указанный в коман- де предикат имеет значение О (ЛОЖЬ), выполнение команды задержива- ется (предикат опрашивается в режиме «жужжания») или пропускается. Пропуск означает выполнение следующей команды. Пусть система команд процессора ВС предполагает наличие разря- дов а командного слова, в которых указывается адрес предиката; по ну- левому его значению команда инициализируется в режиме «жужжания», но не выполняется до смены значения предиката другим процессором. Возьмем пример свертки массива в разделе 12.2.1 при тех же значе- ниях к = 10, N = 4. Рассмотрим массив 2к - 2 логических предикатов {о0, • • • &2к-2}, по числу исходных и промежуточных данных, участвующих в качестве опе- рандов в выполнении операции свертки массива (рис. 13.3). В примере это — операция умножения. Поставим в соответствие массиву предикатов дескрипторы Z>3 и Z>4, имеющие в памяти каждого процессора начальный вид £>з = {7?зо, ..., £>37} = {оо,1? 18,017, оо, оо + г, 4, оо + г}- Z>4 = {£>40, ..., £>47} = {ою, 1,7,017,01о,ою + г, 4,ою + О- План программы следующий. Пусть сначала все предикаты имеют значение 1 (ИСТИНА). С этими значениями разрешим выполнение пер- вых пяти умножений. Однако прежде чем их выполнять, присвоим значе- ние О (ЛОЖЬ) тем предикатам, которые соответствуют результатам опе-
Рис. 13.3. Схема применения предикатов для операции свёртки массива рации умножения. Поскольку такую операцию выполнят все процессо- ры, то те из них, которые попытаются выполнить умножение еще не найденных промежуточных результатов, окажутся в состоянии ожидания этих результатов. По выполнении умножения присвоим значение 1 (ИС- ТИНА) тем же предикатам, каким ранее присваивалось значение 0. Так реализуется частичная упорядоченность работ во времени. Программа представлена в таблице 13.3. Выполнение команд 0 и 1 не отличается от выполнения аналогич- ных команд в табл. 12.1. По команде 2 предикату, адрес которого указан в дескрипторном элементе Z>47, присваивается значение 0. Таким образом, процессор 0 первый раз присвоит это значение предикату аю. Процессор 1 первый раз присвоит это значение предикату ац и т. д. По командам 3, 4 и 5 производится умножение соседних элемен- тов расширенного массива. Разбиение команды (имитация одноадресной системы команд) обусловлено необходимостью организации спекулятив- ного режима раздельного использования каждого множителя в зависи- мости от соответствующего ему предиката. А именно, возможность ис- пользования первого множителя, адрес которого указан в дескрипторном элементе D17, связана со значением предиката, адрес которого указан в дескрипторном элементе Г>з7. Это определяет возможность считывания. Первый раз по команде 3 процессор 0 произведет считывание, т. к. а0 = 1. Произведут считывание и другие процессоры, т. к. = а2 = «з = 1.
Таблица 13.3 №fe а КОП А Ai h ^2 h Аз 0 СИНХ 1 ПРАД Р15 £>25 012 2 0=> £>47 3 £>37 Сч £>17 4 + £>37 001 Оз7 5 Oyj X £>17 001 £>27 6 1=> £>47 7 + £>37 177 D37 8 УЗАП £>27 £>23 м 9 ИЗМАД £>17 £>27 012 10 ИЗМАД £>37 £>47 012 11 БП 002 12 В По команде 4 изменяется адрес предиката для использования следу- ющего элемента расширенного массива в качестве второго множителя. По команде 5 завершается операция умножения. Однако ее выпол- нение теперь зависит от значения предиката, соответствующего второму множителю. Первый раз для процессора 0 это предикат ai. По команде 6 восстанавливается значение 1 предиката, которому по команде 2 присваивалось значение 0. По команде 7 восстанавливается значение Л37, скорректированное по команде 4. Остальные команды аналогичны рассмотренным ранее (табл. 12.1).
Лекция 14. Параллельные технологии решения информационно-логических задач Рассматривается реализация языка логического вывода ПРОЛОГ в ВС SPMD- архитектуры. Анализируется пример параллельного логического вы- вода по сложной цели. Приводится программа. Демонстрируется параллель- ная обработка списковых структур. Ключевые слова: ПРОЛОГ-программа, факты, правила, процедура, клоз, фрейм, цель, backtracking, трансформация цели, унификация, связывание переменных, список, ссылка. 14.1. Реализация языка логического программирования ПРОЛОГ на ВС SPMD- архитектуры Рассмотрим упрощенную задачу в виде ПРОЛОГ-программы, со- держащую все характерные элементы решения задачи удовлетворения (сложной) цели на основе базы знаний. Задан фрагмент БЗ, содержащий факты и правила. (Факты-клозы (отдельные предикаты-высказывания принято назы- вать клозами), которые не содержат правых частей, правила-клозы, кото- рые содержат правые части; одноименные факты и правила объединяются в процедуры.) Для единообразия и в соответствии с исключением факта из цели при связывании переменных обозначим факты так же, как и прави- ла, но с «пустыми» правыми частями. База знаний Процедура «мужчина»: мужчина (иван):- мужчина (василий):- мужчина (петр):- мужчина (федор):- мужчина (юрий):- Процедура «женщина»: женщина (марьяж- женщина (ирина):- женщина (ольга):- женщина (елена):-
Процедура «родитель»: родитель (марья, иван):- (Читать: «Марья — родитель Ивана») родитель (иван, елена):- родитель (марья, василий):- родитель (федор, марья):- родитель (петр, ирина)> родитель (петр, иван):- родитель( федор, юрий):- Процедура «мать»: мать(Х, Y):-женщина (X), родитель (X, Y) Процедура «отец»: отец (X, Y):- мужчина(Х), родитель (X, Y) Процедура «брат»: брат (X, Y):- мужчина (X), родитель (Р,Х), родитель (Р, Y), Х< >Y Процедура «сестра»: сестра (X, Y):-женщина(Х),родитель(Р, X), родитель (Р, Y),XOY Процедура «дядя»: дядя (X, Y):- брат (X, Р), родитель (Р, Y) Пусть задана некоторая сложная (т. е. опирающаяся не на факт, а требующая вывода) цель, с которой мы обратились в эту БЗ, например дядя (X, Y) (запись цели образует фрейм). решение которой (вывод) заключается в нахождении всех пар пере- менных (имен объектов) X и У, для которых справедливо утверждение «X является дядей Y». Для решения такой задачи используется прием трансформации цели. который заключается в рекурсивном переборе различных вариантов под- становки вместо предикатов, составляющих сложную цель, правых ча- стей клозов соответствующей процедуры. Производится фиксация вари- анта связывания переменных и унификация, при которой отбрасывают- ся несовместимые варианты связывания, т. е. противоречащие фактам и правилам. Варианты связывания всех переменных, прошедшие все этапы унификации, являются решением. Т. е. для решения данной задачи необходимо действовать следую- щим образом. Находим первый (и единственный) предикат цели дядя (X, Y). Нахо- дим в БЗ процедуру с этим именем и заменяем найденный предикат пра- вой частью этой процедуры. Получим трансформируемую цель — фрейм брат (X, Р), родитель (Р, Y),
К первому предикату этого фрейма применяем аналогичные дей- ствия, получаем фрейм мужчина (X), родитель (Q, X), родитель (Q, Р), ХОР, родитель (Р, Y) (Во избежание коллизии, развивая фрейм цели, вводим новые пере- менные, отличные от тех, которые до этого уже были использованы.) Вновь входим в процедуру с именем первого предиката цели. На- чинаем первый уровень ветвления. А именно, первый клоз там — факт мужчина (инан). С его помощью производим первое связывание пере- менных, т. е. подстановку конкретного значения. Предикат цели, поро- дивший факт, т. е. это связывание, может быть из трансформируемой це- ли исключен, т. е. заменен своей «пустой» правой частью: родитель (Q, иван), родитель (Q, Р), иван < >Р, родитель(Р, Y). Обращаемся к процедуре «родитель», начиная второй уровень ветв- ления. Первый клоз этой процедуры родитель (марья, иван) определяет дальнейшее связывание переменных: родитель (марья, Р), иван ОР,родитель (Р, Y). Вновь входим в процедуру «родитель» (третий уровень ветвления), находим клоз родитель (марья, иван). Трансформируем цель — получаем новый фрейм: иван < > иван, родитель (иван, Y). Имеем противоречие, т. е. не проходит унификация. Ищем на данном шаге ветвления другой вариант связывания, нахо- дим следующий клоз родитель (марья, насилий). Трансформируем цель: иван < > насилий, родитель (насилий, Y) родитель (насилий, Y). Вновь входим в процедуру «родитель», но не находим там клоза, в котором насилий указан как чей-либо родитель. Т. е. вновь не проходит унификация — установление совместимости варианта связывания пере- менных. Возвращаемся на шаг ветвления назад. (Реализуем стратегию поис- ка с ветвлением и возвращением назад — backtraking.) На втором уровне ветвления пробуем клоз, в котором инан указан как сын: родитель (петр, инан). Цель трансформируется в следующий фрейм родитель (петр, Р), инан ОР,родитель (Р, Y). Вновь (на третьем уровне ветвления) обращаемся к процедуре «ро- дитель» и выбираем первый клоз, в котором петр указан как отец — ро- дитель (петр, ирина). Цель трансформируется: инан < > ирина, родитель (ирина, Y) родитель (ирина, Y). Входим в процедуру «родитель», но не находим там клоза, в котором ирина указана как родитель. (Не проходит унификация.)
Возвращаемся на второй уровень ветвления и не находим там боль- ше клозов, где иван указан как сын. Возвращаемся на первый уровень ветвления и в процедуре «мужчина» выбираем для последующего испы- тания следующий клоз мужчина (василий). Цель принимает вид (фрейм) родитель (Q, василий), родитель (Q, Р), василий ОР,родитель (Р, Y). Теперь на втором уровне ветвления находим первый (и единствен- ный) клоз, в котором василий указан как сын. Цель трансформируется в соответствии с новым связыванием переменных, обусловленным най- денным клозом родитель (марья, василий): родитель (марья, Р), василий ОР,родитель (Р, Y), На третьем уровне ветвления находим первый клоз, где марья — ро- дитель: родитель (марья, иван). Связываем тем самым переменные, цель трансформируется василий < > иван, родитель (иван, Y) —* родитель (иван, Y), Находим в процедуре «родитель» первый клоз, в котором иван указан как родитель - родитель (иван, елена), Цель выродилась, значит дядя (X, Y) = дядя (василий, елена) — одно из решений задачи. Продолжив перебор так, словно на данном шаге унификация не прошла, можно найти остальные решения : дядя (юрий, иван), дядя (юрий, василий). В основе распараллеливания решения этой задачи лежит способ раз- множения вариантов на основе трансформации цели. Способ обеспечива- ет: отсутствие «backtracing’a» (ветвление есть, а возврата назад нет); про- стоту самой процедуры вывода; возможность неограниченного использо- вания ИЛИ-параллелизма (одновременной независимой обработки мно- гих вариантов связывания переменных); конвейерную реализацию И- параллелизма (распараллеливания обработки одного варианта связыва- ния переменных на конвейере, т. к. каждый раз обрабатывается лишь пер- вый предикат каждого фрейма). Поясним это подробнее. Пусть в общей памяти ВС размещен пул фреймов - промежуточных результатов трансформации цели, т. е. варианты связывания переменных. Отсюда уже видно, что в системе формируется не один очередной, а сразу несколько вариантов преобразования цели, а затем — и преобразования образующихся фреймов. Первоначально этот пул образует единственный фрейм — цель. Все процессоры «смотрят» на пул фреймов, и каждый процессор выбирает для обработки тот из них, первый предикат в котором допускает замену его правой частью в процедуре с именем этого предиката. Произведя преобразование этого предиката, процессор производит унификацию (т. е. анализ на непротиворечивость варианта связывания переменных) и при ее успешном выполнении дополняет сформирован-
ным фреймом пул фреймов, отдельно размещая соответствующий этому фрейму вариант связывания переменных. Допустимо согласование работы процессоров, такое, при котором два процессора, выбрав один и тот же фрейм, произведут разную заме- ну исходя из количества клозов в соответствующей процедуре. Для этого при каждом фрейме указывается информация о количестве процессоров (формируется счетчик), которые могут одновременно (условно, т. к. с уча- стием этого счетчика начала обращений процессоров к одной процедуре образуют последовательность) приступить к обработке этого фрейма. Ясно, что таким образом легко и естественно реализуется так на- зываемый ИЛИ-параллелизм на основе размножения и одновременной обработки вариантов трансформации цели. При этом явная реализация «backtraking’a» не нужна: она сдерживала бы возможности распараллели- вания. В то же время обработка каждого фрейма одним процессором за- ключается в преобразовании единственного — первого предиката. Таким образом, в целом каждый фрейм подвергается конвейерной обработке — реализуется конвейерный способ И-параллелизма. Процесс размножения вариантов не может привести к беспредель- ной загрузке памяти, т. к., во-первых, многие варианты отсекаются про- цедурой унификации; во-вторых, фреймы, в которых первые предикаты обработаны, могут быть исключены из пула: они породили все возмож- ные новые фреймы; в-третьих, на основе некоторых фреймов, в частно- сти, при их вырождении, выдается заключение о решении. Таким образом, возможен динамический возврат памяти в систему. Пусть ВС содержит 8 процессоров (0—7). Тогда процесс параллель- ной обработки цели в нашем примере можно представить табл. 14.1. Таблица 14.1: №полученного фрейма Необработанного фрейма Обрабатывающие процессоры Пул фреймов Счетчик Связывание переменных 0 дядя (X.Y) (ЦЕЛЬ) 1 Х=?, Y=? 1 0 0 брат (X, Р), родитель (Р, Y) 1
2 1 1 мужчина (X), родитель(Р,Х), родитель (Q,P), ХОР, родитель (P,Y) 5 3 2 0 родитель (9,иван), родитель (Q,P), иван <>Р, родитель (Р,У) 7 Х=иван, Y=? 4 2 2 родитель (Q,Василий), родитель (Q,P), Василий ОР, родитель (P,Y) 7 Х=василий, Y=? 5 2 3 родитель (Q,neTp), родитель (Q,P), петрОР, родитель (P,Y) 7 Х=петр, Y=? 6 2 4 родитель (Q,федор), родитель (Q,P), федор О Р, родитель (P,Y) 7 Х=федор, Y=? 7 2 5 родитель (9,юрий), родитель(Р, Р) юрий <> Р, родитель (P,Y) 7 Х=юрий, Y=? 8 3 6 родитель (марья, Р), иван О Р, родитель (P.Y) 7 Х=иван, 0=марья, Y=? 3 7,0,1,2 не проходит унификация 9 3 родитель (петр, Р), 3 иван <>Р, родитель (P,Y) 7 Х=иван, Q=neTp, Y=? 3 4 не проходит унификация 4 5,7 не Проходит унификация 10 4 0 родитель (марья, Р), Василий <> Р, родитель (Р,У) 7 Х=василий, Р=марья, Y=? 4 1,2, 4,6 не проходит унификация 5 3, 5, 7,1, 2,4,6 не проходит унификация (у Петра нет родителей)
6 0,1, 2,3, 4,5.6 не проходит унификация 7 7,0, 1,2, 3,4 не проходит унификация 11 7 5 родитель (федор,Р), юрий<> Р, родитель (P,Y) 7 Х=юрий, 9=федор, Y=? 8 6 не проходит унификация 8 7 не Проходит унификация 12 8 0 родитель (Василий, Y) 7 Х=иван, Р=марья, Р=василий 8 1,2, 3,4 не ПроХоДит унификация 9 5,7, 1,2 не проходит унификация 13 9 3 родитель (ирина, Y) 7 Х=иван, Q=neTp, Р=ирина 9 4,6 не проходит унификация 14 10 0 родитель (иван,У) 7 Х=василий, Р=марья, Р=иван 10 1,2, 5,6, 7,3 не проходит унификация 11 4,1,3 не проходит унификация 15 11 5 родитель (марья, Y) 7 Х=юрии, Р=федор, Р=марья 11 6,7,0 не проходит унификация 12 2,5, 6,7, 3,1,4 не проходит унификация 13 0,1, 2, 3, 4, 5,6 не проходит унификация 14 0 не Проходит унификация
14 1 цель исчерпана, решение: Х=василий, У=елена 14 2,3, 4, 5,6 не проходит унификация 15 0 цель исчерпана, решение: Х=юрий, У=иван 15 1 не проходи! унификация 15 2 цель исчерпана, решение: Х=юрий, У=василий 15 3,4, 5,6 не проходит унификация Здесь порядок загрузки процессоров обусловлен немедленной вы- боркой фрейма, как только он получен. Выбрать другой процессор может раньше, чем тот процессор, который его получил, т. к. ему еще надо за- кончить программный цикл после записи в БЗ. 14.2. SPMD-технология обработки списковых структур 14.2.1. Нахождение последнего элемента списка Одним из наиболее часто используемых способов организации ин- формации в памяти ЭВМ является ее представление в виде списков, ко- торые позволяют оперировать не с самими величинами, а с их адресами, что облегчает программирование, экономит память и сокращает затраты на пересылку информации. С помощью списков удобно отображать дан- ные самой разнообразной структуры: множества, деревья, графы, строки ит.д. Основными операциями над списками являются: получение досту- па к произвольному элементу списка; включение нового элемента в за- данное место списка и исключение его оттуда; сортировка элементов списка; поиск элемента с заданными свойствами и другие. Простота их реализации является одним из наиболее привлекательных свойств спис- ковой организации данных. Однако традиционное представление спис- ков на основе ссылок предполагает последовательную обработку их эле- ментов. Все известные алгоритмы, реализующие операции над списка- ми, являются последовательными и ориентированы на однопроцессор- ные ЭВМ фон-неймановской архитектуры.
Эффективная реализация операций над списками для параллельных вычислительных систем представляет непростую (а для некоторых архи- тектур — например, векторно-конвейерной — и неразрешимую) задачу. Особый интерес представляла бы разработка таких алгоритмов для ВС с большим числом процессорных элементов. Под списком L будем понимать совокупность объектов вида 1п = (V, С), где V — ссылка на данные, С — ссылка на некоторый (следую- щий) элемент этого же списка. Последний элемент списка имеет своим значением nil, т. е. пустую ссылку. Пусть элементы каждой двойки (V, С) расположены в памяти так, что их адреса определяются сложением фиксированного смещения с некоторым базовым адресом. Тогда совокупность всех двоек можно рас- сматривать как массив R — образ списка, в котором места расположения каждого элемента могут быть рассчитаны. Интуиция подсказывает, что параллельная обработка списка невоз- можна, поскольку в общем случае необходимо вычислить адреса к преды- дущих элементов списка, прежде чем станет доступен (к + 1)-й элемент. Однако, она становится возможной, если использовать образ списка. Модифицируем представление каждого элемента массива R, введя дополнительное поле D, в которое заносится ссылка на соответствую- щее поле того элемента списка, ссылка на который содержится в по- ле С. Строить образ списка целесообразно одновременно с формирова- нием и изменением самого списка. Таким образом, элемент образа спис- ка превращается в тройку (F, С, D). На рис. 14.1 структура элемента об- раза списка представлена в графической форме. с 1 Рис. 14.1. Элемент образа списка На рис. 14.2л изображен список, соответствующий записи L = (ABEFGHF) (для простоты считаем, что он не содержит подсписков). Пусть над всеми его элементами последовательно, начиная с голо- вы, производится следующее действие: поле D текущего элемента при- нимает значение того поля D, на которое указывает содержащаяся в нем ссылка (если в поле D содержится ссылка на пустой элемент, то его зна-
Рис. 14.2. Пошаговое нахождение последнего элемента списка (последовательное расположение элементов в памяти) чение не изменяется). В результате список L примет вид, показанный на рис. 14.26. Вид списка L после второго прохода показан на рис. 14.2в. И, наконец, после третьего прохода поле D головы списка будет содержать ссылку на последний элемент списка L, на чем выполнение алгоритма заканчивается (рис. 14.2г). Предположим теперь ситуацию, когда элементы списка расположе- ны в памяти в произвольном порядке, например, так, как показано на рис. 14.3я. Важно, что преобразования не изменяют структуру списка, по- скольку действия производятся над «избыточной» информацией; при этом на правильность выполнения алгоритма не влияет порядок распо- ложения элементов в памяти. Заметим теперь, что все операции над образом списка Я, произво- димые во время одного прохода, могут быть выполнены параллельно и независимо друг от друга, то есть, при наличии достаточного вычисли- тельного ресурса, за один временной шаг. Таким образом, мы получа- ем доступ к последнему элементу списка за log2N шагов. Аналогичные
6>Etj Е^ Е^ Е^ Е^ Ер Е^ нтп по гоп m го nzj ин g>kqj Ер охр Еф Рис. 14.3. Пошаговое нахождение последнего элемента списка (произвольное расположение элементов в памяти) алгоритмы, также использующие информационную избыточность, могут быть построены и для других операций над списками. Реализация операций над списками для локально-асинхронной ВС, каковой является ВС SPMD-архитектуры, допускает использование принципа монопрограммирования, т. е. составления единственной про- граммы, запускаемой на всех процессорах одновременно. Здесь мы при- ведем монопрограмму нахождения последнего элемента списка и просле- дим процесс ее выполнения. Она выбрана потому, что нахождение по- следнего элемента является частью многих операций над списками. На- пример, для объединения списков L± и L2 достаточно найти последний элемент списка L± и заменить в его поле С пустую ссылку ссылкой на первый элемент списка L2. Как говорилось выше, для организации параллельной обработки це- лесообразно использовать образ R списка — массив информации об эле- ментах списка, содержащий сведения о его структуре и преемственности элементов. Отметим, что упорядоченность элементов массива R в памяти в общем случае может не совпадать с логической упорядоченностью эле-
ментов списка, задаваемой ссылками. Это позволяет достаточно просто интерпретировать выполнение операций над списками. Например, при добавлении новых элементов в список L нет необходимости вставлять новый элемент массива R в какую-либо конкретную позицию - можно просто добавить его в конец массива. Аналогично, при исключении эле- мента из L вместо уплотнения массива R на освободившееся место мож- но записать его последний элемент. Обработку списка, таким образом, мы сводим к обработке массива, представляющего его образ. Этот массив, в свою очередь, может описы- ваться дескриптором. Дескриптор Dr массива R = {V,C,D}^ в полной комплекта- ции, как рассматривалось ранее, состоит из восьми элементов: Dr — {Dro, .. •, Dri}. Дескрипторный элемент DRO содержит адрес а0 пер- вого элемента массива, Dri — шаг h = 3 переадресации, Dr2 — коли- чество N элементов массива, в DR3 находится адрес последнего элемен- та массива. Элемент Dr± служит для переадресации при последователь- ном обращении к данному массиву. В нем хранится адрес clq + jh для выработки элемента массива при j-м (j = 0,1, ..., n - 1) обращении к массиву. При каждом обращении к массиву по некоторым командам этот адрес увеличивается на шаг h (т. е. выполняется операция j := Л+!). Остальные дескрипторы предназначены для организации распределения элементов массива между процессорами. DR$ содержит значение адре- са oq 4- ih, i = 0,1, ..., n - 1, т.е. каждый процессор Пг формирует и использует свое значение (Drs), располагая адресом регистра, содержа- щего значение номера i процессора, для начального обращения к «свое- му» элементу массива. Drq содержит значение nh, используемое для пе- реадресации к следующему «своему» элементу массива с учетом числа процессоров в ВС. В Dr7 содержится значение адреса + ih + jnh = (Drs) + эФяв), используемое для возможности переадресации при по- следовательном (j = 0,1,...) обращении к массиву. Если нет необходи- мости, могут формироваться не все дескрипторные элементы. Предположим, как и ранее, что в ВС реализована трехадресная си- стема команд вида: в A Ai 12 А2 1з А3, где в — код операции, Д, 12,13 — адреса модификаторов, дескрипторных элементов или де- скрипторов, Ai, А2, Аз — смещения. При выполнении команд формиру- ются исполнительные адреса: А'г = (1Г) + Аг, г = 1,2,3. Для упрощения операций над дескрипторами в систему команд вве- дены специальные команды, обеспечивающие переадресацию для раз- личных дисциплин выбора «своих» элементов обрабатывающим процес- сором, анализ выхода за пределы массива, инвариантность программы относительно размера массива.
Монопрограмма нахождения последнего элемента списка представ- лена в табл. 14.2. Таблица 14.2 №fe КОП h Ai I2 A2 h A3 0 СИНХ 1 ЗАГ к 2 ПРАД Dr7 012 3 УП/0 К 012 4 ЗАПК Dr7 0003 M 5 УП = 0 M Oil 6 ЗАПК M Dri 0003 7 ИЗМАД Dri 009 8 БП 003 9 ЗАГ Dr7 Drs 10 БП 003 11 ЗАП Dr7 0003 К 12 В Команда О (СИНХ) синхронизирует процессоры для одновремен- ного начала выполнения программы (это не влияет на правильность ра- боты ВС, а лишь упрощает контроль выполнения). Каждый процессор посылает сигнал на устройство СИНХ; после поступления сигналов от всех процессоров выдается обратный сигнал, по которому процессоры приступают к выполнению следующей команды. Команда 1 (ЗАГрузка модификатора) обнуляет модификатор К, в который впоследствии одним из процессоров будет записан адрес по- следнего элемента списка. Команда 2 (ПРоверка АДреса) сравнивает значение дескрипторно- го элемента Dr±, первоначально равное а0 + Зг, с адресом последне- го элемента массива, записанным в дескрипторном элементе Dr3. Этим устанавливается возможность загрузки г-го процессора (возможен случай i > N). Если процессор не будет занят обработкой списка, то управление передается команде 12 на Выход из процедуры. В противном случае с ко- манды 3 начинается цикл обработки элементов списка, а точнее — его последовательности ссылок. Команда 3 осуществляет Условный Переход на выход из процедуры по отличному от нуля значению К. Команда 4 выполняется при нулевом значении К, она осуществляет ЗАПись по Косвенному адресу. При этом производится косвенное счи-
тывание по первому адресу (Dr7) 4- 0003, т. е. по адресу ((Dr7 )+0003), и запись по адресу модификатора М. Команда 5 проверяет, пуста ли выбранная ссылка. Если пуста, то анализируемый элемент списка - последний; управление передается ко- манде 11, записывающей адрес этой ссылки в К. Если не пуста, т.е. (М) 0, то выполняется команда 6 и ее значение записывается вместо значения текущей ссылки. Команда 7 ИЗМенение АДреса задает операцию (Dr7) := (DR7) + (Дне) и если полученное значение превышает (Drs), передает управле- ние команде 9. Таким образом, каждый процессор осуществляет пере- адресацию для последующей выборки «своего» адреса ссылки из массива таких адресов. Если при этом массив не исчерпан, то команда 8 (Быстрый Переход) передает управление на команду 3 — продолжение цикла под- становки ссылок. Если переадресация выводит из массива, то команда 9 восстанавливает дескрипторный элемент Dr7 , т. е. выполняется опера- ция (Dr7) := (Drs) = ао + Зг. По команде 10 управление передается на следующий цикл подстановки ссылок. Команда 11 выполняется, если при выполнении команды 5 обнару- жилось, что найдена пустая ссылка, адрес которой записывается в К, По- сле выполнения в последующем команды 3 всеми процессорами закон- чится и выполнение программы. Рассмотрим процесс счета программы нахождения последнего эле- мента списка L, содержащего семь элементов, на ВС, имеющей в составе три процессора — По, Пг и П2. Каждый процессор выполняет свою копию программы, обладая при этом собственным набором дескрипторов, отличающихся друг от друга только значениями дескрипторных элементов Dr5 и Dr7. Согласно при- нятому нами представлению образа списка и порядку его обработки, про- цессор По будет обрабатывать элементы списка A, F и I, процессор Щ — В и G, и процессор П2 — элементы Е и Н. Пусть каждая команда про- граммы выполняется за одинаковое время — условный такт, и при обра- щении к памяти не возникает конфликтов (все элементы образа списка расположены в разных блоках памяти). На рис. 14.4 показана диаграмма потактового выполнения програм- мы на каждом из процессоров, полученная при справедливости этих предположений. Некоторое время все процессоры работают синхронно: такты 1—3 — начальные действия; такты 4—9 — первый цикл подстановки ссылок, во время которого изменяются поля D элементов А, В и Е; такты 10—12 — начало второго цикла подстановки ссылок. Во время второго цикла подстановки ссылок процессор П2 обнару- живает пустую ссылку (т.е. последний элемент списка) в такте 12 и, за-
Рис. 14.4. Временная диаграмма выполнения программы нахождения последнего элемента списка писав его адрес в модификатор К (такт 13), заканчивает свою работу в следующем такте командой Возврат. Процессор По заканчивает второй цикл подстановки ссылок (такты 13—15), не обнаружив пустой ссылки, но завершает свою работу в тактах 16 и 17, поскольку модификатор К получил уже к этому времени ненуле- вое значение. Процессор П1 в такте 14 изменяет значение дескрипторного элемен- та DR7 и, так как оно выводит за границы обрабатываемого массива, в такте 15 восстанавливает его исходное значение. Далее следует переход на начало третьего цикла обработки ссылок (такт 16), но, обнаружив ненуле- вое значение модификатора К (такт 17), в следующем такте процессор Пг также завершает свою работу Результатом совместной работы трех про- цессоров является адрес ссылки на последний элемент списка, записан- ный в модификаторе К. Заметим, что детерминированный — при синхронной работе про- цессорных элементов — процесс выполнения алгоритма при реализации на локально-асинхронной ВС приобретает некоторую неопределенность. Дело в том, что мы не можем быть уверены в порядке выполнения про- цессорами операций замены значений ссылок (команда 6), поскольку в принципе не исключены обращения к одним и тем же модулям общей памяти. В результате какой-либо процессор может «подхватить» уже об- новленную ссылку. Однако очевидно, что это только приблизит оконча- ние работы алгоритма, который в таком случае как бы «перескакивает» через некоторые шаги. Например, элемент А, обрабатываемый процессо- ром По, после первого выполнения процессором команды 6 должен со- держать ссылку на элемент Е. Но если процессор П1 успел по какой-либо причине выполнить свою аналогичную операцию раньше, элемент А бу-
дет содержать ссылку на более «удаленный» от него элемент F. Поэтому появляется возможность более раннего достижения условия окончания работы программы. Здесь иллюстрируется не всегда ясно сознаваемый факт, что прин- ципы параллельной обработки информации могут быть использованы для нахождения самого общего решения задач, по своей природе, каза- лось бы, не распараллеливаемых. Эффективность параллельной обработ- ки списков в данном случае достигается двумя встречными путями: до- полнением традиционного подхода концепцией обработки массивов и использованием архитектурных особенностей ВС, реализующей SPMD- технологию. 14.2.2. Поиск и исключение элемента списка Пусть задано имя S некоторого элемента списка, являющееся пер- вым словом в массиве его данных, на которое указывает одна из ссылок С в массиве R троек (V, С, D). Необходимо по заданному S найти соответ- ствующий ему элемент списка, т.е. такой, данные которого начинаются с S, и исключить его из списка. Для этого достаточно заменить значение ссылки С в одной из троек в массиве R, указывающей на исключаемый элемент, на значение ссылки, указанное в тройке, которая соответствует исключаемому элементу. При этом тройка, соответствующая исключае- мому элементу, в свою очередь должна быть исключена из массива R. Совместные действия процессоров можно организовать следующим образом. Пусть все процессоры «смотрят» на соответствующие им по номе- ру (а затем — кратные им по номеру) элементы массива R. Какой-то из них найдет элемент, ссылка в котором указывает на элемент списка, где первое слово совпадает с S. Эта ссылка заменяется тем же процессором на ссылку, указанную в исключаемом элементе, а сам элемент массива R, соответствующий исключенному элементу, исключается из R. После это- го корректируется дескриптор, соответствующий массиву R. Проанализируем работу программы, представленной в табл. 14.3. По команде 0 производится синхронизация процессоров ВС. По командам 1 и 2 модификатору К присваивается нулевое значе- ние. Эту операцию выполняет процессор 0. Другие процессоры по ко- манде 1, в которой номер i процессора сравнивается с нулем и выполня- ется условный переход по неравенству, перейдут к выполнению коман- ды 3. (Иллюстрируется возможность параллельной работы процессоров по разным ветвям монопрограммы.) По команде 3 осуществляется выход из программы, если значение текущего адреса в дескрипторном элементе DR7 превосходит значение
Таблица 14.3 №fe КОП А Al h a2 h ^3 0 СИНХ 1 <i> 003 2 ЗАГ К 3 ПРАД Dr? 010 4 ЗАП Dr7 0002 Ml 5 ЗАПК Mi 0001 M2 6 / M2 s on 7 ЗАГ К 0001 8 ЗАП Mi 0002 Dr7 0002 9 ИСКЛ Dr Mi 10 В 11 / К 010 12 ИЗМАД Dri 010 13 БП 004 текущего адреса последнего элемента массива R, записанное в Dr$. Если Dr7 Drs, по команде 4 в регистр М заносится ссылка анализируемого элемента списка, записанная по адресу (Dr?) + 2, т. е. в поле С. Пусть ссылка, записанная в поле С, указывает на первый адрес в тройке, составляющей некоторый элемент R. Тогда по адресу (Afi) 4-1 на- ходится адрес начала «тела» соответствующего элемента списка. Команда 5 выполняет запись по косвенному адресу этого начала в регистр Af2. По команде 6 начало тела анализируемого элемента списка сравни- вается с исключаемым элементом, указанным в S. При положительном результате сравнения по команде 7 модифи- катору К присваивается отличное от нуля значение, служащее индика- тором того, что исключаемый элемент списка некоторым процессором найден. Если (Af2) / S, управление передается команде 11. По команде 8 ссылка, записанная в элементе массива R и соответ- ствующая исключаемому из списка элементу, присваивается тому эле- менту, который ранее указывал на исключаемый, т. е. значение ((Afi) 4- 2) присваивается элементу (Рд?) + 2. Команда 9 — ИСКЛючение из массива, описываемого дескрипто- ром Dr, элемента, расположенного по адресу (Afi). В результате выпол- нения команды 4 по данному адресу находится элемент массива R, соот- ветствующий исключаемому из списка элементу. По команде 10 производится выход из подпрограммы.
Команда 11 получает управление в случае, если ссылка в анализиру- емом элементе массива R не указывает на исключаемый из списка эле- мент. В этом случае проверяется наличие признака того, что некоторый процессор обнаружил искомый элемент и готов исключить его из спис- ка, т. е. если (К) 0, осуществляется выход из подпрограммы по коман- де 10. Если (К) = 0, необходимо перейти к анализу следующего элемента массива R, предопределенного г-му процессору. По команде 12 выполняется переадресация (Dr?) := (Dr?) + (Дйб)5 где (DR6) = Nh. Если такая переадресация приводит к выходу за пределы массива, т. е. новое значение Dr? превышает значение последнего адреса массива R, указанное в Dr3, производится выход из подпрограммы по команде 10. В противном случае по команде 13 процессор приступает к анализу очередного элемента R. В данном случае нам не пришлось в полной мере использовать су- ществующие в системе средства синхронизации. Легко усложнить при- мер, рассмотрев случай, когда одновременно заданы несколько исключа- емых элементов. Их исключение должно производиться последователь- но, т. к. процессор, обнаруживший исключаемый элемент, должен распо- лагать вполне определенной информацией о текущем состоянии списка, изменяемом в процессе исключения из него элементов. Ведь после каж- дого исключения может измениться и порядок последующего назначе- ния элементов массива R на обработку процессорами. Это приводит к необходимости выделения одной или группы ко- манд исключения из списка (см. команду 9 данной монопрограммы) в критический блок, не допускающий одновременного обращения к нему более одного процессора. Формирование критического блока достигает- ся выполнением в его начале команды ЗАКРыть Семафор с указанием адреса некоторого семафора С. Если при выполнении этой команды дан- ный семафор уже закрыт другим процессором при выполнении этого же фрагмента программы, то процессор переходит в режим ожидания, «жуж- жания», т. е. повторного выполнения этой команды до открытия семафо- ра. Критический блок заканчивается командой ОТКРыть Семафор с указанием адреса того же семафора.
Лекция 15. Применение SPMD-технологии при построении сетевых баз данных с циркулирующей информацией Рассматривается проблема оптимизации информационного обслужи- вания сетевой базой данных. База данных из традиционной одноканальной превращается в многоканальную систему массового обслуживания. Для это- го, на основе SPMD-технологии, система управления базой данных «раз- множается» среди рабочих станций или серверов, обеспечивая параллель- ный доступ. Сегменты базы данных с помощью ротации обеспечивают этот доступ, а также синхронизацию обращения. Лекция предполагает наличие начальных знаний в области систем массового обслуживания в рамках курса «Моделирование». Ключевые слова: ротационная БД, СУБД, локальная вычислитель- ная сеть, циркулирующая информация, интенсивность потока за- просов, интенсивность обслуживания, среднее время обслужива- ния. 15.1. Принцип работы БД с циркулирующей информацией Рекомендации по организации вычислений неотделимы от моди- фикации самих методов вычислений, традиционно продолжающих ли- нию минимизации количества операций (привлекательной на уровне счетчиков—вычислителей, работающих с арифмометром или, в лучшем случае, с однопроцессорной ЭВМ 60-х годов). Распараллеливание выдви- гает другой критерий эффективности: минимизация длины критического пути в информационно-логическом графе решаемой задачи или макси- мизация коэффициента загрузки исполнительных устройств системы. Желание уйти от рекомендаций общего характера приводит к рас- смотрению классов задач или отдельных «представительных» задач и к демонстрации их возможностей параллельного решения по SPMD- технологии, привлекающей все большее внимание как разработчиков ВС, так и математиков-программистов. По этой технологии вычисли- тельный процесс организуется так, что единственная программа одновре- менно запускается на всех исполнительных устройствах — на процессо- рах ВС, на ЭВМ вычислительного комплекса, на рабочих станциях (PC) ЛВС. В этой программе — монопрограмме — «упрятаны» не только са- ма конфигурация алгоритма обработки, но и механизмы распределения
данных, обрабатываемых по одному и тому же алгоритму, синхрониза- ция исполнителей при обработке общих данных, возможность обработ- ки данных по разным ветвям алгоритма (не путать с векторным способом обработки массивов!), универсальность монопрограммы, инвариантной относительно количества участвующих исполнителей и объемов обраба- тываемой информации. При этом важно, что при организации совмест- ных действий исполнительных устройств отсутствуют обращения к опе- рационной системе. Исследование возможностей применения SPMD-технологии к ре- шению задач обработки баз данных приводит к необходимости превра- щения ее в систему с многоканальным доступом пользователей - в мно- гоканальную систему массового обслуживания. Программно это выража- ется в том, что система управления базой данных (СУБД), как монопро- грамма, должна быть «размножена» для независимого запуска на каж- дом исполнительном устройстве, непосредственно связанном с пользо- вателем или участвующем в обработке интегрированного потока запро- сов пользователей (например, в многопроцессорном сервере). Однако мы сталкиваемся с рядом трудностей, связанных с существованием «узко- го горла», так характерного для обработки БД. Не говоря о технических возможностях носителей информации, во многих случаях допускающих последовательный доступ, следует учесть ряд функциональных особен- ностей БД, требующих оперативного изменения данных, синхронизации обращения к общим данным или к одним и тем же сегментам БД, а также обработки сложных запросов, динамически формирующих многократ- ное обращение к БД. И все же, как максимально «расширить» это «узкое горло», снизив накладные расходы на доступ к информации и на синхро- низацию обращений? Предлагается способ преобразования централизованной сетевой ба- зы данных из традиционно одноканальной в многоканальную систе- му массового обслуживания на основе применения SPMD-технологии. Способ заключается в организации встречного движения информации к пользователям, рабочие станции которых располагают копией системы управления базой данных. Целью рассматриваемых построений является минимизация времени обслуживания. Очевидно, если мы хотим снабдить каждого пользователя своей СУБД, то необходимо обеспечить ему доступ на равных правах с други- ми пользователями. Это требование касается и БД, в силу своих функ- циональных особенностей допускающих лишь последовательный доступ. Например, доступ к БД — электронной исторической библиотеке, где информация при обращении не изменяется, является параллельным и независимым. Однако доступ к БД транспортного обслуживания являет- ся строго последовательным.
Следовательно, многоканальный доступ может быть реализован лишь тогда, когда организовано последовательное встречное предложе- ние базы данных каждому пользователю. БД должна работать в режиме разделения времени. Здесь мы реально наталкиваемся на «однобокость» развития мето- дов обработки больших массивов информации. Совершенствуя алгорит- мы обработки, мы предполагаем «статичность», «пассивность» системы памяти. Память (совокупная память всей системы) должна стать актив- ной, способствовать процессу хотя бы на основе вероятностных предпо- ложений, должна реализовать встречные предложения, способные обес- печить снижение среднего времени выполнения запросов пользователей. Такой способ активизации памяти, основанный не на покое БД, а на ее движении хотя бы внутри ЛВС, рассмотрим далее. Мы отдаем предпочтение ЛВС и не исключаем другие применения, так как линии передачи данных, используемые в этих сетях, обладают наибольшим темпом развития, совершенствования, ростом пропускной способности. Именно их современные возможности в первую очередь вселяют надежду на реальность идеи активизации памяти, основанной на оперативном обмене данными. Традиционно, базы данных, реализованные в ЛВС, делятся на цен- трализованные и распределенные. В централизованных БД вся информация размещается в памяти сер- вера. Запрос от каждой рабочей станции поступает на сервер и обрабаты- вается в порядке общей очереди поступивших заявок от всех PC. СУБД в этом случае является прибором обслуживания в одноканальной системе массового обслуживания с ограниченной или бесконечной очередью. Из практических соображений удобно считать очередь бесконечной. Распределенная БД, при отсутствии сервера, предполагает разбие- ние информации на сегменты и их жесткое распределение между рабо- чими станциями. Такая БД воплощает идею многоканальной системы мас- сового обслуживания, так как СУБД реализована на каждой PC и обслу- живает запросы только с данной рабочей станции. Подобное воплоще- ние, на практике обусловленное отсутствием возможностей использова- ния мощного сервера, приводит к уверенности, что реализация многока- нального доступа способна не только компенсировать этот недостаток, но и достичь большей пропускной способности БД. Однако ряд сложностей затрудняет реализацию указанных БД, су- щественно увеличивая время обслуживания запроса. Эти сложности обу- словлены: - необходимостью определения места расположения требуемого сег- мента БД;
- организацией его пересылки в память данной PC (один вариант обслуживания); - организацией переадресации запроса к СУБД той рабочей стан- ции, на которой находится требуемый сегмент (другой вариант обслужи- вания); - организацией выдачи результата выполнения запроса на ту PC, где этот запрос был сформирован; - синхронизацией множественных обращений к одним и тем же сег- ментам в случае изменения информации в результате выполнения запро- сов (например, в системах транспортного обслуживания). Синхронизация множественных обращений к сегментам БД в слу- чае изменения информации требует применения аналога механизма се- мафоров с его весьма сложными процедурами, обеспечивающими, на- пример, решение таких типовых задач синхронизации, как задача «вза- имного исключения» или «читатели — писатели». Развитие сетевых технологий и, в частности, рост характеристик средств обмена информацией, на новом уровне выдвигают задачи поиска компромиссных, промежуточных архитектур сетевых БД, воплощающих в себе как идею многоканального доступа, так и синхронизацию произ- водимых изменений информации. Такие БД должны обладать высокой оперативностью, где под этим понимается минимизация среднего време- ни обслуживания запроса. Основная идея, предлагаемая в настоящей работе, заключается в ак- тивизации совокупной памяти ЛВС, в которой располагается БД. Разби- тая на сегменты БД предлагает встречный обмен, встречное предложение своих сегментов рабочим станциям, реализуя различные дисциплины та- ких предложений. Таким образом, сегменты БД циркулируют среди ра- бочих станций ЛВС. Такие сетевые БД, в которых производится ротация сегментов, находящихся в памяти каждой PC, назовем ротационными, В этом случае запрос, сформированный пользователем на рабочей станции, ожидает момента поступления необходимого сегмента в память данной рабочей станции. СУБД данной станции, работая в «традицион- ном» одноканальном режиме обслуживания, выполняет запрос, вводя, если необходимо, изменения в сегмент. Далее, измененный уже сегмент продолжает маршрут своего перемещения. Развивая этот принцип, сле- дует согласиться с тем, что дисциплина перемещения сегментов должна существенно зависеть от интенсивности обращений к конкретным сег- ментам. Например, некоторые сегменты, относящиеся к архивным, мо- гут не участвовать в циркуляции. В циркуляции сегментов могут времен- но не участвовать и некоторые рабочие станции, если интенсивность за- просов с этих станций резко снижается. Например, студент затребовал
Лекция 15 Параллельные технологии решения информационно-логических задач учебное пособие, с которым проработает несколько часов. На это время он вправе отключить себя от системы циркуляции БД, дополнительно за- гружающей («тормозящей») компьютер. При необходимости он сможет подключиться вновь. 15.2. Архитектуры ротационных БД Сервер отсутствует. На рис. 15.1 представлена временная диаграмма работы (в начальный момент) ротационной базы данных в ЛВС, в составе которой отсутствует сервер. Сеть содержит п рабочих станций, по числу которых БД разбита на п сегментов. Рис. 15.1. Ротация сегментов БД Круговая шкала времени отображает один цикл полной ротации сег- ментов, т. е. суммарное время однократного пребывания всей БД на од- ной рабочей станции. Цикл разбит на п равных отрезков времени дли- тельностью Tq. Это — такт системы, в течение которого каждая PC свя- зана с одним сегментом БД. Время длительности такта Tq состоит из соб- ственно времени ТДОст активного доступа к сегменту БД, пребывающему в данный момент в памяти PC, и времени ротации £рот, в течение кото-
рого производится смена сегмента в памяти PC с помощью сетевой ОС при невозможности доступа пользователя, То = ТДосг 4- £рОт- Таким об- разом, можно говорить о коэффициенте fcfl0CT доступности сегмента БД, определяющего долю времени длительности такта То, в течение которо- го пользователь имеет доступ к сегменту, пребывающему в памяти PC, ^дост = То есть если наступает время ротации, а на обслуживании находился запрос, то обслуживание прерывается. Запрос ожидает следу- ющего появления необходимого сегмента в памяти PC. Однако это может касаться лишь той стадии обслуживания запроса, при которой происхо- дит непосредственное обращение к памяти, занимаемой сегментом, так как обработка запроса после такого обращения к памяти может быть про- должена и закончена одновременно с ротацией. Рассмотренная схема в наибольшей степени соответствует ЛВС с организованным круговым одновременным обменом между рабочими станциями по принципу «соседу слева (справа)». Заметим, что передача по принципу общей шины приводит к раз- делению времени обмена. Однако и в этом случае есть простой выход — в асинхронном пребывании сегментов в памяти PC. В этом случае рота- ция сегментов производится последовательно между парами PC по кругу, а каждый вновь поступивший на PC сегмент до удаления прежнего сег- мента находится в специальном буфере. Такая, с учетом работы общей шины, ротация представлена на рис. 15.2. Рис. 15.2. Ротация сегментов по общей шине
При этом необходим компромисс между временем последователь- ного обмена внутри каждой пары PC и длительностью То пребывания сег- мента на отдельной PC. Так как То в ЛВС с «шинной архитектурой» может существенно возрасти, это, как будет видно далее, приведет к увеличению среднего времени ожидания сегментов на PC в случае поступления к ним запросов. Обращаем внимание на то, что рассмотренные схемы ротации с последовательным доступом к каждому сегменту предполагают возмож- ность выполнения таких запросов, по которым вносятся изменения в БД. Дополнительная синхронизация доступа к БД в этом случае не требуется. Кольцевая схема ротации с сервером. Наличие сервера (рис. 15.3) в ЛВС при той же кольцевой схеме ротации, благодаря существенно боль- шему объему памяти, позволяет значительно увеличить количество сег- ментов, «блуждающих» в сети, сделав их число независящим от числа ра- бочих станций. Рис. 15.3. Ротационная БД с сервером Кроме того, сервер позволяет разнообразить дисциплины ротации. Он допускает такое решение, при котором цикл ротации отдельных сег- ментов может изменяться, быть разным для разных сегментов, исключать сегменты из ротации вообще, организовывать архивы и т. д.
Ротационная БД в ЛВС типа «звезда». Работа БД представлена на рис. 15.4. Рис. 15.4. БД в ЛВС типа «звезда» ЛВС типа «звезда» реализует все достоинства ранее рассмотренной ЛВС с сервером и позволяет их развить. Это развитие заключается в сле- дующем. 1. Оперативно реализуется переменная структура ЛВС, так как ра- бочие станции легко могут исключаться «из обращения», а также могут включаться дополнительные станции. 2. ЛВС становится в большей степени управляемой. В частности, в процессе работы пользователя некоторые запросы могут приводить к длительному времени отсутствия новых запросов. Например, при рабо- те с затребованной литературой, архивными материалами и т.д. На это время целесообразно исключить PC из процесса ротации, ускорив работу других PC. Такая возможность может быть учтена либо сервером, либо са- мим пользователем. В последнем случае он получает возможность «вклю- чаться» в БД, если ему это необходимо, либо «выключаться» из нее. Тем самым он увеличивает производительность своего компьютера. Временной режим работы обусловлен периодическим обменом сег-
Лекция 15 Параллельные технологии решения информационно-логических задач ментами БД «сервер о РС». А именно, сервер в интервале обмена заби- рает возможно измененный сегмент БД и сообщает ему новый. При этом для реализации последовательного доступа в случае изменения (записи новых) данных один сегмент БД в каждый момент времени может нахо- диться не более чем на одной РС. 15.3. Эффективность и технические требования В общем случае, при вхождении сервера в состав ЛВС и при разби- ении БД на т сегментов, при котором т > п (п — число рабочих стан- ций), вероятность нахождения сегмента на одной из РС в процессе рота- ции равна Вероятность нахождения сегмента на конкретной РС рав- на Схема на рис. 15.3 соответствует случаю т = п. Тогда среднее время Тож ожидания нужного сегмента, то есть воз- можного начала обращения к нужному сегменту на той РС, которая вы- работала запрос, находится на основе вероятности того, что он поступит через один такт, через два такта и т. д. Максимальное число учитываемых тактов равно т - 1: Тож = То(- + 1 + ... + —) = Го(т~1). (15.1) \m т mJ 2 Тогда полное время обслуживания запроса в ротационной БД нахо- дится следующим образом: _ _ T*o(m — 1) Тобсл = Тож 4~ ^обсл — п 4“ ^обсл? (15.2) где ^обсл — время выполнения запроса с помощью СУБД. Сравним это полное время обслуживания со средним временем об- служивания Т^бсл «традиционной» БД, реализованной на сервере. Напо- мним, что при обслуживании такой БД многоканальная система массо- вого обслуживания, где множество рабочих станций обеспечивают мас- совый доступ, реально, с помощью одноканальной СУБД, на этапе об- служивания потока заявок преобразуется в одноканальную систему мас- сового обслуживания с неограниченной очередью. Допустив, что время выполнения запроса с помощью СУБД в дан- ном случае совпадает с тем же временем в ротационной БД (ротация не предполагает каких-либо принципиальных изменений «традиционных», известных, широко применяемых СУБД), получим: ?Хл = (15.3)
где р — известное отношение а А* — суммарная интенсивность пото- ка запросов со всех рабочих станций ЛВС, р — интенсивность обслужи- вания, р = ' *обсл Уточним, что А* = пАпольз» где АП0Льз — интенсивность потока запро- сов с одной PC при данной организации БД. Однако здесь мы пренебрег- ли временем передачи сообщений в ЛВС, учитывая существенный харак- тер ограничений другого рода. А именно, суммарная интенсивность А* потока запросов в системе должна быть ограничена значением , обеспе- чивая соотношение р < 1. Полное время обслуживания Т*^ значительно возрастает при значениях р, близких единице: Тобсл ► ОО, Р-4 1. В ротационной базе данных каждая PC независимо от других реа- лизует одноканальную систему массового обслуживания с неограничен- ной очередью, где, несомненно, тоже должно выполняться соответству- ющее ограничение АПОльз < Мпольз, где АПОльз — интенсивность запросов пользователя с одной PC, gnOTb3 — интенсивность обслуживания запросов пользователя с одной PC, Мпольз = Т°т0*|”,Д Однако пользователь полно- стью управляет своими запросами, и случайный характер их поступления изучать нецелесообразно. Дисциплинированный пользователь формиру- ет свои запросы последовательно, в диалоговом режиме, и не формирует новых запросов, не дождавшись ответа на предыдущие. Тогда приблизи- тельно можно считать, что интенсивность потока запросов пользователя ограничена некоторыми возможностями системы, а именно А* < А ~ ^рот (15 Д') Апольз лтах где Атах — некоторая максимально возможная интенсивность потока за- просов, последовательно (по мере выполнения) формируемых пользова- телем в том случае, если доступ к сегментам базы данных, находящимся в памяти его PC, не ограничен ротацией, т. е. tpw = 0. Таким образом, исследуя вопрос о целесообразности построения ро- тационной БД, необходимо изучить практические возможности обеспе- чения таких характеристик ЛВС, их аппаратных и программных средств, при которых выполняется соотношение Тобсл < -^обсл’ ИЛИ 11 + (15.5) 2 1 - р
где ^АПольз Напоминаем, что здесь Tq — время (длина) такта системы, т — число сегментов БД, п — число рабочих станций ЛВС, ^обсл — время выполнения одного запроса СУБД (характеристика ис- пользуемой системы управления базой данных), Апольз — интенсивность потока запросов одного пользователя, — интенсивность обслуживания запросов данной СУБД. Однако выражение (15.5) получено в предположении, что заявка на обслуживание, поступившая от конкретной PC к некоторому сегменту Si, не претерпевает какого-либо влияния возможных, в достаточно близкое время, заявок, пришедших к этому же сегменту от других PC «на пути следования» сегмента к данной PC. А именно, за предполагаемое сред- нее время Гож требуемый сегмент может быть «перехвачен» другой PC, «предшествующей» ожидающей. При значительной интенсивности А за- явок такой возможностью нельзя пренебречь. Предположим не более чем однократную возможность такого «пе- рехвата». Тогда, считая, что поток заявок к БД простейший (пуассоновский, экспоненциальный), вероятность Pi того, что сегмент Si без дополни- тельных помех на пути следования дойдет до данной PC, находится как Pi — ехр( —АгТож)- (15.6) Здесь Аг — суммарная интенсивность запросов к сегменту Si за время Гож от среднего числа других пользователей, находящихся «на пути следования» этого сегмента. Если запросы ко всем сегментам равновероятны, то \ _АП0Льз(п—1) /1СП\ Xi " 2m • (15*7) Тогда Pi = Р = ехр(-^^—^Тож). (15.8) zm При однократном «перехвате» его вероятность считаем равной 1—Р.
«Перехват» дополняет общее время выполнения заявки составляю- щей (1 - Р)^обсл- Тогда окончательно среднее время обслуживания заявок в ротационной БД в рассматриваемом случае определяется как Гобел = + to6cn)P + (То(П1~ + 2<обсл(1 - Р). (15.9) Вместо выражения (15.5), с учетом (15.1), (15.8), (15.9), для обосно- вания ротации информации мы должны так подобрать параметры сети, сегментацию БД и временные параметры ротации, чтобы выполнялось (причем существенно!) соотношение + to6cn) ехр(-Лпольз(п~1)(т-1)Г°)+ 2 4m To(m — 1) _ АПольз(и — 1)(тп — 1)7q 4- (-------+ 2*обсл)(1 - ехр(--------—----------- ^обсл 1-/ (15.10) 15.4. Сетевые базы данных с циркулирующими запросами-предложениями Рассматриваемым ниже базам данных соответствует архитектура ЛВС с сервером типа «звезда» (рис. 15.5). Пусть централизованная БД, расположенная на сервере, содержит список свободных сегментов, которые не обрабатываются в данный мо- мент ни одной PC, а также список занятых сегментов, т. е. обрабатывае- мых рабочими станциями. Не рассматривая сложные запросы либо пред- полагая их структурирование, требующее последовательного обращения к разным сегментам, допустим, что одна PC может обрабатывать одно- временно липп» один сегмент. Таким образом, количество занятых сег- ментов совпадает с количеством PC, занятых их обработкой. Располагая списком свободных сегментов, сервер последовательно и циклически опрашивает свободные, т. е. не обрабатывающие ни один сегмент, PC с запросом- предложением: нужен ли ей очередной сегмент из этого списка? Подготавливая запрос, сервер максимально обеспечи- вает связь с PC для передачи сегмента в случае его необходимости, т. е. производит маршрутизацию. Если пользователь сформировал запрос к БД со своей PC, то за- прос (а по нему определяется необходимый сегмент БД) ожидает прихо- да запроса-предложения сервера относительно нужного сегмента. Тогда сервер направляет сегмент (точнее, его копию) на PC и этот сегмент пе- реходит в список занятых.
РС1 РСп Рис. 15.5. База данных с циркуляцией запросов-предложений Рабочая станция, закончившая обработку запроса к БД, возвращает в общем случае измененный сегмент серверу. Сегмент переходит в спи- сок свободных и впредь участвует в циклическом предложении свобод- ным РС. Таким образом, время выполнения каждого запроса к БД зависит от состояния сегмента (свободен — занят), от среднего времени обработ- ки сегмента используемой СУБД, от времени одного цикла циркуляции запросов-предложений, от организации и подготовки обмена информа- цией (маршрутизации) в сети и т. д. Отметим важность средств обеспечения надежности, защиты дан- ных, отображения и др. Рассчитаем среднее время обслуживания запроса при рассматрива- емой организации его обработки. Пусть, как и прежде, т — количество сегментов БД, п — количество РС в ЛВС. Для поиска вероятности того, свободен ли требуемый сегмент или взят на обработку (занят), необходимо определить в стационарном режиме среднее число занятых сегментов БД.
Считая поток запросов простейшим, построим цепь Маркова (рис. 15.6), соответствующую многоканальной системе массового обслуживания с количеством п каналов [17]. Рис. 15.6. Цепь Маркова для нахождения предельных вероятностей состояния сегментов БД Состояние Sq соответствует отсутствию занятых сегментов, поток запросов при этом реализуется полностью, т. е. Ло = пАПОльз- На обратный переход в это состояние влияет поток обслуживания с интенсивностью д, формируемый копией СУБД единственной PC. Состояние Si соответ- ствует наличию одного занятого сегмента. Так как одна PC оказывается занятой обработкой сегмента, то поток запросов к БД реализуется п - 1 свободными. Кроме того, из этого потока исключаются запросы к заня- тому сегменту. Тогда Ai = (1 - ^)(п - 1)ЛПОльз- Поток обслуживания, при- водящий в это состояние из состояния S2, характеризующегося двумя за- нятыми сегментами, определяется двумя копиями СУБД. Интенсивность этого потока обслуживания равна 2/1 и т. д. Таким образом, для состояния Si, i = 0, ..., п, когда занято i сег- ментов, Лг — (1 )(п — &)АПольз (15.11) а интенсивность потока обслуживания (для г < п), приводящего в это состояние, равна (г 4- 1)д. Уравнения Колмогорова имеют вид Ao Pq = P'Pi Ai Pi — 2р,Р2 A2 P2 — З^Рз (15.12) An—i Pn—i — np>Pn w Pq 4- Pi 4-... 4- Pn — 1-
Решая [17] эту систему, находим: d _/1 . । . ^2^1 Ao An_iAn_2 • •. Аоч-1 Po-(1 + I^+2!^ + _3!j?" + --- +---------} ; А = ^-Ро; Р2 = ^уРо; • • •; Р„ = л»-^»-2 - лор (15Л3) 1!д 2!д2 пщп Определим среднее число q занятых сегментов: 9 = (15.14) i Тогда вероятность обращения к занятому сегменту Рзаюгг = (15.15) т Пусть ^предл — цикл времени предъявления очередной заявки-пред- ложения рабочей станции. Тогда среднее время ожидания свободного сегмента вычисляется следующим образом: ^ожидсвоб. — 0, 5(т — #)£предл- (15.16) Если сегмент, к которому произведен запрос, занят, то время £Ожид. зан. его ожидания зависит от времени окончания его обработки, от времени ^возвр возврата серверу, от времени £ОСвоб включения в число свободных и от времени его ожидания как свободного сегмента: ^ожид.зан. = 0, 5^обсл. 4" ^возвр. 4" ^освоб. 4" ^ожид своб. (15.17) Тогда полное время обслуживания запроса с РС вычисляется: Тобсл — -Рзанят^ожид.зан 4“ (1 ~ -Рзанят)^ожидсвоб 4“ ^обсл. (15.18) Полученная оценка, аналогично (15.5) и (15.10), является основой критерия эффективности данного способа организации сетевой БД. 15.5. Многосерверные сетевые БД с циркулирующей информацией Рассмотрим локальную вычислительную сеть, которая работает по принципу «клиент-сервер» при удовлетворении запросов от рабочих станций к сегментированной базе данных, находящейся на сервере. Пусть А — интенсивность интегрированного потока запросов, по- ступающего от всех РС, д — интенсивность потока обслуживания.
Пусть, далее, в силу специфики применения все запросы — простые, т. е. реализуют обращение не более чем к одному сегменту БД каждый и при обслуживании одного запроса не возникает обращений к другим сег- ментам (что характерно для сложных запросов). Данную схему функционирования БД можно интерпретировать одноканальной системой массового обслуживания (сервер выполняет функции СУБД) с бесконечной очередью. Тогда среднее время обслуживания одной заявки вычисляется следующим образом: = (15Л9) где ^обсл = 1/м — «чистое» время выполнения работ по обслуживанию одной заявки с помощью СУБД, р = А/д. Разработчики сетевых БД традиционно не учитывают те параметры комплексирования сети, при которых дальнейшая нагрузка на БД (под- ключение новых PC) становится недопустимой. Ведь —> оо при Р-1! Выход из критического положения заключается в использовании не одного, а нескольких серверов, т. е. в переходе к модели многоканальной системы массового обслуживания. Возможны различные схемы разделения нагрузки между серверами. Это — разделение сегментов БД между серверами при обеспечении свя- зей всех PC с каждым сервером. Другая схема может предполагать подключение групп PC к одному серверу при возможности использования одним сервером сегментов, рас- положенных на другом сервере. Такая схема приводит к появлению но- вых запросов в сети. Возможна схема, при которой БД дублируется на каждом сервере. Тогда запросы, изменяющие состояние БД, должны «отслеживаться» на каждом сервере. Все такие схемы затрудняют синхронизацию использования общих данных, усложняют работу СУБД. Простой выход представляет организация движения, циркуляции сегментов БД между п серверами при подключении каждой PC к одно- му, «своему» серверу. Время выполнения заявки при этом увеличивается лишь за счет времени ожидания прихода нужного сегмента на сервер. Такая схема организации сетевой БД показана на рис. 15.7. Если к каждому серверу подключено примерно одинаковое число к PC, то интегрированный поток запросов делится поровну между сер- верами, и интенсивность Асерв потока запросов к одному серверу можно считать равной А/п.
Рис. 15.7. Многосерверная БД с циркулирующими сегментами Тогда время обслуживания одного запроса PC вычисляется следую- щим образом: у.* = (15.20) где £*бсл — «чистое» выполнение работ по обслуживанию, заключающее в себе издержки на организацию этого обслуживания, причем Мобсл Мобсл Очевидно, что = ^обсл + ^ож- Значение £ож обусловлено цирку- ляцией сегментов БД между серверами и без учета «перехвата» другими серверами на пути следования может быть оценено (см. (15.2)): у.* __То(ш 1) , /к эп ^обсл— л । ^обсл* (15.21)
С учетом возможности единственного «перехвата» сегмента на пути его следования по (15.9) находим = (Го(т9~ 1} + «обсл)Р + (Го(™ ~ + 2to6oi)(1 - Р), (15.22) где Р отыскивается (см. (15.6)—(15.10)) как: Р = ехр(~Лсе^^П71{(т~1№) (15.23) Атк Здесь п — количество серверов, т — количество сегментов БД, ин- тенсивность запросов пользователя АПОльз = Асерв Д, — длительность такта системы. Тогда очевидно, что рассматриваемая организация сетевой базы данных имеет смысл, если Тобсл < ^о*бсл Отметим, что предлагаемые выше механизмы перемещения инфор- мации в сетевой БД, т. е. механизмы активизации ее совокупной памяти, отражают технический уровень построения БД, структуру, способ орга- низации и способ использования памяти ЛВС. Над этим уровнем стро- ится логическая и функциональная сущность БД, которая «не знает», как он устроен. В аналогичной ситуации разработчик программной системы (или транслятор) «не знает» (ибо не опирается на это), как реализуется идея виртуальной памяти компьютера, то есть, каковы механизмы заме- щения страниц, какова дисциплина замещения и т.д. Это — не его уро- вень. В то же время, сегодня мы не можем с уверенностью опровергнуть сомнения в том, что применительно к БД удастся достичь полной незави- симости таких уровней. Громоздкость выкладок на основе вероятностных оценок, заведомо неполный учет всех факторов говорят, что в целом мы имеем дело с задачей детерминированного имитационного моделирова- ния. Процесс должен быть воспроизведен как можно ближе к реальному, определяя натурный эксперимент. Это позволит оценить действительные возможности сетевого программного обеспечения и технические харак- теристики ЛВС. Вместе с тем, здесь не предлагается новый, абсолютный способ ор- ганизации хранения и использования информации в базах данных, от- вергающий все то, что было разработано ранее. Цель настоящей публи- кации — показать, что существует способ сокращения времени обработ- ки запросов к БД, основанный на организации «встречного» движения информации в ней. Этим способом можно пользоваться частично и весь- ма обоснованно, для чего предлагаются некоторые соотношения - кри- терии. Представленные же здесь схемы «рафинированно», по максимуму
Лекция 15 Параллельные технологии решения информационно-логических задач отражают предложения, но не навязывают каких-либо типовых структур данных. В этом смысле арсенал средств повышения эффективности базы данных, которым располагает конструктор — разработчик БД, расширя- ется еще одним средством — средством активизации памяти для «встреч- ного» предложения информации в сетевой базе данных, которым он мо- жет воспользоваться после тщательного обоснования. Можно предполо- жить, что различные, прежде всего, по функциональному назначению, БД в разной степени допускают применение предложенного принципа. Например, можно надеяться на то, что встречное движение информации в вычислительной сети способно сократить длину очереди к билетным кассам на поезда дальнего следования.
Лекция 16. Сетевые технологии параллельного программирования Анализируются возможности применения локальной вычислительной сети в качестве вычислительного комплекса для распределенных вычисле- ний. Рассматриваются основные структуры ЛВС и организация в них инфор- мационного взаимодействия рабочих станций. Приводится пример возмож- ной организации вычислений методом «сеток». Ключевые слова: сложность алгоритмов, полиномиальная слож- ность, экспоненциальная сложность, гарантированные оценки, то- пология сети, «звезда», «кольцо», шинная организация, метод «се- ток». 16.1. Концепция построения вычислительных комплексов на базе локальной вычислительной сети Технический прогресс, несомненно, сказывается на увеличении ча- стоты работы элементной базы, на повышении степени интеграции, но технический же прогресс приводит к появлению все новых задач, требу- ющих еще более значительного роста производительности вычислитель- ных средств. Это можно считать законом, приводящим к новым уловкам при совмещении работы устройств ВС, при увеличении их количества в системе, при увеличении их эффективности в процессе решения задач. Под эффективностью работы устройства в составе ВС или компью- тера в составе ВК понимают степень его участия в общей работе ВС или ВК при решении конкретной задачи — коэффициент загрузки устрой- ства (компьютера). Распараллеливание работ оправдано, если приводит к существенному росту усредненного по всем устройствам (компьютерам) коэффициента загрузки оборудования при решении задач. Это непосред- ственно сказывается на времени решения. Сегодня говорят не о специ- альном классе задач, а о задачах, ориентирующих ВС и ВК на универ- сальность, что обусловлено современными областями применения. Важным революционизирующим моментом стал переход на ми- кропроцессорную элементную базу, обусловившую построение мульти- микропроцессорных ВС для параллельной обработки информации или компьютерных сетей для распределенной обработки информации.
Основная сложность распараллеливания заключается в соблюдении частичной упорядоченности распределяемых работ. Поэтому решение за- дач синхронизации параллельного вычислительного процесса в ВС или распределенного вычислительного процесса в ВК сопровождает все уси- лия по организации совместной работы устройств. Организация распре- деленного вычислительного процесса предъявляет повышенные требова- ния к скорости синхронизирующего взаимного обмена данными, что и послужило сдерживающим фактором применения ВК. Необходимость оперативного решения сложных задач стимулирует усилия по разработке дорогих и уникальных супер-ЭВМ. Однако на но- вом витке развития все более привлекательной становится идея возврата к использованию коллектива компьютеров, совместно решающих общую задачу, — идея построения ВК для распределенной обработки информа- ции. Эта идея связана с развитием сетевых технологий, достигших такого уровня, когда оперативность взаимодействия компьютеров в сети позво- ляет расширить применение сетей. Построение ВК на основе компью- терной сети (в пространстве компьютерной сети) должно привлечь своей естественностью, достаточностью аппаратных и программных средств, не требующих дополнительных разработок, непреложным развитием се- тей вне зависимости от данного применения. Сетью ЭВМ называется комплекс территориально рассредоточен- ных ЭВМ и терминальных устройств, связанных каналами передачи дан- ных. Сейчас сложилась такая практика, что с сетями ЭВМ связывают бо- лее общее понятие — информационная система. Однако изначально це- лью создания сетей ЭВМ было: 1. Совместное использование суммарных вычислительных ресурсов. (Данная цель характерна на ранней стадии распространения сетей. Когда- то восторг вызывало то, что задача, введенная в Нью-Йорке, в действи- тельности решалась в Париже — в соответствии с наличием вычислитель- ных ресурсов.) 2. Обеспечение широкого диапазона решаемых задач, предъявляющих повышенные требования к производительности и объему памяти. (На воз- можность распараллеливания возлагались также надежды на этапе разра- ботки первых сетей ЭВМ. Однако возврат к этой идее наблюдается сей- час: в распределенных вычислительных комплексах, используемых в си- стемах управления, в том числе — бортовых, все настойчивее изыскива- ются возможности применения сетевых технологий, весьма продвинутых в направлении стандартизованного оперативного обмена.) 3. Обеспечение высокой надежности систем обработки информации (за счет возможности перераспределения выделяемых ресурсов).
4. Совместное и взаимное информационное обслуживание, расширение сети пользователей ЭВМ, развитие качественно новых средств коммуни- каций. (Обмен данными и совместное использование централизованных или распределенных банков данных.) 5. Социальный прогресс, обусловленный культурным, научным, деловым обменом, общедоступностью информации наряду с возможностями адресной передачи. (Качественно новый уровень достигнут в культурном обмене, в дистанционном обучении, в проведении научных конференций, в демон- страционном показе и рекламе, в деловых контактах, в оперативности пе- редачи значительных объемов данных по Email — электронной почте и т.д.) Таким образом, все большую актуальность обретает задача расшире- ния возможностей сетей ЭВМ за счет возложения на них функций рас- пределенных вычислительных комплексов для решения задач высокой сложности. На первом этапе речь может идти о локальных сетях (ЛВС), обладающих наиболее оперативным обменом. По-видимому, рано гово- рить о массовом применении сетей для решения задач управления в ре- альном масштабе времени, здесь требуемая оперативность обмена может быть не достигнута на уровне современных сетевых технологий. Однако в рамках современных представлений о сложности алгоритмов (например, о TVP-сложных задачах) накладные расходы на обмен информацией в сети могут быть ничтожны по сравнению с общим временем решения задачи, обусловленным, в частности, применением методов перебора. Чтобы избежать здесь голословных лозунгов, необходимо создавать и накапливать опыт решения сложных задач в компьютерных сетях. Та- кой подход позволит выявить и сформировать технологию подготовки и программирования подобных задач, поможет сформулировать требова- ния к развитию аппаратных, программных и языковых средств, покажет область эффективного применения сетевых технологий решения задач. Сказанное выше тем более важно сейчас, когда умы охватывает идея GWrf-технологий — технологий предоставления сетью (включая Интер- нет) виртуальных ресурсов по запросам на решение сложных вычисли- тельных задач. 16.2. Сложность алгоритма и проблема распараллеливания Ранее уже использовалось понятие сложности. Рассмотрим его пол- нее. Пусть задан некоторый алгоритм А. Почти всегда существует пара- метр п, характеризующий объем его данных. Пусть функция Т(п) — вре- мя выполнения A,af — некоторая функция от п. Говорят, что алгоритм
А имеет теоретическую (асимптотическую) сложность О(/(п)), если Т(п) , -77-7----> fc, где к — действительное. f(Tl) п—юо Если алгоритм выполняется за фиксированное время, не зависящее от размера задачи, говорят, что его сложность равна 0(1). Это определение обобщается в случае, если время выполнения существенно зависит от нескольких параметров. Например, алгоритм, определяющий, входит ли множество т элементов в множество п эле- ментов, может иметь, в зависимости от используемых структур данных, сложность 0(тп) или 0(т + п). Практически время выполнения алгоритма может зависеть от значе- ний данных. Так, время выполнения некоторых алгоритмов сортировки существенно сокращается, если первоначально эти данные были частич- но упорядочены. Чтобы учитывать это, сохраняя возможность анализи- ровать алгоритм независимо от их данных, различают: максимальную сложность, определяемую значением Ттаж(п) — вре- мя выполнения алгоритма, когда выбранный набор п данных порождает наиболее долгое время выполнения алгоритма; среднюю сложность, определяемую значением Тср(п) — средним вре- менем выполнения алгоритма, примененного к п произвольным данным. Эти понятия без труда распространяются на измерение сложности в единицах объема памяти: можно говорить о средней и максимальной пространственной сложности. Самыми лучшими являются линейные алгоритмы, имеющие слож- ность порядка ап = Ь. Они называются также алгоритмами порядка 0(п) где п — размерность входных данных. Такие алгоритмы действительно су- ществуют. Например, сложение двух чисел столбиком в случае, если од- но из них состоит из п, а другое — из т цифр, требует не более тах(п, гп) сложений и не более тах(п, т) запоминаний. Т. е. данный алгоритм име- ет сложность порядка 0(n -I- т). Разумеется, это выражение показывает только порядок величины — постоянные факторы в нем не учитываются. Обобщение линейности дает нам первый большой класс алгорит- мов — полиномиальных. Полиномиальным (или алгоритмом полиномиальной временной сложности) называется алгоритм, у которого временная сложность есть О(р(п)), где р(п) — полином от п. Задачи, где для решения известен ал- горитм, сложность которого составляет полином заданной, постоянной и не зависящей от размерности входной величины п степени, называют «хорошими» и относят их к классу Р. Экспоненциальной по природе считается задача сложностью не ме- нее порядка хп, где х — константа или полином от п. Например, это зада-
чи, в которых возможное число ответов уже экспоненциально. В частно- сти, к ним относятся задачи, где требуется построить все подмножества заданного множества или все поддеревья заданного графа. Экспоненци- альные задачи относят к классу Е. Соответственно, и алгоритмы, в оценку сложности которых п вхо- дит в показатель степени, относятся к экспоненциальным. Необходимо отметить, что при небольших значениях п экспонен- циальный алгоритм может быть даже менее сложным, чем полиномиаль- ный. Тем не менее, различие между этими типами алгоритмов весьма ве- лико и проявляется при больших значениях п. Особую группу по значениям сложности, близким к полиномиаль- ным, составляют алгоритмы, сложность которых является полиномиаль- ной функцией от log п (поскольку log п растет медленнее, чем п). Для большей убедительности и сравнения полиномиальных и экс- поненциальных алгоритмов приведем таблицу, где единица времени — 1 мкс, а сложность совпадает с необходимым количеством единиц времени для обработки набора п данных: Таблица 16.1. Сложность и время выполнения Сложность Размер задачи — п 10 20 30 40 50 60 п 0.00001 с 0.00002 с 0.00003 с 0.00004 с 0.00005 с 0.00006 с п2 0.0001 с 0.0004 с 0.0009 с 0.0016 с 0.0025 с 0.0036 с п6 0.001 с 0.008 с 0.027 с 0.064 с 0.125 с 0.216 с пь 0.1с 3.2 с 24.3 с 1.7 мин 5.2 мин 13.0 мин 2П 0.01с 1.0 с 17.9 мин 12.7 дней 35.7 лет 366 веков Зп 0.59 с 58 мин 6.5 лет 3855 веков 2 • 108 веков 1.3 • 1013 веков Приведенная таблица иллюстрирует причины, по которым полино- миальные алгоритмы считаются более предпочтительными, чем экспо- ненциальные. Уточним понятие сложности для итеративных и рекурсивных алго- ритмов. Отнесем к итеративным алгоритмам и те, к которым сводятся ре- курсивные алгоритмы (например, вычисление факториала п!). Тогда вре- мя их выполнения (в случае сходящегося процесса) зависит от главного условия повторения итерации, например, от требуемой точности. Если мы установим время или сложность одной итерации, то сможем умноже- нием на число итераций установить максимальную или среднюю слож- ность. Число итераций устанавливается теоретически или эксперимен-
тально. Например, так можно сделать при расчете значений функций по их разложению в ряд. Однако иногда приходится решать оптимизационную задачу, выби- рая между сложностью одной итерации и количеством итераций. Для большинства конечно-разностных схем решения дифференци- альных уравнений методом сеток можно считать, что сложность одной итерации составляет О(п2) или О(п х т), где п2 —• количество узлов при равном разбиении по х и по у, а п х т —• то же количество при различаю- щемся разбиении по осям. Увеличение количества узлов, покрывающих ту же область, т. е. уменьшение hx и hy, увеличивает скорость сходимости - и, соответственно, уменьшает число итераций, но сложность каждой итерации растет квадратично. Значит, необходим компромисс, который достигается посредством изучения поведения процесса, как на теорети- ческом, так и на экспериментальном уровне, вплоть до автоматической коррекции шагов в процессе вычислений в зависимости от локального поведения аппроксимаций производных. Т. е. шаги становятся непосто- янными во всей области. Однако по своей природе действительно рекурсивные алгоритмы по сложности относятся к классу экспоненциальных алгоритмов. Как пра- вило, это задачи оптимизации, основанные на переборе (алгоритмы с возвратом, метод «ветвей и границ»). Имеется широко распространенное соглашение, по которому задача не считается «хорошо решаемой», пока для нее не получен полиномиаль- ный алгоритм. Задача называется труднорешаемой, если для ее решения не существует полиномиального алгоритма. Эта градация относительна, ибо сложность определяется по наихуд- шему варианту. Хотя реализация метода «ветвей и границ» —- трудноре- шаемая задача (при теоретической оценке по максимальной сложности), сейчас для многих задач известны такие алгоритмы, которые практиче- ски очень быстро находят решение именно методом ветвей и границ. Однако есть понятие гарантированных и негарантированных оценок. Если сложность задачи полиномиальная, мы можем уверенно предска- зать оценку времени решения. При решении задачи методом «ветвей и границ» незначительное изменение начальных данных даже без измене- ния размерности задачи может непредсказуемо привести к резкому скач- ку в увеличении времени решения. Т. е. существует большой разрыв меж- ду значениями теоретической максимальной сложности и практической средней сложности экспоненциальных алгоритмов. Постоянно ведутся поиски более эффективных экспоненциальных алгоритмов. Полиномиальные по сложности алгоритмы относят к классу Р- сложных. Среди экспоненциальных выделяют алгоритмы, основанные
на переборе, и их относят в класс TVP-сложных. Т. е. формально возмож- но существование экспоненциальных алгоритмов, основанных не на пе- реборе. Например, п!, растущий быстрее, чем 2П. К ДГР-сложным от- носятся, например, задачи линейного целочисленного программирова- ния, составление расписания, поиск кратчайшего пути в лабиринте и т. д. Обратим внимание, что все это так называемые дискретные задачи — на основе «неделимых» объектов. В данном контексте мы и будем понимать термин «задача высокой сложности», представляя важность применения методов распараллели- вания. 16.3. Требования к средствам операционного взаимодействия в локальной вычислительной сети 16.3.1. Анализ сетевых топологий и обоснование архитекту- ры сети, необходимой для организации распределен- ных вычислений В связи с распространением персональных компьютеров и создани- ем на их основе автоматизированных рабочих мест (АРМ) возросло зна- чение локальных вычислительных сетей (ЛВС). Правильно организован- ная и умело эксплуатируемая сеть обеспечивает целый ряд преимуществ по сравнению с отдельным компьютером. • Распределение данных (Data Sharing). Данные в сети хранятся на центральном PC и могут быть доступны для любого PC, подклю- ченного к сети, поэтому не надо на каждом рабочем месте хранить одну и ту же информацию. • Распределение ресурсов (Resource Sharing). Периферийные устрой- ства могут быть доступны для всех пользователей сети, например: принтер, факс-модем, сканер, диски, выход в глобальную сеть. • Распределение программ (Software Sharing). Все пользователи сети могут иметь доступ к программам, которые были один раз центра- лизованно установлены. • Электронная почта (Electronic Mail). Все пользователи сети могут передавать и принимать сообщения. • Обеспечение широкого диапазона решаемых задач, предъявляю- щих повышенные требования к производительности и объему па- мяти. Локальные сети имеют некоторые особенности.
Главная из них — это связь. Она должна быть быстрой, надежной и удобной. Обычно, локальные сети не выходят за пределы нескольких комнат или одного здания, поэтому длина линии связи обычно не пре- вышает нескольких сотен метров. Они связывают между собой ограни- ченное количество РС. Все это позволяет обеспечить качественную связь. Поэтому скорость передачи данных обычно составляет от 10 Мбит/с и выше. К тому же, требуется надежная связь, иначе при исправлении оши- бок теряется выигрыш в скорости. Также необходимо небольшое время ожидания установления связи, так как оно включено в общее время пе- редачи информации. При таких высоких требованиях в локальных сетях используются специальные технические средства. При построении сетей ЭВМ, в т. ч. локальных, говорят о их тополо- гии. Топология — описание способа, при помощи которого рабочие стан- ции и серверы физически соединяются между собой. Топологии различа- ются требуемой длиной соединительного кабеля, удобством соединения, возможностями подключения дополнительных абонентов, отказоустой- чивостью, возможностями управления обменом. Топологическая струк- тура влияет на пропускную способность и стоимость локальной сети. Каж- дая топология сети налагает ряд условий. Например, она может диктовать не только тип кабеля, но и способ его прокладки. Отличительной особен- ностью ЛВС является наличие моноканала, т. е. единственного маршру- та, связывающего любые две станции. В связи с этим при подключении устройств к сети используются три топологии. Звездообразная сеть (IBM Token Ring, ARCnet) «Звезда» — принципиально централизованная топология (рис. 16.1), в которой всегда есть четко выделенный центральный абонент, осуще- ствляющий все управление обменом в сети, и через который идет вся ин- формация в сети. В этом есть свои плюсы и минусы. Любое жестко цен- трализованное управление по своей сути бесконфликтно, но такая сеть не будет работать при любой неисправности центрального абонента. Поэто- му центральный компьютер должен отличаться от остальных высокой на- дежностью, а, следовательно, и более высокой стоимостью. К тому же, выполнять другие задачи на центральном компьютере станет невозмож- но, так как он будет загружен работой с сетью. К недостаткам тополо- гии относится также ограниченное число абонентов, которое обычно в локальных сетях не превышает 16 пользователей. Затруднительно соеди- нение звезд между собой. К плюсам данной конфигурации можно отне- сти ее малую чувствительность к выходу из строя соединительного кабе- ля. Разрыв кабеля в любом месте всегда нарушает связь только с одним абонентом.
Рис. 16.1. Сеть типа «звезда» Кольцевая сеть (FDDI, IBM Token Ring) «Кольцо» — последовательное соединение абонентов в замкнутое кольцо (рис. 16.2), что и определяет его особенности. Во-первых, вся пе- редаваемая информация проходит через всех абонентов. Поэтому выход из строя любого из них нарушает работу всей сети в целом. Во-вторых, разрыв кабеля в любой точке нарушает целостность кольца и выводит из строя всю сеть. Для этого применяют дублирование кабеля. Управле- ние может быть как централизованным, так и децентрализованным, оно не так жестко зависит от топологии, как в случае «звезды». Все адапте- ры должны быть одинаковы, но иногда один из них выполняет функции диспетчера сети, тогда он значительно сложнее. Рис. 16.2. «Кольцевая» сеть Эта топология допускает большое число абонентов, причем возмож- но изменение их количества. В кольце происходит автоматическое усиле-
ние передаваемого сигнала каждым абонентом, поэтому его размеры мо- гут быть очень большими, и ограничены они только временем прохождения сигнала по всему кольцу. Шинная организация (Ethernet, ARCnet) «Шина» — ориентирована на полное равноправие всех абонентов и идентичность их адаптеров (рис. 16.3). Это не означает, что управление обменом не может быть централизованным. Однако центр будет зани- маться только управлением обменом, а не перераспределением информа- ции. «Шина» может логически работать как «звезда» или «кольцо». «Ши- на», в отличие от других топологий, сильно зависит от электрического согласования используемых линий связи, потому что при любом повре- ждении кабеля возникают отражения и наложения сигналов. В таком слу- чае нарушается работа всей сети. Однако, к выходу из строя компьютеров данная топология не чувствительна, нарушается обмен только с повре- жденным компьютером, а вся остальная сеть остается в рабочем состоя- нии. Максимально допустимое количество абонентов в «шине» такое же, как и в «кольце». В «шине» легко менять количество подключенных або- нентов, иногда даже в процессе работы. В связи со сложностью децен- трализованного обмена, сложность аппаратуры в адаптерах выше, чем в других топологиях. Однако децентрализованное управление гораздо на- дежнее централизованного и лучше приспосабливается к изменяющимся внешним условиям. Рис. 16.3. Сеть с общей шиной Существуют также смешанные топологии, такие как «звезда-шина», «звезда-кольцо», которые имеют свои преимущества. Для организации распределенных вычислений необходимо выбрать такую топологию сети, которая поддерживает равноправную, «симмет- ричную» связь «каждый с каждым». Среди рассмотренных топологий таким требованиям в максимальной степени соответствует шинная ар- хитектура. Преимущества этой архитектуры отображены исторически при практическом объединении ЭВМ в распределенные вычислительные комплексы для совместного решения сложных задач.
Таблица 16.2. Сравнение топологий сетей Параметры Звезда Кольцо Шина 1. Отказоустой- чивость Выход из строя одного РС не влияет на рабо- тоспособность сети Выход из строя одного РС может вывести из строя всю сеть Выход из строя кабеля останавливает работу многих пользователей 2. Кол-во абонентов 16 1024 и выше 1024 и выше 3. Изменение количества абонентов Возможно Возможно. Требует остановки всей сети Легко изменяется 4. Влияние на общую стоимость сети Дополнительные затраты на центральный компьютер Дополнительные затраты на адаптер выполняющий функции диспетчера сети Дешевая среда передачи 5. Возможность управления обменом Централизован- ное Централизован- ное и децентра- лизованное Децентрализо- ванное 6. Особенности Мощность всей сети зависит от сервера Количество пользователей не оказывает сильного влияния на про- изводительность. Трудно локализовать проблемы Оптоволоконные кабели не применяются. При значительных объемах трафика уменьшается пропускная способность. Трудно локализовать проблемы 7. Протяженность До нескольких десятков километров 8. Применение В зависимости от предъявляемых требований 16.3.2. Управление обменом в сети типа «шина» В этой топологии (рис. 16.4) возможно такое же централизованное управление, как и в «звезде» (т. е. физически сеть — «шина», но логиче- ски — «звезда»). При этом один из абонентов («центральный») посыла-
ет всем остальным («периферийным») запросы, выясняя, кто хочет пере- дать, и затем разрешает передать одному из них. После окончания пере- дачи абонент сообщает «центру», что он закончил, и «центр» снова на- чинает опрос. Все преимущества и недостатки такого управления - те же, что и в случае «звезды». Единственное отличие в том, что центр не пе- рекачивает информацию от одного абонента другому, а только управляет доступом. Рис. 16.4. Сеть с общей шиной — логическая «звезда» Однако чаще в «шине» реализуется децентрализованное управле- ние, так как аппаратные средства абонентов одинаковые. При этом все абоненты также имеют равный доступ к сети, и решение, когда можно передавать, принимается каждым абонентом на месте, исходя из анали- за состояния сети. Возникает конкуренция между абонентами за захват сети, и, следовательно, возможны конфликты между ними и искажения передаваемых данных из-за наложения пакетов. Существует множество алгоритмов (сценариев) доступа, часто очень сложных. Их выбор зависит от скорости передачи в сети, от длины ши- ны, загруженности сети (интенсивности обмена или трафика сети). Ино- гда для управления доступом к шине используется дополнительная линия связи. Это упрощает аппаратуру контроллеров и методы доступа, но за- метно увеличивает стоимость сети в целом за счет удвоения длины кабеля и количества приемопередатчиков. Поэтому данное решение не получи- ло широкого распространения. Можно отметить ряд существующих методов обмена в сетях шинной архитектуры. 1. Простейший метод, используемый при выбранном коде обмена NRZ в сравнительно медленных сетях, — децентрализованный кодовый приоритетный арбитраж. Данный метод арбитража был предложен Ин- ститутом Проблем Управления (ИПУ) еще в начале 1970-х годов. Он ха- рактеризуется низкой скоростью передачи, но высокой надежностью. Все абоненты имеют собственные приоритеты, которые могут динамически изменяться в зависимости от важности информации. При малой интен-
сивности обмена все абоненты равноправны (вероятность столкновений очень мала). Величина времени доступа к сети здесь не может быть га- рантирована, так как абоненты с высокими приоритетами могут надолго занять сеть, не позволяя начать передачу абонентам с низкими приори- тетами. 2. Второй метод, используемый в шине, —• децентрализованный вре- менной приоритетный арбитраж или метод доступа (рис. 16.5). Этот ме- тод управления обменом обеспечивает более высокую скорость обмена, чем предыдущий (поскольку здесь нет ограничения на длительность каж- дого бита). Практически реализовать его так же сложно, как и преды- дущий (каждый абонент должен отсчитывать свой временной интервал). Недостаток метода состоит также в том, что в случае большой длины сети и большого количества абонентов задержки становятся очень большими. Пример: при длине сети 1км, задержке сигнала в кабеле 4 нс/м и коли- честве абонентов 256 двойное время прохождения сигнала в сети 2L/V (L —- полная длина сети, V — скорость распространения сигнала в ис- пользуемом кабеле), или минимальная задержка составит 8 мкс. Следо- вательно, для абонента с сетевым адресом 255 задержка будет уже равна 255*8мкс=2040 мкс, т. е. около 2 мс, что уже довольно существенно. Для сравнения: если пакет имеет размер 1 Кбайт, то при скорости передачи 10 Мбит/с его длительность будет всего 0,8 мс. Данный метод не имеет жесткой привязки к коду передачи информации (в предыдущем методе можно было использовать NRZ). Код может быть практически любым, главное — выбрать его таким, чтобы можно было определять занятость сети. Рис. 16.5. Обмен методом доступа 3. Третий метод, получивший довольно широкое распространение, можно считать развитием второго. Называется он CSMA/CD (Carrier- Sense Multiple Access/Collision Detection) или по-русски МДКН/ОК —
метод доступа с контролем несущей и обнаружением коллизий (столк- новений). Идея метода состоит в том, чтобы уравнять в правах всех або- нентов в любой возможной ситуации, то есть добиться, чтобы не было больших и малых фиксированных приоритетов (как в случае второго ме- тода). Для этого используются времена задержки, вычисляемые каждым абонентом по определенному алгоритму. К достоинствам метода CSMA/CD можно отнести полное равнопра- вие всех абонентов, то есть ни один из них не может надолго захватить сеть. Метод достаточно надежен: ведь в течение всего времени переда- чи пакета идет контроль столкновений. К недостаткам метода относится то, что он не исключает повторения столкновений, а также плохо держит высокую нагрузку в сети. Обычно считается, что он хорош только до тех пор, пока нагрузка не превышает 30 %, то есть только 30 % времени сеть занята, а 70% времени — свободна. Для сети Ethernet* среднем считается предельно допустимым 50... 100 абонентов, иначе возможны существен- ные нарушения обмена. Основной недостаток метода — негарантирован- ное время доступа: нельзя сказать наверняка, через сколько времени па- кет точно дойдет до приемника. В этом отношении он хуже, чем методы централизованного управления (методы опроса). 16.3.3. Локальная сеть Ethernet В настоящее время разными фирмами разработаны стандарты ЛВС, поддержанные аппаратно и программно. Наиболее распространенным стандартом, соответствующим требованиям режима вычислительного комплекса, является локальная сеть ETHERNET, (Спецификацию разра- ботали компании Xerox Corporation, Digital Equipment Corporation (DEC), Intel Corporation,) На базе Ethernet разработан стандарт IEEE 802,3, Сеть предполагает несколько конфигураций. Использует коаксиальный или оптоволокон- ный кабель. Применяется топология «шина», т. е.: - все устройства, подключенные к сети, равноправны, т. е. любая станция может начать передачу в любой момент времени, если переда- ющая среда свободна; - данные, передаваемые одной станцией, доступны всем станциям сети. Для организации взаимодействия станций в сети используется ме- тод Множественного Доступа с Контролем Несущей и Обнаружением Столкновений (МДКН/ОС) — Carrier Sense Multiple Access/Collision Detection (CSMA/CD), Контроль Несущей: во время работы станция постоянно проверяет среду передачи. Передающая среда может быть
— свободна, т. е. ни одна другая станция не передает данные; — занята, т е. идет передача данных другой станцией. Множественный Доступ: при использовании метода любая станция, обнаружив, что среда свободна, может начать передачу своих данных. По- этому возможна ситуация, когда одновременно несколько станций на- чнут передавать данные. Обнаружение Столкновений (Коллизий): станция, обнаружившая кол- лизию, выдает другим станциям специальный сигнал, по которому пере- данная информация считается недостоверной. После этого каждая стан- ция делает повторную попытку передачи через специально найденное ею случайное время. Разное для всех станций случайное смещение времени повторной передачи служит высокой вероятности избежания коллизии. (Оригинальный способ избежать централизованного управления!) Если за 16 попыток станция не смогла передать пакет, считается, что среда неисправна. В локальную сеть всегда входит несколько абонентов, и каж- дый из них в любой момент времени может обратиться к сети. Поэтому требуется управление обменом с целью упорядочения использования се- ти различными абонентами, предотвращение или разрешение конфлик- тов между ними. В противном случае возможно искажение передаваемой информации. Для управления обменом (или управлением доступом к се- ти, или арбитража сети) используются различные методы, особенности которых определяются выбранной топологией сети. 16.4. Организация параллельного решения задачи в локальной сети Распараллеливание метода «сеток» с очевидностью адекватно вто- рому способу распараллеливания, что и должно определить направление поиска. То есть можно с уверенностью заявить, что распределение уз- лов сетки между процессорами ВС (распараллеливание по информации), ЭВМ вычислительного комплекса или рабочих станций сети является эффективным способом параллельного решения системы дифференци- альных уравнений в конечных разностях. В лекции 1 рассматривался пример решения уравнения в частных производных. Далее на этом примере будут показаны схемы возможной реализации метода сеток в ЛВС. По рис. 1.12 мы можем полностью представить различные планы па- раллельного решения рассмотренной задачи. Метод матричных вычислений характерен для матричных вычисли- тельных систем. В таких системах организуются «быстрые» связи между процессорами в соответствии с преимущественными направлениями об- менов информацией. Обычно это связи по строке и по столбцу с соедине-
нием «последнего с первым». Матрица процессоров «накладывается» на множество узлов сетки, воспроизводящее такую же матрицу, и узлы об- рабатываются. Матрица процессоров циклически обходит матрицы узлов сетки. Другая стратегия распределения узлов между процессорами может быть основана на делении области задания функции между процессора- ми. Т. е. вся область D на рис. 1.12 может быть разделена поровну между процессорами ВС или станциями сети. Третья стратегия может предусматривать нумерацию процессоров, превращение многомерного (в примере—двумерного) массива узлов сет- ки в одномерный линейный и назначение каждого узла на процессор с номером, равным остатку от деления его номера на число использу- емых процессоров. Эта стратегия, в наибольшей степени обеспечиваю- щая инвариантность программы счета относительно числа узлов и числа используемых процессоров, соответствует рассмотренной ранее SPMD- технологии. Равноправие процессоров (симметричность) делают целесообраз- ным использование шинной архитектуры ЛВС. (Отметим, что на ран- ней стадии построения вычислительных комплексов применялась имен- но шинная архитектура, как наиболее простая и естественная. То же мож- но отметить и относительно многих современных и перспективных муль- тимикропроцессорных систем.) Распространенным стандартом такой ар- хитектуры, обусловившим разработку широкой номенклатуры аппарат- ных средств, является сеть ETHERNET, Параллельный вычислительный процесс должен воспроизводить технологию SPMD, основанную на при- менении способа распараллеливания по информации. Тогда организация параллельной обработки информации и схема вычислений должна быть следующей. 1. Исследуется задача и выделяется основной массив данных (одно- мерный или многомерный), обработку которого целесообразно распре- делить между станциями ЛВС, — опорный массив. 2. Формируется план распределения элементов опорного массива для обработки станциями сети.. Разнообразие таких планов порождает и разнообразие возможных способов переадресации. Например, весь опор- ный массив может быть поровну (со следующими подряд элементами) поделен между станциями. Такой способ может применяться в случае, ес- ли длина массива не изменяется динамически. Более универсален способ распределения элементов опорного массива, когда после «расчета по п» каждый из них оказывается закрепленным за станцией с тем же номером. Это в точности соответствует технологии SPMD и поддержано системой команд. Такое распределение допускает динамическое изменение длин
массивов (поддерживает динамический тип данных), что крайне важно при обработке баз знаний. 3. Составляется единственная для всех станций (предполагается их программная совместимость), универсальная программа циклической обработки элементов опорного массива, закрепленных за одной станци- ей. Программа должна содержать критический интервал обмена данны- ми между станциями в необходимых (по алгоритму) направлениях. При этом запрос с последующим ожиданием данных (принцип редукционных вычислительных систем) должен отсутствовать, данные должны только отправляться. Это значит, что программы должны «уметь» ждать необхо- димые для себя данные. Поэтому становится целесообразным воспроиз- ведение принципа data flow с помощью «почтовых ящиков». 4. Составляется программа ввода, визуализации и управления вы- числительным процессом для станции (персонального компьютера), ко- торый назначается мониторным. 5. Задача решается в диалоговом режиме. Дело в том, что при боль- шом времени собственно решения вмешательство пользователя (опера- тора) может быть не только неизбежным, но и желательным. Например, нахождение всех экстремумов функции можно автоматизировать следу- ющим образом: разделить область задания функции между компьютера- ми и поручить им полностью исследовать свои подобласти; затем заста- вить их совместно исследовать полученные результаты и выделить гло- бальные экстремумы и др. Вторая задача может оказаться существенно сложнее. В то же время оператором она может быть решена значитель- но проще при достаточной визуализации. Принятое им решение может быть немедленно использовано при последующем автоматическом реше- нии этой или другой задачи. Рассмотрим конкретный возможный план решения рассмотренной выше задачи методом «сеток». Для простоты положим число используе- мых процессоров равным 2. В основу плана положим способ разделения области D между процессорами поровну. Зафиксируем hx = hy = h, определив тем самым количество узлов сетки в каждой строке и в каж- дом столбце. На рисунке 16.6 отражены выбранные количества узлов в строках и столбцах. Первая и последняя строка, как и первый и послед- ний столбец, соответствуют узлам, в которых заданы граничные значения функции-решения. Область Z>i, обрабатываемая процессором 1, определяется граница- ми индекса г и координаты х: О х • h.
Рис. 16.6. Распределение данных между двумя процессорами для решения задачи методом «сеток» Область D2, обрабатываемая процессором 2, определяется граница- ми индекса г и координаты ж: (7—1 + 1V h х (п — l)h = А. По второй координате 0 у (m - l)h = В. На рисунке показана передача промежуточных значений узлов про- цессором процессору для счета узлов, использующих эти значения. Такая передача может осуществляться либо непосредственно после нахождения очередного приближения значения функции в узле, либо после очеред- ной итерации — для всех необходимых значений сразу. Второй способ
может значительно сократить время выполнения обмена, хотя задержи- вает использование узлов. Важен выбор способа нахождения начального значения функции — решения в узлах. Этот выбор влияет на скорость сходимости решения. В соответствии с граничными условиями Ло = /1(гй,О) г = 0, ..., п - 1, = f2^ih, (m - l)h = В) i = 0, ..., n - 1, /oj = /з(0, jh) j = 0, ..., m - 1, fn-i,j = A((n - l)h = A, j) j = 0, ..., m - 1. Нулевое приближение значений fij может быть рассчитано по фор- мулам интерполяции с усреднением: £ 1 / fo,j . £ \ I (/г,0 • , г А f“ = 2 К п-1 '' + ) + ™-1 '1 + М для всех 0 < г < А, 0 < j < В. Итерационная формула имеет общий вид /ij = fi+ij, Aj+l)-
Лекция 17. Параллельные и сетевые технологии решения задач линейного программирования Предлагаются параллельные методы решения задач линейного и цело- численного линейного программирования. Методы предполагают примене- ние SPMD-технологии в вычислительных сетях и в многопроцессорных вы- числительных системах. Ключевые слова: линейное программирование, целочисленное ли- нейное программирование, ограничение, условие, целевая функ- ция, многогранник допустимых решений. 17.1. Предпосылки методов Задачи линейной и нелинейной оптимизации, сетевые транспорт- ные задачи — задачи высокой сложности, подверженные «проклятию размерности». Ориентация на применение многопроцессорных симмет- ричных вычислительных систем в составе персональных компьютеров или рабочих станций (параллельные вычисления) и на применение сете- вых технологий (распределенные вычисления) требует разработки новых параллельных методов их решения. Эти методы должны быть лишены недостатков «традиционных» методов: последовательного характера вы- числений и введения дополнительных переменных (для задач линейно- го программирования). Анализ способов распараллеливания показывает эффективность распараллеливания «по информации». Весьма перспек- тивной поэтому становится SPMD-технология программирования (Single Program — Multiple Data). При этой технологии вычислительный процесс строится на основе единственной программы, запускаемой на всех про- цессорах вычислительной системы или на многих станциях локальной сети. Копии программы могут выполняться по разным ветвям алгоритма, обрабатывая подмножества данных. Неизбежна синхронизация во време- ни и при обработке общих данных. Такая технология параллельного программирования и обусловила разработку рассмотренных ниже методов. В то же время не отрицаются известные традиционные методы, сокращающие общее число операций и исключающие перебор. Иной методологический подход открывает до- рогу решению задач большой размерности и эффективной параллельной работе многих процессоров. Для ряда задач этот подход еще нуждается в исследовании, уточнении области применения и развитии — проведении
тщательной математической экспертизы. Поэтому мы посчитали необхо- димым осветить его подробно — для лучшего представления «физическо- го смысла», ощутимости пространственной модели задач и следующих из этого планов их параллельного решения. 17.2. Метод прямого перебора при решении задачи линейного программирования 17.2.1. Графический метод решения и его обобщение Рассмотрим пример z = cixi 4- С2Х2 = 2xi 4- 5^2 шах при ограничениях Qi = Х1 40 <72=^2^ 30 <7з = Xi + Х2 50 И УСЛОВИЯХ Х1 > 0, Ж2 > 0. (17.1) Каждое ограничение в двухмерном пространстве, п = 2, определя- ет полуплоскость. Их пересечение образует многоугольник R (рис. 17.1). Его грани — прямые, получены на основе ограничений, в которых нера- венства заменены равенствами. Qi Q2 Q3 = 40 = 30 = 50 (17.2) Эти равенства образуют уравнения границ или просто границы R. Этот многоугольник (выпуклый многогранник; выпуклый, — ибо он остается по одну сторону от любой прямой, проходящей через его ребро) представляет собой допустимое множество R решений задачи ЛП. Выберем произвольное значение, например, z = 100 целевой функ- ции. Прямая 2^1 4- 5х2 = 100 показана на рисунке. Она пересекает ось xi в точке xi = 50 и ось Х2 в точке Х2 = 20. Отметим, что для z = const dz = ^dxi+-^dx2 = cidxi+c2dx2 = 0. Т.к. dxi и dx2 принадлежат прямой z, то скалярное произведение двух векторов, которое здесь изображено, равно нулю в том случае, если вектор (ci, с2) = (2,5) перпендикулярен прямой z. Увеличиваем значение z, передвигая (с помощью линейки) прямую — целевую — функцию параллельно самой себе в сторону ее возрастания
Рис. 17.1. Графический метод решения задачи линейного программирования вдоль вектора (2, 5) до тех пор, пока линейка не коснется последней воз- можной точки многогранника. R. Это значение z и будет максимальным. В данном случае — это точка А = (a?i = 20, х2 = 30). Сделаем важное замечание относительно многогранника R. 1. То, что он выпуклый, мы заметили ранее. 2. Нам были заданы три ограничения, отсекающие полуплоскости, но определившие не все границы многогранника R. С «не закрытой» ими стороны область R оказалась закрытой условиями неотрицательного ре- шения задачи: > 0, ж2 0. Значит, эти выражения пришлось из ранга условий перевести в ранг ограничений. При этом не все условия могут быть переведены в ограничения. В нашей задаче могло существовать некоторое ограничение д^ (на рисун- ке пунктиром), которое бы определяло границу R слева, исключая грани- цу Xi = 0. При этом граница х2 = 0 внизу осталась бы. 3. Другое важное замечание: решение задачи мы нашли на границе многогранника R. При этом возможны варианты: 1. Единственному конечному решению соответствует вершина R, как в нашем примере. 2. Решением может являться бесконечное множество точек на гра- ни R, например, если бы ограничение дз определяло бы прямую, парал- лельную z (уравнения дз и z были бы линейно зависимыми). 3. Система ограничений может определять «открытый» многогран- ник R, включающий бесконечно удаленные точки, в которых достигается max z, т.е. max z = оо. Например, та же задача ЛП могла быть поставлена
при отсутствии ограничений q2 и q3 (рис. 17.2). Перемещение z в сторо- ну ее увеличения может быть бесконечным, т.е. max z = оо. Но если бы была поставлена задача z —► min, то она бы при этих ограничениях имела конечное и единственное решение, в данном случае х± = х2 = 0. Рис. 17.2. Случай отсутствия решения Значит, имеет значение, с какой стороны многогранник R открыт: либо он позволяет поиск решения вдоль «закрытых» стенок, либо допус- кает возможность «выпасть» за его пределы, искать решение в бесконеч- ности. Тогда, как бы мы могли искать решение нашей первоначально по- ставленной задачи ЛП? Учитывая, что решение задачи — в одной из вершин R, мы снача- ла выпишем уравнения всех прямых, ограничивающих R, т.е. уравнения всех его границ: xi = 40 х2 = 30 Ж1 + х2 = 50 xi = 0 х2 = 0 Для нахождения координат каждой вершины R решаем совместно пару уравнений прямых, образующих эту вершину, и находим значение z в найденной вершине: {xi = 0 х2 = 0 —► z = 0 {xi = 0 х2 = 30 —> z = 150 Г х2 = 30 1 xi 4- х2 = 50 —> г(20, 30) = 190
xi = 40 $1 + $2 = 50 —> ^(40, 10) = 130 к х\ = 40 Х2 = 0 —► z = 80 Действительно, max z = 190 достигается в точке А. Отметим возможность распараллеливания решения задачи на мно- гопроцессорной ВС, точнее, ВС SPMD-технологии. В трехмерном пространстве ограничения и условия образуют про- странственный многогранник 7?, охваченный плоскостями-границами, записанными на основе ограничений и условий, где неравенства замене- ны равенствами, а каждая плоскость z = const, среди которых мы ищем решение, пересекает, «прорезает» его, деля на две части (рис. 17.3). Рис. 17.3. Задача линейного программирования в трёхмерной области На рисунке иллюстрируется задача ЛП: z = cirri 4- С2Х2 4- С3Ж3 —> max при ограничениях Q1 = 4- <112^2 4- Л13Ж3 bi 42 = Q21X1 4- в22^2 4- «23^3 &2 и при условии Ж1 > 0, Ж2 > 0, Хз 0.
Две грани qi = bi и q2 = b2, ограничивают многогранник R — об- ласть возможных значений переменных сверху (спереди) и справа. Слева, внизу и сзади пространственный многогранник R ограничен условиями неотрицательности решения, ставшими ограничениями = 0, х2 = О, жз = 0. Плоскость z = const пересекает многогранник R. Перемещая плоскость z параллельно себе, т.е. вдоль вектора (ci, с2, сз), в сторону воз- растания значений линейной формы г, мы находим решение. Здесь на- глядно показана очевидность того, что решение следует искать в верши- нах R. Однако графическое представление уже в трехмерном пространстве затруднительно, в n-мерном пространстве нам необходимо действовать формально. Здесь существует ряд проблем. Во-первых, мы не представляем пространственной картины и не знаем, охватывают ли заданные ограничения область R со всех сторон и какими условиями эти ограничения должны быть дополнены без проти- воречий. Во-вторых, мы не знаем, какие п ограничений, дополненных усло- виями, соответствуют каждой конкретной вершине многогранника R, чтобы найти координаты этой вершины и найти в ней значение целевой функции z. Значит, мы должны испытать все возможные комбинации по п (в данном случае — тройки) ограничений и условий, т.е. все возмож- ные комбинации по три, составленные на основе всех потенциальных границ- ограничений и условий. Тогда при построении (параллельной!) вычислительной процедуры мы должны опираться на то, что любая противоречивость в системе огра- ничений (в их состав мы включили теперь и условия) выразится в нераз- решимости системы трех уравнений, составленной для нахождения коор- динат очередной испытываемой вершины R. Т.е. в этом случае вершина находится в бесконечности или содержит отрицательные значения коор- динат. Эта неразрешимость находится в процессе счета. Оставаясь в области практических решений задач ЛП, т.е. в обла- сти инженерии и экономики, примем предположение, что задача сфор- мулирована корректно. Под этим будем предполагать, что ограничения выбраны так, что она не имеет неограниченного решения z = оо. Например, ставя задачу о максимизации прибыли от перевозки, не надо забывать о том, что объем перевозок ограничен ресурсами страны, сообщества и т.д. В противном случае мы получим тривиальное решение: чем больше, тем лучше. Значит, мы будем предполагать, что в многограннике R обязательно есть вершины (их координаты не отрицательны), в целом ограничиваю- щие области изменения переменных, и хотя бы в одной из этих вершин
целевая функция — линейная форма z принимает максимальное значе- ние. В свете сказанного будем также считать, что ограничения не проти- воречивы. Противоречивые ограничения приводят к случаю R = 0. Например, ограничения х + у 5 х + у 2 противоречивы. Тогда, развивая на n-мерное пространство, мы можем реализовать следующую стратегию поиска решения задачи ЛП. 17.2.2. Общий алгоритм перебора 1. На основе ограничений задачи q± ^bi,...qm < Ьт строим систему граней (гиперплоскостей) q± = .. ,qm = bm. Дополним эту систему граней всеми потенциальными гранями на основе условий: xi = 0,..., хп = 0. Получим систему т + п линейных уравнений, в общем случае избыточную и, возможно, противоречивую. 2. Выбираем из этой системы очередную подсистему п линейных уравнений (всего таких подсистем С^+п) и решаем ее. Как известно, система п линейных уравнений имеет единственное решение в том и только в том случае, если ранг г матрицы системы равен рангу расширенной матрицы системы и равен п. Можно в вычислительную процедуру включить анализ соответству- ющих матриц. Можно ограничиться анализом только определителя си- стемы, его отличием от нуля, т.к. нас интересует лишь единственное ре- шение. Однако ориентация на современные вычислительные средства и их операционные системы позволяет этого не делать. Дело в том, что любой метод решения системы линейных уравне- ний в случае неразрешимости системы или неоднозначности решения столкнется с операцией деления на нуль — т.е. возникнет прерывание. Этим целесообразно активно пользоваться для упрощения вычислитель- ной процедуры. После обработки прерывания необходимо предусмотреть переход к решению следующей, очередной подсистемы линейных уравнений, если такие еще не исчерпаны. Однако традиционно при решении систем линейных уравнений в подобных задачах используют метод Гаусса как обобщение метода по- следовательного исключения. Метод Гаусса позволяет получать значения переменных последовательно. Значит, их контроль на отрицательность
производится немедленно и останавливает дальнейший счет. Кроме того, попутные преобразования системы уравнений позволяют динамически выявить тот случай, когда матрица — алгебраическое дополнение диаго- нального элемента содержит нулевую строку, т.е. определитель системы равен нулю. Это также останавливает дальнейший анализ системы урав- нений. Если же получено единственное решение и все его компоненты xi,... ,хп не отрицательны, то они могут определять вершину много- гранника R. Могут, ибо если среди уравнений подсистемы есть уравнения вида Xj = 0, введенные в состав граней на основе условий неотрицатель- ности решений, и не вошли все уравнения граней, обусловленные огра- ничениями задачи, то полученное решение может противоречить некото- рым «законным» ограничениям задачи. А именно — не представленным в составе решенной подсистемы. Поэтому в таком случае необходимо дополнительно проверить, при- надлежит ли действительно точка (zi,..., хп) многограннику Я, т.е. вы- полняются ли для нее все не отображенные в подсистеме ограничения вида qj bj, первоначально указанные при постановке задачи ЛП. 3. Если найденная точка (xi,..., хп) действительно является верши- ной многогранника Я, определяемого ограничениями и условиями при постановке задачи, отыскивается значение z(x±,..., хп) = C]Xi + с2х2 + ...+СпХп. Если это значение превосходит ранее полученные при уже про- веденном анализе других вершин, оно запоминается вместе со значения- ми #1,..., хп — для продолжения поиска и анализа других вершин Я или окончания решения задачи. 4. Перебор всех подсистем п линейных уравнений на основе т + п ограничений (исходных и дополнительных), их число С”+п, полученные при их решении координаты вершин многогранника Я, обусловленного числом т основных ограничений, позволяет выбрать ту вершину, кото- рая порождает максимальное (минимальное) значение целевой функции — линейной формы z. Данная вычислительная процедура хорошо реализуется на много- процессорных ВС. Различные варианты подсистем линейных уравнений следует динамически распределять между процессорами. А это, в свою очередь, полностью соответствует SPMD-технологии «одна программа — много потоков данных». О единственности решения. Мы видели по рисункам, что z = zmax может выполняться на ребрах и гранях многогранника Я. Если на ребре, то в двух сопряженных вершинах z принимает одинаковое значение Zmax • Если на гранях, то более чем в двух вершинах z = zmax . Это легко пере- носится в n-мерное пространство.
Итак, указанная вычислительная процедура может привести к полу- чению единственной вершины X = (xi,...,xn) многогранника R, в ко- торой z(X) = Zmax. Пусть в г вершинах Xi,..., Хг многогранника R выполняются ра- венства z(Xj) = zmax, j = 1, • • • ,г. Построим выпуклую комбинацию векторов: X — kiXi 4- &2-^2 4*... 4“ к<гХт , fci 4- &2 4- ••• 4" = 1» Aj (17.3) Множество значений X, удовлетворяющих этому условию, опреде- ляет бесконечное множество решений данной задачи ЛП. Легко видеть, что данная вычислительная процедура предполагает любое соотношение пот. 17.2.3. Пример применения параллельной процедуры пря- мого перебора Решим ту же задачу (2), подойдя формально, по правилу, пригодно- му для любой размерности пространства. Исходная система уравнений действительных или потенциальных плоскостей — граней R имеет вид Xi = 40' Х2 = 30 т = 3 уравнений xi 4-Х2 = 50 Xi = 0 Х2 = 0 (17.4) п = 2 уравнений Т.к. Сз+2 = 10, исследование десяти комбинаций (подсистем урав- нений) по два уравнения из (17.4) выглядит следующим образом. {а?1 = 40 Х2 = 30 Подставляем это уже готовое решение в третье ограничение задачи, 4- Х2 50, и отвергаем его, т.к. ограничение не выполняется. 2 Г Х1 = 40 1 Xi 4- Х2 = 50 —► = 40, Х2 = 10. Решение удовлетворяет третьему ограничению х2 30. Находим и запоминаем z(40,10) = 130. Г Xi = 40 [ = 0 Система не имеет решения.
Л I Х2 30 Решение удовлетворяет ограничениям < I #1 + Х2 50. Находим z (40,0) = 80. Если мы решаем задачу не на параллельном компьютере, то сразу же видим, что новое значение z не превосходит уже найденное. Поэтому и это решение отвергаем. Г %2 = 30 1 xi + Х2 = 50. Решение xi = 20, Х2 = 30 удовлетворяет и третьему «основному» ограничению задачи xi 40. Находим z (20,30) = 190. Запоминаем его вместе с решением, т.к. оно превосходит ранее полученное. • ( Х2 = 30 Д xi = 0. Решение удовлетворяет всем ограничениям задачи. z(0,30) = 150, что не превосходит уже найденное значение. Решение отвергаем. {Х2 = 30 Х2 = 0. Не имеет решения. xi + Х2 = 50 xi = 0. 8. Решение xi = 0, Х2 = 50 противоречит «основному» ограничению Х2 < 30. Отвергаем его. $ Г xi + Х2 = 50 Д Х2 = 0. Решение xi = 50, х2 = 0 противоречит «основному» ограничению xi < 40. Отвергаем его. 10.Р1 = 0 Х2 = 0. Решение не противоречит «основным» ограничениям задачи. Одна- ко г(0,0) = 0, что не превосходит уже найденное значение. (Кстати, оно обеспечивает решение задачи z —> min.) Итак, xi = 20, Х2 = 30 обеспечивает zmax = 190, т.е. является реше- нием задачи ЛП. 17.2.4 . Сложность алгоритма прямого перебора Основным элементом решаемой задачи является решение системы п линейных уравнений. Сложность решения такой системы можно счи-
тать полиномиальной О(п3). Число решений определяется как С"+п. Чтобы найти зависимость сложности от основных параметров питп, определим, во сколько раз увеличивается сложность при увеличении раз- мерности п на единицу: ^m+n+l = (ТП + П + 1)(ТП + П)...(т + 1)п! _ m + n + 1 _ т C'm+n (n + l)!(m + n) . ..(m+1) n + 1 n+1 (17.5) Если считать, что т соразмерно с п, т.е. т = п, то увеличение размерно- сти п на единицу при больших п примерно в два раза увеличивает слож- ность задачи, т.е. ее сложность определяется как О(2пп3). Это экспонен- циальная сложность, практически сильно ограничивающая размерность решаемых задач. Простота параллельного алгоритма прямого перебора делает его привлекательным для значений п порядка двух-трех десятков. Для боль- шей размерности необходимо искать алгоритмы полиномиальной слож- ности. 17.3. Параллельный аналог «симплекс-метода» 17.3.1. Пример Рассмотрим задачу линейного программирования Z = 26ж + 20?/ + 21z —► max (17.6) при ограничениях qi = 2х + 7у — 76z + 222 > 0 q2 = — Sx + 9у — Sz + 64 0 Q3 = — Sx + 13?/ — 24z + 96 > 0 Q4 = — х — 6?/ — z + 70 > 0 q$ = — 2х — 7у — 2z + 90 0 (17.7) qe = ЗЗх + 3у + 22z — 165 > 0 и при условии х > 0, ?/ > 0, z > 0. Ограничения и условия образуют многогранник R (ABCDEFGHKL) допустимых решений, представленный на рис. 17.4. Формально мы не знаем Я, и множество граней — действительных
Рис. 17.4. Многогранник допустимых решений и возможных — этого многогранника представлено системой уравнений: 91 = 2х + 7у — 76г + 222 = О 92 = — 8а: + 9у — 8г + 64 = О 9з = — 8х + 13р — 24г + 96 = О 94 = — х — бу — г + 70 = 0 95 = —2х — 7у -2г + 90 = 0 (17.8) 96 = 33а: + Зу + 22г - 165 = 0 97 = х = 0 98 = У = 0 qg = z = О В результате решения первой же подсистемы трех уравнений (п = 3) си- стемы (17.8) получаем координаты вершины Е многогранника R {91 = 0 92 = 0 Я(13,8,4), Z(E) = 592 (17.9) 9з = 0 Постараемся «сместиться» в ту вершину, смежную вершине Е, т.е. соединенную с ней ребром (в одну из вершин A, D, L, F), в которой це- левая функция Z имеет максимальное значение, превышающее Z(E).
Ребра, исходящие из вершины, определяются подсистемами п - 1 плоскостей, пересекающихся в этой вершине, т.е. образующими ее. В данном случае подсистема < 91 =0 определяет несуществую- 92 = 0 щее ребро. Пока мы знаем это только по рисунку. Подсистема < 91 = 0 9з = 0 определяет ребро ЕА, подсистема < 92 = 0 определяет ребро ED. А вот 9з = 0 ребра EL и EF мы пока не знаем, т.к. не знаем (формально, а не по рисун- ку!) все плоскости (плоскость 95), пересекающиеся в Е. Это значит, что из каждой вершины в общем случае исходят не менее п ребер, а сколько в действительности — предстоит уточнить. (Представьте себе R — брил- лиант классической огранки.) Значит, 91,92,9з — это лишь наше начальное представление о мно- жестве плоскостей — граней, пересекающихся в вершине Е. Нам необхо- димо развить это представление до полного. Тогда выясним все множество граней, образующих вершину Е, под- становкой ее координат во все другие уравнения (17.8) и испытанием на получение тождества. Находим 9s(13,8,4) = 0. Добавляем q$ в (17.9), по- лагаем полностью известным число р = 4 ребер, образующих вершину Е. Те. вместо (17.9) получаем 91 = 0 92 = 0 9з = 0 95 = 0 (17.10) Каждую возможную грань, определяемую двумя (п — 1) уравнениями плоскостей из (17.10), будем решать совместно со всеми плоскостями из (17.8), не вошедшими в (17.10), — с гранями q4, q6, q7, qa, q9. Первая такая система имеет вид 91 = 0 < 92 = 0 .94 = 0 (17.11) Ее решение (535,8,7, -517,2) содержит отрицательную составляющую. Те. эта точка не принадлежит R. Если бы решение было не отрица- тельным, мы должны были бы проверить выполнение всех ограниче- ний (17.7), не представленных в (17.11).
Можно показать, что в выпуклом многограннике несуществующее ребро не вызовет появления «ложной» вершины, и достаточно проверить (17.7). Системы 91 = О 92 = 0 , 96 = 0 91 =0 92 = 0 , 97 = 0 91 = 0 | 91 = 0 92 = 0 , < 92 = 0 98 = 0 I 9э = 0 имеют не положительное решение. Следующая испытываемая система линейных уравнений на основе двух уравнений из (17.10) и не входящих в (17.10) уравнений из (17.8), имеет вид 91 = 0 9з = 0 . 94 = 0 Ее решение — приблизительно точка (5,2,9,4,4) не является вершиной R, т. к. не удовлетворяет всем ограничениям (9.7), 95 (5,2, 9,4, 4) < 0. Следующая испытываемая система имеет вид 91 = 0 9з = 0 . 96 =0 Ее решением является вершина А(3,0,3), Z(A) = 141 < 592. Т. к. мы нашли вершину на «другом конце» ребра, анализ данного ребра прекращаем. Следующее исследуемое ребро, исходящее из вершины Е, опреде- ляется подсистемой 91 = 0 95 =0, которая должна решаться совместно с уравнениями 94 = 0, дв = 0,97 = 0, 98 = 0,99 = 0. {91 = 0 95 = 0 определяет вершину L (6,10,4). Однако 94 = 0 Z(L) = 440 < 592. Следующее возможное ребро, исходящее из вершины Е, определя- ется комбинацией 92 = о 9з =0.
Решая ее совместно с другими гранями R, - q4 = 0, qe = 0, q? = 0, qs = О, q9 = 0, пытаемся найти другую вершину в R, смежную Е. Очередная решаемая система уравнений 92 = о 9з = О 94 = О имеет не отрицательное решение (13,625, 8,7,4,175). Проверяем выпол- нение ограничений (17.7), не представленных в решенной системе. Нахо- дим, что 91(13,625, 8,7, 4,195) < 0. Этой проверки достаточно для вывода о том, что найденная точка не является вершиной многогранника R. 92 =о Системы 9з = 0 и < ,96 =0 92 = 0 9з = 0 имеют решение в отрицательной обла- , 97 = о ста. 92 = о Система 93 = 0 определяет вершину £)(6,0,2), для которой Z(D) = 198 < 592. ,98 = ° Следующее возможное ребро по (17.10) определяется парой граней 92 = о 95 = 0. Решаем совместно с остальными гранями, не входящими в (17.10): д4 = 0, 96 = 0,97 = 0,98 = 0, 99 = 0. ’ 92 = о / Система < 95 = 0 1 < ,94 = о \ ' — 8х + 9у — 8z + 64 = 0\ —2х - 7у - 2z + 90 = 0 не имеет реше- —х — бу - z + 70 = 0 / ния, ранг матрицы системы не равен рангу расширенной матрицы. 92 = о Система 95 = 0 имеет отрицательное решение. о о II II § S Система < 95 = 0 имеет неотрицательное решение, при котором , 97 = 0 91 < 0. Найденная точка не является вершиной R. ( 92 = о Система ( 95 = 0 не имеет решения. [98 = 0
{92 = О q5 = 0 имеет неотрицательное решение —точку F(17,8,0) 99 = 0 удовлетворяющую всем ограничениям: qi(17,8,0) > 0, 9з(17,8,0) > 0, 94(17,8,0) > 0, 9б(17,8,0) > 0. Точка F — вершина многогранника R. Z(F) = 602 > 592. Таким образом, мы нашли вершину F, смежную вершине Е, с пре- вышающим значением целевой функции. Однако поиск всех вершин на основе (17.10), смежных вершин Е, следует продолжить. Ведь формально возможна и другая вершина, с еще большим значением целевой функции. Перебор продолжаем на основе ребра 9з = 0 95 =0, хотя мы видим по рисунку, что такого ребра нет. Ищем точки пересечения этого ребра со всеми гранями R, не вошед- шими в (17.10). {9з = 0 9s = 0 имеет решение (0,875,10,9,125). 94 = 0 При проверке выполнения первого же ограничения оказывается, что 91(0,875, 10, 9,125) < 0. Найденная точка действительно не являет- ся вершиной R. ' 9з = 0 Система 95 = 0 имеет отрицательное решение. 96 = 0 ' 9з = 0 Система < 95 = 0 имеет решение (0,10,144,9,5), не удовлетворяю- ( 97 = 0 щее первому же ограничению. Г 9з = 0 Система 95 = 0 имеет отрицательное решение. ,98 = 0 9з = 0 Система < 95 = 0 имеет не отрицательное решение (22,96,6,44, 0), 1,99 = 0 не удовлетворяющее ограничениям. Таким образом, анализ всех возможных вершин, смежных вер- шине Е, закончен. Мы нашли единственную вершину F(17,8,0), где зна-
чение целевой функции 2(17,8,0) = 602 превышает ее значение в точ- ке Е. Система уравнений, определившая эту вершину, имеет вид 92 = 0 95 = 0 99 = 0 (17.12) Если бы мы нашли несколько вершин с одинаковым значением целевой функции, то были бы возможны различные стратегии дальнейших дей- ствий. Мы здесь рассматриваем случай, когда для дальнейшего поиска фиксируется одна из таких вершин. Других граней, которым принадле- жит точка F, нет. Смещаемся в эту вершину, полагаем р = 3. Начинаем весь процесс поиска смежной вершины с максимальным (среди смежных вершин) значением целевой функции Z, обязательно превышающим значение Z(F). Первое возможное ребро, исходящее из F, определяется уравнени- ями 92 =0 95 = 0. Однако эта комбинация возвращает нас в ту вершину, которую мы уже исследовали. Поэтому сразу же переходим к следующему возможному ре- бру 92 =0 99 = 0, решая его совместно с гранями qi, дз, 94, де, 97,98- Система • 92 = 0 дэ = 0 решалась ранее. Ее решение неположительно. 91 = 0 (Если мы переупорядочим уравнения системы по индексам, то получим индексный код, по которому будем входить в таблицу с информацией о решенной ранее системе. Так мы реализуем самообучение в процессе ре- шения.) 92 = 0 Система • дэ = 0 решалась ранее. Ее решение также содержит от- 9з = 0 рицательный компонент. Система < 92 = 0 дэ = 0 решается впервые. Ее не отрицательное решение 94 = 0 не удовлетворяет всем ограничениям, дз(17,8, 8,7, 0) < 0.
{92 = 0 j 92 = 0 qg = 0 и < 9э = 0 имеют решения, содержащие отрица- 9б = 0 ( 97 = 0 тельные компоненты. {92 = 0 qg — 0 определяет вершину С, 2(8,0,0) = 208 < 602. 98 = 0 Следующее исследуемое ребро определяется системой уравнений 95 = о 99 = 0. {95 99 91 95 = 0 = 0 исследовалась раньше. Она не имеет решения. = 0 = 0 Система < qg = 0 решалась ранее. Она определяет точку, не являю- 9з = 0 щуюся вершиной R. {95 = 0 qg = 0 решается впервые. Она определяет точку К. Од- 94 =0 нако 2(10,10,0) = 460 < 602. Таким образом, нам не удалось сместиться из вершины F в вершину с большим значением Z. Значит, найденная точка F определяет решение задачи ЛП. 17.3.2. Общий алгоритм 1. Формируем систему т + п уравнений 91 = О 9m — 0 9m+1 = 0 (17.13) > Ят+п — 0 действительных и возможных границ многогранника R допустимых ре- шений. Эта система уравнений отображает т заданных ограничений и п условий неотрицательности решения.
2. Решая совместно подмножество п уравнений этой системы, нахо- дим одну из вершин Хо многогранника R. Находим значение Zq целевой функции в точке Хо. 3. Дополним систему п уравнений, первоначально породившую вер- шину Хо, теми уравнениями, которым Хо также удовлетворяет. Получим систему р > п уравнений, порождающих вершину Хо. {9л = О (17.14) qjp = о (первоначально р = п) Примечание 1. Теперь наша задача — переместиться вдоль одного из ребер, исходящих из вершины Xq9 в смежную вершину Хь такую, что Z(Xi) > Z(X0). При этом, желая ускорить процесс (хотя выбор стратегии нуждается в обосновании), будем среди всех смежных вершин искать ту вершину Xi, в которой достигается максимальное увеличение значения целевой функции. Каждое ребро описывается системой п — 1 уравнений из состава р уравнений, породивших испытываемую вершину Х$. Введем переменную р, первоначально приняв р = п. 4. Выбирая из (17.14) по п — 1 уравнений, будем получать систему, которая определяет некоторое ребро, исходящее из Xq. Всего таких под- систем может быть Ср -1. 5. Последовательно испытываем данное ребро на его пересечение с теми из т гранями из (17.13), которые не вошли в состав (17.14). Те. до- полняем нашу систему п-1 уравнений очередной испытываемой гранью. Получаем систему п уравнений и решаем ее. Возможны следующие вари- анты. 5.1. Система не имеет решения, имеет не единственное решение или решение содержит отрицательные компоненты. Переходим к испытанию следующей грани. 5.2. Система имеет неотрицательное решение, но это решение не удовлетворяет всем т ограничениям задачи, т.е. находится вне R. Пере- ходим к испытанию следующей грани. 5.3. Система имеет неотрицательное решение Xi Хо, удовлетво- ряющее всем т ограничениям задачи. Значит, найдена смежная верши- на. Если Z(Xi) < Z(Xo), переходим к испытанию следующего ребра — к выполнению шага 6. Если Z(Xi) = Z(Xo), запоминаем вершину Хь Это для случая, если в результате проводимых испытаний оказалось, что точка Хо — решение задачи. Тогда необходимо знать все вершины, обра- зующие решение, чтобы построить общее параметрическое выражение.
Переходим к испытанию следующего ребра. Если Z(X\) > Z(Xq), запо- минаем точку Xi в данном качестве и переходим к испытанию следую- щего ребра. Примечание 2. Возможна стратегия, при которой смещение произво- дится в первую же найденную вершину с превышающим значением це- левой функции. Есть вариант, что это — более правильная стратегия, т.к. значительное увеличение значения целевой функции на данном шаге мо- жет привести в дальнейшем к увеличению числа шагов: мы ничего не зна- ем о особенностях многогранника решений. Мы же здесь рассматриваем стратегию, при которой отыскивается смежная вершина с максимальным превышением целевой функции. 6. Перебрав все грани для одной подсистемы п -1 линейных уравне- ний (для одного ребра), формируем другую подсистему таких уравнений на основе (17.14). Анализируем ее совместно со всеми т + п — р уравне- ниями из (17.13). 7. Таким образом, исследовав все ребра, исходящие из Хо, мы мо- жем найти ту смежную вершину где целевая функция максимально превышает ее значение в исходной вершине. Перемещаемся в эту верши- ну, полагая Xq = Хг. Система (17.14) теперь — та система п уравнений, решение которой породило Дополняем ее уравнениями других гра- ней, проходящих через Xi. Получаем р > п. Начинаем весь процесс пе- ремещения сначала. Однако первое ребро, определяемое первыми п — 1 уравнениями (17.14), это ребро, которое ведет в вершину, из которой мы вышли. Т.е. первую комбинацию п — 1 граней следует пропустить. 8. Если не удается найти вершину, в которой значение целевой функции превышает ранее найденное, то мы нашли решение. Одновре- менно мы нашли и сохранили те смежные (проанализированной вер- шине!) вершины, в которых значения целевой функции равны. Однако мы могли найти не все вершины, обладающие одним, максимальным, значением Z. Ведь мы двигались только по ребрам, исходящим из преды- дущей анализируемой вершины. «Напротив» этой вершины могут быть другие вершины с тем же значением целевой функции, и в эти верши- ны не ведут ребра из данной. Однако на основе свойств выпуклого мно- гогранника можно заключить, что отношение взаимной смежности свя- зывает все вершины, образующие решение задачи ЛП. Т.е. вершины- решения, не смежные друг другу, являются смежными другим верши- нам-решениям. Существует путь вдоль ребер, связывающий вершины- решения. Тогда можно построить алгоритм выявления всех вершин R — решений задачи ЛП. 8.1. Пусть найденные уже вершины-решения образуют множе- ство А. Дополним его последней найденной вершиной. Выбираем пер-
вую из ранее запомнившихся вершин из А с равным, максимальным, зна- чением целевой функции и делаем ее опорной, Х0- 8.2. Выполняем шаги 4-8 для поиска вершины многогранника R с более высоким значением Z, чем значение Z(Xo). Конечно, мы такой вершины найти не можем. Но мы можем найти новую вершину X, не входящую в множество А, такую, что Z(X) = Z(X0)- Включаем вершину X в А, полагаем Xq := X. Продолжаем выполнение данного пункта до тех пор, пока множество А не перестанет пополняться новыми вершинами. Производим параметрическую запись (17.4) общего решения задачи. 17.3.3. Сложность алгоритма Если считать, что чаще всего из одной вершины исходят п граней, то число решаемых систем п линейных уравнений при поиске смежных вершин определяется как г = пх (т + п — п) = п х т. Число вершин к, по которым производится перемещение в поисках ре- шения, предсказать трудно. Однако очевидно, что к << С^+п, т.к. лишь локально затрагивается некоторый «бок» многогранника R. Считая, как и раньше, т = п, можно оценить сложность решения данным методом, как О(кп5). Эта сложность является полиномиальной. 17.3.4. План параллельных вычислений Воспользуемся в основном той же схемой вычислений, что и в раз- деле 17.1. Пусть все процессоры ВС или используемые станции локальной се- ти обладают своим номером и знают количество используемых средств. Как показывалось ранее, они все начинают решать «свои» системы ли- нейных уравнений. Здесь уже можно применить различные стратегии. Одна из них: пусть хотя бы один процессор нашел вершину многогран- ника R. Ее можно взять за вершину Хо- Другая стратегия заключается в том, чтобы дать возможность всем участвующим процессорам найти по одной вершине R. Вершину с мак- симальным значением целевой функции Z можно взять за Хо- Выбрав вершину Хо, все процессоры начинают решать «свои» ва- рианты систем линейных уравнений в поисках смежных вершин с пре- вышающим значением целевой функции. Согласовав действия при нахо- ждении вершины Xi и приняв Xq := Хь они продолжают процесс дви- жения по ребрам R.
17.4. Параллельное решение задачи целочисленного линейного программирования Методы параллельного решения задачи ЛП, основанные на непо- средственном перемещении по ребрам многогранника решений, не при- влекая дополнительных переменных, способствуют построению нагляд- ного метода решения соответствующей задачи целочисленного линейно- го программирования (задачи ЦЛП). Под соответствием мы понимаем добавление условия целочисленности решения при той же формальной постановке задачи ЛП. Такой метод основан на захвате в «вилку» некоторой целой точки внутри многогранника решений, вблизи точки решения задачи ЛП. Рассмотрим пример. Решим задачу ЦЛП: Z = х — Зу + 3z —> max при ограничениях 2х + у — z 4 4х — Зу 2 —Зх + 2у + z 6 и при условиях ж, 2/, z > 0, целые. Решение задачи ЛП достигается (рис. 17.5) в точке (0,5, 0, 7,5), ко- торая является результатом решения системы уравнений — граней 92 = 4х — Зу — 2 = 0 9з = — Зх + 2у + z — 6 = 0 95 = У = 0 Значение целевой функции Z(0,5, 0, 7,5) = 23. Положим AZ = 4, и найдем все точки пересечения образовавшейся «целевой плоскости» с ребрами, исходящими из вершины-решения. Для ребра (д2,9з) ' Z = 19 < q2 =0 -ч. (2^ 2? . 4 \ 2’ 3’ 6/ к9з = 0 Все координаты при переходе из вершины-решения в найденную точку превысили некоторые целые значения. Причем, одна из координат «пре- одолела» именно ближайшее целое, заставив другие координаты «пре- одолеть» большее число единиц.
Рис. 17.5. Решение задачи целочисленного линейного программирования Для ребра (<?2, 9s) Z = 19 < q2 = 0 -ч. (0,5, 0, 6,2). .Q5 = ° Не все координаты «преодолели» ближайшее целое значение: х остался внутри интервала (0,1). Для ребра (д3, q5) {Z = 19 q3 = 0 -» (0,1, 0, 6,3). 95 = о Опять не все координаты «преодолели» ближайшее целое: х остался вну- три интервала (0,1). Значит, только в точке (2|, 2 j, 8|) наблюдается «преодоление» це- лых значений по сравнению с точкой (0,5, 0, 7,5), представляющей точ- ное решение задачи ЛП. Т.е. нам удалось захватить решение задачи ЦЛП в «вилку». При этом точка (2,2,8), «преодоление» которой произошло, — возможное решение задачи ЦЛП. Однако для того, чтобы координате z преодолеть ближайшее целое значение, координатам хну пришлось преодолеть по два целых значе-
ния. Поэтому закономерен вопрос о том, нет ли внутри отсеченной с по- мощью AZ области целых точек, где z преодолевает ближайшее целое с меньшей ценой для других координат. Ведь значение целевой функции в таких точках было бы больше. Половиним «вилку». Положим AZ = 2 и найдем точки пересече- ния «целевой плоскости» Z = 21 с ребрами, исходящими из вершины- решения задачи ЛП: Z = 21 92 = О 9з =0 4 4 Видим, что есть координата, z = 7|, которая не «преодолела» ближайшее целое, определяемое решением задачи ЛП. Там z = 7,5. Очевидно, что на других двух ребрах ситуация тем более останется прежней. Вновь половиним «вилку» в сторону увеличения значения AZ, пы- таясь вплотную подойти к возможной целой точке, где значение Z мак- симально. Положим AZ = 3. Найдем точки пересечения «целевой плос- кости» Z = 20 с ребрами, исходящими из вершины-решения задачи ЛП. Решаем первую систему. {Z = 20 q2 = 0 -* (2, 2, 8). 9з =0 Решение «преодолело» целые значения по всем координатам. Не менее чем по одной координате произошло округление до ближайшего целого. Более того, по всем координатам получены целые значения. Дальнейший поиск прекращается, решение задачи ЦЛП найдено. Если бы решение не совпало с целым, мы проверили бы точки пере- сечения «целевой плоскости» с другими ребрами. Вместе с тем, это мож- но и не делать, т.к. для меньшего значения Z = 19 уже установлен факт «непреодоления» там целых значений. Так что нам осталось бы только выполнить округление. ♦ ♦ ♦ Рассмотренные в лекции методы решения задач линейного про- граммирования имеют важную методологическую направленность, обу- словленную наглядностью, ощутимостью, чувством «физического смыс- ла» задач. Их роль не осмысленна до конца, но они позволяют эффек- тивно распараллеливать вычисления. В этом смысле такие методы, как симплекс-метод, венгерский метод ориентированы исключительно на
последовательные вычисления, но зато полностью исключают перебор. Для большой размерности задачи введение дополнительных перемен- ных, что предполагается в симплекс-методе, может показаться нежела- тельным. Предложен вполне практический метод (хотя и не описан алгорит- мически) решения задачи ЦЛП, опирающийся на нахождение хотя бы одного решения соответствующей задачи ЛП. Мы не затронули вопроса о единственности решения — как задачи ЛП, так и задачи ЦЛП, о произ- вольном числе ребер, образующих вершину-решение задачи ЛП. Метод, несомненно, подлежит развитию. Его достоинство заключается в том, что он, по сравнению с методом «ветвей и границ», не требует многократного решения задачи ЛП с динамически уточняющимися и размножающими- ся ограничениями. Можно указать на осуществляемое практическое применение пред- лагаемых методов в качестве тестовых задач для оценки эффективности многопроцессорных ВС, использующих принципы SPMD-технологии («единственная программа — много потоков данных»). Эти же методы используются при разработке сетевых технологий решения сложных за- дач.
Лекция 18. Параллельные методы расчета транспортной сети Предлагаются параллельные методы решения транспортной задачи без ограничений и с ограничениями на пропускную способность коммуникаций, а также задачи нахождения максимального потока в сети. Методы применимы при использовании майнфреймов, мультимикропроцессорных ВС в составе PC, а также при создании сетевых технологий решения сложных задач. Ключевые слова: пункт производства, пункт потребления, транс- портные издержки, пропускная способность, полное множество взаимно независимых каналов. 18.1. Прямой перебор и аналог «симплекс-метода» при решении транспортной задачи без ограничения пропускной способности коммуникаций 18.1.1. Постановка задачи и планы решения Пусть [15] в пунктах AlfА2,..., Ат производят некоторый одно- родный продукт в объеме сц (г = 1,2, ...,т) единиц. В пунктах Bi, В2, ...,Вп этот продукт потребляется в объеме bj (j = 1,2,..., п) еди- ниц. Из каждого пункта производства {А;} возможна транспортировка в любой пункт {Bj} потребления. Транспортные издержки по перевозке из пункта Ai в пункт Bj единицы продукции равны Cij (г = 1,..., m; j = 1,...,п). Необходимо найти такой план перевозок, при котором запросы всех потребителей полностью удовлетворены, весь продукт из пунктов произ- водства вывезен и суммарные транспортные издержки минимальны. Пусть Xij — количество продукта, перевозимого из пункта Ai в пункт Bj. Требуется найти значение переменных (перевозок) Xij > 0 (г = 1,2,..., т; j = 1,2,..., п), удовлетворяющих т п Z(xij) = Cijx*j ¥ min (18.1) г=1 j=l
при ограничениях п 52 Ж,j = Qj, г = 1,...,ТП, t1 (18-2) ^xtj =bj, j = i=l при условии неотрицательности Xij > О (18.3) и баланса 7П П Еа- = Е6г (18.4) i=l j=l Как известно, условие баланса приводит к линейной зависимости урав- нений в системе (18.2), ранг ее матрицы равен тп 4- п - 1. Сформулируем задачу линейного программирования в канониче- ской постановке, исключив из (18.2) одно уравнение. При этом мы счи- таем, что условие баланса (18.4) оказывает влияние на корректность по- становки задачи и учтено при этой постановке. Исключенное уравнение будем использовать также для контроля получаемого решения. Следуя плану параллельного решения задачи линейного программи- рования и учитывая, что оптимальное решение находится хотя бы в одной из вершин многогранника допустимых решений, образуемого ограниче- ниями и условиями, сформируем это множество граней. В его состав вой- дут тп 4- п - 1 выделенных уравнений-ограничений и тп х п равенств ну- лю переменных на основе неотрицательности решения. Выбирая из этой системы по тп х п уравнений с обязательным участием всех выделенных уравнений-ограничений и решая их совместно, мы можем находить вер- шины многогранника решений. Так мы можем реализовать метод прямого перебора. Количество ва- риантов составляет _ количество различных спосо- бов приравнивания нулю тх п — (т 4- п - 1) переменных из их общего числа т х п. Мы можем реализовать и аналог симплекс-метода, найдя первона- чально некоторую вершину, а затем перемещаясь по ребрам в одну из смежных вершин с большим значением целевой функции, пока это воз- можно. 18.1.2. Параллельный алгоритм решения Исследование плана параллельного решения и формирование алго- ритма будем сопровождать примером, для проверки правильности заим- ствованным в [15]. Для краткости условия (18.3) и (18.4) опущены.
Пример. Z = 7хц 4- 8^12 4- 5xi3 4- Зхи 4- 2x21 4- 4x22 4- 5х2з4- 4-9x24 4- 6х31 4- Зх32 4- 1х33 4- 2х34 —► min (18.5) при ограничениях 4- Х12 4- Х13 4- Х14 = 11 #21 4- Х22 4- Х23 4- #24 = П #31 + #32 4- #33 + #34 = 8 #11 4- х21 4- #31 = 5 #12 4- #22 4- Х32 = 9 #13 + #23 + #33 = 9 #14 4- Х24 4- Х34 = 7 (18.6) Введем линейный массив переменных Xij = ук, где к = (г — l)n + j. Исключим из рассмотрения последнее уравнение. Система уравне- ний граней (действительных и возможных) многогранника решений при- мет вид У1 + У2 + Уз + 3/4 = 11 Уб + Уб + У7 + Уз = 11 У9 + 3/10 + Уи + У12 = 8 У1 + Уб + У9 = 5 У2 + Уб + !/ю = 9 Уз + У7 + Уи = 9 (18.7) ук=0, к= 1,2,...,12. Итак, на первом этапе задача свелась к выбору и анализу комбинаций по 12 — 6 = 6 нулевых значений координат искомой вершины многогран- ника решений. Выполняя подстановку выбранной комбинации в (18.7), мы можем решить образовавшуюся систему шести уравнений с шестью неизвестными. Таким образом, мы сможем найти координаты некоторой вершины. Комбинации по шесть нулевых значений координат («комбинации нулей») следует выбирать так, чтобы не обратилась в нуль левая часть хотя бы одного уравнения (18.7), включая исключенное уравнение. Например, комбинация, где yi =У2 = Уз = У4 = 0, недопустима. Найдем дополнительные контрольные ограничения: чтобы реше- ние было не отрицательным, необходимо, чтобы любое значение ук, к = 1,..., т х п, не превышало значение ук — величины правой части того уравнения, в котором оно участвует.
Тогда в нашем примере у\ min(ll,5) = 3/1 = 5, аналогично у2 У2 = 9, у3 Уз = 9, У4 У4 = 7, Уз Уз = 5, Уб Ув = 9, у7 < у7 = 9, Уб Уб = 7, уд < уд = 5, ую Ую = 8, уц уп = 8, уц уп = 7. Здесь при оценке у4, у», yi2 учтено последнее уравнение в (18.6). Воспользуемся векторной формой представления, чтобы подгото- вить удобные, нетрудоемкие матричные преобразования. А именно, наша система т + п — 1 линейных уравнений-ограничений имеет вид AY = В, где А — нуль-единичная матрица, Y — столбец переменных, В — столбец свободных членов: 1 11 1000000 о 0\ 0000111100 0 0 00 0 00000 1 1 11 1000100010 0 0 01000 100 0 100 00100010 0 010/ 'У1^ У2 Уз У4 Уз Уб У7 Уб Уб Ую У11 \У12/ /п\ 11 8 5 9 \9/ (18.8) Тогда для нахождения хотя бы одного допустимого решения выбе- рем допустимую комбинацию нулей по следующему алгоритму: 1. Положим I = 0. 2. Положим I := I + 1, yi = 0. Исключим из матрицы А столбец, соответствующий этой переменной. 3. Проверяем, появилась ли в А строка, содержащая только нулевые элементы, или обратилась ли в нуль левая часть исключенного уравне- ния. (Предполагаем, что все свободные члены уравнений больше нуля.) При положительном результате анализа выполняем шаг 5. В противном случае — следующий шаг. 4. Для каждой s-й строки А выделяем множество {у,} переменных, соответствующих единичным элементам. Проверяем: ^2 ys bs? S При отрицательном результате анализа (свободный член превышает сумму верхних оценок переменных) выполняем шаг 5. В случае успешной проверки 3 и 4 выполняем шаг 6.
5. Данный шаг выполняется, если испытываемое значение yi = О выбрано неудачно. Отменяем исключение столбца, соответствующего переменной yi, и выполняем шаг 2. 6. Фиксируем yi = 0, и если комбинация нулей сформирована не полностью, выполняем шаг 2. Продолжим рассмотрение примера. Полагаем yi = 0. Это не приводит к нарушению оценок, указанных в алгоритме. Полагаем у2 = 0. Это также не приводит к нарушению оценок. Полагаем у3 = 0. Нулевые строки не появились. Однако в первой строке осталась единственная единица, соответствующая переменной у Т.к. ?/4 = 7 < 11, отвергаем нулевое значение переменной. Полагаем 2/4 = 0- Нулевые строки не появились, однако в первой же строке осталась единственная единица, соответствующая переменной у3. Т.к. 2/з = 9 < 11, отвергаем и это значение. Полагаем 2/5 = 0- Это не приводит к нарушению оценок. Полагаем ув = 0. В пятой строке остается единственная единица, соответствующая 2/10- Т.к. 2/ю = 8 < 9, отвергаем нулевое значение пере- менной. Полагаем 2/7 = 0, что не приводит к нарушению оценок. Значение 2/8 = 0 приводит к нарушению оценки во втором уравне- нии. Значение 2/9 = 0 приводит к появлению нулевой строки. Значение 2/10 = 0 не приводит к нарушению оценок. Значение 2/11 = 0 также не приводит к нарушению оценок. Итак, комбинация нулей найдена. Это отмеченные в (18.8) значения 2/1=0, 2/2 = 0, 2/5=0, 2/7 = 0, 2/ю = 0, 2/11 = 0. (18.9) Для нахождения других значений переменных необходимо решить систе- му уравнений на основе (18.8), после исключения нулевых столбцов /1 1 0 0 0 0\ < 2/3 /и\ 0 0 1 1 0 0 2/4 11 0 0 0 0 1 1 2/6 8 0 0 0 0 1 0 2/8 5 0 0 1 0 0 0 2/9 9 V 0 0 0 0 oj V/ Найдем все строки матрицы А, содержащие не более одного единич- ного элемента. Это строки, определяющие компоненты решения у3 = 9, 2/6 = 9,2/9 = 5.
Выполним подстановку, последовательно находя в столбцах найден- ных переменных единицы (не более одной) и корректируя правые части вычитанием найденных значений. Строки и столбцы, соответствующие найденным значениям переменных, исключаем из матрицы А. Такой прием подстановки можно повторять до исчерпания уравне- ний, содержащих в левой части единственную переменную. В нашем примере после подстановки найденных значений в уравне- ния 1,2 и 3 получаем систему 1 0 0\ / У4 \ О 1 0 1 х I у8 I 0 0 1/ \У12/ 11 - 9\ 11-9 I 8 — 5/ В ней все уравнения имеют единственную переменную. Они определяют решение у4 = 2, у8 = 2, 2/12 = 3. Таким образом, нам не пришлось пока воспользоваться методом Гаусса, но мы нашли допустимое решение УЬ = (0,0,9,2,0,9,0,2,5,0,0,3), для которого выполняются ограничения задачи. Вектор Уо определяет некоторую вершину многогранника допустимых решений, со значением целевой функции Z(Y0) = 141. Примем следующий план решения, соответствующий рассмотрен- ному ранее плану параллельного решения задач линейного программи- рования. Для перебора всех смежных вершин необходимо в комбинации ну- лей, определивших вершину Yo, поочередно исключать одно значение уг = 0 (это определит одно из исходящих ребер) и оставшуюся систе- му решать совместно поочередно со всеми другими уравнениями вида у3 = 0, не входящими в комбинацию нулей. Этим мы будем совершать перемещение в смежные вершины. Находя значение Z для каждого тако- го решения Yi там, где оно существует, можно найти вершину с меньшим значением целевой функции. «Перебравшись» в эту вершину (приняв ее за Уо),мы можем продолжить анализ смежных ей вершин и т.д. Решение задачи найдено в том случае, если после перебора всех смежных вершин не отыскивается вершина с меньшим значением целевой функции. Продолжим рассмотрение примера. Итак, (18.8) — исходный вид системы уравнений, (18.9) — комбина- ция нулей («отсутствующие» столбцы в (18.7) выделены), (18.8) и (18.9) определяют вершину Уо. Исключим из (18.9) уравнение yi = 0, а оставшуюся систему, с уче- том остальных нулей из комбинации (18.9), будем решать совместно с уравнениями Уз = 0,2/4 = 0,2/6 = 0,2/8 = 0,2/э = 0,2/12 = 0. (18.10)
Значит, в (18.8) положим первоначально уз = 0 вместо yi = 0. Левая часть шестого уравнения (последняя строка матрицы А) обратилась в нуль. Положим 2/4 = 0 вместо yi = 0. Получим систему /1 1 0 0 0 0\ /11\ 0 0 1 1 0 0 Уз 11 0 0 0 0 0 0 0 0 1 1 1 0 X Уб Уз = 8 5 0 0 1 0 0 0 У9 9 \0 1 0 0 0 о) \у^) \9/ Из нее, как и ранее, за два шага подстановки находим уз = 9, ув = 9, 2/9 = 5, азатем — 2/1 = 2, уе = 2,2/12 = 3. Таким образом, найдено новое допустимое решение Yi = (2,0,9,0, 0,9,0,2,5,0,0,3). Однако Z(Yi) = 149 > 141. Найденную вершину отвер- гаем. Вместе с тем, т.к. мы нашли вершину «на другом конце» анализиру- емого ребра, то и анализ этого ребра прекращаем. Приступаем к анализу следующего ребра, исключив из (18.9) урав- нение 2/2 = 0. Оставшуюся систему, с учетом остальных нулей из (18.9), будем решать совместно с теми же уравнениями (18.10). Положим в (18.8) 2/з=О вместо 2/2 = 0. Последняя строка матрицы А стала нулевой. Замена 2/4 = 0 вместо 2/2 = 0 приводит к системе /1 1 0 0 0 0\ f У2 У /п\ 0 0 0 0 1 1 Уз 11 0 0 0 0 1 1 Уб 8 0 0 0 0 1 0 Уб 5 0 0 1 0 0 0 У9 9 \0 1 0 0 0 V \yl2j На ее основе находим новый вектор — допустимое решение Yi = (0,2,9,0,0,9,0,2,5,0,0,3). Однако Z(Yi) = 151 > 141. Найденную вер- шину также отвергаем. Ребро исследовано полностью. Исключим из (18.9) уравнение 2/5 = 0, а оставшуюся систему, с уче- том остальных нулей из (18.9), будем решать совместно с теми же уравне- ниями (18.10). Положим в (18.8) 2/з = О вместо 2/5 = 0. Последняя строка матрицы А обратится в нуль. Положим 2/4 = 0 вместо 2/5 = 0. В первом уравнении не выполняется ограничение по 2/з (уз = 9). Положим 2/6 = 0 вместо 2/5 = 0. Пятая строка А обратилась в нуле- вую.
Положим 2/8 = 0 вместо у5 = 0. Получим систему уравнений /1 1 о о о 0\ 0 0 110 0 0 0 0 0 1 1 0 0 0 0 1 0 0 0 0 1 0 0 \1 о о о о о/ Уз > /11\ 2/4 11 X 2/5 8 2/6 5 2/9 9 Х2/12 ) Находим уз — 9, уд = 9 и после подстановки — уц = 2, у5 = 2. Вновь вы- полняем подстановку, находим уд = 3, и после следующей подстановки 3/12 = 5. Итак, получена вершина У = (0,0,9,2,2,9,0,0,3,0,0,5).Т.к. Z(Yi) = 119 < 141, полагаем Уо := Yi и начинаем пробу возможных перемещений вдоль ребер из найденной вершины многогранника решений в вершину с меньшим значением целевой функции: /1 1 0 0 0 0\ 0 0 110 0 0 0 0 0 1 1 0 0 0 0 1 0 0 0 0 1 0 0 \1 0 0 0 0 0/ 2/з /п\ 2/4 11 X 2/5 — 8 2/6 5 2/9 9 \2/12 / Запишем вновь аналогично (18.8) и (18.9) систему уравнений, решением которой является вершина Уо, отметив в ней «отсутствующие» столбцы: / 2/1 \ У2 Уз 1 1 0 0 0 0 0 0 0 0\ 2/4 /п\ 0 0 0 0 1 1 н 0 0 0 0 2/5 11 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 1 0 и и 1 0 X 2/6 2/7 = 8 5 (18.11) 0 н 0 0 0 1 0 0 0 Я И 0 2/8 9 0 0 1 0 0 0 и 0 0 0 0/ 2/9 Ы Ую 2/и w/ Находим У1 =0,2/2 = о, 2/7 = 0,2/8 = о, 2/ю = 0,2/п = 0. (18.12) Начнем движение по ребрам из данной вершины. Для этого будем исклю- чать из (18.12) одно из уравнений, а оставшуюся систему будем решать
совместно с не вошедшими в (18.12) уравнениями: Уз = 0,2/4 = 0, J/5 = 0,2/6 = 0,2/э = 0,2/12 = 0. (18.13) При этом надо учесть, что могут формироваться ранее исследованные комбинации нулей. (Комбинации нулей удобно метить индексным ко- дом, который следует запоминать для исключения повторного анализа.) Положим в (18.13) 2/з = О вместо 2/1 = 0. Последняя строка матрицы А станет нулевой. Замена 2/1=0 уравнением 2/4 = 0 приводит к системе /1 1 0 0 0 о\ S У1^ Л1\ 0 0 1 1 0 0 Уз 11 0 0 0 0 1 1 х 2/5 8 0 0 0 0 1 0 2/6 5 0 0 0 1 0 0 2/9 9 V 0 0 0 0 0/ W W Решаем с помощью подстановок, находим Ух = (2,0,9,0,2,9,0,0,3,0,0,5) Т.к. Z(Yi) = 127 > 119, найденную вершину отвергаем. Примечание. Нам вновь не пришлось воспользоваться схемой Гаусса. По-видимому, вид уравнений и вхождение каждой переменной не более чем в два уравнения позволяют довольствоваться простой подстановкой. Ниже мы исследуем это подробнее. Переходим к другому ребру, заменяя в (18.12) уравнение 2/2 = 0 урав- нениями из (18.13). Замена 2/3 = 0 вместо 2/2 = 0 приводит к тому, что последняя строка матрицы А становится нулевой. Замена 2/4 = 0 вместо 2/2 = 0 приводит к системе уравнений /1 1 о о о 0\ 0 0 110 0 0 0 0 0 1 1 0 0 10 10 10 0 10 0 \0 1 о о о о/ У2 У /п\ Уз 11 X Уз 8 2/6 5 2/9 9 ^2/12^ Находим с помощью подстановок Ух = (0,2,9,0,4,7,0,0,1,0,0,7). Т.к. Z(Yi) = 127 > 119, найденную вершину отвергаем и переходим к анализу следующего ребра. Замена 2/3 = 0 вместо 2/7 = 0 приводит к тому, что в первом уравне- нии не выполняется условие по ограничению Уа(уа = 7). Замена 2/4=0 вместо 2/7 = 0 приводит к тому, что в первом же урав- нении не выполняется условие по ограничению 2/3 (уз = 0).
Замена уз = 0 вместо yi = 0 приводит к системе /1 1 0 0 0 0\ Уз (п\ 0 0 1 1 0 0 У4 11 0 0 0 0 0 0 0 0 1 1 1 0 X Уб У7 — 8 5 0 0 1 0 0 0 У9 9 V 0 0 1 0 V \Ум/ Находим Yi = (0,0,7,4,0,9,2,0,5,0,0,3). Однако Z(yj) = 129 > 119. Переходим к анализу следующего ребра, поочередно заменяя урав- нениями из (18.13) уравнение уз = 0 из (18.11). Замена уз = 0 вместо уз — 0 приводит к образованию последней нулевой строки матрицы А. Замена У4 = 0 вместо уз = 0 приводит к тому, что в первом уравне- нии не выполняется условие по ограничению уз(уз = 9). Замена уз = 0 вместо уз = 0 приводит к системе /1 0 0 0 0 V 1 0 0 1 о о о о 0 1 о о /п\ 11 8 5 9 \9/ Находим Ух = (0,0,9,2,0,9,0,2,5,0,0,3). Т.к. 2(У1) = 141 > 119,найден- ную вершину отвергаем. Переходим к анализу следующего ребра, поочередно заменяя урав- нениями из (18.13) уравнение yw = 0из(18.11). Замена уз = 0 вместо yw = 0 приводит к тому, что в первом уравне- нии (18.11) не выполняется условие по ограничению у4(у4 = 7). Замена У4 = 0 вместо ую = 0 приводит к тому, в первом же уравне- нии (18.11) не выполняется условие по ограничению уз(уз = 9). Замена уз = 0 вместо ую = 0 приводит к тому, что во втором уравне- нии (18.11) не выполняется условие по ограничению уз{уз = 9). Замена Уб = 0 вместо ую — 0 приводит к тому, что во втором же уравнении (18.11) не выполняется условие по ограничению у5(у5 = 5).
Замена уд = 0 вместо ую = 0 приводит к системе /1 1 0 0 0 0\ Уз ЛЛ 0 0 1 1 0 0 2/4 11 0 0 0 0 0 1 0 0 1 1 1 0 X 2/5 2/6 = 8 5 0 0 0 1 1 0 2/ю 9 V 0 0 0 0 V \W Находим Yi = (0,0,9,2,5,6,0,0,0,3,0,5). Тк. £(УХ) = 104 < 119, «перемещаемся» в найденную вершину с меньшим значением целевой функции. Новая вершина характеризуется системой уравнений У1 =0,У2 = о, У7 = 0,2/8 = о, 2/9 = о, 2/11 = 0. (18.14) Перепишем систему (18.11), выделив «отсутствующие» столбцы, вслед- ствие (18.14): /У1\ У2 Уз 1 ИИ 1 1 0 0 0 0 0 0 0 0\ 2/4 /11\ 0 0 0 0 1 1 и 1 0 0 0 0 2/5 11 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 и и 1 0 И 0 1 0 X 2/6 2/7 = 8 5 (18.15) 0 Ии 0 0 0 1 0 0 0 1 0 0 2/8 9 0 0 1 0 0 0 1 0 0 0 и о) 2/9 Ую После исключения одного из уравнений (18.14) оставшаяся система (18.15), (18.14) будет решаться совместно с одним из уравнений Уз = 0,У4 = 0,2/5 = 0,2/6 = 0,2/ю = 0,2/12 = 0 (18.16) Замена 2/1 = 0 на 2/3 = 0 приводит к появлению (последней) нулевой стро- ки матрицы А. Замена 2/4 = 0 вместо 2/1 = 0 приводит к системе /1 1 0 0 0 0\ У1 У /11\ 0 0 1 1 0 0 Уз 11 0 0 0 0 1 1 Уз 8 1 0 1 0 1 0 Уз 5 0 0 0 1 1 0 Ую 9 \о 1 0 0 0 о) \У12)
Отсюда У1 = (2,0,9,0,3,8,0,0,0,1,0,7). Т.к. ОД) = 114 > 104, ис- следуем следующее ребро, исключив в системе (18.14)уравнение у2 = 0 и заменяя его последовательно уравнениями из (18.16). Замена у± = 0 вместо уг = 0 приводит к системе /1 1 0 0 0 0\ 0 0 110 0 0 0 0 0 1 1 0 0 10 10 10 0 110 \0 2 0 0 0 0/ ( У2^ /п\ Уз 11 X Уз — 8 2/6 5 Ую 9 \W \9/ Находим Yi = (0,2,9,0,5,6,0,0,0,1,0,7). Т.к. Z(Ki) = 114 > 104, исследуем следующее ребро, исключив в системе (18.14) уравнение уг = О и заменяя его последовательно уравнениями из (18.16). Замена уз = 0 вместо у? = 0 приводит к тому, что в первом уравне- нии (18.15) не выполняется условие по ограничению уд(у4 = 7). Замена у± = 0 вместо уу = 0 приводит к тому, что в первом же урав- нении (18.15) не выполняется условие по ограничению уз(уз = 9). Замена у$ = 0 вместо у7 = 0 приводит к формированию нулевой (четвертой) строки матрицы А. Замена уъ = 0 вместо у7 = 0 приводит к формированию нулевой (пятой) строки матрицы А. Замена ую = 0 вместо У7 = 0 приводит к тому, что в третьем уравне- нии (18.15) не выполняется условие по ограничению у 12(1/12 = 7). Замена уп = 0 вместо у? = 0 приводит к системе 0 0 0 0 1 0 0 0 0 0 0 1 0 1 0 0 /11\ 11 8 5 9 \9/ Находим Yi = (0,0,4,7,5,1,5,0,0,8,0,0). Т.к. Z(Yi) = 104 и это не мень- ше уже полученной оценки, исследуем следующее ребро, исключив в си- стеме (18.14) уравнение у% = 0 и заменяя его последовательно уравнени- ями из (18.16). Замена у3 = 0 вместо у» = 0 приводит к образованию нулевой (ше- стой) строки матрицы А. Замена У4 = 0 вместо ув = 0 приводит к тому, что в первом уравне- нии (18.15) не выполняется условие по ограничению у3(у3 = 9).
Замена у$ = 0 вместо у$ = 0 приводит к образованию нулевой (чет- вертой) строки матрицы А. Замена у§ = 0 вместо у% = 0 приводит к тому, что в пятом уравнении (18.15) не выполняется условие по ограничению 2/10 (^ю = 8). Замена 2/10 = 0 вместо у% = 0 приводит к тому, что в третьем уравне- нии (18.15) не выполняется условие по ограничению 3/12(^12 = 7). Замена 3/12 = 0 вместо 3/8 = 0 приводит к системе /1 1 0 0 0 0\ Уз /п\ 0 0 1 1 0 0 3/4 11 0 0 0 0 0 1 0 0 1 0 1 0 X 3/5 2/6 — 8 5 0 0 0 1 0 1 2/8 9 V 0 0 0 0 о) \2/ю/ Ее решение У! = (0,0,9,2,5,1,0,5,0,8,0,0) определяет значение Z(Yi) = 134 > 104. Продолжаем перебор по следующему ребру. Замена уз = 0 вместо 3/9 = 0 приводит к образованию нулевой (ше- стой) строки матрицы А. Замена 3/4 = 0 вместо 3/9 = 0 приводит к тому, что в первом уравне- нии (18.15) не выполняется условие по ограничению уз(уз = 9). Замена 2/5 = 0 вместо 3/9 = 0 приводит к тому, что во втором уравне- нии (18.15) не выполняется условие по ограничению ув(ув = 9). Замена 2/6 = 0 вместо 2/9=0 приводит к тому, что во втором же уравнении (18.15) не выполняется условие по ограничению уз(уз = 5). Замена 2/10 = 0 вместо 2/9 = 0 приводит к системе /1 1 0 0 0 0\ f Уз /11\ 0 0 110 0 У4 11 0 0 0 0 1 1 2/5 8 0 0 10 10 X 2/6 5 0 0 0 1 0 0 2/9 9 \1 0 0 0 0 о) \2/12? Ее решение У! = (0,0,9,2,2,9,0,0,3,0,0,5) определяет значение И(У1) = 119 > 104. Приступаем к анализу следующего ребра, исключая в (18.14) урав- нение 2/ц = 0 и заменяя его последовательно уравнениями из (18.16). Замена уз = 0 вместо 2/11 = 0 приводит к тому, что в первом уравне- нии (18.15) не выполняется условие по ограничению 2/4 (1/4 = 7). Замена 2/4 = 0 вместо 2/11 = 0 приводит к тому, что в первом уравне- нии (18.15) не выполняется условие по ограничению уз(уз = 9).
Замена у$ = 0 вместо уп = 0 приводит к тому, что во втором уравне- нии (18.15) не выполняется условие по ограничению 2/6 (2/6 = 9). Замена з/6 = 0 вместо уп = 0 приводит к тому, что во втором же уравнении (18.15) не выполняется условие по ограничению у^Уь = 5). Замена y1Q = 0 вместо уп = 0 приводит к системе /1 1 0 0 0 0\ < 2/з /п\ 0 0 1 1 0 0 3/4 11 0 0 0 0 0 1 0 0 1 1 1 0 X 3/5 2/6 = 8 5 (18.17) 0 0 0 1 0 0 2/11 9 \1 0 0 0 1 о) \2/12> W Система не имеет решения, т. к. ранг матрицы системы не равен ран- гу расширенной матрицы. Примечание. В несложном примере это легко обнаружить: вторая строка матрицы равна сумме четвертой и пятой строк, что противоречит соотношению между соответствующими свободными членами, 9+5 /11. По-видимому, это говорит в пользу применения схемы Гаусса. В против- ном случае мы должны контролировать последовательно получаемые ре- шения на удовлетворение тем соотношениям, которые в его получении не участвовали. Так, из четвертого и пятого уравнений имеем у$ = 5, 2/6 = 9. Но в соответствии со вторым уравнением 2/5 + 3/6 = И. В то же время, совершая подстановку во второе уравнение, мы получаем нулевую левую часть, т.е. нулевую строку матрицы А, что опять говорит в пользу подстановок! Замена 2/12 = 0 вместо 2/11 = 0 приводит к системе /1 1 0 0 0 0\ 0 0 110 0 0 0 0 0 1 1 0 0 10 10 0 0 0 1 1 0 \1 0 0 0 0 1/ (2/з /11\ 2/4 11 X 2/5 8 2/6 5 2/ю 9 w Ее решение Yi = (0,0,4,7,5,6,0,0,0,3,5,0) определяет значение целевой функции Z(Yi) = 89 < 104. Полагаем Yq := Y\. Теперь мы должны перемещаться по ребрам из вновь найденной вершины в поисках вершины с еще меньшим значени- ем целевой функции. Придется перебрать до 6 х 6 = 36 вариантов такого перемещения. Однако, достигнув ответа задачи в [15], положимся на его правильность и прекратим рассмотрение примера.
18.1.3. О применении схемы Гаусса решения систем линей- ных уравнений в транспортной задаче Остался неясным вопрос: приходится ли в общем случае при реше- нии систем линейных уравнений для данной задачи пользоваться схемой Гаусса, или достаточно последовательно пользоваться простыми подста- новками? Подстановки мы легко выполняли в том случае, если в результате введения нулевых комбинаций у нас получались уравнения, содержащие в левой части единственную переменную. Если таких уравнений нет, то очевидна целесообразность применения схемы Гаусса. Тогда выясним, существует ли комбинация нулей, такая, при кото- рой в каждой строке А, с учетом неисключенной строки, остается не ме- нее двух единиц. Рассмотрим только п = 4 последних уравнений из (18.6): три по- следних уравнения из (18.7) и уравнение у± + у$ + 3/12 = 7. Их матрица имеет вид Т.е. она состоит из т матриц с единицами по главной диагонали. Что- бы в одной строке такой матрицы остались хотя бы две единицы, необ- ходимо оставить невычеркнутыми хотя бы два столбца. В другой стро- ке должны быть не вычеркнуты хотя бы два обязательно других столбца. Итого, для четырех строк примера должны остаться невычеркнутыми во- семь различных столбцов. Значит, вычеркнуть мы можем только четыре столбца (например, как выделено на изображении матрицы), а нам на- до положить равными нулю шесть переменных! Тем самым, на базе лишь этих «нижних» уравнений образуются не менее двух уравнений с един- ственной переменной в левой части. Т.к. произведение т х п растет значительно быстрее суммы т + п, то с ростом параметров задачи указанное свойство усугубляется. Следова- тельно, мы с полным основанием может рассчитывать на принцип под- становки, как мы и делали в примере. Однако программирование схемы Гаусса может оказаться не только менее трудоемко. Не следует забывать, что в процессе преобразования си- стемы уравнений и последовательного получения значений переменных оперативно устанавливается как неразрешимость или неоднозначность, так и отрицательное решение. Например, система (18.17) при реализации схемы Гаусса проходит следующие стадии преобразования.
1. Вычитание первой строки из последней и формирование разности на месте второй строки: /1 1 0 0 0 0\ < УЗ^ /п\ 0 -1 0 0 2 0 2/4 -2 0 0 1 1 0 0 х 2/5 11 0 0 0 0 1 1 2/6 8 0 0 1 0 0 0 2/и 5 \0 0 0 1 0 oj W V/ 2. Вычитание пятой строки из третьей и размещение разности на месте четвертой строки: /1 1 0 0 0 0\ <2/з \ /11\ 0 -1 0 0 1 0 1/4 -2 0 0 1 1 0 0 1/5 11 0 0 0 -1 0 0 1/6 -6 0 0 1 0 0 0 2/11 8 \0 0 0 1 0 W/ 3. Сложение шестой строки с пятой и расположение разности на ме- сте пятой строки: /1 1 0 0 0 0\ /1/3 \ /11\ 0 -1 0 0 1 0 2/4 -2 0 0 0 0 1 0 1 -1 0 0 0 0 X 2/5 2/6 = 11 -6 0 0 0 0 0 0 2/и 5 \0 0 0 0 1 V W Получение нулевой строки в матрице достаточно для заключения о непригодности решения (в данном случае оно не существует). ♦ ♦ ♦ Рассмотренная транспортная задача, без ограничения пропускной способности транспортных потоков, демонстрирует параллельный алго- ритм ее решения. Программа, одинаковая для всех процессоров много- процессорной ВС или станций локальной вычислительной сети, в основ- ной своей части реализует выборку очередного ребра, исходящего из пер- воначально найденной вершины многогранника решений. Вдоль него ищется смежная вершина с меньшим значением целевой функции. Про- цессор, нашедший такую вершину, производит замену ранее исследовав- шейся вершины и вынуждает все процессоры приступить к анализу ре- бер, исходящих из новой вершины. Так — до неудачного поиска вершины с меньшим значением целевой функции.
Использование в качестве источника загрузки процессоров общей уточняемой базы данных, в которой хранятся исследованные варианты поиска, позволяет выявлять еще не исследованные варианты и равномер- но распределять нагрузку между процессорами. 18.2. Транспортная задача с ограниченными пропускными способностями коммуникаций 18.2.1. Постановка задачи и планы решения Пусть dij — пропускная способность коммуникации (г, j), что поро- ждает ограничение Xij < dij (18.18) для всех г, j. Тогда важная в практическом отношении задача заключается в ми- нимизации (18.1) — целевой функции Z при ограничениях (18.2), (18.3), (18.4) и (18.18). Очевидно, что для разрешимости Т-задачи должны вы- полняться условия dij di, i = 1, (18.19) J=i m dij 3 = 1» t=l (18.20) Как видим, данную задачу тоже можно решать прямым перебором вершин R с учетом резко увеличившегося числа уравнений его границ: их число, с учетом линейной зависимости, составляет теперь n + m-l + 2(m х n). С учетом границ на основе условий неотрицательности реше- ния, общее число испытываемых систем линейных уравнений составит х п—(тпЧ-п—1) ^2(тпхп) Однако при этом переборе мы будем исследовать явно несовмести- мые варианты компоновки систем — а именно, варианты, включающие пары уравнений вида = 0 и = dij. Тогда поступим иначе. Сначала будем выбирать комбинации переменных, участвующих в формировании указанных систем линейных уравнений. Всех таких ком- бинаций будет C^xnПосле выбора очередной комбинации пе- ременных определим комбинацию их значений — 0 или значение про- пускной способности. Таких комбинаций для выбранного набора тхп- (тп + п) - 1 переменных будет 2mxn-(’n+n-1).
Таким образом, общее число испытываемых систем линейных урав- нений составит х 2тпхп“^тп+п“1\ Воспользуемся и здесь параллельным аналогом симплекс-метода, найдя первоначально некоторую вершину многогранника решений, а за- тем пытаясь «переместиться» в смежную вершину с меньшим значением целевой функции. Сделаем важное замечание. Будем считать, что если вдоль прямой, отрезком которой является исходящее из вершины L ребро, найдена смежная вершина М, то на этой же прямой, «в другую сторону» от L, нет смежных вершин. Те. одна прямая может связывать не более двух вер- шин многогранника решений. Предположим, что три вершины Af, L, N лежат на одной прямой. Т.к. L — вершина, то существует хотя бы еще од- но исходящее из нее ребро. Пусть оно соединяет L с вершиной К. Тогда построим плоскость, проходящую через три точки Af, АГ, К, т.е. через точ- ку К и прямую MN, которой принадлежит точка L. Плоскость поглотила как точку L, так и новое ребро, существование которого мы предположи- ли. Это означает, что если мы нашли смежную вершину «с одной сторо- ны» по прямой, отрезком которой является исходящее ребро, то искать смежную вершину «с другой стороны» по этой же прямой не следует. Этим предположением мы пользовались в предыдущем разделе, прекращая дальнейший поиск других смежных вершин вдоль прямой в случае, если одна такая вершина оказывается найденной. Здесь же это за- мечание, в частности, означает, что если мы нашли смежную данной вер- шину со значением х^ = 0 (xij = dk), то испытывать значение Xij = dk (xij = 0) не следует. Те., как и ранее, мы вдоль каждого исходящего ребра будем искать единственную смежную вершину. 18.2.2. Пример Введем, как и ранее, линейное множество переменных и сформули- руем задачу: Z = 2s/i + 3s/2 + 32/з + 22/4 + 2?/5 + yQ min при ограничениях У1 + У2 + Уз = 12 2/4 + 2/5 + 2/6 = Ю 2/1+2/4 = 7 (18.21) 2/2 + 2/5 = 7 2/з -Ь 2/6 = 8
и при условии о < У1 < 4,0 < У2 4,0 < Уз < 5,0 у4 4,0 < у5 < 4,0 < у6 < 3. (18.22) Сформируем ограничения каждой переменной: yi = min{12,7,4} = 4, аналогично уз = 4, у3 = 5, у4 = 4, уз = 4, ув = 3. Исключим из рас- смотрения последнее уравнение (18.21) и запишем уравнения всех потен- циальных граней на основе (18.22): У1 + У2 + Уз = 12 3/4 4-3/5 + 3/6 = Ю 3/1 + 3/4 = 7 3/2 + 3/5 = 7 yi = 0;yi =4 У2 = 0; У2 = 4 Уз = 0; уз = 5 У4 = 0; У4 = 4 У5 = 0;у5 = 4 Уб = 0; ув = 3 (18.23) (18.24) Начнем перебор систем по шесть граней в поисках координат одной из вершин многогранника решений. В каждой такой системе должны при- сутствовать все уравнения (18.23) и два уравнения с разными переменны- ми из (18.24). Для формирования первой системы уравнений пробуем добавить к (18.23) уравнение yi = 0. В результате в третьем уравнении не выполня- ется ограничение по у4(у4 = 4). Пробуем вариант yi = 4. Совершив подстановку, убеждаемся, что он не приводит к подобному противоречию. Полагаем у2 = 0. В первом уравнении не выполняется ограничение ПО уз(уз = 5). Полагаем уз = 4. Получаем и решаем систему уравнений 3/1 + 3/2 + З/з = 12 У4 + Уз + Уб = 10 У1 + У4 = 7 У2 + Уз = 7 3/1=4 У2 =4.
Находим Y = (4,4,4,3,3,4). Однако данная точка не является вершиной многогранника решений, т.к. у& = 4 противоречит условию (18.22). Испытываем уравнение уз = 0. В первом уравнении нарушается ограничение по yi + уг(У1 + № = 8 < 12). Испытываем уравнение уз = 5. Решаем систему уравнений 3/1 -Ь 3/2 + 2/з = 12 3/4 4-3/5 + 3/6 = 10 3/1 + 3/4 = 7 3/2 + 3/5 = 7 1/1 = 4 Уз = 5. Находим Уо = (4,3,5,3,4,3). Решение удовлетворяет условиям задачи, следовательно, найденная точка — вершина многогранника решений. Находим значение целевой функции Z(lo) = 49. На основе (18.23) и (18.24) выпишем уравнения всех граней, кото- рым удовлетворяет вершина 1о, т.е. все грани, образующие эту вершину: 3/1 + 3/2 + З/з = 12 1/4 + 1/5 + 1/6 = Ю У1 + 1/4 = 7 У2 + Уз = 7 1/1=4 Уз = 5 3/5 = 4 1/6 = 3. (18.25) Выбирая из (18.25) комбинации по пять уравнений (в каждую комби- нацию обязательно входят все уравнения (18.23)), мы формируем пря- мые, которым принадлежат ребра (принадлежащие или не принадлежа- щие многограннику допустимых решений), исходящие из вершины 1о- Решая совместно поочередно с другими гранями из (18.24) У1 = 0,У2 = 0,1/2 = 4,1/3 = 0,1/4 = 0,1/4 = 4,3/5 = 0,7/6 = о, (18.26) производим поиск смежной вершины. Нам необходима вершина с мень- шим значением целевой функции Z.
Первая комбинация пяти уравнений составляет У1 + У2 + Уз = 12 У4 + Уз + Уб = 10 У1+ 2/4 = 7 (18.27) 2/2 + 2/5 = 7 2/1 =4. Решая последовательно с уравнениями из (18.26), находим первый непро- тиворечивый вариант для уз — 4. Находим точку Yi = (4,4,4,3,3,4), ко- торая ранее исследовалась и не является вершиной многогранника реше- ний. Использование значений уз = 0 и у4 = 0 приводит к невыполнению ограничений. Значение 2/4=4 приводит к противоречию в третьем уравнении, 4 + 4^7. Значения у$ = 0 и ув = 0 также приводят к невыполнению ограни- чений. Таким образом, исследованное предполагаемое ребро не принадле- жит многограннику решений. Следующая комбинация пяти уравнений на основе (18.25) составля- ет 2/14-2/2 4-2/3 = 12 2/4 + 2/5 + 2/6 = 10 2/1+2/4 = 7 (18.28) 2/2 + 2/5 = 7 2/з = 5. Решая последовательно с уравнениями (значениями) из (18.26), получаем для 2/2 = 4 точку Yi = (3,4,5,4,3,3). Т.к. все ограничения выполняются, Yi — вершина многогранника решений. Однако Z(Yi) = 50 > 49, — пе- реходим к исследованию следующего ребра. Оно определяется системой уравнений 2/1 + 2/2 + 2/з = 12 2/4 + 2/5 + 2/6 = Ю 2/1+2/4 = 7 (18.29) 2/2 + 2/5 = 7 2/5=4. Данная система решается последовательно с уравнениями из (18.26).
Только при значении 1/4 = 4 получаем не противоречивую систему и находим точку Y = (3,3,6,4,4,2), которая не является вершиной много- гранника решений, т.к. не выполняется условие уз 5. Те. исследован- ное предполагаемое ребро не принадлежит многограннику решений. Последнее предполагаемое ребро определяется системой уравнений У1 + Уз + Уз = 12 У4 + Уз + 3/6 = 10 3/14-3/4 = 7 3/2 4-3/5 = 7 Уб = 3. Она решается последовательно с уравнениями из (18.26). При 3/2 = 4 получаем непротиворечивую систему и находим Yi = (3,4,5,4,3,3), которая является смежной вершиной, т.к. удовлетворяет всем ограничениям и условиям. Однако Z(Yi) = 50 > 49. Т.к. все ребра, исходящие из Yo, исследованы, и вершина с меньшим значением целевой функции не найдена, вершина УЬ определяет оконча- тельное решение задачи. ♦ ♦ ♦ В рассмотренном примере ограничения пропускной способности столь существенны, что не допустили «нулевых» перевозок по одним ма- гистралям во избежание перегрузки других магистралей. Это характерно для исследования фрагмента транспортной сети, когда выделяются до- пустимые загрузки магистралей. В целом, ограничения могут быть менее жестки либо практически отсутствовать. Предлагаемый алгоритм, как и ранее, обеспечивает параллельную структуру программы, воспроизводящую SPMD-технологию. Предпо- лагается выполнение копий одной программы на разных процессорах ВС или рабочих станциях локальной сети. Обрабатываемая информация (здесь, например, — ребра многогранника решений) распределяется для обработки разными процессорами. Выбор обрабатываемой информации процессор производит самостоятельно, используя свой номер или имя в системе. Это предусмотрено в программе наряду с синхронизацией по об- щим данным, контролем выхода за пределы обрабатываемых массивов и др.
18.3. Параллельный алгоритм нахождения максимального потока в сети 18.3.1. Исходные построения Исследование потоков в сети — важная, всегда актуальная задача ис- следования операций. Она лежит в основе моделирования при проекти- ровании как транспортных сетей, так и сетей водоснабжения и канализа- ции. Известен ряд классических моделей (приводимых, например, в [15]) в этой области. Важнейшую роль играют модели, позволяющие опреде- лить «узкие» мести сети. Они определяют ее максимальную пропускную способность между выделенными пунктами, или, иначе говоря, ее ми- нимальное сечение. Это задача дискретного программирования, широко использующая перебор и относящаяся к задачам высокой сложности. При аналитическом моделировании сети используется известный [15] алгоритм Форда—Фалкерсона. Теория параллельного программирования способна предложить бо- лее простой алгоритм перебора. Его достоинством является параллелизм, который позволяет эффективно использовать многопроцессорные ВС и вычислительные комплексы на основе рабочих станций локальной сети. Возможен наиболее простой способ распараллеливания на основе при- менения SPMD-технологии. Пусть задана сеть (рис. 18.1). Дуги ее назовем каналами. Каналы пронумерованы. Направление потоков показано стрелками. Вершины — точки сопряжения каналов, вершина А — исток, вершина В — сток. Каж- дая дуга i сопровождается информацией об интересующих нас характе- ристиках потока, например, о пропускной способности di канала. В этом случае правомерен вопрос о максимальной пропускной способности се- ти, обусловленной минимальным сечением. Рис. 18.1. Сеть для оценки пропускной способности В терминах теории параллельного программирования (лекция 20) каждое сечение сети (например, сечение, пересекающее каналы 1,2,4,7)
является полным множеством взаимно независимых работ — каналов (ПМ- ВНК). Перебрав все такие множества и рассчитав для каждого суммар- ную пропускную способность, мы можем найти минимальное значение. Оно характеризует минимальное сечение, а следовательно, максималь- ный возможный поток в сети. В [3] приводится алгоритм перебора всех полных множеств взаим- но независимых работ. Усовершенствуем его, получая такие множества, упорядоченные по номерам каналов, и исключая повторное нахождение одних и тех же полных множеств. (В лекции 20 изложенные ниже преоб- разования будут рассмотрены глубже.) Построим треугольную матрицу следования S, отражающую граф сети (рис. 18.2а). Сложив каждую последующую строку с теми предыду- щими, которые соответствуют единичным элементам этой строки, полу- чим матрицу следования S с транзитивными связями (рис. 18.26). Транс- понируем матрицу S и объединим с ее начальным видом (рис. 18.2в). Иначе, отобразим S симметрично относительно главной диагонали. По- лучим матрицу S, отображающую как порядок следования, так и порядок предшествования каналов. Рис. 18.2. Полная матрица следования каналов: а — начальный вид, б—дополне- ние транзитивными связями, в — конечный вид Теперь матрица S полностью отражает взаимную независимость ка- налов. Например, если сложить логически строки 1, 2, 3, то получим строку, содержащую нули только в позициях 1, 2, 3. Тем самым мы по- лучим ПМВНК1,2,3. Множество полное, т.к. дополнительное сложение с любой другой строкой изменит состав нулей. Таким образом, наша задача заключается в том, чтобы испытать все варианты сложения групп строк так, чтобы нули в строке-результате ока- зывались в тех и только в тех позициях, которые соответствуют строкам-
слагаемым. Тогда эти строки определят очередное ПМВНК. Упорядоче- ние по номерам строк поможет нам избежать повторного получения ПМ- ВНК с другим порядком следования номеров каналов. 18.3.2. Алгоритм Пусть стек составляют нуль-единичные строки длины п (число ка- налов сети). Для каждой строки известно упорядоченное по номерам множество М каналов, логическая сумма строк которых в матрице S определила данную строку. Номер к последнего канала в этом множестве известно. Для каждой строки известен последний испытанный нулевой элемент. 1. Загружаем очередную г-ю, г = 1, ..., п-1, строку в стек. Полагаем М = {г}, & = г. 2. В строке-вершине стека находим очередной нуль, занимающий позицию j > г. Переходим к выполнению шага 4. 3. Если такого нуля нет, или все они испытаны, строку исключаем из стека. Если после этого стек исчерпан, выполняем шаг 1. В противном случае выполняем шаг 2. 4. Складываем логически строку из вершины стека со строкой j — формируем новую вершину стека. Номером канала j дополняем множе- ство каналов М, участвующих в формировании новой строки. Полагаем k = j. 5. Если в строке-вершине стека все нули соответствуют только всем каналам в М, то М — очередное найденное ПМВНК. Фиксируем это множество. В любом случае исключаем строку-вершину стека из стека. Выполняем шаг 2. 18.3.3. Пример Продолжим исследование приведенной выше сети. 1. Заносим в стек первую строку матрицы S. Находим первый нуль после обязательного нуля в первой позиции. Этот нуль указывает, что ка- налы 1 и 2 взаимно независимы (параллельны). Складываем логически строки, соответствующие каналам 1 и 2. Получаем новую строку в вер- шине стека *111111111 г । -п~т Она содержит нули правее позиции 2. Это говорит о том, что 1 и 2 не исчерпывают ПМВНК. 2. Находим первый нуль правее позиции 2 — нуль в позиции 3. Скла- дываем логически S2 = si V" 3". Получаем новую строку в вершине стека
и весь стек в виде $2 31 п 2” 1 1 1 1 1 1 1 1 1 1 1 1 1 Строка в вершине стека содержит нули только в тех позициях, кото- рые соответствуют образующим ее каналам 1, 2, 3. Это означает, что мы нашли ПМВНК {1,2,3}, т.е. некоторый разрез сети. Минимальный по- ток, проходящий через него, составляет di + d2 + ds. 3. Исключаем из стека строку s2 и в строке sj испытываем следу- ющий нуль правее позиции 2. Это нуль в позиции 4. Формируем новую вершину стека s3 = si V ”4”. | | 111 11111 Т~п~п~1 Строка «з содержит нули не только в позициях 1,2,4. Первый такой нуль правее позиции 4 — в позиции 7. Формируем новую вершину стека S4 = S3 V ” 7”. Стек принимает вид «участвующим» в ее формировании. Значит, найдено еще одно ПМВНК {1,2,4,7}. Оно определяет разрез сети с пропускной способностью di + </2 d4 + df. 4. Исключаем S4 из стека. Следующий испытываемый нуль в строке S3 занимает позицию 8. Формируем новую вершину стека s5 = s3 V ”8”. I 111 1111111 11111 Строка S5 содержит нули только в позициях 1,2,4,8. Следовательно, най- дено ПМВНК {1,2,4,8} с пропускной способностью dj -I- d2 + d4 4- d8. 5. Исключаем sg из стека. Находим, что в S3 все нули исследованы. Исключаем S3 из стека. В si следующий нуль, подлежащий испытанию, занимает позицию 7. Формируем новую вершину стека — строку s6 = si V”7”. I I I 1 I I 1 I 1 I I 1 I 1 I 1 I Строка sg не содержит нулей правее позиции 7. Исключаем sg из стека.
6. Следующий испытываемый нуль в $i занимает позицию 8. Нахо- дим $7 = $i V ”8” ^7 | | | 1 | | 1 | 1 | 1 | | 1 | 1 | Строка также не содержит нулей правее позиции 8. Исключаем ее из стека. Все нули строки si испытаны. Исключаем si из стека. В стеке оста- ется лишь строка «1». 7. Следующий испытываемый нуль в строке «1» занимает позицию 3. Формируем новую вершину стека — строку з8 = ” 1” V ”3” а8 I I I I 1 I 1 I 1 I 1 гиттл Строка eg не содержит нулей правее позиции 3. Исключаем ее из стека. 8. Следующий нуль в первой строке занимает позицию 4. Формиру- ем новую вершину стека — строку ” 1” V ”4” », | | 111 11111 тптп Строка содержит нули не только в позициях 1 и 4. Первый же «дополни- тельный» нуль занимает позицию 2. Это говорит о повторном формиро- вании уже сформированных ПМВНК. Исключаем строку из стека. 9. Следующий испытываемый нуль первой строки занимает пози- цию 6. Формируем зю = ” 1” V ”6” 1 I 1 I 1 I 1 I 1 I I I 1 1 1 1 I Строка не содержит «дополнительных» нулей до позиции 6. Первый ис- пытываемый нуль занимает позицию 7. Формируем новую вершину стека зц = «io V" 7", а стек принимает вид 811 810 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 Строка зц содержит нули только в позициях каналов, участвующих в ее формировании. Найдено очередное ПМВНК {1,6,7} с потоком di + cfe + dr. 10. Исключаем зц из стека. Следующий испытываемый нуль в зю занимает позицию 8. Формируем S12 = зю V ”8”. | | 1 | 1 | 1 | 1 | | 1 | | 1 | 1 | Строка определяет очередное ПМВНК {1,6,8} с потоком di + de + ds-
11. Исключаем S12 из стека. Строка зю испытана полностью. Ис- ключаем ее из стека. Следующий испытываемый нуль в строке «1» зани- мает позицию 7. Формируем строку su = ” 1” V ”7” 11 нт 11 Она не содержит «дополнительные» нули правее позиции 7. Исключаем строку из стека. 12. Испытание нуля в позиции 8 первой строки приводит к тому же результату. 13. Все комбинации каналов с участием канала 1 исчерпаны. Выби- раем следующий канал. Те. загружаем в стек вторую строку матрицы S. Первый нуль в позиции, не меньшей 2, занимает позицию 3. Формируем новую вершину стека з44 — ”2” V ”3” ^14 | | | | 1 | | 1 | 1 | 1 | | 1 | 14. Первый нуль правее позиции 3 в строке si4 занимает позицию 5. Формируем sis = «14 V ”5” 315 111 I 111 11111ТПТ1 Строка содержит нули только в позициях 2,3,5. Это определяет ПМВНК {2,3,5} с потоком Й2 + + ^5- 15. Следующий нуль в строке si4 занимает позицию 9. Формируем ^16 = 514 V ”9” 111 I 11111111111 111 Строка содержит нули только в позициях 2,3,9. Это определяет ПМВНК {2, 3, 9} С ПОТОКОМ С?2 + + dg. 16. Формируем 317 = ”2” V ”4” ».71 I 111 I 111 тттп Первый «дополнительный» нуль занимает позицию 5. Формируем si8 = sit V ”5” 318111 111 I 111 гтлл Строка sis содержит нули не только в позициях 2, 4, 5. Первый «допол- нительный» нуль занимает позицию 7. Формируем sig = si8 V ”7 — ”2” V ”4” V ”5” V ”7” I 1 I I 1 I I I I I I Ц I I 1 I
Строка содержит нули только в позициях 2, 4, 5, 7, что определяет ПМ- ВНК {2,4,5,7} с потоком d2 + cU + 17. Следующий (последний) «дополнительный» нуль строки $18 за- нимает позицию 8. Формируем s20 = $18 V ”8” 111 I i I I 1111ТТТГП и находим ПМВНК {2,4,5,8} с потоком di + </4 + ds + ds. 18. Следующий нуль в строке s17 занимает позицию 7. Формируем S21=S17V”7” 111111111 |тгт Единственный нуль правее позиции 7 занимает позицию 9. Формируем S22 = S21V”9” s22|ii iii ri11 iwm и получаем следующее ПМВНК {2,4,7,9} с потоком </2 + </4 + dr + dg. 19. Следующий нуль в строке sn занимает позицию 8. Формируем $23 = s17 V ”8” ^2з| I |1| I 1111ГТТЛ Единственный «дополнительный» нуль, правее позиции 8, занимает по- зицию 9. Формируем s24 = з2з v ”9” ^|i| |i| |1|1|тттТЛ Т.к. позиции нулей совпадают с позициями всех каналов, участвующих в комбинации, получаем ПМВНК {2,4,8,9}, определяющее разрез с пото- ком </2 + </4-1- d& + dg. 20. Последний «дополнительный» нуль в $i7 занимает позицию 9. Формируем s25 = si? V ”9” ^25111 111 1111'Г..Г~ГТГ] Строка содержит нули не только в позициях 2, 4, 9. Однако все «допол- нительные» нули занимают позиции левее позиции 9. Это говорит о по- вторном нахождении ПМВНК. 21. Возвращаемся к анализу второй строки матрицы S. Следующий нуль этой строки занимает позицию 5. Формируем $2б = ”2” V ”5” 111111111 ттпт Первый «дополнительный» нуль правее позиции 5 занимает позицию 7. Формируем s27 = s26 V ”7” «27 | 1 | | 1 | | | 1 | ГППЛ
Наличие «дополнительных» нулей только левее позиции 7 говорит о по- вторном нахождении ПМВНК. 22. Второй, последний, «дополнительный» нуль в строке «26, правее позиции 5, занимает позицию 8. Его анализ также приводит к повторному нахождению ПМВНК. 23. Следующий нуль второй строки матрицы S занимает позицию 7. Формируем s28 = ”2” V ”7” I I I 1 I I I 1 I I 1 I I 1 1 Первый «дополнительный» нуль в этой строке, правее позиции 7, зани- мает ПОЗИЦИЮ 9. Формируем S29 = s28 V ”9” I И I 1 I I 1 I 1 I I 1 I I 1 I Строка не содержит нули правее позиции 9, но содержит нули левее этой позиции. Это значит, что мы на пути повторного формирования уже най- денного ПМВНК ({2,4,7,9}). 24. Следующий нуль второй строки S занимает позицию 8. Форми- руем «30 = ”2” V ”8” ззо| | |1| | |1|1ГТТП Нуль в позиции 9 — правее позиции 8. Однако ситуация аналогична рас- смотренной на шаге 23. 25. Вторая строка исчерпана. Переходим к анализу третьей строки матрицы S. Правее третьей позиции в этой строке есть нуль в позиции 5. Формируем «31 = ”3” V ”5” «31 I 1 I I I 1 I I 1 I 1 I 1 I 1 I 1 I Строка не содержит «дополнительных» нулей правее позиции 5, хотя со- держит нули не только в позициях 3 и 5. Значит, мы не получим новых ПМВНК. 26. Следующий (последний) нуль в третьей строке занимает пози- цию 9. Формируем $32 = ”3” V ”9” «32 | 1 | I | 1 | 1 | 1 | 1 | | 1 | 1 | Исключаем строку из стека, т.к. она имеет нули только левее позиции 9. 27. Анализируем четвертую строку и убеждаемся, что новых ПМ- ВНК мы не получим. 28. Анализируем пятую строку, Она содержит нули правее пятой по- зиции - в позициях 6,7, 8,10. Формируем S33 = ”5” V ”6” .331 и 111111 | 1ТТТГП
Первый «дополнительный» нуль, правее позиции 6, занимает позицию 7. Формируем «34 = «зз V ”7” »34 | 1 | 1 | 1 | 1 | | | | 1 | 1 | 1 | Строка содержит нули только в позициях 5, 6, 7. Найдено ПМВНК {5,6,7} с потоком d5 + d6 + d7. 29. Следующий нуль — в позиции 8. Формируем S35 = S33 V ”8” «35 | 1 | 1 | 1 | 1 | | | 1 | | 1 | 1 | Строка содержит нули только в позициях 5, 6, 8, что соответствует ПМ- ВНК {5,6,8} с потоком d5 + de + da- 30. Анализ позиций 7 и 8 пятой строки приводит к повторному на- хождению ПМВНК. 31. Последний «дополнительный» нуль пятой строки занимает по- зицию 10. Формируем S36 = ”5” V ”10” «36 | 1 | 1 | 1 | 1 | I 1 I 1 I 1 I 1 I I Строка содержит нули в позициях 5 и 10. Найдено очередное ПМВНК {5,10} с потоком ds + dw 32. Переходим к анализу шестой строки матрицы S. Она содержит нули правее шестой позиции в позициях 7,8,9. Формируем S37 = ” 6” V” 7” I 1 1 I 1 I 1 1 I I I 1 I I 1 I Правее седьмой позиции «дополнительный» нуль занимает позицию 9. Формируем азе = S37 v ”9” «38 | 1 | 1 | 1 | 1 | 1 I I | 1 I | 1 | Строка содержит нули в позициях 6,7,9. Найдено ПМВНК {6,7,9} с по- током ds + d7 + dg. 33. Формируем S39 = ”6” V ”8” «39 I |1|1|1| I 11ГI ГТ~1 Правее восьмой позиции «дополнительный» нуль занимает позицию 9. Как и на предыдущем шаге, находим следующее ПМВНК {6,8,9} с пото- ком de + dg + dg. 34. Можно убедиться в том, что анализ седьмой и восьмой строк не приведет к получению новых ПМВНК.
35. Девятая строка содержит единственный нуль правее позиции 9 - в позиции 10. Формируем S40 = ”9” V ”10” 340|1|1|1|1|1|1|1|1| | | Найдено последнее ПМВНК {9,10} с потоком dg + d10- 18.3.4. Параллельное выполнение алгоритма Предпочтительным способом распараллеливания здесь является распараллеливание по информации. Наиболее простая реализация его может быть основана на распределении между процессорами или стан- циями локальной сети строк матрицы S. И здесь самую простую реализа- цию предлагает принцип SPMD — «одна программа — много потоков дан- ных». Однако, как видно из примера, объем работ, связанных с разными строками, может быть весьма различным. Например, мы долго обраба- тывали первую строку и быстро справились с такими строками, как 7, 8, 9. Значит, жесткое априорное распределение строк нежелательно. Оно обеспечивает неравномерную загрузку процессоров. Необходимо произ- водить загрузку процессоров динамически, по мере их освобождения. Здесь может быть эффективен тот же принцип, который использу- ется при обработке баз данных, баз знаний и списковых структур (лек- ции 12—15). Его реализация может быть следующей. В соответствии с SPMD-технологией каждый процессор (станция локальной сети), участвующий в счете, обладает своим номером и знает количество процессоров. Множество строк матрицы S также упорядоче- но. Первоначально первый процессор выбирает для обработки и метит первую строку, второй — вторую и т.д. По мере освобождения каждый процессор обращается к матрице S и выбирает первую из неотмеченных строк. Для согласованного обращения к S организуется синхронизация с помощью семафора методом взаимно- го исключения. ♦ ♦ ♦ Сеть, в т. ч. транспортная, представляет собой параллельную струк- туру. Методы параллельного программирования предлагают эффектив- ные средства для исследования сетей. Достоинством их является то, что сами эти методы допускают весьма простые способы распараллеливания. Это очень важно при обработке сетей большой размерности. Использо- вание SPMD- технологии способствует эффективному применению мно- гопроцессорных систем — внешних устройств персонального компьюте- ра или множества станций локальной сети для решения задач высокой сложности.
Рассмотренные параллельные методы решения некоторых задач на транспортных сетях ориентированы на «прорыв в размерности», на вы- ход на большие размерности задач, на задачи высокой, даже — экспо- ненциальной сложности. Только параллельные вычислительные системы могут решать такие задачи. Здесь очень важна концепция перспектив- ных вычислительных средств: только ли разработка супер-ЭВМ призвана удовлетворить высокие требования по производительности? Не находят- ся ли на наших столах распределенные вычислительные комплексы РС, объединенные в локальные сети на основе современных, уже достаточно оперативных сетевых технологий? Именно для ответа на эти вопросы и должны критически перерабатываться и вновь создаваться параллельные алгоритмы решения сложных задач.
Лекция 19. Некоторые задачи нелинейного программирования и нахождение опорного плана для задачи линейного программирования Предлагаются параллельные метода решения задач нелинейного про- граммирования с линейными ограничениями, произвольной «плоской» зада- чи нелинейного программирования, а также метод нахождения опорного пла- на для задачи линейного программирования на основе анализа нормалей к поверхности многогранника допустимых решений. Ключевые слова: многогранник допустимых решений, область зада- ния функции, экстремум функции, метод «сеток», опорный план, внешняя точка, нормаль. 19.1. Параллельное решение задач НП при линейных ограничениях Пусть решается задача /(а?1,...,жп) —> max при ограничениях д1(х1,...,хп) О 92(Х1,...,Хп) > О 9т(®1, • • •, Х^п) О и при условиях: gi — линейны, xt 0, i = 1,..., т. Предположим, что гиперплоскости gi, i = 1,..., т, возможно, совмест- но с координатными плоскостями, образуют в n-мерном пространстве выпуклый многогранник R допустимых решений, т.е. область задания функции f. Определим, какиранее, все вершины {Xi,..., Xjv}, Xi — {х®,..., х^), I = этого многогранника в результате решения С"+п систем п ли-
нейных уравнений на основе всех заданных и возможных его граней £1 = О 9т = О Xi = О хп = 0. Тогда множество точек X = (rri, Х2, • • •, хп) этого многогранника описы- вается какX = kiXi, где 0 ki 1, = 1. Или: N—1 х\ = fcirr^ + fc2#i2) + — + kN-ix^~1} + (1 - ki)x^ i=i < хп = kix^ + к2х<Р + ... + kN_ixVr~1'> + (1 - 52 kt)x^- < i=i а целевая функция на многограннике R становится функцией параметров f(x!,...,xn) = Г(кг,. . . ,fcjv-l). Т.е., задавая разные значения fci, &2,•• •, kN-i так, чтобы выполня- ла-1 лось условие 0 ki 1, так же как и для = 1 - ^2 fcj 0, мы можем i=i организовать перебор всех точек R с некоторым шагом h по всем пара- метрам. Этим мы накладываем TV-мерную «сетку» на многогранник R. В каждой точке-узле этой сетки мы будем находить значение функции /* и выберем максимальное. Шаг h должен быть выбран так, чтобы обес- печить необходимую точность решения задачи. Распараллеливание возможно на двух этапах решения: 1. Распределение систем линейных уравнений между процессорами для нахождения всех вершин многогранника допустимых решений. (Эк- вивалентно прямому перебору при решении задачи линейного програм- мирования.) 2. Распределение между процессорами узлов сетки — точек много- гранника допустимых решений для нахождения и анализа в них значений целевой функции. Метод допускает развитие и совершенствование. Например, движение в сторону возрастания функции f может быть направленным, определяемым с помощью конечно-разностных значе- ний частных производных по параметрам ki в точке текущего анализа
функции /. Это вариант так называемого градиентного метода. Эти же значения частных производных могут определять переменный шаг h. Пример (рис. 19.1) /(ж, у) = х2 + у max при ограничениях -х - 2у + 12 О -Зх - у + 21 О и при условии х, у 0. Рис. 19.1. Нелинейная задача с линейными ограничениями Решая попарно уравнения границ, находим Xi = (0,0), Х2 = (0,6), Х3 = (6,3),х4 = (7,0). Уравнение многогранника R: х = ki • 0 + к2 • 0 + кз • 6 + fc4 • 7 у = fci • 0 + к2 • 6 + кз • 3 + fc4 • 0 4 0 к1,к2,кз,к4 1, ki = 1, г=1 3 f(x, у) = Г(к!, к2, к3), ki = 1 - 52 ki. г=1 Пусть h — шаг изменения каждого ki для получения испытываемой
точки X многогранника R. Будем перебирать точки fci = 0, fc2 = 0, &з = 0 (тем самым к± = 1); fci = Л, fc2 = 0, &з = 0 (йд = 1 — Л); fci = Л, к2 = h, кз = 0 (йд = 1 — 2/г); fci = /г, fc2 = Л, кз = h (fc4 = 1 — З/г); fci = 2h, к? = h,k3 = h (k± = 1 — 4/z); Однако нам надо следить, чтобы величина fc4 = 1 - fci - fc2 - Лз оставалась неотрицательной. Выполнив такой перебор, например, для h = 0,1, получим max f(x., у) = /* (fci = 0, fc2 = О, fc3 = 0, fc4 = 1) = /(7,0) = 49. 19.2. Параллельное решение «плоской» задачи НП Постановка задачи: f(x,y) max при ограничениях 91 (х, у) > 0 • ••9т(х,у) 0 Могут быть условия х, у 0. Но они могут и отсутствовать, допуская по- иск решения также в области отрицательных значений переменных. Предположим: 1. Все ограничения разрешимы относительно всех переменных. 2. Ограничения и, возможно, условия неотрицательности решения образуют область R, ограниченную со всех сторон (рис. 19.2). Предположим, как на рисунке, т = 4. (Одно ограничение, х-с^0, линейно.) Решая попарно все равенства (границы R), полученные по огра- ничениям, и проверяя точки пересечения на удовлетворение остальным неравенствам-ограничениям, найдём все вершины, в нашем примере — {А, В, С, К}. Координаты найденных вершин дают начальную информацию (пря- моугольник показан пунктиром) о «минимальном» прямоугольнике D, включающем в себя область R. Однако некоторые кривые, ограничива- ющие R, сопряженные с двумя вершинами, могут, имея экстремум по
Рис. 19.2. «Плоская» нелинейная задача оптимизации с нелинейными ограниче- ниями некоторым координатам между ними, «выходить» из этого прямоуголь- ника. Точки такого выхода надо найти, проверить на принадлежность R, если они существуют, и расширить D. Для каждого i = 1,..., т, разрешим gi относительно х. Получим (возможно, неоднозначную) функцию X = <Pi(y). Найдем множество экстремумов этой функции, решив уравнение х = >/(у) = 0. Для каждой точки экстремума проверяем, принадлежит ли она об- ласти R, т.е. выполняются ли для нее все ограничения. Такой точкой на рисунке является точка Е. Теперь то же самое надо проделать, разрешив все функции gi отно- сительно у, У = <к(х) Найдем множество экстремумов этой функции, удовлетворяющих всем ограничениям. На рисунке это точки G, F, М, L. Теперь мы нашли все точки, которые помогут нам очертить прямо- угольник D, полностью вмещающий область R — область возможных ре- шений задачи. Границы этого прямоугольника определяются минималь- ными и максимальными значениями координат всех найденных точек —
точек пересечения кривых ограничений и точек экстремумов этих кри- вых, удовлетворяющих всем ограничениям задачи. В нашем примере пусть А = (ха, уа), В = (хв,ув) и т.д. Тогда Я!£>1 = Т01в{ха,Хв,Хс,Хс,Хр,Хе,Хм,Хк,Хе} = ХА = Хв, xD2 = тах{х A, xb,xg,xc,xf,ХЕ,Хм,хк,хь} = хЕ, У di = гат.{уА,Ув,Ус,Ус,УР,Ум,УЕ,Ук,Уь} = Ук, УО2 - тах{уА, у в, Ус, Ус, Ур,Ум,Уе,Ук,Уь} = Ус- Воспользуемся методом «сеток». Покроем область D сеткой с шагом Да: по х и Ду по у. Испытывая каждый узел на принадлежность R, и находя в нем значение f(x, у), выберем максимальное. Допускается обобщение метода решения для произвольной размер- ности. 19.3. Метод нормалей нахождения опорного плана для решения задачи линейного программирования 19.3.1. Предпосылки метода Ниже предлагается метод нахождения вершины многогранника до- пустимых решений задачи линейного программирования для начала про- цесса параллельного поиска оптимального решения. В основе метода ле- жит предположение, что для некоторых вершин образующие их грани имеют нормали, которые составляют с каждой из этих нормалей мини- мальные углы. При обобщении на произвольное пространство обсужда- ется возможность использования косинусов углов между нормалями в ка- честве функции меры. Параллельный алгоритм решения задачи линейного программиро- вания (ЛП) ориентирован на применение SPMD-технологии («одна про- грамма — много потоков данных»), наиболее эффективной при организа- ции распределенных (в локальной вычислительной сети) и параллельных (в многопроцессорной вычислительной системе) вычислений. Метод ба- зируется на отказе от традиционного ввода свободных переменных. По- иск решения производится непосредственно в n-мерном пространстве, что сохраняет наглядность «физического смысла» задачи. Суть метода в следующем. Первоначально должна быть известна некоторая вершина многогранника допустимых решений вместе с систе- мой уравнений границ на основе ограничений и возможных границ — координатных плоскостей, которым эта вершина удовлетворяет. Эта вер- шина определяет начальный или опорный план. Далее с помощью мно-
жества процессоров вычислительной системы или рабочих станций вы- числительной сети производится одновременное и независимое смеще- ние вдоль ребер, исходящих из вершины, для поиска одной или более вершин с «лучшим» (большим или меньшим, в зависимости от постав- ленной задачи) значением целевой функции. Процессоры переключают- ся на новую вершину, и процесс продолжается до решения задачи. Нетрадиционность этого подхода обусловлена высокой размерно- стью задачи и необходимостью распараллеливания. Распараллеливание требует, в свою очередь, пересмотра алгоритмов, ранее ориентированных только на сокращение количества операций и не обеспечивающих эф- фективную, одновременную загрузку оборудования, тем более — локаль- ной вычислительной сети. В лекции 17 даются рекомендации по параллельному нахождению опорного плана на основе прямого перебора. На задачах малой размер- ности, рассматриваемых в качестве примеров, это вполне допустимо, од- нако практическая задача размерности п = 36 и с числом ограничений т = 18 привела к недопустимому времени счета. Компьютеры стали бы искать опорный план не один месяц, что связано с экспоненциальной сложностью такого перебора. Таким образом, необходимо найти «быстрый» параллельный алго- ритм нахождения опорного плана. Здесь можно было бы воспользоваться одним из известных «тради- ционных» методов. Однако желание максимально использовать «физи- ческий смысл» задачи и потому остаться в n-мерном пространстве су- лит выявление замечательных свойств выпуклого многогранника допу- стимых решений, которые скрыты при традиционном абстрагировании. 19.3.2. Принцип внешней точки Итак, поставлена задача Л П Z = ci^i + С2Х2 + ... + СпХп —> шах при ограничениях Q1 = + ... + ainxn bi • • • Qm — ат1^1 + ... + G-mn^n Ът и при условии xi 0,..., хп 0. Если в ограничениях заменить знак «^» на «=», получим множество дей- ствительных (т.е. действительно являющихся) границ выпуклого много- гранника R допустимых решений. Однако в общем случае часть его гра- ниц определяется условиями, также записанными в виде равенств. Это — возможные границы многогранника.
Таким образом, грани многогранника R формируются на основе множества т действительных и п возможных границ: Q1 = аи^1 + • • • + а>\п%п ~ bi = О Qm = ат1^1 + • • • + CLmn^n Ьт =0 flQ O'i (1>.2) Qm+i =£1=0 Ят+п = %n = 0. Здесь обозначение qi используется для названия соответствующих плос- костей и ограничений. Тогда принципиально возможен выбор комбинаций по п уравнений из (19.2) и их совместное решение. Если решение существует, оно не от- рицательно и удовлетворяет всем не использованным при этом ограни- чениям (19.1), то это решение определяет координаты одной из вершин многогранника R. Однако, как говорилось выше, нет гарантированных оценок времени получения первой вершины, а полный перебор С”+п си- стем п уравнений обладает экспоненциальной сложностью. Локализуем поиск вершины многогранника R, освободившись от некоторых «лишних» уравнений из (19.2). Установим направление роста целевой функции, записав ее диффе- ренциал: dZ = cidxi + C2dx2 + ... + Cndxn. Сообщив одинаковое положительное приращение dx всем переменным, получим dZ = (ci + С2 + ... + Cn)dx. Следовательно, сумма коэффициентов целевой функции (в отличие от более точной оценки с помощью градиента) определяет направление ее роста: если 12 О 0, (19.3) i Z растет, удаляясь от начала координат, если 1><°, (19.4) i Z растет, приближаясь к началу координат. Случай 53 е» = Оможет быть причислен какк(19.3),такик(19.4).
Выберем точку начала координат 0(0,0,..., 0). Если все ограниче- ния (19.1) в ней выполняются, эта точка является вершиной многогран- ника R, и наш поиск хотя бы одной вершины может быть успешно закон- чен. В противном случае будем считать эту точку внешней точкой, удоб- ной для рассмотрения многогранника R «со стороны». А именно, выделим множество {qtJ } тех плоскостей в (19.2), кото- рые являются действительными гранями многогранника R и для которых в точке О выполняются ограничения задачи (19.1). Дополним это мно- жество плоскостей п координатными плоскостями. Назовем образован- ную поверхность верхней поверхностью Q верхи выпуклого многогранника R допустимых решений задачи ЛП. Координатные плоскости включают- ся в рассмотрение, для того чтобы можно было исследовать вершины R, принадлежащие этим плоскостям. Аналогично, остальные плоскости (грани), для которых в точке О не выполняются ограничения (19.1), дополненные координатными плоско- стями, образуют нижнюю поверхность QHKiai многогранника R. Очевидно, если сумма коэффициентов целевой функции положи- тельна, то есть Z растет, удаляясь от точки О, то решение задачи ЛП сле- дует искать среди вершин многогранника R на его верхней поверхности. В противном случае — на нижней поверхности. Проследим на приведенном в лекции 17 примере рассматриваемые здесь построения. Для этого повторим постановку и дополним графиче- скую интерпретацию представленной там задачи. Задача формулировалась следующим образом: Z = 26ж + 20у + 21г —► max при ограничениях 91 = 2х + 7у - 76г + 222 О 92 = —8® + 9у — 8г + 64 > О 9з = — 8х + 13у — 24г + 96 > О 94 = —х - бу - г + 70 > О 95 = — 2х — 7у — 2г 4- 90 > 0 96 = 33а: + Зу + 22г - 165 > 0 (19.5) и при условии неотрицательности переменных, о чем в дальнейшем мож- но не упоминать. Так как сумма коэффициентов целевой функции положительна, то нас будет интересовать верхняя поверхность многогранника R допусти- мых решений. При х = у = z = 0 справедливы неравенства для ,..., g5.
Следовательно, Qверхи = {Ql, Q2, Q3, Q4, Q5, Q7, Q8, Яэ}- (19.6) На рис. 19.3 ребра верхней поверхности выделены. Координаты точек вы- браны при построении примера и приведены для контроля. Считаем их неизвестными; их необходимо получить. Рис. 19.3. Многогранник допустимых решений с выделенными рёбрами В данном случае мы получили малый выигрыш, исключив из рас- смотрения единственную грань с образуемыми ею вершинами. Однако в произвольном случае форма R может быть разнообразной, и подобное сокращение рассматриваемых ограничений, то есть связанных с ними граней, может быть существенным. Да и сейчас мы видим, что число вер- шин, среди которых необходим поиск, весьма сократилось — до шести отмеченных на рисунке. 19.3.3. Основные предположения Определение. Назовем плоскость в n-мерном пространстве образую- щей вершины А выпуклого многогранника R допустимых решений зада- чи ЛП, если ее уравнение входит в состав системы п линейных уравнений границ многогранника R, решением которой является точка А.
В общем случае каждая вершина многогранника R имеет не менее п образующих плоскостей. Часть из них может совпадать с координатными плоскостями. Изменим обозначение плоскостей-граней, образующих исследуе- мую далее верхнюю (нижнюю) поверхность многогранника R: £?верхн(£?нижн) = {Р1»Р2? • • • • • • >Рг+п}- (19.7) Здесь pj = qij9 j = 1, ... ,r, — действительные плоскости- грани, pr+k = qm+k, k = — координатные плоскости. Сменим обозначение и коэффициентов уравнений плоскостей, вы- делив совокупность всех граней многогранника R — действительных и возможных, образующих исследуемую (верхнюю или нижнюю) поверх- ность: Pi = dnXr + di2^2 + ... + dlnxn = О Р2 = Н" <^22^2 + • • • + d2nXn = О Pr = drlXi + dr2X2 + • • • + drnXn — О (19.8) Pr+1 = Xi = О Pr+n — Xn — 0. Найдем координаты единичных векторов нормалей Nj,j = 1,..., п + т, к плоскостям (19.8): Nj = dji dj2 Sj Sj (19.9) где SJ = У4+^2 + ... + ^п. (19.10) Тогда косинус угла между нормалями к двум граням верхней (нижней) поверхности R вычисляется как результат скалярного произведения еди- ничных векторов нормалей: cos(Nj, Ni) = (djidii +... + djndtn). (19.11) Выскажем гипотезу, которая является основой теоремы существования: Если плоскости pj и рд совместно не являются образующими какой- либо вершины верхней (нижней) поверхности выпуклого многогранника R допустимых решений задачи ЛП, а их нормали Nj и Nq образуют «угол» а, то существует плоскость pi с нормалью Nt, совместно с pj являющаяся
образующей некоторой вершины этой же поверхности и такая, что «угол» /3 между нормалями Nj и Ni меньше угла a (J3 < а). Слово «угол» берем в кавычки в связи с тем, что любой угол измеря- ется в плоскости и видеть его мы можем в двух- и трехмерном простран- стве. В общем случае n-мерного пространства мы можем судить о вели- чине угла по его косинусу, который отыскивается как результат скаляр- ного произведения единичных векторов. Отсюда следует, что геометриче- ски мы можем продемонстрировать верность гипотезы в двух- и трехмер- ном пространстве. В общем же случае доказательство ее справедливости должно быть аналитическим. Итак, поясним высказанное предположение «плоским» рис. 19.4. Рис. 19.4. Соотношение углов между нормалями смежных граней Выделим произвольную вершину А многогранника R. Она «окруже- на» образующими ее гранями (на плоскости — ребрами). Пустьpj — одна из них. Любая грань, не являющаяся образующей вершины А, например — грань (ребро) рд, добавляет угол излома поверхности в угол наклона /3 ее нормали Ng. Точка пересечения р3 и рд находится вне R. Тогда долж- на существовать образующая эту же вершину грань (ребро) р/, нормаль к которой Ni имеет меньший угол наклона, (3 < а. Представим (рис. 19.5) аналогичную картину в трехмерном про- странстве. Пусть р2 и рз не являются смежными на данной поверхности много- гранника R, то есть не имеют общего ребра и, следовательно, совместно не являются образующими какой-либо вершины. Тогда существует одна
Рис. 19.5. Соотношение углов между нормалями в трёхмерном пространстве или более разделяющих их граней, здесь, например — грань pi, нормаль к которой N± образует с нормалью N2 угол /3 меньший угла а — угла между нормалями TV2 и ^з. Минуя формальное и строгое доказательство, продолжим поясне- ние гипотезы на качественном уровне. Грани pi и р2 являются образующими двух вершин А и В. Для га- рантии смежности этих граней, то есть того, что они совместно являются образующими какой-то вершины, можно в основу выбора такой верши- ны положить минимальный угол между нормалями к ним. То есть будем считать, что если для фиксированной грани pj найден минимальный из углов между нормалью Nj к этой грани и нормалями ко всем другим гра- ням этой же поверхности, — угол между нормалью Nj и нормалью Ni, то две грани р3 и pi совместно являются образующими хотя бы одной вер- шины этой поверхности. Чтобы найти третью грань — третье уравнение для нахождения точ- ки в трехмерном пространстве, следует искать такую грань (например, р± на рис. 19.5), между нормалью к которой и нормалями М и TV2 углы так- же меньше тех углов, которые М и N2 образуют с нормалями несмежных граней. Такая грань будет смежной и pi, и р2. Теорема. Пусть р — произвольная грань верхней (нижней) поверхно- сти многогранника R допустимых решений задачи ЛП. Составим неубы- вающую последовательность углов между нормалью к этой грани и нор-
малями всех граней этой же поверхности (включая нормаль к этой же грани; этот угол равен нулю). Первые п минимальных отличных от ну- ля углов этой последовательности указывают на п граней, являющихся образующими некоторой вершины многогранника R. Доказательство. Пусть среди выделенных таким образом граней есть грань, не являющаяся совместно с другими образующей одной вер- шины. Тогда, по теореме-гипотезе, существует образующая ту же верши- ну грань, не параллельная первой и такая, нормаль к которой составляет с нормалью к р угол, меньший, чем выделенный по указанной последо- вательности. Это противоречит правилу выбора п минимальных углов. 19.3.4. Особенности применения косинуса как функции меры угла О величине угла в n-мерном пространстве мы можем судить только по его косинусу. Однако косинус не является монотонной функцией и в общем случае может служить мерой угла, если диапазон изменения этого угла не превышает тг. Составим по (19.11) симметричную матрицу S, включенную в табл. 19.1 косинусов углов между всеми нормалями к граням верхней (нижней) поверхности выпуклого многогранника R. Таблица 19.1 Грань Нормаль м n2 Nr+n Pi м 1 cos(7Vi,7V2) cos(M,Nr+n) Р2 COS^2,M) 1 cos(N2, Nr+n) . . . Рг Nr cos(7Vr, Ni cos(.ZVr, N2) COs(7Vr, TVr+n) Рг+1 Nr+1 cos(M-+i,i) COs(M.+1,7V2) cos(7Vr+iiNr+n) Рг+п Nr+N cos(lVr+n,M) cos(Nr+n,N2) 1 Выберем строку, соответствующую некоторой грани. Для комплек- тации граней, совместно с выбранной образующих общую вершину, вы- делим в этой строке п минимальных отличных от 0 и тг углов, то есть п максимальных косинусов, отличных от 1 и —1. Тем самым мы отдаем предпочтение вершинам с наиболее «пологими» склонами. При коррект- но сформулированной задаче такие грани «вокруг» некоторых вершин
должны найтись. При этом углы между нормалями к граням, образую- щим общую вершину, не превышают тг. Следовательно, косинус может служить функцией меры углов в диапазоне их изменения. Поясним выбор последовательности п косинусов. Выбранная грань может быть параллельна некоторой другой грани или координатной плоскости, т.е. угол между их нормалями может быть равен либо нулю, либо тг. Очевидно, такие грани не могут быть образую- щими одной вершины. На рис. 19.6<Энижн = {РьР2,Рз,Р4}. Рис. 19.6. Пример, показывающий, когда грани не могут быть образующими од- ной вершины Таблица косинусов углов имеет вид Таблица 19.2 Грань Нормаль М W2 N3 n4 Р1 М 1 0 1 0 Р2 n2 0 1 0 1 Рз N3 1 0 1 0 Р4 n4 0 1 0 Из первой строки, допуская лишь одну единицу cos(M,M) = 1), находим возможные образующие {рьрг}- При этом поиск элементов последовательности ведем слева направо. Проверка подтверждает пра-
вильность выбора вершины А. Аналогично, из второй строки находим {рг, Pi}, что определяет ту же вершину. Третья строка определяет возмож- ное множество образующих {рз,Рг}, что не подтверждается проверкой. Четвертая строка также не определяет правильный выбор образующих {Р4,Р1}- Обратим внимание на то, что все вышесказанные предположения и теоремы касаются граней, о которых доподлинно известно, что они вхо- дят в состав поверхности многогранника допустимых решений. Важным источником неприятностей являются координатные плоскости. Ведь мы не знаем, являются ли они действительными гранями, и вынуждены от- носить их к возможным. Отсюда и возможная ошибочность выводов. На рис. 19.7 фнижн = {Р1,Р2,РЗ,Р4,Р5}- Рис. 19.7. «Критические» случаи Таблица косинусов углов имеет вид Таблица 19.3 Грань Нормаль м n2 N3 N4 A^5 Р1 м 1 0 -1 -y/2/2 y/2/2 Р2 n2 0 1 0 y/2/2 y/2/2 Рз N3 -1 0 1 y/2/2 -y/2/2 Р4 n4 —y/2/2 y/2/2 y/2/2 1 0 Рз n5 \/2/2 y/2/2 -y/2/2 0 1
Легко видеть, что анализ любой строки не позволит обнаружить вер- шину многогранника Я. Действительно, по первой строке формируется предполагаемое мно- жество образующих {р 1, р4 }. Однако пересечение этих прямых не дает ис- комую вершину. И так — по всем строкам. Если бы было установлено, что ось у не входит в состав поверхности Я, то соответствующий коси- нус можно бы было игнорировать, что привело бы к правильному выбору множества образующих {рх, р2 }. Анализ этого примера наводит на мысль: обязательно ли формиро- вать верхнюю (нижнюю) поверхность до конца, присоединяя координат- ные плоскости? Ведь количество действительных граней, составляющих ее, достаточно для осуществления поиска вершины. А именно, если в вы- ражении (19.7) г п, то на первом этапе поиска исключим из рассмотре- ния координатные плоскости. Это приведет к исключению из табл. 19.3 двух последних строк и столбцов. Легко видеть, что поиск вершины осу- ществляется успешно. На рис. 19.8 демонстрируется случай, когда, несмотря на выполне- ние указанного выше неравенства, к поиску вершины необходимо под- ключать координатные плоскости. Рис. 19.8. Необходимость анализа координатных плоскостей Три плоскости pi, р2, рз совместно не являются образующими одной вершины. Только включение в рассмотрение плоскостей z = 0 или у = О позволяет найти вершины многогранника допустимых решений. Грань может иметь нормаль, угол которой с нормалями некоторых
«далеких» граней превышает тг. Например, углы между нормалями к ко- ординатным плоскостям составляют Здесь использование косинуса может привести к неоднозначности при упорядочении углов. Тогда воспользуемся следующим предположением: На верхней (нижней) поверхности выпуклого многогранника R су- ществует грань, нормаль к которой составляет с нормалями ко всем дру- гим граням этой поверхности углы, не превышающие тг. Это — предположение об обязательном существовании некоторых «срединных» граней, нормали к которым близки к середине диапазона изменения таких нормалей, — диапазона [0, ^]. На рис. 19.9 отражена попытка представления некоторых край- них случаев, иллюстрирующих на плоскости существование «срединных» граней для разных выпуклых многогранников. Рис. 19.9. К существованию углов, не превышающих тг Так, в многограннике 7?i (треугольник) угол между нормалью М и другими нормалями не превышает тг. В прямоугольнике Т?2 максималь- ный угол, например, между нормалью 7V2 и другими нормалями, состав- ляет тг. В многоугольнике 7?з, к примеру, нормаль 7V3 составляет со всеми нормалями угол, меньше тг. Таким образом, мы предположили существование хотя бы одной грани, при анализе которой с помощью косинусов удается избежать иска- жений в определении того, в каком отношении находятся углы, которые нормаль к этой грани образует с нормалями к другим граням поверхно- сти. Исключается случай, когда большему углу соответствует и больший косинус. Это приводит к необходимости одновременного параллельного анализа многих граней поверхности в качестве начальных, так как успех может быть достигнут не всегда.
19.3.5. Алгоритм. Пример Выше фактически уже описан алгоритм нахождения хотя бы одной вершины многогранника допустимых решений. Сведем вместе все необ- ходимые построения. Алгоритм. 1. Определим направление возрастания целевой функции и выделим грани многогранника допустимых решений, образующие верхнюю (ниж- нюю) его поверхность. Дополним ее возможными гранями — координат- ными плоскостями. 2. Составим матрицу S косинусов углов между всеми нормалями к действительным и возможным граням сформированной поверхности многогранника допустимых решений. 3. Если число г действительных граней верхней (нижней) поверхно- сти не меньше п — размерности задачи, выполняем первый этап алго- ритма, исключив из рассмотрения строки и столбцы матрицы S, соответ- ствующие координатным плоскостям. 4. Этот пункт является общим для первого и второго этапов. Выбрав произвольно грань или организовав перебор всех граней, или организо- вав параллельный анализ всех граней, выберем в соответствующей этой грани строке матрицы S п максимальных косинусов. В этой последова- тельности косинусов, кроме максимального косинуса угла между норма- лью выбранной грани и ею же самой, не должно быть косинусов, равных 1 или -1. Таким образом, окажутся выделенными п возможных образую- щих некоторой вершины многогранника допустимых решений. 5. Решаем совместно уравнения выделенных граней. 6. Если решение существует и оно неотрицательно, произведем ана- лиз: удовлетворяет ли найденная точка всем ограничениям задачи? Если удовлетворяет, точка действительно является вершиной многогранника. В противном случае необходимо продолжить анализ граней, то есть строк матрицы S. 7. Если перебор всех строк матрицы S не привел к успеху на пер- вом этапе выполнения алгоритма, переходим ко второму этапу, введя в рассмотрение координатные плоскости, т.е. начинаем анализ матрицы в полном объеме. Если успех не был достигнут на втором этапе, то, как указано ниже, можно испытать удачу на другой — нижней (верхней) по- верхности многогранника допустимых решений. Ведь важно найти хоть какую-то вершину, пусть не столь близкую к вершине-решению. Если мы и теперь не достигли успеха... В рассматриваемом примере верхнюю поверхность (где следует ис- кать решение) образуют грани (19.6). Поскольку переименование малого количества граней в соответствии с (19.7) не имеет смысла, составим для
этих граней и их нормалей таблицу, включающую матрицу косинусов уг- лов между нормалями. Соответствующие косинусы считаем по (19.9) и (19.10), таблицу строим по образу таблицы 19.1. Матрица S в таблице вы- делена. Реализуем первый этап алгоритма поиска вершины, исключив из рассмотрения три последние строки и столбцы. Выберем грань gi. Максимальные косинусы соответствующей (пер- вой) строки матрицы S указывают на систему граней {qi, Q2, Цз}- Решаем уравнения граней совместно и проверяем решение на выполнение всех неиспользованных ограничений задачи. Получаем вершину £7(13,8,4). Таблица 19.4 Грань Нормаль n2 N3 Ni •ЭД> N7 •^8 N9 Q1 м I 0,59 0,59 0,067 0,171 0,026 0,09 -0,99 Q2 0,59 1 0,9 -0,43 -0,29 -0,56 0,625 -0,56 Q3 N3 0,59 0,9 1 -0,25 -0,125 -0,28 0,46 -0,84 q* 0,067 -0,43 -0,25 1 0,99 -0,16 -0,975 -0,16 Q5 n5 0,171 -0,29 -0,125 0,99 1 -0,27 -0,92 -0,27 97 n7 0,026 -0,56 -0,28 -0,16 -0,27 1 0 0 Q8 n8 0,09 0,625 0,46 -0,975 -0,92 0 1 0 Q9 n9 -0,99 -0,56 -0,84 -0,16 -0,27 0 0 1 Выберем грань <72- Максимальные косинусы второй строки матрицы указывают на систему граней {q2,Q3,Qi}, что соответствует уже найден- ной вершине. Для грани дз получаем ту же систему образующих граней, т.е. ту же вершину Е. По строке табл. 19.4 (матрицы S), соответствующей д4, находим си- стему {qi, q4, q5}, решением которой является вершина £{6,10,4}. Анализируя строку грани д5, вновь получаем ту же вершину. Таким образом, мы добились успеха без рассмотрения координат- ных плоскостей. Однако для полноты анализа исследуем матрицу S пол- ностью. Анализ строк 1, 3, 4, 5 порождает те же результаты. Максимальные косинусы второй строки, соответствующей грани Q2, указывают на си- стему {q2, Q3, Qs}« Решаем уравнения совместно и проверяем выполнение всех неиспользованных ограничений. Получаем вершину £>(6,0,2). Со строкой, соответствующей д7, начинаются трудности, обуслов-
ленные следующими факторами: 1. Координатная плоскость — возможная, но не действительная грань. 2. Именно нормали к координатным плоскостям образуют угол Нулевое значение этого косинуса неоднозначно соответствует углам f и Поэтому невозможно правильно упорядочить углы по неубыванию, используя отрицательные и нулевые значения косинусов. Если, не зная, что делать с нулями, упорядочить только косинусы углов между нормалью к q? (х = 0) и нормалями к граням-границам, то первые три косинуса невозрастающей последовательности укажут на грани {qi, Q4, q?}- Однако точка (0,11,4) — решение этой системы — не является вершиной многогранника Я, так как не удовлетворяет ограни- чению Q6- Для возможной грани q8, также не обращая внимание на нули, на- ходим систему {q2, ?з> qs}, решением которой является вершина Z>(6,0,2). (По-видимому, углы между нормалями не вышли из диапазона [0, тг]). По последней строке, соответствующей возможной грани qg9 нахо- дим систему {^4, ?5> Q9}5 решением которой является вершина 10,10,0). (Неслучайность успеха в последних трех случаях нуждается в обос- новании.) Отметим, что нет гарантии получения всех вершин поверхности. Ведь группируя вместе грани, мы отдаем предпочтение вершинам с «по- логими» склонами, выбирая максимальные значения косинусов. В част- ности, мы ни разу здесь не получили вершину F(17,8,0), в которой це- левая функция принимает максимальное значение. Так что второй этап решения задачи ЛП неизбежен. Более того, необходимо не качественное, а аналитическое доказательство того, что рассмотренным путем при вы- полнении определенных условий будет получена хотя бы одна вершина многогранника R допустимых решений задачи. То есть необходимо дока- зать теорему существования. 19.3.6. Развитие стратегии решения задачи ЛП 1. Выделяя на многограннике R допустимых решений верхнюю и нижнюю поверхности, мы на деле не столько стремимся «подобраться» поближе к вершине-решению, сколько стремимся расчленить задачу, ло- кализовать поиск опорного плана. Если мы с помощью указанных ко- синусов начнем исследовать совместно всю совокупность граней много- гранника, то окажемся во власти неразрешимых коллизий. Ни о каком упорядочении углов в этом случае не может быть речи, так как во всем диапазоне [0,2тг] изменения углов между нормалями к граням косинус никогда не даст однозначного ответа об отношении между этими углами.
2. Многогранник R может иметь столь причудливую форму, что зна- ние значения целевой функции в некоторой его вершине нисколько не определяет того, за сколько шагов будет найдена вершина-решение. На- пример, двигаясь из вершины, в которой значение целевой функции меньше, можно за один шаг второго этапа алгоритма (лекция 17) достичь, как смежную, вершину-решение. В то же время, стремясь найти верши- ну с большим значением целевой функции, можно оказаться в ситуации, когда для достижения вершины-решения потребуется несколько шагов. Это говорит о том, что анализ суммы коэффициентов целевой функции для выбора верхней или нижней поверхности многогранника R не столь важен. 3. Более того, выбранная таким образом поверхность не всегда мо- жет привести к успеху. Например, на рис. 19.6 верхнюю поверхность образуют грань (ре- бро), противоположная вершине А, и, возможно, координатные плоско- сти (оси). Поскольку при анализе этой поверхности другие грани исключены из рассмотрения, то нет системы двух уравнений, результатом решения которой стали бы вершины, образуемые этой гранью. Мы зашли бы в ту- пик, если бы не позволили себе рассмотреть и другую, нижнюю, поверх- ность. Кстати, в нашем примере нижняя поверхность определяется следу- ющим образом: Фнижн = {^6, Q8? Qo}- Составим для нее матрицу S косинусов в составе табл. 9.5. Таблица 19.5 Грань Нормаль Mi M7 Mb Nq Q6 N6 1 0,83 0,23 0,56 Q7 n7 0,83 1 0 0 Q8 n8 0,23 0 1 0 Q9 W9 0,56 0 0 1 В результате анализа первой строки, соответствующей грани д6, находим грани {^,^7^9}, возможно, образующие некоторую вершину. В результате решения выделенной системы уравнений получаем точку (0,55,0). Эта точка не удовлетворяет ограничениям q4 > 0 и > 0. Мы видим по рисунку 19.3, что ошибки бы не произошло, если бы из рас- смотрения не была исключена грань д4. Мы делаем вывод о том, что «на
стыке» поверхностей, где частично отсутствует информация об образую- щих некоторых вершин многогранника Я, возможны ошибки. Нормаль к составила бы с нормалью к q6 меньший угол, который был бы включен в формируемую комбинацию трех углов. В результате анализа строки, соответствующей грани q7 (игнорируя нули), находим только грани q6 и q7. Однако для нахождения третьей гра- ни придется все же организовать перебор (именно перебор) нулей. Про- верим комбинацию граней {q^ q7, qs}. Их совместное решение определя- ет точку (0,75,0), не удовлетворяющую тем же ограничениям. Комбина- ция {де, Q7> Цэ} уже рассматривалась. Анализ следующей строки приводит к необходимости проверки комбинаций {Q6>Q7>Qe} и {де, Qg}- Первая комбинация уже исследо- валась, а вторая приводит к получению точки (5,0,0), удовлетворяющей всем ограничениям (точка В на рис. 19.3). Анализ последней строки приводит к необходимости проверки ком- бинаций {q6, q7, qg} и {q6, Qg, Qg}- Обе комбинации уже рассматривались: первая — как неудачная, вторая — повторно образующая вершину. 4. Легко видеть, что если бы мы не выполняли перебор комбинаций нулей, то так и не получили бы вершину, так как при первой возможной комбинации, обусловленной алгоритмом, она ни разу не обнаружилась. Отсюда вывод: в общем случае необходимо избегать анализа строк матрицы S, соответствующих координатным плоскостям. Помимо того, что это — лишь возможные, но не действительные грани, углы, образу- емые нормалями к ним и нормалями к другим граням, могут превышать тг. Это с большой вероятностью приводит к ошибкам в определении со- отношения углов. Так, в рассмотренном примере анализа верхней поверхности много- гранника R достаточно было исследовать первые пять строк матрицы S (табл. 19.1), опираясь на предположение о наличии «срединных» граней. Ведь в результате этого анализа вершины были найдены. Напомним, что, выделяя верхнюю и нижнюю поверхности, мы некоторые вершины делаем недоступными для предлагаемого метода. Это — вершины «на стыке» поверхностей. В данном случае это, напри- мер, вершины, образуемые комбинациями {qi, Q6> Qs}, {Q4, Qe, Qg} и др. Рассмотренный пример анализа нижней поверхности многогранни- ка R приводит к уточнению алгоритма нахождения опорного плана. Нули — косинусы углов между осями координат — не всегда удается игнорировать. Это характерно для того случая, когда действительных гра- ней, образующих рассматриваемую поверхность, недостаточно (г < п) или анализ соответствующих им строк матрицы S не приводит к успе- ху. Тогда приходится анализировать строки, соответствующие координат-
ным плоскостям, «добирая» нулевые значения косинусов до общего ко- личества п таких косинусов. При этом неизбежен перебор всех возмож- ных комбинаций таких нулей. Можно было бы сделать здесь вывод о том, что при подозрении о та- ких трудностях немедленно следует приступить к поиску опорного плана на другой поверхности. Однако мы не доказали, что хотя бы одна верши- на обязательно будет найдена. Это приводит к необходимой готовности воспользоваться, в случае неудачи, одним из проверенных, традицион- ных методов нахождения опорного плана решения задачи ЛП, — более сложного и практически не распараллеливаемого. 19.3.7. Оценка сложности Алгоритм поиска вершины многогранника допустимых решений предполагает ряд этапов. 1. Определение верхней (нижней) поверхности многогранника. Он заключается в проверке выполнения всех ограничений для точки начала координат. Сложность этого этапа можно оценить как O(nm). Число г граней-границ, образующих одну поверхность, не превышает т - 1, г т — 1 (19.12) 2. Нахождение матрицы S косинусов углов между нормалями к дей- ствительным и возможным граням поверхности. Число таких косинусов для симметричной матрицы с учетом известных углов между осями коор- динат составляет |((г + п)2 - г - п2). (19.13) Каждый косинус отыскивается в результате скалярного произведения единичных векторов нормалей, имеющего сложность O(6n). С учетом (19.12) можно оценить сложность алгоритма нахождения матрицы S как O(3m2n + тп2). (19.14) 3. Выделение п максимальных косинусов в каждой строке матри- цы S. Сложность этой операции упорядочения по одной строке можно оценить как O((m + n)2) (19.15) 4. Наконец, для выделенных граней необходимо решить систему п линейных уравнений, соответствующих этим граням. Сложность алго- ритма такого решения составляет О(п3). Общая сложность выполнения этого этапа для всех строк составляет O(mn3+n4). (19.16)
Как видим, сложность нахождения вершины (точнее, всех возмож- ных вершин) полиномиальная. Сумма степеней основных параметров п и т в составе членов полинома не превышает четырех. В заключение отметим, что наметился общий прием распараллели- вания решения задач оптимизации. Это не просто прием распараллели- вания вычислений. Он определяет стратегию коллективного поведения компьютеров вычислительной системы или вычислительной сети при совместном решении задачи. Алгоритм решения задачи предполагает, на разных этапах или гло- бально, варианты поиска промежуточных или окончательных решений. Компьютеры «расходятся» по отдельным вариантам поиска. Отдельный компьютер может достичь или не достичь успеха, реализуя стратегию «проб и ошибок». Тот компьютер, что достиг успеха, оперативно извеща- ет другие компьютеры, которые прерывают свои действия. Все компью- теры используют успех одного для продолжения выполнения задачи. Такой прием используется для поиска смежной вершины (по раз- ным ребрам) с «лучшим» значением целевой функции при решении за- дачи ЛП. Такой же прием может применяться и для нахождения опорно- го плана решения этой же задачи. Ведь грани верхней (нижней) поверх- ности многогранника допустимых решений могут распределяться меж- ду компьютерами. Компьютер может для взятой на обработку грани най- ти все косинусы между ее нормалью и нормалями с другими гранями, и здесь не следует бояться повторения счета отдельных косинусов на раз- ных компьютерах. Затем компьютер может выбрать п максимальных ко- синусов и проверить выделенную таким образом точку. Как только вер- шина найдена, работа других компьютеров по аналогичному поиску мо- жет быть прервана. Однако возможно, и это должно быть исследовано статистиче- ски, что себя оправдает такая стратегия, когда в результате нахожде- ния нескольких вершин в качестве опорного плана будет взято решение, обеспечивающее «лучшее» значение целевой функции. Все сказанное наилучшим образом согласуется с SPMD-технологией «одна программа — много потоков данных». Вместе с тем, отметим, что здесь предлагается «инженерное» реше- ние задачи на основе ее «физического смысла». Работа по обоснованию и строгому доказательству основных положений должна быть продолжена. Скорее всего, мы наблюдаем интересные свойства выпуклого многогран- ника допустимых решений задачи ЛП, не всегда умея их строго доказать.
Лекция 20. Параллельное программирование — аппарат исследования операций Освещаются две основные, взаимно обратные задачи исследования операций: нахождение минимального количества исполнителей для завер- шения комплекса работ за заданное время и нахождение плана выполнения работ за минимальное время заданным составом исполнителей. Ключевые слова: информационный граф, информационно- логический граф, матрица следования, транзитивные связи, длина критического пути, ранние и поздние сроки окончания выполнения работ, функция минимальной загрузки. 20.1. Неформальная постановка задач параллельного программирования ВС Высокая производительность ВС достигается структурными мето- дами, основанными на параллельной обработке информации. ВС содер- жит несколько процессоров или операционных устройств, способных од- новременно, но с необходимой синхронизацией, выполнять доли возла- гаемых на них работ по реализации алгоритма решения задачи. Проблема её программирования — это проблема планирования распа- раллеливания. Это требует разбиения алгоритма на, в общем случае, ча- стично упорядоченное множество работ, назначения этих работ на про- цессоры с учетом синхронизации их выполнения в соответствии с обяза- тельным порядком следования. С ориентацией на достижение максимальной производительности ВС, а также на специальное применение в составе конкретных си- стем, например, в составе сложных систем управления, различают две взаимно-обратные задачи параллельного программирования. Задача 1. Для заданного комплекса информационно и по управлению взаимосвязанных задач (частично упорядоченного множества задач), для заданной архитектуры ВС (наличие многих процессоров в однородной ВС, наличие процессоров разной специализации или производительно- сти в неоднородной ВС, наличие или отсутствие ООП и т.д.), а также для заданного ограничения на допустимое время вычислительного процесса, выбрать комплектацию ВС минимальной стоимости. Под стоимостью понимают вес каждого типа процессоров, который необходимо учитывать при выборе оптимальной комплектации. В част- ности, это стоимость разработки или цена одного процессора.
В однородной ВС задача 1 вырождается в задачу нахождения мини- мального числа процессоров, необходимого для решения данного комплекса взаимосвязанных задач за время, не превышающее заданное. Задача 2, Найти план решения за минимальное время данного комплек- са информационно и по управлению взаимосвязанных задач на данной ВС, 20.2. Граф-схемы параллельных алгоритмов Представим себе программу решения задачи, которая отображает последовательное изложение алгоритма на машинном языке, ассембле- ре или ЯВУ. Предположим, что, анализируя эту программу, нам удалось разбить её на отдельные модули и выделить для каждого из них множе- ства входных и выходных данных так, чтобы установить взаимодействие модулей по информации. Например, программа F представляется как F = F1(X1,X2-,X3>X4)F2(X2;X5)F3(X3-,X6)F^X1,Xi-,X7)F5(X3,Xil> Х5; X8)F6(X3, Х4, Х7; X9)F7(X3, Х7; X1o)F8(X6, Х8, Х9, Хю; У), где точкой с запятой отделены входные данные от выходных, X = {Xi, Х2} — исходные данные задачи, У — выходные данные или резуль- тат. Итак, мы разбили заданный алгоритм решения задачи на ряд моду- лей, операторов, работ и установили информационную взаимосвязь этих работ. Чтобы подчеркнуть общность задач и методов распараллеливания, не ограничивающуюся применением только для ВС, будем пользоваться термином работа. Для решения задач оптимального выполнения работ многими ис- полнителями (т. е. процессорами ВС) нам понадобятся временные оцен- ки выполнения как программы в целом, так и каждого выделенного моду- ля, т. е. каждой работы. Эти оценки могут быть выполнены как экспери- ментально, так и на основе количества операций и производительности процессоров, предполагаемых к использованию. Пусть относительно данного алгоритма и предполагаемой ВС нам известны следующие оценки Т = {ti, t2,t8}. Тогда, чтобы отразить прохождение обрабатываемой информации и выявить возможности распараллеливания, представим информацион- ную граф-схему алгоритма или информационный граф G (рис. 20.1). Вер- шины соответствуют работам. Дуги отражают частичную упорядочен- ность работ. А именно, если работа (3 использует в качестве входной информации результат выполнения работы а, то её выполнение не может быть нача- то до того, как закончится выполнение работы а. Такая преемственность
Рис. 20.1. Информационный граф алгоритма информации и отражена в графе. Граф G — взвешенный, ориентирован- ный и не содержит контуров. (Т. к. время выполнения алгоритма конечно, то программные циклы либо погружены внутрь работ, либо развёрнуты.) Например, представим себе информационный граф, соответствую- щий скалярному умножению векторов заданной длины: А = В х С спо- собом «пирамиды», В = {bi, ..., bg}> С = {ci, ..., с8}. Схема счёта пока- зана на рис. 20.2. Рис. 20.2. Схема счёта «пирамидой» Примем время сложения равным единице. Время умножения пусть превышает время сложения в четыре раза. Информационный граф G, со- ответствующий счёту способом «пирамиды», представлен на рис. 20.3. Мы рассмотрели составление информационных графов. Можно рассматривать информационно-логические графы, если учитывать альтер- нативные ветви алгоритмов. Например, может быть целесообразным следующее разбиение про- граммы (алгоритма) на модули (работы): F = F1{Xv,X2) if A then F2(X2; Х3) else F3(Xi; Х4) F4(Xi, X3, X4; У). Информационно-логический граф G — на рис. 20.4.
Рис. 20.4. Информационно-логический граф Преемственность информации (1 —► 2), а также (1 —> 3), при на- личии «жирной» стрелки «по управлению» можно не указывать, так как частичная упорядоченность работ в таком случае полностью определена. Рассмотрение информационно-логических графов сильно усложня- ет решение задач оптимизации параллельных вычислений. Практически ограничиваются планированием выполнения самой сложной, трудоем- кой ветви алгоритма или решают её для разных ветвей отдельно, — т. е. сводят оптимизацию к рассмотрению только информационных графов. Для формальных исследований информационный граф G представ- ляется матрицей следования S, или, с добавлением столбцов весов, — расширенной матрицей следования S*. При этом, т. к. граф G не содер- жит контуров (циклов), то S ъаож&т быть сведена к треугольной «правиль- ным» выбором нумерации вершин. Ниже (рис. 20.5) приведены матрицы S и S* для графа, представленного на рис. 20.1, и для некоторых извест- ных значений весов. Определение 1. Назовём все связи по информации, обусловленные исходным видом графа G, задающими связями. Определение 2. Путями в графе G будем называть последовательно- сти вершин вида ai, а2, ..., as такие, что для любой пары соседних вер- шин (ц и ai+i существует дуга, исходящая из вершины а» и входящая в вершину ai+i.
Рис. 20.5. Матрица следования с задающими связями Будем считать все пути в графе G допустимыми, т. е. реально суще- ствующими ветвями отображаемой программы. Определение 3. Длиной пути в информационном графе G назовём сумму весов вершин, составляющих этот путь. Определение 4. Путь максимальной длины Ткр в информационном графе G назовём критическим. В одном графе может быть несколько путей равной длины, являю- щихся критическими. Если в графе G есть дуга, исходящая из вершины а и входящая в вер- шину 6, т. е. существует задающая связь а —► 6, а также есть дуга, исхо- дящая из вершины b и входящая в вершину с, т. е. существует задающая связь 6 —> с, но нет задающей связи а —> с, очевидно, что последователь- ный порядок выполнения работ а и с определяется двумя указанными за- дающими связями. Т. е. граф G можно дополнить дугой, соответствую- щей связи а —> с, что только подтвердит заданную частичную упорядо- ченность работ. Определение 5. Множество связей, которые введены направленно внутри всех пар работ, принадлежащих одному пути в графе G и не свя- занных задающими связями, назовём множеством транзитивных связей. Транзитивные связи полностью определяются задающими связями. Алгоритм 1 дополнения треугольной матрицы S транзитивными связями. 1. Организуем просмотр сверху вниз строк матрицы следования S. 2. В очередной г-й строке организуем просмотр элементов в порядке увеличения j номеров столбцов. 3. Если (г, j) = 1, складываем строки г и j по операции дизъюнкции. 4. Если исходная матрица следования S нетреугольная, последова-
тельный просмотр её строк производится неоднократно до установления факта неизменности окончательно полученной матрицы. Конец алгоритма. В представленном выше примере после введения всех транзитивных связей матрица следования S примет вид, представленный на рисунке 20.6 (введённые транзитивные связи выделены курсивом). Рис. 20.6. Матрица следования с транзитивными связями С помощью введения транзитивных связей в нетреугольной матрице следования устанавливается наличие контуров в графе G. О наличии кон- туров свидетельствуют появившиеся ненулевые диагональные элементы, указывающие на связь вида а —> а. Например, пусть задан граф G на рис. 20.7. Рис. 20.7. Граф алгоритма и матрица следования После первого шага преобразования S принимает вид, показанный на рис. 20.8.
Рис. 20.8. Первый шаг обнаружения контура После второго шага преобразования S принимает вид, показанный на рис. 20.9. Рис. 20.9. Обнаружение контура Т. к. на главной диагонали матрицы появились единицы, то граф G содержит циклы (контуры). Из рисунка графа виден цикл 2 —> 6 —> 3 —> 5 —> 2. «Участники» цикла отмечены единицами на главной диагонали. Определение 6. Работы а и b будем называть взаимно независимыми, если в матрице следования S выполняется условие (а, 6) = (6, а) = 0. Определение 7. Работы {а»}, i = 1, ..., s, образуют полное множество взаимно независимых работ (ПМВНР), если для любой работы j £ {aj существует задающая или транзитивная связь (ам, j) = 1 или = 1 (д,р е {1,.... з}). Например, для графа G, представленного на рис. 20.1, после введе- ния транзитивных связей, что учтено в матрице следования на рис. 20.6, можно установить следующие ПМВНР: {1,2}, {2,3,4}, {3,4,5}, {2,3,6}, {3,5,6,7}, {8}.
20.3. Временные оценки на информационных графах Информационный граф отображает порядок следования работ. То- гда очевидно, что момент окончания выполнения любой работы (если началом отсчёта времени является момент начала выполнения работ — начало выполнения алгоритма) не может быть меньше максимальной из длин всех путей, которые заканчиваются вершиной, соответствующей этой работе. Таким образом, для каждой i = 1, ..., т работы алгоритма, пред- ставленного информационным графом, можно найти ранний срок окончания её выполнения. Если же выполнение алгоритма ограничено вре- менем Т < Ткр, то для каждой работы можно найти и поздний срок Т2г(Г) окончания её выполнения. Окончание выполнения г-й работы позже это- го срока приводит к тому, что выполнение других работ, следующих за данной, не может быть закончено до истечения времени Т. Иначе гово- ря, поздний срок окончания выполнения данной работы не может пре- вышать разности между значением Т и максимальной из длин путей, в первую вершину которых входит дуга, что исходит из вершины, соответ- ствующей данной работе. Без задания значения Т (ограничения на дли- тельность вычислительного процесса) определение позднего срока окон- чания выполнения работы не имеет смысла. При Т = Ткр ранние сроки окончания выполнения работ, составля- ющих критические пути, совпадают с поздними сроками окончания их выполнения. Прежде чем рассмотреть алгоритм нахождения ранних и поздних сроков окончания выполнения работ по расширенной матрице следова- ния S*, отметим, что учёт транзитивных связей увеличивает число необ- ходимых действий. Так как граф G не содержит контуров, то матрица сле- дования S может быть преобразована в треугольную. Однако при постро- ении алгоритмов решения задач распараллеливания не представляется удобным преобразовывать матрицу следования. Поэтому будем считать, что в общем случае матрица S не треугольная. Алгоритм 2 нахождения ранних сроков окончания выполнения работ. 1. Полагаем первоначально тц = ti2 = • • • = Лт = 0. 2. Производя циклический обзор строк матрицы S, находим очеред- ную из необработанных строк. Если все строки обработаны, выполнение алгоритма заканчивается. 3. Пусть j — номер найденной необработанной строки. Если j-я строка не содержит единичных элементов, полагаем тц = tj. Переходим к выполнению шага 6. 4. Если j-я строка содержит единичные элементы, выбираем эле-
менты множества {тц, ..., Tim}, соответствующие номерам единичных элементов j-й строки. 5. Если все выбранные таким образом элементы, образующие мно- жество {лj(„)}, v = 1,... kjотличны от нуля, полагаем п j = max ti +1 j Если хотя бы один из выбранных элементов нулевой (соответствую- щий ранний срок ещё не найден), выполняем шаг 2. 6. Обработанную j-ю строку метим, чтобы исключить её повторную обработку. Переходим к выполнению шага 2. Примечание. Если граф G не содержит контуров, зацикливание при этом невозможно. Конец алгоритма. Если матрица S треугольная, то никогда не складываются условия для многократного циклического обзора строк. Тогда ранние сроки окон- чания выполнения работ находятся за один последовательный просмотр строк матрицы S. Очевидно, что Ткр = шах{тц, ..., Tim}. По матрице S* (S — треугольная) на рис. 20.5 (граф G — на рис. 20.1) находим Тц = ti = 2, Т12 = t2 = 3, Т13 = Тц + £з = 3, Т14 = Тц + Ц = 4, Т15 = тах{тц,Т12} + *5 = 7,Т16 = тах{тц,Т14} + t8 = 8,Ti7 = тах{т12,Т14} + t7 = 6, Т18 = max{Ti3, ti5, ti6, Ti7} +t8 = 9; Ткр = 9. Чтобы рассмотреть пример с нетреугольной матрицей следования, выберем граф G без контуров с «неправильно» пронумерованными вер- шинами (рис. 20.10). Рис. 20.10. Информационный граф с не треугольной матрицей следования После обработки первой строки тц = 1. Попытка обработать вто- рую строку неудачна, т. к. из и Ti4 ещё не найдены. После обработки тре-
Лекция 20 Параллельное программирование — аппарат исследования операций тьей строки из = тц + t3 = 3. Обработка четвёртой строки даёт ri4 = 2. После обработки пятой строки т13 = т13 + t3 = 4. Попытка обработки шестой строки неудачна, т. к. не найдено значение тц. Приступаем к сле- дующему циклу обзора необработанных строк S. Обрабатываем вторую строку: Т12 = тах{т1з,Т14} + t2 = 6. После обработки шестой строки Не = Ti2 + te = 7. Т^р = 7. Для удобства представления наряду с другими способами будем пользоваться наглядными диаграммами выполнения работ при заданных значениях времени начала или окончания их выполнения. Работы обо- значаются прямоугольниками с постоянной высотой и длиной, равной времени выполнения. Стрелки, связывающие прямоугольники-работы, соответствуют дугам в графе G. На рис. 20.11 представлена диаграмма вы- полнения работ, отраженных графом G на рис. 20.1 и расширенной мат- рицей следования на рис. 20.5 — при ранних сроках выполнения работ. 0 123 4567 89 10 Рис. 20.11. Временная диаграмма выполнения работ при ранних сроках оконча- ния Алгоритм 3 нахождения поздних сроков окончания выполнения работ при заданном значении. 1. Полагаем первоначально t2i(T) = ... = т2тп(Т) = 0. 2. Производя циклический обзор справа налево столбцов матри- цы S, находим очередной из не обработанных ещё столбцов. Если все столбцы обработаны, выполнение алгоритма заканчивается. 3. Пусть j — номер найденного необработанного столбца. Если j-й столбец не содержит единичных элементов, полагаем т2;(Т) = Г. Пере- ходим к выполнению шага 6. 4. Если j-й столбец содержит единичные элементы, выбираем эле- менты множества {т21(Т), ..., T2m(T)}, соответствующие номерам еди- ничных элементов j-ro столбца. 5. Если все выбранные таким образом элементы {т2^ (Г)} с {t2i (Т), ..., т2т(Т)}, v = 1, ..., kj, отличны от нуля, полагаем T2j(T) = min{r2>(T) - tjv}.
В противном случае выполняем шаг 2. 6. Обработанный j-й столбец метим с целью исключения его по- вторной обработки. Переходим к выполнению шага 2. Конец алгоритма. Если матрица S — треугольная, то поздние сроки окончания выпол- нения работ находятся за один просмотр столбцов. Для матрицы S* (матрица S — треугольная) на рис. 20.5 и для Т = 10 за один просмотр находим Т2в(Ю) = 10,Т27(10) = Т2в(10) — ts = 9, Т2б(10) = Т2в(10) — ts = 9,Т25(10) = Т28(Ю) - ts = 9,7-24 = пйп{Т2б(Ю), -£б, Ггт(Ю) - £7} = 5,Т2з(10) = 7-28(10) - ts = 9,T22(10) = min{r25(10) - t5,T27(10) - £7} = 5,7-21(10) = 1Шп{т2з(10) - £з,7-24(10) — £4,7'25(10) - £5,Т2б(10) - £б} = 3. Для нетреугольной матрицы S на рис. 20.10 при Т = 10 находим Т2б(Ю) = 725(10) = 10. Обработка четвёртого столбца откладывается, т.к. не найдено значение 7-22(10). По этой же причине не обрабатывает- ся третий столбец. После обработки второго столбца находим 7-22(10) = 7-26 (Ю) — £б = 9. Обработка первого столбца невозможна, т. к. ещё не найдено значе- ние 7-23(10). Продолжаем циклический обзор столбцов. После обработки четвёертого столбца получаем 7-24(10) = 7-22(10) -£2 = 6. Обработка тре- тьего столбца даёт тгз(Ю) = min{r22(10) - £2,7-25(10) - £5} = 6. После обработки первого столбца находим 7-21(10) = тгз(10) - £3 = 4. Диаграммы выполнения работ при поздних сроках окончания, по графам на рис. 20.1 и 20.10, при Т = 10 представлены на рис. 20.12 — (а) и (б), соответственно. (Стрелки, соответствующие дугам в графах, опуще- ны в связи с их избыточностью.) Пусть Tj — произвольное значение момента окончания выполнения j-й работы, j = 1,..., тп, Tij Tj T2j(T) (Tj € [тъ-,т2ДТ)]). Меняя значения {tj}, j = 1, ..., m, но соблюдая при этом порядок следования работ, мы получим множество допустимых расписаний вы- полнения работ. Нашей конечной целью является выбор таких расписаний, которые позволяют решить задачи 1 и 2. Определение 7. Функцию т F(ri, т2, ..., тт, £) = 52 f(.ri> J=1
01 23456789 10 Рис. 20.12. Диаграммы выполнения работ при поздних сроках окончания: а — для графа на рис. 20.1, б — для графа на рис. 20.10 где f(T. t) = I 1 при t е |Т; - tj, TjJ ' (0 в противном случае, назовём плотностью загрузки, найденной для значений п, ..., тт. Для заданных тг,..., тт значение функции F в каждый момент вре- мени t совпадает с числом одновременно (параллельно) выполняющихся в этот момент работ. Например, по диаграмме на рис. 20.11, т.е. для п = тц,Г2 = Т12, • • •, т8 = не, функция F(2,3,3,4,7,8,6,9, t) имеет вид, представлен- ный на рис. 20.13а. Для допустимого расписания, определяемого набо- ром значений п = 2, т2 = 4, т3 = 3, т4 = 4, т& = 8, т6 = 9, т7 = 7, т8 = 10, функция F(2,4,3,4,8,9,7,10, t) имеет вид, представленный на рис. 20.136. Для графического представления функции F удобно пользоваться временной диаграммой, которая для второго случая, например, имеет вид, представленный на рисунке 20.14. Пусть данный граф G, в котором учтены транзитивные связи, об- разует I полных множеств взаимно независимых работ (ПМВНР). (Каж- дая пара таких множеств может иметь непустое пересечение.) Обозначим
Рис. 20.13. Графики функции F\a — для ранних сроков окончания работ, б — для некоторого допустимого расписания 0 123 4567 89 10 Рис. 20.14. Временная диаграмма функции F = число работ, образующих г-е полное множество и найдём R = max{ri, ..., г/}. Тогда R = max F(ri,.. Т1,Т2, т. к. возможно и такое распределение выполняемых работ во времени, задаваемое набором л,..., тт, (т.е. допустимое расписание), когда на каком-то отрезке времени выполняются все работы, составляющие ПМ- ВНР с числом R работ. Например, для графа на рис. 20.1 мы нашли ПМВНР {3,5,6,7}, включающее четыре работы. Тогда существует допустимое расписание, например, и = 2, Т2 = 3, т3 = 5, тд = 4, = 8, те = 8, ту = 6, те = 9
такое, при котором максимальное значение плотности загрузки F равно четырём (рис. 20.15). Рис. 20.15. Максимальное значение плотности загрузки Таким образом, справедливо утверждение Лемма. Минимальное число п процессоров одинаковой специали- зации и производительности (т.е. в однородной ВС), способных вы- полнить данный алгоритм за время Т Т^, не превышает R = max{ri, ..., п}, где riy i = 1, ..., I, — число работ, входящих в г-е ПМ- ВНР, которое составлено по взвешенному графу G, соответствующему этому алгоритму. Определение 8. Функцию Г&2 Ф(Т1, ...,rm,0i,02) = / F(n, rm,t)dt J9i назовём загрузкой отрезка [01,02] с [0, Т] для заданного допустимого рас- писанияп, гт. Функция Ф определяет объём работ (суммарное время их выполне- ния) на фиксированном отрезке их выполнения при заданном допусти- мом расписании. Так, для отрезка времени [0,4] с [0,10] на рис. 10.13а Ф = 10; для отрезка времени [1,3] на рис. 10.136Ф = 4; для отрезка времени [2,5] на рис. 20.15Ф = 10ит.д. Определение 9. Функцию 9?(т)(01,02) = min Ф(Т1, ..., тт, 01,02) Т1, Тт назовём минимальной загрузкой отрезка [01,02] С [0, Т]. Функция определяет минимально возможный объём работ, который при данном Т и при различных допустимых значениях (расписаниях) ri, ..., Тт должен быть выполнен на отрезке времени [01,02] с [0, Т]. Это
означает, что как бы мы не планировали вычислительный процесс, ко- торый должен быть закончен к моменту времени Т, т. е. какой бы набор значений и, ..., тт мы не выбрали, объём работ, выполняемых на отрез- ке времени [01, 02], не может быть меньше значения (01,62) • Теорема 1. Для того чтобы Т было наименьшим временем выполне- ния данного алгоритма однородной вычислительной системой, состоя- щей из п процессоров, либо чтобы п процессоров было достаточно для выполнения данного алгоритма за время Т, необходимо, чтобы для дан- ного отрезка времени [01,02] с [О, Т] выполнялось соотношение 9?(T)(0i,02) ^n(02-0i) (20.1) Доказательство. Нетрудно видеть, что если при данном наборе И,.. •, тт — сроках окончания выполнения работ, в том числе и при таком наборе, при котором обеспечивается минимальное или заданное Т - тах{т1, ..., тт}, для реализации алгоритма достаточно п процессо- ров, то max F(ri, rmt) s? n. t€[0,T] Отсюда, для любого отрезка времени [01, 02] с [0,Т] #2 ¥>(т)(01,02) Ф(71, Тт,ei,e2) = УF(ti, Tm,t)dt п(02 -01), что и требовалось доказать. Необходимость, но не достаточность условия (20.1) покажем на при- мере. Пусть алгоритму соответствует граф G на рис. 20.16,а. Пусть Т = 3, и одна из возможных диаграмм выполнения алгоритма — на рис. 20.166. Оценим на основе (20.1) число п процессоров, достаточное для вы- полнения алгоритма в указанное время. Из (20.1) имеем общее соотно- шение У(г)(01,02) 02 — 01 (20.2) Для получения полной оценки надо перебрать все отрезки [0Ъ02] с [0,Т]т.е. max [91,9г] С [О,Т] У(г)(01,02) 02 — 01 (20.3)
Рис. 20.16. Пример: минимальная плотность загрузки не соответствует действи- тельной: а — информационный граф, б — временная диаграмма загрузки Проанализируем все возможные отрезки [0i, 02] С [0,3]: у/3)(0,1) = ^3>(1,2) = <^(з)(2,3) = 0, ¥>(3)(0,2) = 9?(3)(1,3) = 3, у>(3)(0,3) = 6. На- ходим минимальное п = 2, удовлетворяющие (20.3). Однако из рисунка видно, что не существует плана выполнения работ на двух процессорах за время Т = 3. Минимально достаточное число процессоров здесь п = 3. Функция (01,02) минимальной загрузки отрезка времени явля- ется одним из основных средств оценки предпринимаемых действий при решении задач распараллеливания. Поэтому ниже будет дан алгоритм на- хождения её значения. Предварительно определим функцию _ / х при х о sW — I о при х < 0. Тогда значение £(rij - 0J характеризует условный объём части ра- боты j на отрезке времени [01,0г] при условии Tij — tj 0i и при макси- мальном смещении времени выполнения работы j влево (рис. 20.17а). Значение £ (02 -r2j (Г)+t j) характеризует аналогичный объём работы j при максимальном смещении времени выполнения работы j вправо. Это соответствует, например, ситуации, изображённой на рис. 20.176. Если для работы j оба указанных выше значения функции £ отлич- ны от нуля, но не превышают значение tj и 02 — 0i, то максимально раз- грузить отрезок [01,0г] от работы j можно смещением времени его вы- полнения в сторону, обеспечивающую меньшее из двух указанных выше значений £ (рис. 20.17,в). Существуют два случая, когда работа j не может быть хотя бы ча- стично смещена с отрезка [0Х, 02]: a) 0i Tij - tj < r2j(T) 02, в этом случае очевидно, что tj 02—01 (рис. 20.17г), и объём работы j, выполняемой на отрезке, совпадает с объёмом tj всей этой работы;
а) 01 Ту Ту(7) 02 01 'bffl-tj 02 Тг/Т) Ту-// 01 Ту Ту(7)-/у 02 ту(7) 01 Ту—/ Ту (7) 02 Ту -tj Xy(T)-tj 01 02 Ту Ту(7) Рис. 20.17. Нахождение минимальной плотности загрузки отрезка: все различные случаи соотношения времени выполнения работ и сроков б) rij 02 Л T2j(T) - 0i, в этом случае очевидно, что tj 02 - 01 (рис. 20.17д), и объём части работы j, выполняемой на отрезке [01,02] совпадает со значением 02 - 01. Приведённый ниже алгоритм объединяет все возможные указанные выше случаи. Алгоритм 4 нахождения значения функции (01,02). 1. Предполагаем, что для каждой работы j = 1, ..., m, известны зна- чения tj, Tij, T2j (Т). Полагаем равным нулю значение переменной 2. Организуем последовательный анализ работу = 1, ..., т. 3. Для каждой работы j полагаем <Р := ^4-пип{£(ти -01),£(02 — r2j(T) + tj),tj,O2 - 0i}. После перебора всех работ <р = (01,02). Конец алгоритма. Выше было получено соотношение (20.2), которое можно использо- вать для нижней оценки количества п процессоров, необходимых для вы- полнения данного алгоритма за время, не превышающее Т. Приведём аналогичное соотношение для нижней оценки мини- мального времени Т. Теорема 2. Пусть заданный алгоритм выполняется на ВС, состоящей из п процессоров, и Г* - текущее значение оценки снизу времени вы- полнения алгоритма. Пусть на отрезке времени [0Х, 02] с [0, Т*] выполня-
ется соотношение <Р(т'Чке2) - п(е2 - 01) = d > о. Тогда минимальное время Т выполнения алгоритма удовлетворяет соотношению Т > Т* + (20.4) п Теоремы 1 и 2 на основе анализа такой локальной характеристики параллельного алгоритма, как значение функции минимальной загруз- ки отрезка, предлагают способы оценки снизу ресурсов, необходимых для реализации каждого заданного алгоритма: — числа п процессоров при заданном ограничении на длитель- ность Т процесса; — минимального времени Т, необходимого для реализации данного алгоритма при заданном числе п процессоров. Рис. 20.18. К примеру нахождения нижней оценки числа исполнителей 20.4. Нижняя оценка минимального числа процессоров, необходимого для выполнения алгоритма за заданное время Алгоритм 5. 1. Первоначально полагаем п = 0. 2. Организуем перебор всех отрезков [0Х, 02] с [0, Т] в порядке [0,1]; [0,2]; [1,2]; [0,3]; [1,3]; [2,3]; [0,Т];[1,Т];...,[Т-1,Т].
Всего таких отрезков Т(Т + 1)/2. 3. Для очередного анализируемого отрезка времени [01,02] находим значение Wt*W02)F П = -7---Z-- • 02—01 4. Если п' > п, выполняем операцию п := п'. После перебора всех отрезков окажется найденным значение п, которое равно максимальному из значений, удовлетворяющих (20.2). Пример. Нахождение оценки п. Нахождение <^(4)(0i,02) будем иллюстрировать графически, воз- можными временными диаграммами (рис. 20.19). В результате анализа всех отрезков находим п = шах п' = 2. 20.5. Нижняя оценка минимального времени выполнения данного алгоритма на ВС Алгоритм 6. 1. Первоначально полагаем 2. Организуем перебор всех отрезков [0Ъ 02] С [0, Т] в той же после- довательности, что и в предыдущем алгоритме. (В процессе выполнения данного алгоритма значение Т может увеличиваться, что при данном по- рядке перебора не приведёт к усложнению алгоритма.) 3. Для очередного анализируемого отрезка времени [01,02] находим значение d = ^T\01,02)-n(02-01) 4. Если d > 0, выполняем операцию Т := T+]d/n[. 5. Полагаем т2ДТ) := r2j(T)+]d/n[, j = 1, ..., тп. После перебора всех отрезков [01,02] окажется найденным оконча- тельное значение Т — нижняя оценка минимального времени выполне- ния данного алгоритма на данной ВС. Пример. Произведём оценку Т для графа G, рассмотренного в пре- дыдущем примере, и ВС, состоящей из двух процессоров, п = 2 (рис. 20.20). Первоначально находим Т = шах {^-(2 4-24-14- 1), Ткр = 3} = 3.
ф<4)(0,1) = 1 п’=0 Ф<4>(0,2) = 2 л’ = 1 Ф<4)(1,2) = 2 п’=2 Ф(4)(0,3) = 5 п’ = 2 Ф<4)(1,3) = 2 п’ = 1 Ф(4)(2,3) = 0 = О Рис. 20.19. Нахождение нижней оценки числа исполнителей
Ф(4)(0,4) = 6 п’= 2 Ф(4)(1,4) = 3 л — 1 Ф(4)(2,4)=1 п’ = 1 Ф(4)(3,4) = О = О Рис. 20.19. Окончание После перебора всех отрезков, с учётом уточнения оценки времени в процессе этого перебора, окончательно находим Т = 4. 20.6. Решение задачи 1 распараллеливания для однородных ВС Формулировка задачи: Для данного алгоритма, которому соответ- ствует информационный граф G, и для времени Т, отведённого для его выполнения, найти наименьшее число п процессоров, составляющих од- нородную ВС, и план выполнения работ на них. Метод точного решения задачи (метод «ветвей и границ») основан на следующей основной теореме. Теорема. Для того чтобы значение п являлось наименьшим числом
Рис. 20.20. Оценка снизу минимального времени выполнения работ
Рис. 20.20. Окончание процессоров однородной ВС, которая выполняет алгоритм, представлен- ный информационным графом G = (X, Р, Г), за время, не превышающее заданное значение Т, необходимо и достаточно, чтобы п было наимень- шим числом, для которого можно построить граф G' = (X, Р, Г’), объ- единив вершины, соответствующие работам каждого ПМВНР, который содержит г > п работ г — п ориентированными дугами в п путей не со- держащих общих вершин. При этом длина критического пути в графе G' не должна превышать значение Т. Алгоритм 7решения задачи 1 — нахождения графа-решения G1 1. Для графа G и времени Т находим значения ранних {т^ } и позд- них {rj(T)},j = 1, ..., тп, сроков окончания выполнения работ. (Если
задача поставлена корректно, то тах{ту} = Ткр < Т.) j 2. Находим оценку минимального числа п процессоров, которое необходимо для выполнения заданного алгоритма за время, не превыша- ющее Т. 3. Пусть у — номер шага решения задачи. Полагаем у = 1. 4. Находим наименьшее значение ty такое, что F(th,712, T\m,ty) = ГУ>П. Если такого ty нет, то п — решение задачи. 5. Выделяем множество работ Ау = {aJ/x}, /z = 1, ..., гу, для кото- рых T’lj/z — tjfj, ty < Т’Хд, т. е. тех работ, которые «порождают» данное значение F. Множество А является подмножеством некоторого ПМВНР. 6. Предположим, что мы можем упорядочивать комбинации допол- нительных связей внутри множества Ау. Введём очередную комбинацию г - п связей, как указано в теореме — так, чтобы длина критического пути в изменившемся при этом графе G не превысила Г. 7. Если такая комбинация найдена, выполняем операцию у := у +1, уточняем значения {т^} и {^(Т)} с учётом введённых связей, перехо- дим к выполнению 4. 8. Если такой комбинации связей не существует, либо все они уже испытаны, выполняем операцию у := у - 1. 9. Если у = 0, т. е. на первом же шаге сглаживание загрузки процес- соров не приводит к подтверждению того, что п — решение, выполняем операцию п := п + 1 и переходим к выполнению 3. Если у 0, восста- навливаем значения {т^} и {r2j(T)} , найденные на данном шаге, и пе- реходим к выполнению 6. Конец алгоритма. ТЬким образом, суть алгоритма в том, что, реализуя общий подход, который называется метод «ветвей и границ», мы, выбрав начальное рас- писание, где все работы занимают на оси времени крайнее левое поло- жение, продвигаемся шаг за шагом и находим точки на оси времени, в которых функция плотности загрузки превышает первоначально испы- тываемое п. Пытаемся сгладить значение этой функции, введя дополни- тельные связи между работами, допускаемые ограничением Т. В случае
неудачи вернёмся на шаг назад и попытаемся ввести другую комбинацию связей. При переборе всех комбинаций связей на первом шаге, не при- ведших к успеху, увеличим предполагаемое число процессоров и начнём процесс сглаживания функции плотности загрузки сначала. Примечания 7. Как упорядочить вводимые комбинации связей? Пусть Ау — множество взаимно независимых работ, между которы- ми нужно ввести г — п связей по условию теоремы, т. е. построить некото- рый граф, связывающий вершины А„. Построим матрицу следования соответствующую этому графу. Первоначально эта матрица — нулевая. Вводим Гу — п единиц так, чтобы: • граф, соответствующий получаемой при этом матрице, не содер- жал контуров (отсюда, в частности, следует, что диагональные элементы всегда должны быть нулевыми); • в каждой строке и в каждом столбце матрицы не должно содер- жаться больше одной единицы (следует из Теоремы о возможных путях, не содержащих общих работ). Перемещая последнюю единицу сначала по строке, затем по столб- цам, затем перейдя к предпоследней единице и т. д., осуществляем пере- бор всех возможных комбинаций связей между работами множества Ау. 2. Можно рекомендовать следующий способ сокращения перебора*, вве- дение дополнительных связей в пункте 6 алгоритма производить не толь- ко по критерию допустимого увеличения длины критического пути, но и по значениям функции минимальной загрузки отрезка. А именно, вводя очередную комбинацию связей на i/-m шаге сглаживания функции плот- ности загрузки, не приводящую к увеличению длины критического пути сверх заданного Т, необходимо вновь пересчитать значение функции ср с учётом новых связей на всех отрезках [0i, 02] С Т] . Если для испы- тываемого значения п на этих отрезках выполняется соотношение (20.2), данная комбинация связей может быть признана удачной. Таким обра- зом, выполнение соотношения (20.2) в совокупности с допустимым уве- личением длины критического пути определяет «границы» при ветвле- нии. (Напомним, что метод «ветвей и границ», как метод перебора, об- ладает экспоненциальной сложностью, является NP-трудным. Поэтому сокращение перебора — очень важная задача.) Пример. Найдём минимальное число п процессоров, необходимое для выполнения алгоритма, который представлен графом G на рисунке 20.21а, за время Т = 7. По алгоритму 4 найдёем нижнюю оценку п = 2, исследовав 28 зна- чений <^7)(0i, 0г) Для всех [01,0г] С [0,7] . При этом тп = 1, ri2 = ш =
0 1 2 3 4 5 6 7 Рис. 20.21. Последовательные действия при точном решении задачи 1 Т14 = 2,Т15 = Т16 = 4,Т17 = 5, т21(7) = т22(7) = 4, т23(7) = т24(7) = "Г26 (7) = 6,т25(7) = т27 = 7. Мы не собираемся впредь иллюстрировать нахождение функции минимальной загрузки, поэтому не будем приво- дить динамически уточняемые значения поздних сроков окончания вы- полнения работ.
F(m, ..., Т17) = 4 > 2, т. е. fi = 0. В формировании этого значения участвуют работы 1,2,3,4. Составим квадратную матрицу Li (рис. 20.21в) с первоначально нулевыми элементами. Постараемся последовательно ввести в неё два единичных элемента. Первая возможная комбинация двух таких элементов соответствует связям 3 -* 2 —> 1. Длина критиче- ского пути в графе G, дополненном дугами в соответствии с этими свя- зями, превышает 7. Пробуем заменить вторую связь следующей возмож- ной. Новая испытываемая комбинация связей 4 —> 2 —> 1 также приводит к недопустимому увеличению длины критического пути. Единичные эле- менты, соответствующие отвергнутым связям, на рисунке зачёркнуты. Вновь меняем вторую связь, полагая равным единице первый эле- мент третьей строки матрицы Li. Новая комбинация связей 2 1 —> 3 не приводит к недопустимому увеличению длины критического пути в гра- фе G. По графу, учитывающему введённые связи, находим ранние и позд- ние сроки окончания выполнения работ. На рис. 20.21,г приведена диа- грамма выполнения алгоритма при ранних сроках тц = 3, m = п4 = 2, Лз = Лб = 5, Tie = тп = 6 окончания выполнения работ. Связи между работами не указаны. Найдём f2 = 3 такое, что F(3,2,5,2,6,5,6,3) = 3 > 2. Данное зна- чение функции плотности загрузки определяется выполнением работ 3, 5, 6. Составляем матрицу L2 (рис. 20.21д) и стараемся ввести в ней един- ственный единичный элемент. Однако перебор всех возможных способов введения такого элемента приводит к длине критического пути в образу- ющемся графе, превышающей 7. Возвращаемся на шаг назад к анализу матрицы Li и пробуем ввести другую допустимую комбинацию связей. Такой комбинацией является 2 -* 1,4 —» 3. На рис. 20.21е представлена диаграмма выполнения алгоритма при уточнённых ранних сроках окон- чания выполнения работ и i = 3,Т12 = Т14 = 2,Т13 = 4, Т15 = Т17 = 6, 16 = 5. Вновь находим значение <2 = 3 такое, что F(3,2,4,2,6,5,6,3)=3>2. (Совпадение значений <2 и выделенных работ с ранее исследованными является скорее случайным.) Вновь формируем матрицу Ь2 (индекс ука- зывает номер шага, новая матрица L2 в общем случае ничем не схожа с аналогичной ранее рассмотренной матрицей), и находим первую из до- пустимых связей — связь 6 -> 3 (рис. 20.21ж). Вновь (рис 20.21з) находим значение <з = 5, где плотность загрузки превышает значение 2. Составляем матрицу L3 (рис. 20.21,и). Находим в ней единственную единицу, соответствующую допустимой связи 5 —> 7. На рис. 20.21к представлена диаграмма выполнения алгоритма, удовле- творяющая решению задачи. Собственно расписание определяется найденными на последнем шаге значениями {ту } .
20.7. Решение задачи 2 распараллеливания для однородных ВС Формулировка задачи: Для данного алгоритма, которому соответ- ствует информационный граф G, найти минимальное время Т и план вы- полнения этого алгоритма на данной однородной ВС, содержащей п про- цессоров. Теорема. Для того, чтобы Т было минимальным временем вы- полнения алгоритма, представленного информационным графом G = (X, Р, Г), на однородной ВС, состоящей из п процессоров, необходимо и достаточно, чтобы Т было наименьшей из возможных длин критических путей в графах вида G' = (X, Р, Г’), что получены из данного объедине- нием вершин, соответствующих работам каждого ПМВНР, который со- держит г > п работ, г — п ориентированными дугами в п путей, не содер- жащих общих вершин. Рис. 20.22. Информационный граф распараллеливаемой задачи Алгоритм 8решения задачи 2 — нахождения графа-решения G' 1. По алгоритму 5 находим оценку Т = То минимального времени выполнения данного алгоритма на ВС, содержащей п процессоров. 2. Опыт подсказывает, что в подавляющем большинстве случаев по- лученная оценка совпадает с минимальным временем выполнения алго- ритма на данной ВС. Чтобы сократить объём вычислений, целесообразно с помощью алгоритма 6 решения задачи 1 установить, способны ли п про- цессоров выполнить данный алгоритм за время То. Если То — не решение задачи 2, используем следующий метод. 3. Полагаем и = р = 1, = оо, где оо — заведомо большое число, например, максимально допустимое на используемой ЭВМ.
4. Находим наименьшее значение ty такое, что F(th, ..., rim, ty) = ry > п. Если такого значения tu нет на первом же шаге сглаживания плот- ности загрузки (при у = 1), то значение Ткр — решение задачи 2. Если такого значения больше нет при у > 1, то увеличиваем значение /1 на единицу и полагаем = шах{тц, ..., Tim} , т.е. длине критического пути в графе G', построенном в соответствии с условиями теоремы. Не меняя значение у, переходам к выполнению 6. (Если = Tq + 1, то т. к. Tq — не решение задачи, искать значение Т < нецелесообразно, т.е. найденное значение — решение задачи 2). 5. Если значение ty, обеспечивающее неравенство в пункте 4, най- дено, выделяем множество работ Ау = {&jP}, р = 1, ..., Гу, для которых 1~ljp tjp ty <Z Tljp. Множество Ay является подмножеством некоторого ПМВНР. 6. Введём очередную, ещё не испытанную комбинацию г у—п связей, как указано в теореме, так, чтобы длина критического пути в полученном при этом графе G' была меньше Тр. 7. Если такая комбинация связей существует, увеличиваем у на еди- ницу, уточняем новые значения {tij}, j = 1, ..., m, переходим к выпол- нению 4. 8. Если такой комбинации связей не существует или все они уже пе- ребраны и при этом у > 1, уменьшаем у на единицу и переходим к 6. Если же испытаны все комбинации связей при у = 1, то последнее значение Тр определяет искомое Т — Тр. Конец алгоритма. Пример. Пусть заданы 6 задач (т = 6), заданы их частичная упоря- доченность графом G, заданы времена решения (веса вершин). Требуется найти расписание выполнения этих задач на двух процессорах (п = 2) — такое, чтобы время решений этих задач было минимальным. Найдём нижнюю оценку длины расписания Т. Первоначально полагаем Г = max т Ткр > = тах{6,6} = 6. По алгоритму 6, испытывая значения функции минимальной за- грузки, найдём, что у = ^ > 2. Произведем единственное уточ- нение значения Tq = 6 + ] - 2)[ = 7. Без учета реально доступного количества процессоров составим (рис. 20.23) временную диаграмму решения всей совокупности задач — такую, при которой каждая из задач решается как можно раньше, и опре- делим загрузку как бы неограниченного числа процессоров:
t Рис. 20.23. Временная диаграмма решения задач 1) находим первый момент времени, при котором по этой диаграмме нам требуется более двух процессоров: при t = 1 это количество F(l) = 3. Выделим образующие это значение F задачи: {2,3,4} и составим матри- цу Li (рис. 20.24а). Первой испытываемой связью является связь 3 2. Диаграмма, соответствующая этой связи, — на рис. 20.246. Рис. 20.24. Первый шаг распределения: а — матрица следования, б — временная диаграмма Т. к. больше нет значений функции плотности загрузки, превышаю- щих 2, то мы предполагаем возможное решение, но продолжаем перебор связей для поиска более короткого расписания. 2) следующей испытываемой связью по матрице Ь19 определяющей длину критического пути, меньшую 8, является связь 4 —> 2. Соответству- ющее расписание — на рис. 20.25. 3) вновь находим первый момент времени, при котором нам требу- ется более двух процессоров: при t = 2 это количество F(2) = 3. Вы- делим образующие это значение F задачи: {2,3,6} и составим матрицу Ь2 (рис. 20.26а). Первой возможной связью, не приводящей к длине кри- тического пути, равной 8 или выше, является связь 2 —> 3. Диаграмма, соответствующая этой связи, — на рис. 20.266.
а) Рис. 20.25. Введение новой связи: а — матрица следования, б — временная диа- грамма а) L2: Рис. 20.26. Введение последней связи: а — матрица следования, б — окончатель- ный вид временной диаграммы Т. к. значение функции плотности загрузки больше не превышает значение 2, то мы нашли оптимальное расписание, ибо его длина не пре- восходит нижней оценки — значения 7. Задачи точного распараллеливания в настоящей лекции освещаются только для однородных систем исполнителей, когда все такие исполни- тели «умеют» всё и каждую работу выполняют за одинаковое время. Это предполагает применение методов для однородных вычислительных си- стем. Однако при более широком применении методов распараллелива- ния в управлении и экономике актуальна постановка этих задач для неод- нородного состава исполнителей, в частности — когда исполнители обла- дают разной специализацией. Достаточно рассмотреть управление строи- тельством или уборочной кампанией. Алгоритмы точного решения задач распараллеливания для неоднородных систем представлены в [3].
Лекция 21. Организация и оптимизация параллельных процессов Рассматриваются различные схемы организации параллельных управ- ляющих вычислительных процессов. Приводятся концептуальные основы параллельного программирования в МВК семейства «Эльбрус». Ключевые слова: макропрограмма, макроинструкция, супервизор, диспетчер, система реального времени, централизованное диспет- чирование, децентрализованное диспетчирование, очередь «к про- цессору», семафор. 21.1. Общая схема параллельных вычислений при обслуживании потока заявок (в АСУ) Рассмотрим схему организации параллельного вычислительного процесса, характерную для автоматических или автоматизированных си- стем управления (рис. 21.1). Общий алгоритм функционирования АСУ в виде макропрограммы отображен блоком 1. Каждая макроинструкция может заключать большой объем работ. Это — отдельные операторы, задачи (функциональные модули), задания, процессы и др. Макропрограмма либо содержит макроинструкции, кото- рые соответствуют логическим операторам, влияющим на выбор ее вет- ви, либо имеет специальный блок управления. В результате выполнения этих операторов формируется (блок 2) поток макроинструкций (очередь), подлежащих выполнению процессорами. При этом могут учитываться значения логических переменных, как рассчитанные по макропрограм- ме (внутреннее управление), так и выработанные на основе внешнего воздействия: управляемым объектом, параметрами управляемого техно- логического процесса, оператором с пульта или терминала. Т. е. на этом уровне вырабатывается непосредственно поток заданий. Затем (блок 3) формируется некоторая интерпретация потока зада- ний (макроинструкций) для диспетчера. Блоки 2 и 3 могут входить в состав супервизора, определяющего необходимые действия системы управления в процессе ее функциониро- вания. Диспетчер 4 распределяет работы между процессорами 5 — произ- водит распараллеливание. При этом естественно используется обратная
Рис. 21.1. Схема параллельного вычислительного процесса связь от процессоров с сообщениями о ходе выполнения назначенных макроинструкций. Макроинструкции, поступившие на процессор в ре- зультате распараллеливания, выполняются в режиме интерпретации - за- пускаются соответствующие заранее загруженные, т.е. известные всем процессорам, программы (процессы). 21.2. Особенности параллельного вычислительного процесса в системе реального времени Работа АСУ в системе реального времени характеризуется жесткой временной привязкой приема и выдачи информации, поскольку речь идет об управлении некоторыми объектами (например, движением лета- тельных аппаратов) или технологическими процессами. В целом АСУ реального времени на основе использования ВС яв- ляется многоканальной системой массового обслуживания, поскольку, как правило, управление производится сразу большим числом объектов (множеством летательных аппаратов, множеством вырабатываемых изде- лий и т. д.). Общая схема организации вычислительного процесса та же, что и выше.
Однако, чтобы нагляднее подвести к проблемам построения управ- ляемого параллельного вычислительного процесса, рассмотрим, как ре- шаются задачи в реальном времени. Возьмем возможную временную диаграмму (рис. 21.2). Рис. 21.2. Схема параллельных вычислений в реальном времени Пусть ВС состоит из двух процессоров. Общий алгоритм управления разбивается на частные задачи, решаемые в циклах двух длительностей 51 и 62 , пусть 62 = 2Ji. Информационно зависимые задачи, решаемые в цикле длительности 51, отражены графом Gi, а задачи, решаемые в цикле длительности 62, — графом G2. Графы — взвешенные: вес вершины равен условному времени решения соответствующей задачи, что отражено на диаграмме. Примечание. О многоциклическом режиме решения задач в АСУ. Предположим, мы управляем каким-то «быстрым» объектом или
процессом. Нам надо с большой частотой выдавать управляющие воздей- ствия. Они вырабатываются (на некотором временном интервале) по од- ним и тем же алгоритмам, т. е. циклически решаются одни и те же задачи. Их решение привязывается к сигналам прерывания, которые выдаются с одной и той же частотой. Но могут решаться периодически и другие за- дачи, для точности результатов которых достаточна более низкая частота: задачи оценки состояния среды, меняющейся плавно, задачи отображе- ния и т. д. Таким образом, в целом в системе одновременно циклически решаются много задач, но в циклах разной длительности. В общем случае решаемые задачи информационно взаимозависимы. Строго говоря, они взаимозависимы и по управлению, т. е. от ре- зультатов решения одних задач может зависеть и состав далее решаемых задач. Мы будем считать, что состав задач определен на протяжении зна- чительного времени функционирования. Более того, состав решаемых задач определяет супервизор, и внутри одного цикла (или такта) управле- ния этот состав не меняется. Информационная зависимость отображает- ся взвешенным информационным графом, как представлено в примере. Процессор передачи данных ППД для каждого цикла управления в последовательности, показанной на диаграмме, производит опережаю- щий прием исходной информации в память ВС и последующую выдачу результатов вычислений на объекты управления. Разная толщина стрелок показывает, что объем обмена различен для циклов разной длительности. Из диаграммы видно, что в момент начала цикла длительности 52, а, следовательно, и цикла длительности , включается супервизор (отме- чен черным), функции которого значительно шире, чем при включении в начале только цикла длительности 51 (отмечен светлым). В результате его работы возможна смена состава решаемых задач. Если в системе есть и диспетчер, его работа может быть учтена увеличением времени работы супервизора. Предполагают, что задачи, решаемые в каждом цикле меньшей дли- тельности (51), обладают более высоким приоритетом, чем задачи, реша- емые в циклах большей длительности (52). Загрузка процессоров ВС может быть организована по правилам мультипрограммной обработки с учетом частичной упорядоченности за- дач и их относительного приоритета. Процессор 1 сначала выбирает для решения задачу 1. Из готовых к решению задач процессор 2 может выбрать лишь задачу 6. После реше- ния задачи 1 появляется возможность решения высокоприоритетных за- дач 2 и 3. Задача 2 выбирается процессором 1, а процессор 2 прерыва- ет задачу 6 и приступает к решению задачи 3. (Неизбежен циклический анализ очереди на появление задач, приоритет которых выше приорите-
та решаемых задач.) После решения задачи 3 начинается решение задачи 5, а после решения задачи 2, с учетом того, что к этому моменту решена и задача 3, начинается решение задачи 4. После окончания решения за- дачи 5 продолжается решение задачи 6, затем начинается решение задач 7 и 8. Однако их решение прерывается началом выполнения следующего цикла длительности <51, в котором вновь воспроизводится план решения задач 1—5. Лишь во время решения процессором 1 задачи 1 продолжается решение задачи 7 процессором 2. В соответствии с приоритетом решение задач 7 и 8 заканчивается. В следующем цикле длительности <52 весь рас- смотренный план решения задач 1—8 повторяется, и так — до изменения состава задач в соответствии с условиями работы управляющей системы. Из примера видно, что частичная упорядоченность задач (задан обя- зательный порядок следования некоторых задач, обусловленный инфор- мационной преемственностью) препятствует полной загрузке процессо- ров, несмотря на высокие требования к использованию всех вычисли- тельных ресурсов. Она определяет основную трудность решения задач оптимального распараллеливания. 21.3. Централизованные и децентрализованные ВС 21.3.1. Классификация ВС делятся на централизованные и децентрализованные. Это связа- но с реализованными в них способами управления, или диспетчирования. Централизованное диспетчирование (ему соответствует централи- зованная ВС) реализуется управляющим процессором или периодически включаемой в состав очереди задачей наивысшего приоритета. При цен- трализованном диспетчировании существует возможность более полного охвата и прогнозирования состояния всех средств ВС и тщательного вы- бора плана дальнейшей загрузки процессоров. Децентрализованное диспетчирование (ему соответствуют децентра- лизованные ВС) предусматривает возможность самостоятельного обраще- ния каждого процессора к общей очереди для выбора заданий. Обраще- ние к очереди происходит по мере освобождения процессора или по пре- рыванию. Учет ресурсов всей ВС и оценка в связи с этим различных ва- риантов назначения отсутствуют. Полностью реализуется виртуальность процессоров. Сокращаются затраты времени (полезной производитель- ности) на диспетчирование, но не используются методы оптимально- го планирования совместной работы процессоров. Децентрализованное диспетчирование обеспечивает высокую надежность, живучесть ВС. Од-
нако полностью независимой работы процессоров добиться нельзя хотя бы по причине необходимости контроля и реконфигурации ВС при от- казе ее модулей, а также в связи с необходимостью возврата заданий в очередь с отказавших процессоров для их перезапуска. Таким образом, в чистом виде децентрализованное диспетчирова- ние не применяется. 21.3.2. Централизованное диспетчирование В более сложном виде задача диспетчирования возникает в центра- лизованных ВС. В чем она заключается? Пусть некоторый супервизор, например, в системе реального време- ни, определил множество информационно взаимосвязанных задач (ча- стично — упорядоченное множество задач), которые должны решаться циклически, а возможно, и единственный раз процессорами ВС. Извест- ны временные оценки решения задач. Пусть задан взвешенный ориентированный граф, не содержащий контуров, отражающий частичную упорядоченность работ (задач, про- цессов, макроинструкций, процедур, операторов и т.д.), которая обу- словлена их информационной преемственностью (рис. 21.3). Рис. 21.3. Информационный граф и расширенная матрица следования Показана соответствующая ему матрица следования S и расширенная матрица следования S*, содержащая и столбец весов. Универсальным критерием, используемым при решении задачи дис- петчирования как задачи распараллеливания, является минимум времени выполнения совокупности работ, распределяемых между процессорами. Формально: пусть задано множество работ А = {ai, ..., ат} и из-
вестно множество временных оценок этих работ Т = , ..., tm}9 а так- же известна частичная упорядоченность, задаваемая матрицей следова- ния S. Пусть ВС — однородная (т. е. все процессоры обладают одинако- вой производительностью) и содержит п процессоров. Пусть в результате распределения множества работ А между п процессорами каждый (г-й) процессор оказался занятым решением задач в течение времени 7^. Тогда время решения всей совокупности задач Треш = . ШЗХ {7^} г=1,п Задачей диспетчера является распределение работ ai, ..., am между процессорами, обеспечивающее Треш “ “ 52 * т*П J=1 Далее будут изложены достаточно простые диспетчеры на основе эвристических методов решения задачи оптимального распараллелива- ния — задачи высокой сложности. Такие алгоритмы используют доста- точно эффективные решающие правила, приближающие расписания к оптимальным. 21.3.3. Децентрализованное диспетчирование в многоканаль- ном и многоциклическом режиме Рассмотрим схему организации параллельного вычислительного процесса в реальном времени. Система управления обслуживает в многоканальном режиме ряд од- нотипных объектов. Одновременно обслуживаемые объекты могут на- ходиться на разных стадиях обслуживания. По каждому объекту цикли- чески и в разных комбинациях решаются задачи из некоторого заранее установленного множества информационно взаимосвязанных задач. Ча- стичная упорядоченность задач задается расширенной матрицей следо- вания S*. 1. Рассмотрим случай, когда задачи решаются в цикле одной дли- тельности J. Супервизор формирует матрицу S", которая отражает множество ре- шаемых задач по всем объектам (или по всем занятым каналам обслужи- вания), обслуживаемым в данное время, и список или очередь Q, содер- жащий информацию о решаемых задачах (рис. 21.4). (Для этого из матрицы S* для каждого объекта исключаются строки и столбцы, соответствующие нерешаемым задачам, и блочно-диагональ- ным наращиванием строится S".)
S т 01 13 02 1 21 03 34 04 1 30 05 15 06 15 07 1 1 20 S* Q i Р t t 1 2 15 20 1 3 15 20 1 3 20 25 2 1 13 15 2 1 21 25 2 2 34 40 2 1 30 35 3 1 13 15 3 1 21 25 3 2 34 40 3 1 30 35 в а S' 05 06 07 1 1 01 02 1 03 04 1 01 02 1 03 04 1 б Рис. 21.4. Информация для одноциклического режима обслуживания Каждая задача характеризуется именем, номером г канала или объ- екта, по которому она решается, относительным приоритетом р, значени- ем t времени решения, контрольным временем tQ, по истечении которого следует сделать вывод об аварийной ситуации. При обращении процессора к очереди, назначение очередной зада- чи на процессор производится на основе анализа S*. Из множества задач, которым соответствуют нулевые строки этой матрицы, выбирается еще
не назначенная задача с максимальным приоритетом (минимальное зна- чение р) из тех, которые по времени выполнения укладываются в ресурс процессора в цикле (см. далее). Если таких задач с одинаковым приорите- том несколько, из них выбирается задача с максимальным временем вы- полнения. Назначенная задача отмечается, чтобы исключить повторное назначение. После решения любой задачи и исключения информации о ней из S* могут оказаться «открытыми» задачи, обладающие более высоким приоритетом, чем некоторые из тех, которые уже решаются. В этом слу- чае возможен один из вариантов, когда диспетчер того процессора, на котором закончилось решение некоторой задачи, после назначения (се- бе) очередной задачи производит попытку дополнительного назначения другим процессорам. Находится готовая к решению задача с максималь- ным приоритетом и для него — с максимальным временем t Процессоры последовательно опрашиваются. По опросу прерывается работа того про- цессора, который решает задачу с приоритетом меньшим, чем приоритет найденной задачи, и с текущим ресурсом времени в цикле 5, превышаю- щим t Ему выдается сигнал прерывания, по которому он выполняет пре- рывание и обращается к очереди. Тогда эта задача будет назначена вместо прерванной. Попытка дополнительного назначения производится до тех пор, по- ка не будут исчерпаны все задачи, готовые к решению (входы 5*, соот- ветствующие еще не назначенным задачам), или пока не будет закончен однократный опрос всех процессоров. Циклическая работа процессоров организуется с помощью преры- вания от системы синхронизации (таймера или СЕВ). В этом случае вос- станавливается исходный вид матрицы S* и очередь Q. Процесс решения задач повторяется, если супервизор не внес коррективы в их состав. 2. Многоциклический режим. Пусть часть задач решается в цикле длительности fci <5, часть — в цикле длительности к26 и т. д. Всего — г дли- тельностей, и fci < fc2 < ... < кг. (Обычно fci = 1.) Через интервалы, кратные <5, в ВС формируются сигналы прерывания, анализируемые дис- петчерами процессоров. Если fcM > ки. то все задачи, решаемые в цикле к„6, обладают более высоким приоритетом, чем все задачи, решаемые в цикле fcM<5. При составлении комплексного задания объединяют его части, от- носящиеся к циклам одинаковой длительности. Каждая часть заканчива- ется признаком «конец задания для fcj,6» j = 1, ..., г (рис. 21.5). По этому признаку после выполнения всего задания для данного цикла и поступле- ния сигнала от системы синхронизации о начале следующего'цикла этой же длительности восстанавливается исходный вид соответствующей ча-
сти задания. После этого диспетчеры производят дополнительное назна- чение в соответствии с готовыми к решению более приоритетными зада- чами, т. е. начинают новый цикл по возможности с более приоритетных задач. Рис. 21.5. Многоциклический режим параллельного решения задач Выбор процессором новой задачи, как говорилось выше, произво- дится с учетом того ресурса времени, которым обладает данный процессор до момента обязательного окончания решения данной задачи. Должна учитываться необходимость прерывания решения этой задачи ради задач с более высоким приоритетом, т. е. ради задач, решаемых в циклах мень- шей длительности. Как же считается и учитывается этот ресурс? Рассмотрим его как переменный ресурс времени Rij, которым располагает г-й процессор, г = 1, ..., п, в цикле длительности kj5, j = 1, ..., г. Пусть первоначально, до назначения на процессор задач г-й процес- сор в цикле длительности к±5 располагал ресурсом Яц — к±69 в цикле длительности к26 — ресурсом R& = к2$ и т. д. Пусть на процессор для решения выбрана задача а с временем решения ta. Пусть она решается в цикле длительности kj6. Ее назначение не влияет на порядок решения задач в циклах меньшей длительности, т. к. они обладают более высоким приоритетом. Однако при последующем назначении на этот же процес- сор задач, решаемых в цикле этой и большей длительности, необходимо учитывать решение задачи — с равным или большим приоритетом. Запишем оператор определения нового значения вычислительного ре- сурса в цикле длительности kj5 и в циклах большей длительности после
единичного назначения на этот же процессор в цикле kjS kj Ril := R%1 - -Г-ta, I = j, j + 1, , Г. kj Здесь ресурс оценивается приближенно, без учета дискретности ра- бот, соразмерности длительности циклов и неточности определения ta. Таким образом, прежде чем производить назначение другой задачи,/?, решаемой в цикле длительности kj6, на г-й процессор, необходимо про- верить, располагает ли он ресурсом Rij tp! Если располагает, назна- чение производится, после чего значения ресурса для I j уточняются. Если не располагает, производится поиск подходящей задачи. Это и было отражено выше при рассмотрении назначения в одно- и многоциклическом режиме решения задач. 21.4. Комбинированное диспетчирование в ВС с очередью Рассмотрим более детально, применительно к сложным системам обработки информации или к АСУ, как организуется параллельный про- цесс в таких системах. При этом мы увидим, что в реальных систе- мах принципы централизованного и децентрализованного управления причудливо переплетаются. Будем ориентироваться на ВС с очередью, обеспечивающей виртуализацию вычислительного ресурса (процессо- ров), что характерно для семейства «Эльбрус». Такие ВС в значительной степени обеспечивают децентрализованное диспетчирование. Итак, специально организованная программа, выступающая как са- мостоятельно, так и во взаимодействии с другими подобными програм- мами, как указывалось выше, соответствует некоторому процессу. Если данный процесс прерывается, то текущее состояние стека процессора, который его выполнял, а также состояние ряда регистров необходимо за- помнить. Поставим в соответствие состояние стека процессора, выпол- няющего данный процесс, в том числе то состояние, которое предше- ствует выполнению (если процесс только сформирован, но еще не начал выполняться), этому процессу, дополнив его состоянием необходимых регистров. Иными словами, введем понятие стека процесса, которым об- ладает каждый процесс, о чем говорилось выше. Стек процесса может пе- реходить из пассивного состояния в активное и обратно. Отсюда — поня- тия активного и пассивного стека процесса. Активный стек связан с обору- дованием или «наложен» на оборудование и, следовательно, находится в состоянии изменения. Пассивный стек — это «моментальный снимок»,
временной срез прерванного (или не начавшегося, или кончившегося) процесса, ждущего дальнейшего выполнения (или уничтожения). Таким образом, стек процесса отражает текущее состояние процес- сора, выполняющего данный процесс. Стек процесса можно запомнить на момент прерывания, и хранимой в нем информации при обратном «наложении» на оборудование — на любой свободный процессор доста- точно для продолжения выполнения этого процесса. Ранее рассматрива- лась структура пассивного стека процесса. Стек процессора обладает активным оборудованием, на которое на- лагается стек процесса для его активизации (рис. 21.6), т. е. для выполне- ния процесса. Активные стеки процессов Стек процесса Стек процесса Стек процесса Пассивные стеки процессов Рис. 21.6. Комбинированное диспетчирование в ВС с очередью Следовательно, рассматривая абстрактно стеки процессов, можно говорить о закреплении за ними ресурсов (процессоров) для их активиза- ции. При этом исключается необходимость привязки к конкретным сте- кам процессоров. Реализуется виртуальный вычислительный ресурс. Ранее говорилось, что информационной основой работы процессо- ров ВС является очередь процессов «к процессору», которую составля- ют пассивные стеки процессов. Из очереди процессов процессоры выби- рают задания по мере окончания выполнения принятых ранее или при необходимости их прерывания. Очередь процессов может формировать- ся на основе любого числа элементов процессов. Естественно, при реа- лизации это число приходится ограничивать. В соответствии с готовно-
стью к выполнению и выполнением различают три состояния процессов: активен, т. е. стек данного процесса находится на стеке одного из процес- соров и, следовательно, этот процесс выполняется; готов к выполнению, т. е. данный процесс не выполняется только из-за отсутствия свободного процессора; ждет, т. е. процесс не может выполняться, пока не произой- дет некоторое событие, обусловленное приоритетом или информацион- ной взаимосвязью процессов. В частности, если в ВС реализован меха- низм семафоров, регулирующий частичную упорядоченность процессов, то процесс может находиться в состоянии ожидания открытия семафора («висеть» на семафоре). Очередь процессов формируется в виде списка, где готовые к выпол- нению процессы выстраиваются по приоритетам. Каждый процесс, еще не выполнявшийся или прерванный, представлен своим стеком. Ждущие процессы, по мере выполнения условий задержки (например, открытия семафоров), занимают место в соответствии со значением приоритета (или вырабатываемым значением приоритета) в очереди процессов. Про- цессор выбирает процесс из головы очереди. В каждом элементе очере- ди хранится указатель на очередной элемент. Благодаря этим указателям очередь сплетается в нужном порядке. Исследуя динамическое управление составом очереди и порядком следования в ней процессов, можно организовать различные способы ра- боты ВС. Например, можно периодически подставлять в очередь про- цессы, реализующие процедуры контроля состояния средств ВС, опро- са терминальных устройств, работ по организации памяти, уничтожения процессов и т. д. Возможны различные альтернативные способы влияния на состав очереди. Способ постановки в очередь особенно оправдан при низких требованиях к точности определения момента инициализации ра- бот. Если такие требования высоки, то на помощь приходит механизм прерываний. На рис. 21.7 отражен текущий вид очереди, а также те связи (штри- ховыми линиями), которые возникнут, если откроются семафоры АиВ выполняемыми на процессорах процессами. Приоритеты процессов могут периодически изменяться, если это необходимо. Например, система может повышать приоритет тех про- цессов, у которых достаточно частый обмен информацией с внешним полем. Это увеличивает эффективность мультипрограммной обработки, т. к. прерывание для обменов все равно потребует включения в решение других задач, а окончание обменов позволит вернуться к решению пре- рванных. Для повышения надежности и универсальности используемых ре- сурсов стеки процессоров могут быть нежестко закреплены за процессо-
Рис. 21.7. Учёт приоритета задач в очереди рами (см. идею решающих полей!). В стеке процессора в основном кон- центрируются устройства памяти процессоров, основные регистры, над которыми производятся операции. Операционные устройства могут быть отделены от собственно процессора и рассматриваться отдельно. Соб- ственно процессором остается устройство управления, ведающее обра- боткой потока инструкций, их назначением для выполнения. Это допус- кает перекоммутацию (показана штриховой линией на рис. 21.8) связи процессор-стек процессора в случае отказов процессоров, т. к. стек отка- завшего процессора соответствует пассивному стеку некоторого процес- са. При этом может быть учтен приоритет решаемых процессорами задач. Для оперативного продолжения одними процессорами работ, вы- полнение которых уже начато на других процессорах, целесообразно, чтобы стеки процессоров составляли общую память, доступную всем процессорам. В то же время, эти стеки должны быть в разных блоках этой памяти, что должно допускать одновременное обращение, т. е. должны быть минимизированы взаимные помехи при работе процессоров. Связь с закрепленными за ними стеками процессоры могут осуществлять с по- мощью специально выделенных базовых регистров, адреса которых раз- личимы для специальных команд, ведающих коммутацией, и неразли-
Рис. 21.8. ВС с управляющими процессором и стеком чимы для процессоров: часть адреса такого регистра является общей для всех процессоров. В частности, возможна следующая процедура продолжения работы ВС в случае отказа или отключения одного из процессоров. 1. Прерывается работа головного процессора. 2. Запускается на нем процедура анализа активных процессов. 3. Данная процедура находит среди всех активных стеков стек вы- полняемого процесса с минимальным приоритетом. При этом возможны два случая: 1) процесс из стека отказавшего процессора оказывается в числе процессов с минимальным приоритетом, тогда этот процесс переводится в очередь процессов; 2) минимальным приоритетом обладает активный процесс, не вы- полнявшийся на стеке отказавшего процессора. Тогда изменяется со- держимое базового регистра выполнявшего этот процесс процессора для подключения его к стеку отказавшего процессора, стек прерванного про- цесса становится пассивным и переводится в очередь. Т. к. внутри системы накапливаются разнообразные функции управ- ления (режимами прохождения задач, ресурсами, обеспечением надеж- ности), то слежение за работой ВС должно осуществляться с устойчивым периодом. Одним из вариантов такого устойчивого вмешательства управ- ляющих средств является не только назначение одного из процессоров управляющим, но и формирование в системе специального управляюще- го стека процессора (рис. 21.8). После прерывания управляющего процессора с частотой, с кото- рой производится анализ состояния системы, осуществляется коммута- ция этого процессора с управляющим стеком процессора, чтобы избе- жать работы стандартной процедуры переключения на новый вид работ,
которая может быть значительно более трудоемкой. В управляющем сте- ке процессора работы по управлению могут быть всегда подготовлены (в результате предыдущего включения) к продолжению с момента переклю- чения на них управляющего процессора. Элемент же децентрализованного управления ВС может осуще- ствляться с помощью периодического включения в состав очереди управ- ляющего процесса, объединяющего ряд процедур управления. При каж- дом включении этого процесса подготавливается его следующее включе- ние вновь. С таким процессом может быть связан семафор С, открытие которого может производиться по достижении таймером некоторого зна- чения времени Т = t + т, где t — время настоящей активации управляю- щего процесса; т — период его активации (период или такт управления). Тогда управляющий процесс должен начинаться с процедуры ЖДАТЬ (С,Т)и включать в себя процедуру ЗАКРЫТЬ (С). Очевидно, что такое решение не обеспечивает оперативной и син- хронной работы средств ВС и чревато возможностью отказа ВС без вы- хода на процедуры управления. Поэтому подстановку управляющих про- цессов в очередь все же целесообразно поручить управляющему процес- сору (считая, что им может быть один из процессоров ВС, решающий и основные задачи из очереди). На рис. 21.9 это — управляющие процессы УШ и УП2. Но это, как говорилось ранее, — когда отсутствуют жесткие требования к моменту принятия решения. Управляющие сигналы прерывания Процессоры Очередь Рис. 21.9. Два управляющих процесса в очереди Управляющий процессор реагирует на сигналы прерывания, посту- пающие в жестком временном режиме — с периодом т. По поступлении на управляющий процессор сигнала прерывания может быть произведе- на его перекоммутация на управляющий стек процессора или подстанов-
ка в очередь необходимого управляющего процесса. В этом случае обра- ботка управляющих процессов производится так же, как и других процес- сов, теми процессорами, которые их выбрали для выполнения в соответ- ствии с виртуализацией вычислительного ресурса. Подводя итог анализу способов организации управления вычисли- тельным процессом в ВС, можно выделить три возможности: 1) управление через очередь, при котором управляющий процесс пе- риодически подставляется в очередь и реализуется процессором, выбрав- шим его в соответствии с дисциплиной обслуживания очереди. Такой способ управления приемлем, например, для таких работ, как реоргани- зация памяти, оценка состояния средств и др.; 2) выполнение одним из процессоров функции головного или управляющего. Его работа по обслуживанию очереди периодически пре- рывается для выполнения функций управления ВС; 3) наличие в системе специального управляющего процессора (ино- гда называемого ХОСТ-процессором), в силу назначения и исполнения не участвующего в обслуживании очереди. В многопроцессорных ВС, совмещающих различные режимы обработки информации и нуждаю- щихся в сложном планировании использования ресурсов, целесообразно включение в состав ВС специализированных управляющих процессоров. 21.5. Концептуальные основы распараллеливания в МВК семейства «Эльбрус» 21.5.1. Управление процессами в МВК семейства «Эльбрус» Специально организованная программа, выступающая как самосто- ятельно, так и во взаимодействии с другими подобными программами, на которые разбита задача, соответствует некоторому процессу. Структу- ризация программы — разбиение на процессы — может быть предусмот- рена заранее, статически. Но возможна и динамическая структуризация. Она основана на том, что процесс может «порождать» другие процессы (процессы-«сыновья») или «убивать» их. Если выполняемый на процессоре процесс прерывается, то текущее состояние стека процессора, на котором он выполняется, а также состо- яние некоторых регистров, можно рассматривать, как стек процесса. Он может переходить из активного состояния в пассивное и обратно. Актив- ный стек «наложен» на оборудование и, следовательно, находится в со- стоянии изменения. Пассивный стек — это «фотография» в области ОП прерванного (или не начавшегося) процесса, ждущего дальнейшего вы- полнения.
Стек пассивного процесса (рис. 21.10) состоит из шапки и активной области. Шапка стека паспорт, данные («глобалы») регистры Активная область (стек процессора Рис. 21.10. Стек активного процесса В шапке хранится информация о данном процессе; есть место для хранения содержимого регистров выполнявшего его процессора в мо- мент прерывания для возможности дальнейшего продолжения выполне- ния процесса. Активная область полностью совпадает с состоянием стека процессора в момент прерывания. Рассматривая абстрактно стеки процессов, можно говорить о за- креплении за ними ресурсов для их активизации. При этом исключается необходимость привязки к конкретным стекам процессоров. Процессо- ры выступают в роли ресурса для активизации стеков процессов. В этом выражается идея виртуальных процессоров. Информационной основой работы процессоров МВК является очередь процессов ("к процессору”), которую составляют указатели на пассивные стеки процессов. Очередь упорядочена по приоритетам. Из очереди про- цессоры выбирают задания (процессы) по мере окончания выполнения принятых ранее или при их прерывании. В очереди есть и так называе- мые «ждущие» процессы, которые по мере выполнения условий задерж- ки (например, открытия семафоров) занимают место в соответствии со значением приоритета. В каждом элементе очереди хранится указатель на следующий эле- мент, т. е. очередь представляет списковую структуру. Свободный процес- сор выбирает процесс из «головы» очереди. ОС может динамически менять приоритеты в режиме мультипро- граммного выполнения с разделением времени (в интерактивном ре- жиме). При этом, в частности, реализуется многоочередная дисциплина квантованного обслуживания.
Каждой задаче доступна математическая память размером 232 слов, разбитая на страницы по 512 слов. При выполнении процессов одной задачи в порядке поступления заявок в физической памяти каждой ма- тематической странице выделяется сегмент, соответствующий реальному размеру заявки (физических страниц не существует!). При переполнении ОП ОС пересылает часть физических сегментов во внешнюю память (ба- рабаны, диски) и возвращает их по мере необходимости. 21.5.2. Распараллеливание в МВК. Семафоры Распараллеливание для полного использования ресурсов МВК осу- ществляется двумя путями: 1) на основе естественного существования независимых задач поль- зователей; 2) на основе существования сложных программных систем, которые состоят из взаимосвязанных процессов, допускающих параллельное вы- полнение. Синхронизация информационно взаимосвязанных процессов произ- водится с помощью механизма семафоров. Пусть существует множество величин - примитивов синхронизации, имеющих тип «семафор» и принимающих в простейшем случае два зна- чения: «открыт» и «закрыт». (В другой версии семафор — счетчик; закры- тию соответствует его увеличение на единицу, а открытию — уменьшение на единицу.) В состав ОС входит ряд процедур, которые обеспечиваются аппарат- ными средствами и отражаются на входном языке, т. е. доступны пользо- вателю. Минимально необходимый набор таких процедур: ОБЪЯВИТЬ (С) — объявляется список семафоров С, выделяется па- мять и задается тип переменной при трансляции. ЗАКРЫТЬ (С) — присваивает семафорам, перечисленным в спис- ке С, значение «закрыт». ЖДАТЬ (С) — в случае, если в С указаны семафоры со значением «закрыт», прерывает выполняемый процесс. Стек процесса условно до- полняет очереди к закрытым семафорам, перечисленным в списке С. Та- ким образом, если с данной процедуры начинается выполнение некото- рой работы, то оно будет поставлено в зависимость от условий выпол- нения каких-то других работ. Концом выполнения процедуры является переход к анализу очереди процессов для последующей загрузки процес- сора. ОТКРЫТЬ (С) — семафорам, указанным в списке С, присваивается значение «открыт» и процессоры из очередей к данным семафорам пере- водятся в очередь для продолжения их выполнения.
Очередь процессов, конечно, одна, но в ней процессы, «зависшие» на семафорах, соответствующим образом помечаются. Пусть параллельная программа имеет структуру, представленную на рис. 21.11 информационно-логическим графом (тонкие стрелки — связи по информации, толстые — по управлению). Обозначение процедуры вы- ше вершины с номером процесса означает, что процесс начинается с нее. Если процедура изображена ниже вершины, значит, процесс заканчива- ется ее выполнением. Штриховой линией отмечен возможный переход на повторное решение задачи. Процесс 0: Объявить ( С1г С» С„ С4) Породить процессы 1,2,3,4,7 ЖДАТЬ(С) ОТКРЫТЬ(С) ОТКРЫТЦС) ЖДАТЬ{С, ПОРОДИТЬ 5~~| ЖДАТЬ(С) ЖДАТЬ(С) ПОРОДИТЬ б~~| ОТКРЫТЬЕ ОТКРЫТЬ^ ОТКРЫТЬ^ I Рис. 21.11. Синхронизация распараллеливания с помощью семафоров Выше рассмотрен механизм семафоров для информационно-взаи- мосвязанных или взаимодействующих процессов. Однако семафоры при- меняются и для синхронизации обращений к общим данным и другим общим ресурсам. Рассмотрим вариант, применяемый в МВК «Эльбрус-2». Участок программы, использующий (считывающий или модифици- рующий) общие для нескольких процессов данные, называется критичес- ким блоком (иногда — критической секцией). Для синхронизации (соблюдения последовательности) обращения к общим данным семафоры сопровождают массивы данных и указываются в их дескрипторах. В семафоре предусмотрено поле, в котором указано, сколько процессов пользуются в данный момент этим массивом. Оче- редной процесс перед считыванием из массива увеличивает на единицу
значение этого поля, а при выходе из критического блока уменьшает его на единицу. Ненулевое значение поля означает, что семафор «закрыт по считыванию». Процесс, который должен модифицировать общие данные — этот же массив, — «закрывает семафор по записи», засылая в него соответ- ствующий признак. Попытка закрыть по записи уже закрытый семафор приводит к прерыванию, конфликт разрешает ОС. После модификации общих данных процесс «открывает» семафор. Таким образом, семафор состоит из двух частей. В одной части со- держится счетчик для закрытия по считыванию, в другой — признак (дво- ичная переменная) для закрытия по записи. Указанных операций достаточно для решения различных задач син- хронизации при использовании общих ресурсов. 21.6. Реализация конвейера на симметричной ВС В СССР существовал опыт построения ВС конвейерного типа на основе систем типа MIMD. Такая система («Украина»), названная рекур- сивной машиной, разрабатывалась под руководством В.М. Глушкова в ИК АН УССР. Этот опыт уже тогда продемонстрировал общность прин- ципа симметричных ВС, хотя направленность разработки на параллель- ное выполнение циклов типа «пересчет», по нашему мнению, раскрыта не полностью. Представим себе систему управления в реальном времени, где заяв- ки на обслуживание поступают с максимальной частотой, определяющей минимальную длительность цикла управления (такт) Т, по истечении ко- торого на один из объектов должно быть послано управляющее воздей- ствие. Пусть, однако, длительность решения задач управления одним объ- ектом в несколько раз превосходит значение Г, а характер решаемых за- дач не допускает их распараллеливания. Тогда единственным способом привлечения многих процессоров для совместного эффективного решения задач, т. е. для организации рас- параллеливания, является организация обслуживания заявок на конвей- ере. Пусть обслуживание одной заявки разбито на п (по числу процессо- ров) этапов, по возможности — одинаковой длительности. Максималь- ную из таких длительностей, не превосходящую темпа поступления за- явок на обслуживание, примем за такт обслуживания и работы системы. Каждому этапу соответствует программа или программный комплекс. Процессоры ВС специализируются по этапам обслуживания, т. е. каждый из них выполняет какой-то один этап обслуживания заявок.
Свяжем теперь процессоры ВС в один конвейер, на первую стан- цию которого будем подавать заявки на обслуживание с максимальной частотой, обусловленной тактом, а с последней станции будем снимать результаты обработки информации — с той же частотой (рис. 21.12). Поток результатов обслуживания такт i такт z+1 такт i+n-\ Рис. 21.12. Организация конвейера В этом режиме возможны некоторые издержки, связанные с тем, что при постановке задачи организации управляющей системы может воз- никнуть требование немедленной, не более чем через такт, выдачи ре- зультата реакции системы. В данном же случае обработка одной заявки требует п тактов, т. е. задержка составляет п — 1 тактов. Но если обработка одной заявки не распараллеливается, то либо нужны кардинальные из- менения алгоритмов управления, либо необходимо ждать существенного прогресса в развитии вычислительной техники. Некоторый выход из положения виден в том случае, когда в рас- смотренном режиме производится управление одним объектом. Тогда на основе «физики» процесса может быть справедливым предположение, что каждый результат обработки информации, полученный в г + п — 1 -м такте, на основе некоторой пролонгации соответствует данным, как бы полученным не в г-м, авг + п — 2-мтакте. Т.е. необходимо исследовать возможность пролонгации «устаревших» результатов на тот такт, в кото- ром они получены. Такой пролонгацией на последней станции конвейера должен заканчиваться последний этап обработки заявки. 21.7. Технология data flow на уровне процедур и процессов в симметричной ВС «Идеальные» модели data flow (системы, управляемые потоком дан- ных, потоковые ВС) не нашли практического воплощения. Вместе с тем, каждый разработчик, реализовавший при распараллеливании какой-то
метод синхронизации частично упорядоченного множества работ, кото- рое представляет собой любая программа или программный комплекс, утверждает, что он создал архитектуру data flow. Это традиционно увели- чивает престиж разработки. Следуя все же изначальной идее, мы под принципом data flow бу- дем понимать такой способ синхронизации параллельного вычислитель- ного процесса, когда отдельные составляющие его работы — программ- ные модули, процессы, процедуры, инструкции, команды — имеют воз- можность распознавания и заявления о наличии всех данных для свое- го выполнения. Исполнительные устройства также имеют возможность распознавать работы, для которых существуют все необходимые наборы исходных данных, и выбирать эти работы для выполнения. После выпол- нения они влияют на состав исходных данных других работ, пополняя их. Все это способствует синхронизированному, осмысленному процессу, максимальной загрузке оборудования, автоматическому использованию всех возможностей реализуемых алгоритмов по распараллеливанию. Принцип data flow также можно использовать на двух уровнях рас- параллеливания вычислительного процесса. Рассмотрим возможность его воплощения на симметричных ВС с помощью механизма синхронизации «почтовых ящиков» (рис. 21.13). Рис. 21.13. Схема data flow с помощью «почтовых ящиков» Процессы могут быть причудливо связаны между собой, обмени- ваясь через «почтовые ящики». Однако следует не допускать «зацикли-
вания», т. е. информационный граф, соответствующий этой структуре и описывающий частичную упорядоченность работ, не должен содержать контуров. Итак, мы уже изобразили очередь заданий «к процессору», которая может быть дополнена на основе механизма приоритетов, дополнитель- ными средствами синхронизации с помощью семафоров — для реализа- ции замысла пользователя при построении специализированных систем, а также возможностью «порождать» и «убивать» процессы. Отметим также, что целесообразно совмещать принцип data flow с принципом децентрализованных ВС. Это вновь оказывается совмести- мым с основной идеологией семейства «Эльбрус».
Лекция 22. Организация параллельной обработки информации в АСУ коллективного пользования Рассматриваются принципы организации параллельного вычислитель- ного процесса в управляющей системе с многоканальным доступом. Вычис- лительный процесс обеспечивает устойчивость по отношению к отказам про- цессоров. Ключевые слова: терминал, супервизор, диспетчер, дешифратор за- даний, очередь заданий, список заданий, реконфигурация, голов- ной процессор, ведомый процессор. 22.1. Схема организации параллельного процесса Объединим в законченную модель методы управления, диспетчи- рования, синхронизации работ и контроля состояния вычислительных средств при построении схемы АСУ коллективного пользования на осно- ве многопроцессорной ВС, ВК или процессоров локальной сети, распо- лагающих общей памятью или достаточно оперативным обменом. Считаем, что в состав технических средств АСУ входит множество терминальных устройств или периферийных процессоров локальной се- ти, с помощью которых в ВС поступают заявки на решение одной или более задач. Кроме того, в ВС могут решаться фоновые задачи, связан- ные с наступлением предусмотренных сроков их решения. Каждая заявка проходит следующие этапы обработки (рис. 22.1): прием текста заявки в приемное поле (область памяти ВС), связанное с терминалом; дешифрация и присвоение приоритета; формирование за- дания в списке заданий ВС; выполнение, выдача в ответное поле резуль- татов в стандартной форме; выдача ответа на терминальное устройство. Рис. 22.1. Этапы обработки заявок
На рис. 22.2 показано закрепление средств специального программ- ного обеспечения за процессорами ВС. Рис. 22.2. Организация вычислительного процесса и средств повышения надёж- ности Выбором головного процессора П1 и установлением нумерации Пг, г = 2, ..., п остальных ведомых процессоров определяется конфигурация ВС. Функции головного может исполнять любой из процессоров в ре- зультате реконфигурации ВС. Реконфигурация осуществляется по призна- ку, вырабатываемому в ВС в случае изменения ее состава. Смена головно- го процессора производится при его отключении. На головном процессоре выполняются супервизор ВС и дешифра- тор заданий. В памяти, доступной всем процессорам, хранится очередь заданий, учитывающая их приоритет, а также список заданий, выполня- емых каждым процессором. Децентрализованное диспетчирование осу- ществляется в основном с помощью идентичных экземпляров диспетче- ров, выполняемых каждым процессором, в том числе и головным. Дис-
петчеры отличаются входящими в их состав программами реконфигурации: для головного процессора (программа реконфигурации 1) и для ведомых (программа реконфигурации 2). Супервизор включается по прерыванию в моменты времени кт, к = О,1,.... В эти моменты производится блокировка прерывания процес- сора П1 работами с более низким приоритетом. Супервизор имеет выс- ший приоритет по отношению ко всем работам в АСУ, уступающий лишь основным работам операционной системы общего программного обес- печения ВС. Затем включается программа реконфигурации ВС, которая после выполнения всех необходимых работ, предусмотренных для головного процессора, вновь передает управление супервизору ВС. Начинается циклический опрос состояния буферов терминалов. Каждый буфер терминала представляет собой область памяти, в кото- рой накапливается информация, поступающая от закрепленного за ней терминального устройства через канал связи. Если очередной проверяе- мый буфер не пуст, проверяется, верен ли пароль, представляющий собой код или слово, закрепленное за каждым терминальным устройством или пользователем, с целью ограничения доступа к АСУ. Верное значение па- роля является признаком начала текста входного сообщения. Проверяет- ся, заканчивается ли текст признаком «конец задания», указывающим на окончание выдачи входного сообщения. Если выдача задания еще не за- кончена, увеличивается значение счетчика времени существования неза- конченных заданий от данного терминала. Счетчик позволяет выявлять случаи, когда выдача заданий по какой-либо причине оказывается пре- рванной. По достижении максимального значения этого счетчика буфер терминала чистится. Если выдача задания закончена, супервизор передает управление дешифратору заданий, который на основе входного сообщения форми- рует задание. Заданию присваивается значение приоритета на основе та- блицы приоритетов. Сформированное задание оформляется как процесс или несколько взаимосвязанных процессов и помещается в очередь зада- ний в соответствии со значением приоритета. Указанная работа произво- дится для всех буферов терминалов. После формирования заданий по входным сообщениям с терми- налов супервизор приступает к подготовке выполнения периодических заданий, предусмотренных регламентом обновления информации о со- стоянии средств системы. Для каждого задания, включенного в список выполняемых периодически с заданным темпом решения, проверяется, совпадает ли значение кт с началом его выполнения. Если совпадает, в очередь заданий заносится соответствующее задание с указанием его
приоритета. Рассчитывается следующий момент начала выполнения дан- ного задания. Этим заканчиваются все работы супервизора. Снимается ранее уста- новленная блокировка прерывания от менее приоритетных задач, после чего управление передается диспетчеру. Программа реконфигурации для головного процессора в стандарт- ной ситуации получает управление от супервизора. Через блок внешних сигналов связей или общую память на все процессоры в специально ор- ганизованные области памяти рассылается текущее значение таймера. В свою очередь, в память Пх также поступают отметки времени от осталь- ных активных процессоров, вытесняя пришедшие ранее. Каждая из этих отметок сравнивается с текущим значением t таймера Щ. Если значение отметки, пришедшей от процессора П$, превышает значение t - 2т, про- цессор П; признается активным. Отрезок времени длиной 2т принимает- ся во избежание дополнительной синхронизации обмена отметками. Ес- ли последняя отметка от процессора П* пришла ранее момента t - 2т, этот процессор считается вышедшим из активного состояния. Задания, выполнение которых начато, но не закончено на Пг, переводятся вновь в очередь заданий. Для этого используется список выполняемых заданий. Производится перенумерация процессоров Щ для j > г уменьшением их номера на единицу. Таким образом производится анализ временных отметок всех ведомых процессоров. По окончании анализа управление вновь передается супервизору. Второй вход в программу реконфигурации для головного процес- сора осуществляется только в момент возложения на данный процессор функции головного в результате реконфигурации и производится в об- ход блока отметки данного процессора в областях памяти других процес- соров. Причина в том, что данный процессор, выполняя функции ведо- мого, перед указанным входом такую рассылку временной отметки уже произвел. Программа реконфигурации для ведомого процессора (программа реконфигурации 2) входит в состав диспетчера и включается по преры- ванию в моменты времени кт, к = 0,1,.... Устанавливается блокировка прерывания от работ с более низким приоритетом, т. е. от всех работ АСУ. Рассылается временная отметка всем процессорам с номерами, больши- ми номера данного процессора. Производится анализ, отметился ли в об- ласти памяти данного процессора хотя бы один процессор с меньшим номером. Если отметился, уточняется номер данного процессора с по- мощью числа активных процессоров с меньшими номерами, после че- го снимается установленная ранее блокировка прерывания и включается диспетчер.
Если данный процессор не обнаружил временных отметок всех про- цессоров с меньшими номерами, он считывает все элементы специально- го программного обеспечения, превращающие его в головной. Продол- жается выполнение программы реконфигурации для головного процес- сора со второго входа, как говорилось выше. 22.2. Диспетчирование Диспетчер (рис. 22.3) включается в трех случаях: по признаку «конец задания», по признаку «процессор свободен» и по прерыванию в момен- ты времени кт, к = 0,1,.... Признак «конец задания» формируется в случае окончания выпол- нения каждого из заданий, ранее назначенных на процессор. Признак «процессор свободен» выдается в случае, когда выполне- ние программ всех заданий, составляющих один пакет на процессоре, прервано внешним обменом и в соответствии с мультипрограммным ре- жимом целесообразно пополнить пакет из очереди. При входе в диспетчер проверяется (блок 1) необходимость выпол- нения программы реконфигурации в момент времени кт, к = 0,1,.... За- тем (блок 2) проверяется, произведено ли включение диспетчера по при- знакам «конец задания» или «процессор свободен». Если да, то при на- личии ранее прерванных заданий (блок 3), обладающих не более высо- ким приоритетом, чем приоритет прерванного обменом или выполнен- ного задания, производится восстановление первого из таких заданий (блок 4). Если ранее прерванных заданий нет, необходимо обращение к очереди заданий. Одновременно возможно обращение к очереди только одного про- цессора, поэтому при каждом обращении проверяется (блок 5), произве- дена ли блокировка обращения к очереди в результате выполнения дис- петчера на другом процессоре. Если такая блокировка установлена неко- торым процессором, на котором диспетчер производит аналогичные ра- боты, то диспетчер на данном процессоре пребывает в режиме ожидания, циклически выполняя блок 5. При отсутствии блокировки она устанав- ливается (блок 6). Если включение диспетчера произошло по признаку «процессор свободен» (блок 7), то при наличии заданий в очереди (блок 10) произ- водится назначение на процессор задания, составляющего голову очере- ди (блок 13). Если включение диспетчера произошло по признаку «ко- нец задания» (блок 8), то выполненное задание исключается из списка выполняемых данным процессором заданий (блок 9). Далее также про- изводится назначение нового задания (блок 13) при наличии заданий в очереди (блок 10).
Рис. 22.3. Вычислительный процесс в АСУ коллективного доступа
Если в результате выполнения блоков 7 и 8 оказалось, что диспетчер включен в момент времени кт, к = 0,1,..., при наличии заданий в очере- ди (блок 11) проверяется (блок 12), является ли приоритет выполняемого на процессоре задания ниже приоритета задания, составляющего голо- ву очереди. Если является, то для дальнейшего выполнения выбирается задание, составляющее голову очереди. Выбранное задание отмечается в списке выполняемых заданий (блок 14). Снимается блокировка обращения к очереди (блок 15), и, ес- ли в результате работы диспетчера процессор обладает готовым к выпол- нению заданием (блок 16), осуществляется переход к его выполнению. В противном случае продолжается циклическое обращение к диспетчеру до формирования готовых к выполнению заданий.
Лекция 23. Диспетчирование параллельных вычислительных систем Предлагаются диспетчеры для оптимального динамического распреде- ления работ между процессорами однородной и неоднородной вычислитель- ной системы. Рассматриваются множества независимых и частично упоря- доченных работ. Ключевые слова: частичная упорядоченность работ, однородная ВС, неоднородная ВС, решающее правило, информационный граф, матрица следования, входы. 23.1. Диспетчер последовательного назначения 23.1.1. Частичная упорядоченность работ отсутствует Пусть на ВК или многопроцессорную ВС поступает поток заданий, которые объединяются в пакет. Каждое задание требует запуска соответ- ствующей программы. Программы не зависят друг от друга, т. е. одни про- граммы не используют результаты выполнения других в качестве исход- ных данных. Сформированный пакет заданий необходимо выполнить за минимальное время, добившись максимальной эффективности вычис- лительных средств. Это означает необходимость распределения работ по времени их выполнения «поровну» между процессорами ВС. Данная задача известна как задача о рюкзаках и отображает необхо- димость распределения неделимых объектов (нельзя разрезать консерв- ную банку или спальный мешок!) так, чтобы веса рюкзаков были как можно ближе к одинаковым. Известен «хороший» эвристический алгоритм, для которого не уда- лось найти пример неточного оптимального распределения. Формируется очередь заданий (программ), представляющая собой невозрастающую последовательность времен их выполнения. Например, такая очередь может иметь вид, представленный на рис. 23.1, где дли- на каждого прямоугольника условно соответствует времени выполнения программы, указанного внутри него. Сформулируем основное правило назначения: исполнитель, набравший минимальный вес, берет работу из головы оче- реди.
Голова очереди Рис. 23.1. Множество работ, упорядоченное по невозрастанию времени выполне- ния Пусть заданы три процессора-исполнителя. Первоначально все ис- полнители свободны. Тогда их приоритет обращения к очереди опреде- ляется их номерами. Очевидно, что при трехкратном обращении к очере- ди (каждым процессором) их загрузка будет выглядеть, как показано на рис. 23.2. Рис. 23.2. Первый шаг распределения Справа на рисунке показана суммарная текущая загрузка каждого исполнителя. 2. Так как теперь минимально загружен третий процессор, он выби- рает работу с весом 12, и вся картина загрузки принимает вид, отражен- ный на рис. 23.3. 3. Затем последовательно назначаются на процессоры 1 и 2 рабо- ты с весами 10 и 8. Загрузка процессоров принимает вид, показанный на рис. 23.4. 4. Продолжая таким же образом, получим окончательный план (рис. 23.5) выполнения работ. Легко убедиться в том, что более «короткого» плана выполнения данного комплекса работ нет, т. е. распределение совпало с оптимальным.
Рис. 23.4. Третий шаг распределения Рис. 23.5. Окончательный план выполнения работ 23.1.2. Диспетчер распределения частично упорядоченного множества работ в однородной ВС В основе практических диспетчеров ВС лежат эвристические ал- горитмы оптимального распараллеливания. Это обусловлено высокой сложностью методов точного решения задач распараллеливания. Реали- зация таких методов потребовала бы неоправданно больших затрат вре- мени компьютера. Кроме того, подобные методы не позволяют получить
гарантированные оценки времени решения: это время колеблется в боль- шом диапазоне в зависимости от случайно складывающейся ситуации. Эвристические методы обеспечивают компромисс между временем рабо- ты диспетчера и точностью вырабатываемого расписания работы процес- соров ВС. Частичная упорядоченность заданий, точнее — программ их выпол- нения, означает, что одни программы используют результаты выполне- ния некоторых других программ данного пакета. Отражая этот факт гра- фически и введя нумерацию программ, получают графовую структуру, показанную, например, на рис. 23.6. Рис. 23.6. Частично упорядоченное множество работ Априорное формирование очереди невозможно, и очередность на- значения работ выявляется динамически, по мере выполнения или ими- тации выполнения предыдущих шагов распределения заданий. Пусть программы, образующие данную структуру, необходимо рас- пределить между двумя процессорами так, чтобы время их совокупного выполнения — время окончания выполнения вычислительного процес- са, было минимальным. 1. Выделяются входы графовой структуры, т.е. программы, не ис- пользующие выходную информацию других программ. В данном случае это — единственная программа № 1. Она назначается на первый свобод- ный процессор 1. Множество входов исчерпано. Временная диаграмма загрузки процессоров ВС принимает вид, показанный на рис. 23.7. 2. Имитируется счет времени t, чем отслеживается состояние систе- мы. Видно, что только в момент t = 2, т. е. после окончания выполнения программы № 1, могут появиться возможности для дальнейшего назна- чения. Работу №1 необходимо исключить из рассмотрения. Граф-схема на момент t = 2 принимает вид, показанный на рис. 23.8.
Рис. 23.7. Первый шаг распределения Рис. 23.8. Имитация выполнения первой работы 3. Вновь выделяются входы графовой структуры текущего вида. В данном примере это программы, составляющие множество {№2, №3, №4}. Здесь целесообразно ввести в действие обязательный элемент любо- го эвристического, т.е. использующего основополагающую догадку, ал- горитма решения сложной комбинаторной задачи, к которой относится задача диспетчирования, — решающее правило*. Из тех задач, выполнение которых может быть начато на данном шаге распределения, в первую очередь назначать ту, которая обла- дает максимальным временем выполнения. Частным случаем этого правила является способ назначения зада- ний при отсутствии частичной упорядоченности. В результате упорядочения программ по невозрастанию времен их выполнения формируется очередь на данном шаге распределения: {№3,
№2, №4}. Диаграмма последовательной однократной загрузки свободных с момента t = 2 процессоров принимает вид, показанный на рис. 23.9. Рис. 23.9. Второй шаг распределения 4. Вновь включается счетчик времени, следя за состоянием системы. Очевидно, что какие-то изменения могут наступить только в результате выполнения заданий. В момент t = 4 заканчивается выполнение про- граммы №2. Хотя новых входов в граф-схеме не образуется, есть вход (программа №4), оставшийся после предыдущего шага распределения. Программа №4 назначается на освободившийся процессор 2. 5. Затем таким же образом производится назначение программ №5 и №6, и формируется окончательный вид (рис. 23.10) временной диа- граммы выполнения пакета заданий. Рис. 23.10. Окончательный план выполнения работ Значит, весь пакет программ выполняется за восемь условных еди- ниц времени. Полученный план выполнения заданий в примере совпа- дает с оптимальным, т. к. более «короткого» расписания найти невозмож- но. В общем случае это свидетельствует о том, что данный алгоритм дис- петчера «хороший», но не обеспечивает точного решения задачи опти- мального распараллеливания. Точное же решение такой задачи, ввиду ее высокой сложности, не может служить основой оперативного диспетче- ра ВС.
23.1.3. Формальное описание алгоритма диспетчера Пусть задана (рис. 23.11) расширенная матрица следования S*, отражающая информационные связи внутри множества т работ j = 1, ..., т. Веса tj — времена выполнения каждой j-й работы на каждом из п процессоров однородной ВС с общей ОП. Рис. 23.11. Граф алгоритма и расширенная матрица следования Необходимо составить расписание параллельного выполнения ра- бот, при котором время выполнения всей совокупности работ минималь- но. Вспомогательные построения Пусть в результате распределения составляется таблица-расписа- ние а, содержащая п строк — расписаний одному процессору. В стро- ке — последовательность заданий двух видов: выполнить работу (зада- чу, оператор и т.д.) а, простоять t единиц времени Момент Т^,г = 1, ..., п, окончания (отсчет — от нуля) выполнения последней работы или простоя, назначенных к данному шагу распределения г-му процессо- ру, назовем текущим временем занятости процессора. Пусть в процессе распределения формируется таблица (множество) А номеров задач, назначенных к данному шагу распределения последни- ми для выполнения на каждом процессоре. Эти номера заносятся в пози- ции, закрепленные за каждым процессором. Если последним был запи- сан простой, в соответствующей позиции значится 0. В множество В будем объединять процессоры (один или более), имеющие на данном шаге распределения минимальное время занятости. В множество /3 выделим те работы из А, которые выполняются на процессорах из В.
Множество R — множество работ, соответствующих входам (нуле- вым строкам) текущего значения изменяемой в процессе распределения матрицы следования S. Алгоритм. 1. Полагаем первоначально Ti = 0, i = 1, ..., п, А = {0, ..., 0}, В = {1, ..., п}, = 0, R = 0, v = 1, S* = S*; переходим к выполнению шага 6. 2. Находим = тш{7;} и множество В номеров процессоров с найденным временем занятости. 3. Находим множество /3 С А номеров задач, назначенных послед- ними на процессоры из В. После построения /3 все позиции в Л, соответ- ствующие процессорам из В, полагаем равными нулю. Этим моделирует- ся окончание выполнения задач на данных процессорах к моменту 4. Если /3 = 0, переходим к выполнению шага 7 при R / 0 и шага 10 при R = 0; при /3/0 выполняем следующий шаг. 5. Исключаем из S* строки и столбцы, соответствующие задачам, составляющим множество /3. Полагаем v := v + 1. 6. Находим множество R входов матрицы следования Sv, соответ- ствующих не назначенным ранее задачам. Если R = 0, переходим к вы- полнению шага 10. 7. Располагаем номера задач, составляющих Я, в порядке невозрас- тания времени их выполнения. 8. Производим поочередное назначение задач, составляющих упо- рядоченное множество Л, на процессоры, составляющие множество В. Назначенные задачи исключаем из R, а процессоры, на которые произ- ведено назначение, — из В. Номер каждой назначенной задачи заносим в позицию А, соответствующую данному процессору. Время занятости этого процессора увеличиваем на время выполнения назначенной зада- чи. Последовательное назначение прекращается в одном из трех случаев: a) R 0, В = 0; б) R = 0, В = 0; в) R = 0, В / 0. Примечание. Шаги 7 и 8 реализуют решающее правило, лежащее в основе данного (и каждого!) эвристического (практичного, эффективно- го, но не основанного на точном решении сложной задачи) алгоритма распараллеливания. Повторим его: Из тех задач, выполнение которых может быть начато на данном ша- ге распределения, в первую очередь назначать ту, которая обладает макси- мальным временем выполнения. Возможны и другие решающие правила, например, основанные на допустимом резерве времени до обязательного момента окончания реше- ния и др. Применяемое здесь решающее правило обеспечивает высокое быстродействие диспетчера и достаточно редкое (менее 10 %) отклоне-
ние результатов распределения от тех же результатов, получаемых мето- дом точного решения задачи распараллеливания. 9. Если в результате выполнения шага 8 В = 0, переходим к выпол- нению шага 12. 10. Если В / 0, (при этом R = 0), находим 7\ — значение времени занятости одного из процессоров, минимально превосходящее 11. В множество строк, соответствующих множеству В процессоров с временем занятости 7^, записывается задание — простой, 7\ - Tg для всех процессоров из В время занятости полагается равным Т\. 12. Проверяем, все ли задачи распределены: S* = 0"? При отрица- тельном результате проверки выполнение алгоритма продолжаем с ша- га 2. Пример. Продолжим рассмотрение G и S* (S’), представленных на рис. 12.11. 1. R = {l},Ti = Т2 = 0, А = {0,0},В = {1,2},/3 = 0, ст = 0. Задачу 1 назначаем на первый процессор и исключаем из R. После этого А = {1,0},В = {2},71 = 2. Т.к. теперь R = 0,В / 0, записываем во вторую строку а «простой в 2 единицы». Таблица а примет вид 1 Т\ = 2 Тг = 2 2. А = {1,0},= 71 = Т2 = 2, В = {1,2},0 = {1}. После исключе- ния из S* первой строки и первого столбца (рис. 23.12) сформируем мно- жество входов R = {2,3,4} которое переупорядочим по невозрастанию времен решения задач, R = {3,4,2}. В результате последовательного назначения задач из R таблица ст примет вид 1 1,3 71 = 5 2 ,4 72 = 4 3. А = {3,4}, 7}, = min{5,4} = 4, В = {2}, /3 — {4}. После исклю- чения из S* (рис. 23.13) информации о задаче 4 сформируем множество неотмеченных в А входов R = {2,6}.
Рис. 23.13. Матрица следования после второго шага распределения Таблица а примет вид 1,3 2 ,4,2 71=5 72 = 5 4. А = {3,2},ТД = 5, В = {1,2}, /3 = {3,2}. После исключения (рис. 23.14) информации о задачах 3 и 2 из S* найдем R = {5,6}. В ре- зультате последовательного назначения получаем окончательный вид та- блицы а. 5 6 1 1, 3, 5 2 2 , 4, 2, 6 7^ = 7 Т2 = 6 Рис. 23.14. Матрица следования после третьего шага распределения и окончатель- ный план выполнения работ Треш = max{Ti, Т2} = 7 и совпадает с точным минимальным. 23.2. Диспетчирование неоднородной ВС 23.2.1. Информационные графы с векторными весами вер- шин Часто в состав ВС включают средства (процессоры) разной специа- лизации и производительности. Например, МВК «Эльбрус» может ком- плексироваться разными ЭВМ, но допустимо исследование его как еди- ной ВС. Новые ВС могут дополняться процессорами — эмуляторами ра- нее распространенных ЭВМ — для использования ранее разработанных программных продуктов. ВС, используемые в системах управления, до-
полняются процессорами, специализированных для решения конкрет- ных задач, и т. д. Появляется дополнительный выбор: на процессор какого типа воз- ложить решение задачи? На основе каких типов процессоров с учетом количества процессоров разного типа целесообразно скомпоновать си- стему? Как спланировать работу неоднородной ВС таким образом, чтобы данный алгоритм выполнялся за минимальное время? Пусть ВС комплектуется процессорами к типов по производитель- ности и специализации. Пусть n$, г = 1, ..., fc, — число процессоров г-го типа. Тогда для каждой работы следует задавать не скалярный вес (таки- ми весами мы пользовались ранее), а вектор — вес. Каждая компонен- та такого веса равна времени выполнения работы процессорами соответ- ствующего типа. Например, для к = 2 граф G с векторными весами вер- шин представлен на рис. 23.15а, а расширенная матрица следования — на рис. 23.155. Рис. 23.15. К распределению работ в неоднородной ВС: а — информационный граф, б — расширенная матрица следования
На таком графе можно сформулировать оптимизационные задачи 1 и 2 (см. лекцию 20). Однако их методы решения весьма трудоемки (зада- чи экспоненциальной сложности), поэтому их заменяют эвристически- ми методами (полиномиальной сложности). Более того, пусть мы умеем решать задачу нахождения плана выполнения работ, минимизирующего время выполнения всего алгоритма (т.е. задачу 2). Тогда на основе это- го решения можно давать заключение о возможности применения ВС в каждой конкретной комплектации, т.е. о решении задачи 1. При этом придется испытывать различные комбинации такой комплектации. Таким образом, необходимо построить достаточно эффективный алгоритм диспетчирования неоднородной ВС, т. е. эвристический алго- ритм планирования выполнения за минимальное время алгоритма, за- данного информационным графом с векторными весами вершин. 23.2.2. Диспетчер последовательного назначения для неод- нородной ВС В основе диспетчера лежит следующее решающее правило:___ При известных текущих значениях занятости процессоров, готовые к выполнению работы назначаются так, чтобы в первую очередь вы- полнялись более трудоемкие, и чтобы каждая работа была назначена на тот процессор, который раньше других закончит ее выполнение. Введем сквозную нумерацию процессоров от 1 до N = щ. За- дадим вес {tji, ..., вершины (j = 1, ..., т;т — размер матрицы S или объем буфера диспетчера) так, что при новой нумерации процессо- ров tji — врел|я выполнения j-й работы /-м процессором. Например, при k = 2,ni = 1,п2 = 2 расширенная матрица следования на рис. 23.15,6 примет вид, представленный на рис. 23.16. В процессе распределения работ будем формировать расписание в виде таблицы т, состоящей из N строк, каждая из которых соответствует одному процессору. В строке будем записывать последовательность зада- ний одному процессору. Задания имеют два вида: выполнить работу а, простоять t единиц времени (изображается L£J). Момент Ti, i = 1, ..., N, окончания (отсчет ведется от нуля) выполнения последней работы или простоя, назначенных к данному моменту распределения г-му процессо- ру, назовем текущим временем занятости процессора. В процессе распределения и имитации выполнения работ будем ис- пользовать множество А номеров работ, уже назначенных на процессоры, но не выполненных в анализируемый момент времени. А представляет собой таблицу, содержащую пары «назначенная для выполнения задача — время окончания ее выполнения», т. е. А = {а7 tj}.
Множество R — множество работ, соответствующих не назначен- ным входам (нулевым строкам) текущего значения изменяемой матрицы следования S. Алгоритм диспетчера 1. Полагаем первоначально 7} = 0,1 = 1,...N,A = В = R = 0,у = 1, Sy = S, (и — номер шага распределения). Переходим к выполнению 5. 2. Находим в множестве А значение = minify} и множество В С А номеров работ, назначенных на процессоры и закончивших вы- полнение к моменту tp. Полагаем равными нулю все позиции А, состав- ляющие В. Этим имитируется окончание выполнения работ на процес- сорах к моменту времени tp. 3. Для всех процессоров, для которых текущее время занятости меньше значения tp(Ti < tp), записываем простой в течение време- ни tp - Ti (символом простоя ^tp — Tj Для этих процессоров полагаем Тг — t /!• 4. Исключаем из Sy строки и столбцы, соответствующие всем рабо- там из В, после чего матрицу Sy(S*) уплотним. Полагаем у := у+1. Таким образом сформируется матрица Sy (а также S*) на новом шаге распреде- ления. 5. Находим множество R — входов матрицы следования Sy, соот- ветствующих не назначенным ранее работам. Если R Ф 0, переходим к выполнению 6, в противном случае выполняем пункт 2. 6. Пусть для определенности R = {ai, ..., аг}, работе ар соответ- ствует вес {tpi, ..., tpN},p = 1, ..., г. Формируем суммы 7} + tpi, I = 1, ..., N, р = 1, ..., г. Для каждого значения р (т. е. для каждой работы из R) находим минимальную (по I) из таких сумм, т. е. для каждой рабо- ты находим один или несколько процессоров, на которых время оконча- ния выполнения этой работы минимально при текущих значениях заня- тости процессоров. Найденные суммы сведем в невозрастающую после- довательность Я*, состоящую из г чисел. При этом сохраним информа- цию о соответствии процессорам. 7. Ставим в соответствие каждой р-й работе, представленной в по- следовательности R*, значение сгр, равное числу процессоров, при вы- полнении на которых достигается найденное минимальное время окон- чания выполнения этой работы. 8. Производим последовательное назначение работ на процессоры следующим образом. Назначаем не более N работ слева направо в соот- ветствии с вхождением времени окончания их выполнения в последова- тельность R*. Каждую р-ю работу назначаем на все те процессоры, (их число равно ар), на которых достигается входящее в Я* время окончания выполнения. В результате те работы, для которых а > 1, окажутся назна-
ченными более чем на один процессор, а на один процессор на данном шаге могут оказаться назначенными более одной работы. Чтобы опреде- лить окончательно, на какой процессор должна быть назначена p-я рабо- та, воспользуемся следующей процедурой. Для каждого процессора прово- дим анализ, сколько работ назначено на него на данном шаге распреде- ления. Если назначения не произошло, переходим к анализу назначения на следующий процессор или заканчиваем анализ процессоров, если все они просмотрены. Если оказалась назначенной на процессор одна, р-я, работа, считаем ее окончательно закрепленной за данным процессором, и, если ар > 1, исключаем ее из рассмотрения при анализе последую- щих процессоров — т. е., снимаем ее с назначения на другие процессоры. Если на процессор назначено более одной работы, закрепляем за процес- сором лишь ту работу ар, которая имеет минимальное значение ар. Если несколько работ имеют равное минимальное значение ор, назначаем лю- бую (первую) из них. Для множества работ {7}, отклоненных от назна- чения на данный процессор, полагаем <т7 := <т7 - 1. Значение сг7 = О означает, что работе 7 отказано в назначении на данном шаге распре- деления. Назначенную работу исключаем из рассмотрения при анализе следующих процессоров. Номера назначенных работ оказываются запи- санными в строки таблицы т, соответствующие процессорам. Эти номера исключаем из R. Номер каждой назначенной работы и время окончания ее выполнения (оно же — время занятости процессора) заносим в А. 9. Проверяем, все ли работы распределены. При отрицательном ре- зультате проверки переходим к выполнению 2. Конец алгоритма. Пример. При к = 2,т = 1,п2 = 2, (N = 3) распределим работы, отображенные расширенной матрицей следования на рис. 23.16 (соответ- ствующей графу на рис. 23.15), для минимизации времени выполнения. 1. 71 = Т2 = 7з = О, Л = В = 0,Si = S,R = {1}. Выпол- нение работы 1 ранее всех закончит процессор 1. После ее назначения Т1 = 1,72 = 7з = О, А = {1 1}. 2. Найдем в А работу 1 с минимальным временем окончания выпол- нения, равным 1. Записываем простои в одну единицу времени процес- сорам 2 и 3. Таблица т принимает вид 1 1 Т1 = 1 2 (Ь т2 = 1 3 11, Тз = 1 3. После исключения первой строки и первого столбца из Si (т. е. по матрице S2) найдем R = {2,3,4,6}. Составим таблицу 23.1 времени окон- чания выполнения каждой работы из R каждым процессором I = 1,2,3.
Рис. 23.16. Преобразование расширенной матрицы следования Минимальное время окончания выполнения каждой работы выделено. Формируем последовательность Я* = {6(4; 1,2,3, <т4 = 3), 3(2; 2,3, сг2 = 2), 3(3; 1,сг3 = 1), 2(6; 2,3, <т6 = 2)}, где в круглых скобках указаны номер работы, список процессоров, на которых достигается минималь- ное время окончания ее выполнения, и число ар этих процессоров. Назначим первоначально (таблица 23.2) работу 4 на процессоры 1, 2, 3, работу 2 — на процессоры 2 и 3 , работу 3 — на процессор 1. Таблица 23.2 1 4(<т4 = 3), 3(<т3 = 1) 2 4(<т4=3), 2(сг2 = 2) 3 4(<т4 = 3), 2(а2 = 2) После анализа значений ар оставим на процессоре 1 работу 3 (после чего <т4 = 2), на процессоре 2 — работу 4 (после чего <т2 = 1), на процес- соре 3 — работу 2, А = {3 3,4 6,2 3}. Таблица распределения т
примет вид 1 1,3 Ti = 3 2 lAj’4 Т2=6 3 Jj,2 Тз = 3 4. В = {2,3}. После исключения строк и столбцов, соответствую- щих работам 2 и 3, из матрицы S?, т. е. по сформированной матрице S3, найдем R = {5,6}. Составим таблицу 23.3 значений времени окончания выполнения каждой работы из R каждым процессором. Таблица 23.3 1 7} + Ti + tei 1 5 6 2 10 7 3 7 4 Из таблицы найдем R* = {5(5; 1, <т5 = 1), 4(6; 3, ств = 1)}, Назначим работу 5 на процессор 1, работу 6 — на процессор 3, А = {5 <-> 5,4 <-> 6,6 <-> 4}. Таблица распределения т примет вид 1 1,3,5 Ti = 5 2 T2 = 6 3 J_|,2,6 T3 = 4 5. В = {6}. После исключения строки и столбца, соответствующих работе 6, из матрицы следования S3, т. е. по сформированной матрице S4, найдем R = 0. Назначим процессору 3 простой в течение одной условной единицы времени. Таблица т примет вид 1 1,3,5, Ti = 5 2 lL’4 T2 = 6 3 T3 = 5 6. В = {5}. После преобразования матрицы S±, т.е. по матрице S5, найдем R = {7,8}. Из таблицы 23.4, аналогичной таблице 3, найдем Я* = {9(8;1,а8 = 1),7(7;3,а7 = 1)}. Назначаем работу 8 на процессор 1, работу 7 — на процессор 3. Та- блица т примет вид 1 1,3,5,8 Ti = 9 2 lAj’^ T2 = 6 3 2,6, J-,, 7 T3 = 7
Таблица 23.4 1 Ti + tn Ti + tsi 1 9 9 2 8 11 3 7 10 7. В = {4}. После исключения строки и столбца, соответствующих работе 4, из матрицы следования S5, т.е. по сформированной при этом матрице Sq, найдем R = {9}. Время окончания выполнения работы 9 на процессорах равно соответственно 10, 8, 9. Назначаем работу 9 на про- цессор 2. Таблица т примет окончательный вид 1 1,3,5,8 Ti = 9 2 i>4>9 T2 = 8 3 ^,2,6,^, 7 Тз = 7. Дополнение. Данный диспетчер для неоднородной ВС построен на основе обобще- ния рассмотренного диспетчера последовательного назначения для одно- родных ВС, который можно рассматривать как частный случай при к = 1. Он применим и в другом частном случае: когда отсутствует частич- ная упорядоченность работ, то есть когда надо разделить «поровну» вза- имно независимые работы между п исполнителями. Наглядный пример такого распределения составляет задача о рюкзаках, рассмотренная в раз- деле 23.1.1.
Лекция 24. Синхронизация параллельных процессов Рассматриваются средства и задачи синхронизации параллельных про- цессов при использовании общих ресурсов во избежание коллизий и тупико- вых ситуаций. Ключевые слова: матрица следования, двоичный семафор, семафор- счетчик, процесс, критический интервал, тупик. 24.1. Средства синхронизации параллельных процессов 1. Матрица следования. Является эффективным средством синхро- низации при реализации первого способа распараллеливания. Допускает автоматическое составление в процессе диспетчирования, как рассмот- рено ранее. Легко составляется пользователем, планирующим параллель- ный процесс. Для оптимального планирования требует временной оцен- ки работ либо оценки их сравнительной трудоемкости. Например, пусть методом «разделяй и властвуй» производится рас- параллеливание сортировки слиянием. Известны оценки сложности та- кой сортировки (как функции параметра п — длины последовательно- сти). При разбиении последовательности на две можно построить граф G и его матрицу следования S (рис. 24.1). Рис. 24.1. Составление взвешенного информационного графа и матрицы следо- вания Здесь t — время совместного анализа двух элементов последователь- ности. Значит, веса вершин ti, t2, t3 определены при заданных п и t.
2. Механизм семафоров. Различают двоичные семафоры, имеющие значения «открыт» и «закрыт», и семафоры-счетчики. «Закрытие» увели- чивает их на единицу, «открытие» — уменьшает на единицу. Анализ задач и, в частности, задач обработки больших массивов дан- ных (баз данных и баз знаний) показал целесообразность совместной реа- лизации этих двух принципов в многопроцессорной вычислительной си- стеме. В одном семафоре, назовем его комбинированным, в действитель- ности воплощены два семафора: двоичный и счетчик: С: | Двоичный семафор Са | Семафор-счетчик Сб~| В начале считывания из массива выполняется операция Сб := Сб + 1; при окончании считывания — операция Сб := Сб -1. Значение Сб О означает: семафор С «закрыт по считыванию». При записи в массив выполняется операция: Са := 1, «закрыть», т. е. семафор С «закрывается по записи». При окончании записи выполняется операция Са := 0 — «открыть», т. е. семафор С «открывается по записи». Однако удобства семафора-счетчика могут быть реализованы в про- цедурах над двоичными семафорами. Т. е. двоичный семафор в действи- тельности более универсален. Перечислим основные процедуры над семафорами, реализуемые в МВК «Эльбрус». Процедура ОБЪЯВИТЬ (С) объявляет список семафоров, который рассматривается как описание, действующее внутри данного блока в ал- горитмическом языке. Этим обеспечивается выделение памяти и тип пе- ременной при трансляции. Процедура ЗАКРЫТЬ (С) сначала присваивает семафорам, перечис- ленным в списке С, значение «закрыт». Затем для каждого семафора она проверяет, был ли он закрыт ранее. Если в списке С семафоров указан один или несколько семафоров, которые были закрыты до выполнения данной процедуры, происходит прерывание процесса (задачи). Процеду- ра ОС, запустившаяся по прерыванию, ставит данный процесс в очередь к тем семафорам, которые были закрыты ранее. Таким образом, процесс задерживается до тех пор, пока другие процессы не откроют эти семафо- ры. После прерывания процесса и обработки прерывания процессор об- ращается к очереди для выборки следующего задания — «готового» про- цесса. Если до выполнения данной процедуры все семафоры из списка С были открыты, выполняется следующая инструкция программы. Процедура ЖДАТЬ (С) в случае, если в С указаны семафоры со зна- чением «закрыт», организует прерывание процесса. Процесс, ставший пассивным, дополняет очереди к закрытым семафорам из списка С. Кон- цом выполнения процедуры является переход к анализу очереди «к про- цессору» для последующей загрузки процессора.
Процедура ЖУЖ (С) не переводит процесс в очереди к семафорам, а организует ожидание процессором, на котором выполняется процесс, момента открытия всех семафоров в режиме «жужжания» — непрерыв- ного опроса семафоров, указанных в списке С. Процедура ЖДАТЬ (С,Т) ограничивает время ожидания семафоров, указанных в списке С, значением Г. Процедура ОТКРЫТЬ (С) присваивает семафорам, указанным в списке С, значение «открыт». Процессы снимаются с очереди к указан- ным в С семафорам и, если они не стоят в очереди к другим семафорам, переводятся в очередь «к процессору» в соответствии с их приоритетом. Выполнение этих процессов на процессорах будет продолжено с повтор- ного выполнения тех процедур ЗАКРЫТЬ (С') или ЖДАТЬ (С"), на ко- торых ранее произошло прерывание данной задачи. Таким образом, если прерывание произошло при выполнении процедуры ЗАКРЫТЬ (С'), то всем семафорам, указанным в списке С', вновь присваивается значение «закрыт». При этом, если среди множества семафоров С' С / 0 окажутся такие, которые ранее были закрыты, или другой процесс (на другом про- цессоре) успел закрыть семафор из С' раньше, то выполнение данного процесса вновь прервется и он станет в очередь к закрытым семафорам. Процедура ПРОПУСТИТЬ (С) полностью соответствует упрощен- ной версии процедуры ОТКРЫТЬ (С). Семафорам, перечисленным в списке С, присваивается значение «открыт», и процессы из очередей к данным семафорам переводятся в очередь «к процессору». Если процес- сы находились в очереди к семафорам из С после прерывания в результате выполнения процедур ЗАКРЫТЬЕМ ЖДАТЬ, то повторного выполнения этих процедур не происходит; процессы выполняются со следующей ин- струкции. Пример. Пусть в однопроцессорной ВС в режиме реального времени реша- ются две задачи А и В с разной частотой решения. Задачи оформлены и запускаются как отдельные процедуры. Задача А решается в цикле дли- тельности То, задача В — в цикле длительности Ti = 4ТЬ, но не ранее, чем в цикле длительности Т\ будет решена один раз задача А. Можно предпо- ложить использование сигналов прерывания в моменты времени, крат- ные То. Однако для организации временного режима решения задач мы воспользуемся возможностями операций над семафорами. Будем полагать, что в моменты времени, кратные ТЬ , но не кратные Ti, запускается управляющий процесс (супервизор) УПРО, а в моменты времени, кратные Т\, — управляющий процесс (супервизор) УПР1. Тре- буемая временная диаграмма решения задач представлена на рис. 24.2. Пусть предварительно объявлены семафоры DI, D2, A, Bl, В2.
Рис. 24.2. Синхронизация совместного решения задач в циклах разной длитель- ности Тогда в каждом из процессов могут быть запланированы операции над семафорами, как показано на рис. 24.3. УПРО УПР1 ЖДАТЬф!,^ ЗАКРЫТЬ^!) ЖДАТЬ(О2,^ 3AKPbITb(D2) ЖДАТЬ(А) ЗАКРЫТЬ(А) ЖДАТЬ(В1,В2) ЗАКРЫТЬ(В1) ЖДАТЬ(В2) ОТКРЫТЬ(А) ЗАКРЫТЬ(В2) ОТКРЫТЬ(А,В1) ПРОПУСТИТЬ(В2) Рис. 24.3. Использование операций над семафорами Предположим, первоначально tQ = ti = 0. Тогда из первых команд УПРО видно, что он включается в моменты То,2То,ЗТо,5То,.... УПР1 включается в моменты 0,Ti,2Ti,.... Начальные значения семафоров А и В1 — «закрыт», семафора 2 — «открыт». Первоначально задачи А и В находятся в очереди «к процес- сору». При их назначении на процессор и при выполнении первых про- цедур ЖДАТЬ (А) и ЖДАТЬ (Bl, В2) произойдет прерывание. После него задача А находится в очереди к семафору А, задача В — к семафору 1.
Пусть приоритет задачи А выше приоритета задачи В. (Задачи, решаемые с большей частотой, как правило, снабжаются более высоким приорите- том.) В момент времени, кратный Ti, задача УПР1 закрывает семафор В2, но открывает семафоры А и В1. Задача А переводится в очередь «к про- цессору». Пусть одного процессора достаточно для выполнения всех за- дач. Тогда с учетом приоритета в мультипрограммном режиме задача В решается в промежутки времени, не занятые решением других задач. По- сле выполнения задачи УПР1 начинается выполнение задачи А с закры- тия семафора А. Так как до выполнения процедуры ЗАКРЫТЬ(А) сема- фор А имел значение «открыт», то прерывания выполнения задачи А не произойдет и она будет решена до конца. В конце ее решения по проце- дуре ПР0ПУСТИТЬ(В2) откроется семафор В2 и задача В перейдет в оче- редь «к процессору». Задача А организована по принципу зацикливания, т. е. после ее окончания управление передается на ее начало с процеду- ры ЗАКРЫТЬ(А). Так как к моменту выполнения этой процедуры сема- фор А закрыт в результате ее предыдущего выполнения, произойдет пре- рывание и постановка задачи А в очередь к семафору А. Этот семафор откроется только при выполнении задачи УПРО после увеличения теку- щего времени на То. При этом, т. к. открытие семафора А в задаче УПРО производится процедурой ОТКРЫТЬ, а прерывание задачи А произошло по процедуре ЗАКРЫТЬ, то выполнение задачи А продолжится с выпол- нения процедуры ЗАКРЫТЬ(А). Таким образом, более чем однократное решение задачи А без прерывания вновь окажется невозможным. Аналогично по принципу зацикливания организовано и решение задачи В. После однократного выполнения она будет прервана при по- вторном выполнении процедуры ЗАКРЫТЬ(В1), Семафор В± откроется только при следующем выполнении задачи УПР1 после увеличения те- кущего времени на Т\. При этом выполнение задачи В продолжится с повторного выполнения процедуры ЗАКРЫТЬ(В1), т.к. семафор В1 от- крывается процедурой ОТКРЫТЬ. Однако продолжение выполнения за- дачи В станет возможным после открытия семафора В2. Он же окажется открытым только после однократного выполнения задачи А в цикле дли- тельности Ti после выполнения процедуры ПР0ПУСТИТЬ(В2) в конце решения задачи А. Использования этой процедуры в данном случае до- статочно. Таким образом, соблюдается требуемый порядок решения задач. Теперь усложним пример. Предположим, что для решения задачи А одного процессора недостаточно и необходимо использовать возможно- сти ее параллельного решения. Мы представляем эту задачу в виде ча- стично упорядоченного множества информационно- взаимосвязанных
работ — подзадач — и используем механизм семафоров для соблюдения порядка следования этих работ. При этом мы предполагаем, что в ВС реа- лизовано децентрализованное диспетчирование, т. е. свободные процес- соры обращаются за очередным заданием к очереди «к процессору». На рис. 24.4 представлена примерная граф-схема задачи на основе состав- ляющих ее подзадач. Каждая вершина соответствует подзадаче. Стрелки определяют информационную преемственность. Процедура над семафо- рами, изображенная выше вершины, показывает, что соответствующая подзадача начинается с выполнения этой процедуры. Процедура, изоб- раженная ниже вершины, показывает, что подзадача заканчивается вы- полнением этой процедуры. Рис. 24.4. Синхронизация параллельных вычислений с помощью семафоров 3. Передача сообщений, «почтовый ящик». Метод «почтовых ящиков» является распространенной формой метода передачи сообщений. Каждому процессу выделяется массив — «почтовый ящик», в кото- рый другие процессы направляют свои результаты или сигналы, необхо- димые для выполнения или запуска этого процесса. Возможна реализация виртуальных процессоров. Свободный про- цессор опрашивает очередь подряд, т. е. в соответствии с невозрастани- ем приоритетов, и пытается запустить тот процесс, для которого в его «почтовом ящике» есть вся необходимая для этого информация. Либо же этот анализ может производить сам запускаемый процесс: если всей необходимой информации в его «почтовом ящике» нет, процесс преры- вается и возвращается в очередь. Процессор продолжает циклический опрос очереди.
С помощью «почтовых ящиков» реализуется схема управления по- током данных (data flow), когда явное задание исходной информации для процесса является необходимым условием его запуска. 4. Механизм закрытия адресов. Осуществляется командой вида «за- крыть адрес (по считыванию)». Адрес запоминается в специальном ЗУ, и при попытке считывания по нему производится ожидание — по аналогии с процедурой ЖУЖ. Открывается адрес по записи по нему. Для избежа- ния тупиковых ситуаций, например, ЗАКР а СЧИТАТЬ а указывается номер того процессора, который закрыл адрес. Тогда есть возможность принять какое-то решение. Например, разрешить процес- сору, закрывшему адрес, открыть его. Вернемся к примеру счета способом «пирамиды». Наметилось реше- ние проблемы синхронизации: пусть счет очередного элемента предваря- ется командой, закрывающей адрес результата — считаемого элемента. Засылка найденного элемента откроет адрес. Тогда, пока этот элемент не будет получен, его адрес не сможет использоваться для счета других эле- ментов. Такой способ синхронизации был приведен при рассмотрении архи- тектуры SPMD. 5. Механизм активного ожидания. Он основан на том, что к разделяемой (т. е. к общедоступной) ячейке ОП одновременно может обращаться по записи или считыванию только один процессор. При этом конфликт разрешается аппаратно: один обра- щается, остальные ждут. Тогда в ячейках можно хранить информацию о состоянии процессов. Процессы их могут анализировать и изменять. Пример рассмотрим далее, совместив его с рассмотрением одной из задач синхронизации. 6. Монитор. Монитор - скорее сервисное средство, позволяющее пользователю избежать заботы о синхронизации использования разделяемых ресурсов. Это программный компонент, в котором разделяемые переменные (пред- ставленные именами разделяемых ресурсов) определены как локальные переменные монитора. Определены операции над этими переменными - процедуры монитора. Одновременно только один процесс работает с мо- нитором! Когда процессу требуется работать с разделяемой переменной, активизируется соответствующая процедура монитора. Если при обраще- нии процесса к монитору ресурс занят, то вызывающий процесс должен быть задержан.
С каждой причиной задержки процесса связана специальная пере- менная типа CONDITION (условие), и задерживаемый процесс ставится в очередь к некоторой переменной этого типа. К переменным указанного типа применяются операции WAIT и SIGNAL. Операция WAIT ставит процесс в очередь к данной переменной (например, указывающей на занятость соответствующего ресурса). Опе- рация SIGNAL позволяет активизировать процесс (в случае, когда усло- вие выполнено). 24.2. Задачи синхронизации при использовании разделяемых ресурсов 24.2.1. Основные понятия Объектами распараллеливания являются неделимые процессы — ра- боты, на которые разбивается исходный алгоритм или разрабатываемая программная система. Процессы используют различные устройства, данные, компоненты программного обеспечения, которые называются ресурсами системы. Ресурсы, используемые несколькими процессами, называются раз- деляемыми. Разделяемые ресурсы, которые одновременно могут использовать- ся не более чем одним процессом, называются критическими ресурсами. (Например, очередь «к процессору» — критический ресурс.) Участки программы (процесса), где процессы обращаются к разде- ляемому ресурсу, называются критическими интервалами (блоками, сек- циями). Процессы называются взаимосвязанными, если они используют об- щие критические ресурсы. Процессы называются информационно-взаимосвязанными, если они обмениваются информацией. Процессы называются взаимосвязанными по управлению, если один из них вырабатывает условия для активизации другого (других). Ограничения на порядок выполнения процессов назы- ваются синхронизацией процессов. Отношения между процессами задают- ся правилами синхронизации. Для задания правил синхронизации исполь- зуются механизмы (средства) синхронизации (рассмотренные выше мат- рицы следования, семафоры и др.) Задача синхронизации — это задача, в рамках которой требуется согласовать выполнение нескольких процес- сов. Решение таких задач достигается с помощью механизмов синхрони- зации. С задачами синхронизации связывают тупики (тупиковые ситуа- ции). tynuK — это взаимная блокировка процессами друг друга, при кото- рой их выполнение не может быть продолжено, а также самоблокировка.
Например, процессу А необходимы внешние устройства X,Y. С устройством Y пока работает процесс В. Тогда процесс А «захватывает» пока устройство X и ждет освобождения Y. Но устройство X потребова- лось и процессу В, который также «зависает» в ожидании его освобожде- ния. Под общим тупиком подразумевается взаимная блокировка всех вза- имосвязанных процессов. Под локальным тупиком понимается бесконеч- ная блокировка одного из процессов при попытке войти в критический интервал. Выше был приведен пример: 1) «Закрыть адрес по считыванию» а 2) «Считать по адресу» а Здесь возможен локальный тупик — бесконечное выполнение команды (2), если другой процесс (на другом процессоре) или ОС не «откроет» адрес я. 24.2.2. Задачи синхронизации Известны типичные задачи синхронизации, к которым могут быть сведены практически все известные способы упорядочения работ во вре- мени. Эти задачи, как правило, решаются при реализации второго спосо- ба распараллеливания. 1. Задача взаимного исключения. Имеется несколько процессов, про- граммы которых содержат критические интервалы, где процессы обра- щаются к одному разделяемому критическому ресурсу (например, к базе знаний). Требуется исключить одновременное вхождение в такие крити- ческие интервалы более чем одного процесса. Требования к решению этой задачи: — задержка любого процесса вне его критического интервала не должна влиять на развитие других процессов; — решение должно быть симметрично относительно процессов; — решение не должно допускать тупиков. Решение с помощью механизма семафоров: ЗАКРЫТЬ(С) < Критический интервал > ОТКРЫТЬ(С) Для сравнения приведем альтернативный способ решения с помо- щью механизма активного ожидания. Выделим ячейку памяти С, в которую будем записывать 0, если ни один из процессов не требует доступа к критическому ресурсу, и номер i того процесса (или выполняющего процессора), который вступил в свой критический интервал. Тогда условием вхождения г-го процесса в крити- ческий интервал является результат выполнения следующего оператора:
L: if СОО then go to L else C:= i; if CO i then go to L; < Критический интервал >; C:=0 Действительно, если (С) = 0, то процесс может войти в критический интервал. Однако возможно, что через небольшое время другой процесс (на другом процессоре) тоже сделал такую же проверку и следом за пер- вым произвел засылку в С своего номера. Поэтому требуется повторная проверка того, что в С находится именно номер данного процесса. При положительном результате повторного анализа процесс может вступить в критический интервал, т. е. занять критический ресурс. После выполне- ния критического интервала в С засылается 0. С помощью механизма семафоров такая синхронизация выполняет- ся значительно проще, т. к. многие действия предусмотрены внутри про- цедур их обработки. 2. Задача «поставщики — потребители». Имеется ограниченный бу- фер на несколько порций информации. Он является критическим ресур- сом для процессов двух типов: — процессы «поставщики», получая доступ к ресурсу, помещают на свободное место в буфере несколько или одну порцию информации; — процессы «потребители», получая доступ к ресурсу, считывают из него порции информации. Требуется исключить одновременный доступ к ресурсу любых двух процессов. При опустошении буфера следует задерживать процессы «по- требители», при полном заполнении буфера — процессы «поставщики». Эта задача возникает, например, при обмене с внешними устрой- ствами и заключается в программной имитации кольцевого или бесконеч- ного буфера. Возможная схема решения задачи с помощью семафоров: Процесс "ПОСТАВЩИК”: ЗАКРЫТЬ(С) if < Буфер неполон> then begin < запись>; <изменение индикатора заполнения> end ОТКРЫТЬ(С) Процесс "ПОТРЕБИТЕЛЬ": ЗАКРЫТЬ(С) if< Буфер непуст> then begin < считывание^ <изменение индикатора заполнения> end ОТКРЫТЬ(С) Имитация кольцевого (бесконечного) буфера показана на рис. 24.5. Тогда уточним данную процедуру с учетом используемых индикато- ров считывания и заполнения.
Рис. 24.5. Кольцевой (бесконечный) буфер Процесс ’ ПОСТАВЩИК”: Процесс "ПОТРЕБИТЕЛЬ" ЗАКРЫТЬ(С) if (in + l)mod N / out then begin in := (in + l)mod N; <запись(ш)> end ОТКРЫТЬ(С) ЗАКРЫТЬ(С) - if (out + l)mod N / in then begin out := (out + l)mod N; <считывание(ои1) > end ОТКРЫТЬ(С) 3 Задача «читатели — писатели». Имеется разделяемый ресурс — область памяти, к которой требуется доступ процессам двух типов: Процессы первого типа — «ЧИТАТЕЛИ» — мотуг получать доступ к разделяемому ресурсу одновременно. Они считывают информацию. Процессы второго типа — «ПИСАТЕЛИ» — взаимно исключают и друг друга, и «читателей». Они записывают в разделяемую область па- мяти данные. Задача известна в двух вариантах: 1. «Читатели», изъявившие желание получить доступ к ресурсу, должны получить его как можно быстрее; это — первая задача ЧП. 2. «Читатели», изъявившие желание получить доступ к ресурсу, должны получить его как можно быстрее, если отсутствуют запросы от «писателей». «Писатель», требующий доступ к ресурсу, должен получить его как можно быстрее, но после обслуживания «читателей», подошед- ших к ресурсу до первого «писателя». Это — вторая задача ЧП. Приведем возможное решение задач с помощью комбинированного семафора. Считаем, что процедура ОТКРЫТЬ ПО СЧИТЫВАНИЮ выпол-
няется подобно процедуре ПРОПУСТИТЬ, изменяя только значение семафора-счетчика. Процедура ОТКРЫТЬ ПО ЗАПИСИ выполняется подобно процедуре ОТКРЫТЬ, «открывая» семафор и обеспечивая за- пуск «задержанных» процессов с процедур ЗАКРЫТЬ ПО ЗАПИСИ или ЖДАТЬ ПО ЗАПИСИ, при выполнении которых произошло прерывание. Тогда критические интервалы для каждой задачи могут быть выпол- нены по следующим схемам. Процесс "ЧИТАТЕЛЬ": Процесс "ЧИТАТЕЛЬ": ЖДАТЬ ПО ЗАПИСИ(С) ЗАКРЫТЬ ПО СЧИТЫВАНИЮ(С) < читать > ОТКРЫТЬ ПО СЧИТЫВАНИЮ(С) ЧП-1 Процесс "ПИСАТЕЛЬ": ЖДАТЬ ПО СЧИТЫВАНИЮ(С) ЗАКРЫТЬ ПО ЗАПИСИ(С) < писать > ОТКРЫТЬ ПО ЗАПИСИ(С) ЧП-2 Процесс "ЧИТАТЕЛЬ": Процесс "ПИСАТЕЛЬ": Процесс "ЧИТАТЕЛЬ": ЖДАТЬ ПО ЗАПИСИ(С) ЗАКРЫТЬ ПО СЧИТЫВАНИЮ(С) < читать > ОТКРЫТЬ ПО СЧИТЫВАНИЮ(С) ЗАКРЫТЬ ПО ЗАПИСИ(С) ЖДАТЬ ПО СЧИТЫВАНИЮ(С) < писать > ОТКРЫТЬ ПО ЗАПИСИ(С) 4. Задача «обедающие философы». За круглым столом сидят к фило- софов, которые проводят время, чередуя философские размышления с потреблением пищи. Перед каждым — тарелка спагетти, между тарелка- ми — по одной вилке. Для еды каждому философу требуются две вилки. Использовать можно только вилки, лежащие рядом с тарелками. Так как переходы от размышления к принятию пищи производятся в непредска- зуемые моменты времени, то возможны конфликты и требуется синхро- низация процессов. Представим следующую модель, требующую решение данной зада- чи, — модель оперативного обмена между процессорами векторной ВС или строк (столбцов) матричной ВС (рис. 24.6). Например, после счета очередного элемента в узле сетки результаты должны быть переданы соседним процессорным элементам для исполь- зования в следующей итерации. Очевидна возможность конфликтов при попытке одновременной встречной передачи. Пусть с г-м процессором для передачи влево связан «левый» сема- фор Ci, для передачи вправо — «правый» семафор C,+i (или наоборот).
Рис. 24.6. Связь по схеме «обедающие философы» Пусть каждый процессор, нуждающийся в передаче двум соседям, пы- тается сначала закрыть свой «правый» (аналогично, «левый») семафор. Затем, если это не успел сделать левый сосед, он попытается закрыть «ле- вый» семафор и произвести передачу. Тогда возможен общий тупик, если все процессоры одновременно закроют все семафоры. (При одновремен- ном пересчете значений функции в узлах сетки вероятность такой ситуа- ции высока.) Разрешим четным процессорам сначала закрывать «левые» («пра- вые») семафоры, а нечетным — «правые» («левые»). Тогда схемы про- грамм для них будут выглядеть следующим образом: Для четных процессоров: ЗАКРЫТЬ(Сг) ЗАКРЫТЬ(С$+1) < передача > ОТКРЫТЬЕ, G+1) Для нечетных процессоров: 3AKPbITb(Ci+i) ЗАКРЫТЬ^) < передача > ОТКРЫТЬ^, G+1) Пусть процессор с нечетным номером i нуждается в обмене — влево и вправо. Он пытается выполнить процедуру ЗАКРЫТЬ(С^г), Предпо- ложим, что этот семафор (для него — «правый») закрыт г 4- 1-м процессо- ром. Но для этого процессора с четным номером этот семафор — также первый в порядке закрытия («левый»). Следовательно, он либо ждет воз- можности закрытия своего «правого» семафора, либо ведет обмен. Если он ждет своего «правого» семафора, то он его дождется, т. к. он — второй для процессора г + 2, ведущего обмен. Значит, этот процессор закончит обмен и откроет свой «левый» семафор. Тогда процессор г + 1 выполнит обмен и откроет семафор C$+i. Тогда и процессор г, наконец, сможет вы- полнить необходимую процедуру. После этого он попытается выполнить процедуру ЗАКРЫТЬ(Сг), Этот семафор является «правым», т. е. вторым для процессора с четным номером i - 1. Следовательно, этот процессор закрыл оба связанных с ним семафора и ведет обмен. По окончании об- мена он откроет семафоры, и процессор г дождется необходимого «лево- го» семафора и сможет его закрыть для себя. Таким образом, тупиковая ситуация возникнуть не может. Обычно п — степень двойки. Если же п нечетно, то на границе
п <—► 1 взаимодействуют два «нечетных» процесса обмена. Здесь воз- можна блокировка, когда процессор 1 закроет Сг, а процессор п — се- мафор С1(1 = (n + l)modn)- Однако, процессор п обязательно дождется открытия семафора Сп и выполнит обмен. Значит и процессор 1 дождет- ся открытия семафора С±, выполнит обмен и откроет С2. Так что тупики и в данном случае исключены. Рассмотрение данной задачи синхронизации выводит нас за рамки традиционного применения мультипроцессорной системы типа MIMD, к каким относятся, например, ВС семейства «Эльбрус». Однако универ- сальность такой архитектуры допускает принципиальную возможность воспроизведения на ней более «жестких» архитектур — матричных и век- торных, т. е. типа SIMD. Реализация метода «сеток» на матричных ВС или на структурах типа «гиперкуб» требует подобной передачи не только двум соседним процессорам по строке, но и соседним по столбцу, по диагона- ли и т.д. Значит, возможно обобщение данной задачи и алгоритма син- хронизации. Указанный выше прием разделения процессоров на четные и нечетные может быть применен по всем направлениям обмена — по строкам, по столбцам, по диагонали и т. д. 5.3адача обновления данных. Предполагает запрет на использование обновляемых данных. Например, процессор обновляет запись в базе дан- ных. В простейшем случае может быть использован признак, по которому запрещается обращение к данной записи, пока она не будет обновлена. (Конечно, мы не рассматриваем того примитивного решения, когда БД превращается в ресурс с последовательным доступом. Мы стремимся к многоканальному, параллельному доступу.) Вместо признака может быть использован семафор. Ожидание мо- жет быть организовано процедурами ЖДАТЬ или ЖУЖ.
Лекция 25. Эффективность вычислительных систем Освещаются проблемы оценки производительности многопроцессор- ных вычислительных систем, организации помехоустойчивых вычислений и оценки надежностных характеристик при ипытаниях. Ключевые слова: производительность, надежность, коэффициент загрузки, сбой, отказ, контрольная точка, рестарт. 25.1. Оценка производительности ВС Если несколько процессоров составляют ВС, то важной характери- стикой ее эффективности эффективности (основные составляющие эф- фективности — производительность, надежность, стоимость) при специа- лизированном использовании (например, в составе АСУ) является коэф- фициент загрузки процессоров к$. Для его определения находят коэффици- енты загрузки процессоров к.-ъ_ кзг — гт, -*реш где Ti, i = 1, ..., п — время занятости каждого процессора решением за- дачи на всем отрезке полного решения задачи, длиной ТреШ (рис. 25.1). Т» (суммарное время полезной работы процессора) Рис. 25.1. К эффективности загрузки процессоров Тогда
Если Pq — производительность одного процессора, то реальная про- изводительность ВС, состоящей из п процессоров, при решении данной задачи (!) составляет Рве = п&зРо- Pq определяется классом решаемых задач. Идеальным способом его определения является использование са- мих задач. Однако при предварительной оценке возможностей ВС может еще не существовать алгоритмов той системы, в которой предполагает- ся использовать ВС. Либо класс решаемых задач может быть достаточно широк. Известны несколько подходов к формированию тестов, по кото- рым определяется производительность Pq единичных ЭВМ или процес- соров ВС. Г Смеси операций различных типов в случайном порядке, отражаю- щие их процентное соотношение в задачах интересующего класса. Для вычислительных задач применялась (утвержденная ГОСТом) смесь «Гибсон-3». Она хорошо отражала архитектуру ЕС ЭВМ, воспроиз- водящей архитектуру IBM. Однако ранее говорилось о тенденции повы- шения уровня языка пользователя, об аппаратной поддержке ЯВУ. Смесь Гибсона, приведенная ниже, не отражает этих тенденций. Набор опера- ций примитивен, соответствует ЭВМ ранних поколений. Интерпретация в ней «языковых» операций затруднительна и уменьшает точность оцен- ки. Ее использование определялось требованиями советских ГОСТов. Смесь «Гибсон-3» 1. Загрузка регистра без индексации 31% 2. Загрузка регистра с индексацией 18% 3. Проверка условия и переход 17% 4. Сравнение 4% 5. Сдвиг на 3 разряда 4% 6. Логическая операция «И» 2% 7. Команды с минимальным временем выполнения 5% 8. Сложение с фиксированной запятой 6% 9. Умножение с фиксированной запятой 0,6% 10. Деление с фиксированной запятой 0,2% И. Сложение с плавающей запятой 7% 12. Умножение с плавающей запятой 4% 13. Деление с плавающей запятой 1,5% Приведенная смесь Гибсона интересна статистически произведен- ными оценками состава операций в решаемых задачах вычислительного
характера. Это полезно знать и в других случаях выбора и оценки архи- тектурных решении. Известен принцип построения тестов на основе смеси по методу Ветстоуна, где в состав операций входят операции, реализующие слож- ные языковые конструкции. 2. Ядра. Ядро — небольшая программа, часть решаемой задачи. Ха- рактеристики ядра могут быть точно измерены. Известны ядра Ауэрбаха: коррекция последовательного файла и файла на диске, сортировка, обраще- ние матрицы и др. 3. Бенчмарки — реальные программы, характеристики которых мож- но оценить или измерить при использовании. Обычно берут из числа тех, для которых разрабатывается система. 4. Программа синтетической нагрузки — параметрически настраи- ваемая программа, представляющая смеси определенных программных конструкций. Позволяет воссоздать набор вычислительных характери- стик, свойственных большинству программ, для решения которых ис- пользуется или разрабатывается ВС. 5. У нас в стране в аналогичном применении больше известна модель вычислительной нагрузки. Она применяется на уровне решения вопроса: какие вычислитель- ные средства поставить в систему или заказать их разработку? Модель позволяет перейти с уровня оценки одного процессора ВС на уровень комплексной оценки ВС. Составляется и параметризуется с учетом сложной структуры ВС и ее устройств, параллельного участия этих устройств в решении задач, доли участия и порядка взаимодействия устройств. Например, на основе статистических оценок решаемых в системе управления частных задач (функциональных модулей) строится обоб- щенная модель программы, в которой возможна следующая параметри- ческая настройка: — среднее количество непрерываемых операций, выполняемых про- цессором; — частота обращений к ОП, связанных с запуском механизмов вир- туальной памяти, возможностью конфликтов в связи с расслоением па- мяти, мультипроцессорной обработкой; — частота обращений к ОС (для организации выполнения проце- дур на стеке, индексации массивов, обращения к очереди «к процессору», мультипрограммного режима, синхронизации в режиме реального време- ни, отработки прерываний, счета стандартных функций и др.) и связан- ные с этим потери полезной производительности;
— сценарий параллельного ввода-вывода информации с учетом ее объема; — частота или сценарий внутрисистемного обмена, связанного с необходимостью синхронизации работ в совокупности с параллельным выполнением; — количество процессоров и других функциональных устройств в системе. Однако все эти тесты не дают ответ на традиционный вопрос: ка- кое количество операций в секунду выполняет ВС? Все усложняющаяся структура и расширяющееся множество «нетрадиционных» операций за- трудняют ответ. Тогда особую важность обретают сравнительные оценки исследуемой ВС с другими ЭВМ или ВС, для которых уже известны значения произ- водительности по числу операций в секунду. Итак, структурные средства повышения уровня языка, параллелизм работы устройств, введение дополнительных операций все с меньшей опре- деленностью соответствуют традиционным тестам. Пример — проблема оценки ЦП с многофункциональным АЛУ: как их загружать для реальной оценки (сколько их реально будут загружено в каждом такте), какой поток обмена с ОП предполагать и т. д.? Используется сравнительная оценка характеристик решения задачи на исследуемой ВС и на ВС или ЭВМ, для которой уже известны харак- теристики производительности. Одна и та же задача решается на известной ЭВМ, для которой (из-за ее более простой организации) известно значение производитель- ности или быстродействия; например, ЕС 1066 имеет производитель- ность 5,5 млн оп./с. Однопроцессорный МВК «Эльбрус-2» контроль- ную физическую задачу решает за 6,5 часа, ЕС 1066 — за 21 час. Значит, эквивалентная производительность «Эльбрус-2» в комплектации с един- ственным процессором составляет ~ 5,5 х 21/6,5 = 17,6 млн оп./с (в сравнении с ЕС 1066). Аналогично проводилось сравнение с ЭВМ БЭСМ-6. На этапе испытаний ВС при оценке производительности склады- вается больше определенности по будущему режиму ее эксплуатации. Есть возможность построения контрольной задачи (КЗ), (развивающей идеи бенчмарок), использующую всю ВС. КЗ строится на основе типо- вых задач аналогичных систем управления, использует развиваемый про- тотип системы, воссоздает реальный режим решения. Для КЗ оценива- ется количество так называемых алгоритмических операций (аналог того, что отражено в смеси Ветстоуна). Т.е. можно максимально приблизить вычислительную нагрузку ВС к реальной ожидаемой. Это — современный
комплексный подход, когда КЗ, составленная для всей ВС как для еди- ной установки, учитывает не только использование процессоров, но и затраты на организацию вычислительного процесса, издержки ОС, ин- тенсивность параллельного обмена информацией, организацию помехо- защищенного вычислительного процесса. Относительно последнего следует подчеркнуть: строятся контроль- ные задачи, по которым производительность оценивается с учетом надеж- ности, 25.2. Помехоустойчивые вычисления Поскольку мы не занимаемся разработкой и эксплуатацией ВС как комплекса радиоэлектронной аппаратуры, рассмотрим проблемы оценки и повышения надежности ВС как средства решения конкретных специ- альных задач. В этом смысле под надежностью ВС будем понимать вероятность ре- шения поставленной перед ней задачи. Тогда надежность ВС в составе сложной системы управления опре- деляется следующими факторами: — вероятностью пребывания в исправном состоянии в момент на- чала цикла управления; — вероятностью пребывания в исправном состоянии в течение всего цикла управления; — помехоустойчивостью, т. е. способностью с допустимыми потеря- ми временных, точностных и аппаратурных ресурсов на требуемом каче- ственном уровне завершить цикл управления при возникновении неис- правностей. Построим дерево логических возможностей (рис. 25.2) для нахожде- ния всех вероятностных составляющих вычислительного процесса в ВС. (Дерево логических возможностей строится следующим образом. При исходе из одной вершины на каждом уровне ветвления вводится ис- черпывающее множество событий, т. е. сумма их вероятностей равна еди- нице. Вероятности событий проставляются на дугах. Тогда вероятность интересующей нас совокупности событий находится как сумма произве- дений вероятностей, отмечающих пути, которые ведут к данным событи- ям. Пример проиллюстрирует сказанное выше.) 1. Одной из определяющих характеристик надежности является ко- эффициент готовности Кг К = Т° г 7Ь + Твосст
Рис. 25.2. Дерево логических возможностей для расчёта надёжности где Твосст — среднее время восстановления (в т. ч. ремонта) после отказа. Т. е. к началу цикла управления с вероятностью Кг ВС приступит к реше- нию своей задачи. 2. Если ВС приступила к решению задачи, то возможны три вариан- та: — в течение всего времени t решения задачи (или t — цикл управ- ления) ВС работала безотказно. Т. е. без каких-либо осложнений задача решена в предположении, что программы составлены правильно; — произошел сбой (не усложняя проблемы, учитывая обычную бы- стротечность процессов, считаем, что сбой — единственный); — произошел отказ. Примечание. Сбой — самоустранимый отказ. В результате случайных наводок в некоторой цепи может появиться или пропасть сигнал. Сбои приводят (по классификации разработчиков МВК «Эльбрус») к синхрон- ным и асинхронным авариям. При синхронной аварии (ее вызывают пре- имущественно сбои в ЦП) может быть установлена и повторена команда, при исполнении которой авария произошла. При многочисленных пере- дачах информации внутри ВС используются коды, исправляющие ошиб- ки. Значит, в этом случае сбои также приводят к синхронным авариям. При асинхронной аварии вычислительный процесс нарушается необратимо. При должном уровне аппаратного контроля современных ВС синхронные аварии считаются «невидимыми» пользователю — ко- манды перезапускаются аппаратным контролем.
Примечание. Приведенные ниже выкладки хорошо известны и бесспор- ны для отдельных ЭВМ (однопроцессорных ВС). Поэтому в последующих раз- делах будет показано, как они обобщаются и переносятся на общий слу- чай ВС. Напомним модель надежности. Пусть Ai — частота сбоев (количество сбоев в единицу времени), найденная как одна из характеристик данной ЭВМ; Д2 — частота отка- зов; Ai -|- Д2 = А. Тогда Xt — количество сбоев и отказов за интересующее нас время t — цикл управления. Разобьем отрезок t на множество п элементарных отрезков. Можно считать вероятность сбоя или отказа на таком элементарном отрезке рав- ной Xt/n. Вероятность бессбойной и безотказной работы на элементар- ном отрезке равна 1 — Xt/n. Вероятность того, что на всех элементарных отрезках не произойдет сбоя или отказа, приведет к нахождению степени п этого выражения, а далее найдем предел (рис. 25.3) lim (1 - — )n = e~xt = pi(t). п—>оо fl P\(t) Рис. 25.3. К нахождению вероятности безотказной работы Тогда p2(t) +p3(t) = 1 - e-Af, и разделив пропорционально частотам событий, получим А Рз(<) = Л Запишем полную вероятность успешного решения задачи (надеж- ность), сложив произведения вероятностей по всем путям в дереве логи- ческих возможностей, ведущим к событиям с благоприятным исходом: Р = /CrPi(t) + Кг^О-Рвосст + КгРз^Ррез = = /fr(T>i(t) 4- -Р2(^)РВОсст 4" Рз(1)Ррез)'
Здесь присутствуют величины, которые полностью характеризуют организацию помехозащищенного вычислительного процесса. Защита от сбоев. Самым надежным и испытанным приемом защи- ты от последствий сбоев является двойной просчет. Он характерен для ЭВМ, не обладающих аппаратным контролем. В случае несовпадения ре- зультатов двойного просчета задача считается третий раз. Практически (в АСУ) времени для этого нет. Используют мето- ды программного (алгоритмического) контроля. Например, пусть про- изводится интегрирование уравнения движения летательного аппарата с необходимой точностью. После получения очередных значений коорди- нат производится приближенная линейная экстраполяция для получения тех же координат на основе предыдущих положений объекта. Тогда точно полученные координаты должны попасть в определенную 6- окрестность координат, полученных приближенно. Так производится оценка досто- верности результатов. Т. е. программно-алгоритмический контроль осно- ван на способности предсказания ограниченной области, которой долж- ны принадлежать результаты счета. В современных ВС, как правило, используется аппаратный кон- троль, который устраняет синхронные аварии и сигнализирует о асин- хронных авариях, порождая сигнал прерывания. Отметим сразу, что ве- роятность обнаружения сбоя или неисправности аппаратным контролем меньше единицы (является его характеристикой), что не исключает при- менения методов, о которых говорилось выше. Как правило, использование сигнала аппаратного контроля следую- щее. Программа делится на сегменты некоторого рекомендуемого объема - по времени выполнения и по количеству команд программы, — разде- ленные контрольными точками. Выход на контрольную точку сопрово- ждается запоминанием или дублированием всей необходимой информа- ции для того, чтобы следующий сегмент мог при необходимости пере- запуститься (произвести малый рестарт) , если во время его выполнения произойдет сбой. Используют при этом и расслоение памяти, запоминая необходимые данные для рестарта в других модулях памяти, т. е. преду- сматривая возможность отказов модулей памяти. Рестарт с предыдущей (т. е. ближайшей) контрольной точки производится только в случае сбоя и в целом требует затрат значительно меньших, чем двойной просчет и программно-алгоритмический контроль. Резервирование. Применяется во всех ответственных случаях специ- ального использования ВС. В дополнение к одной, основной ЭВМ ис- пользуются одна и более резервных. Резервные, как правило, не связа- ны с внешними объектами или объектами управления. С ними связана основная, а они могут дублировать ее работу, реализуя двойной просчет
с анализом на совпадение или участвуя в мажоритарной схеме контроля. когда общее число ЭВМ больше двух и когда с помощью мажоритарного устройства на выходе всех ЭВМ производится «голосование»: результаты счета считаются правильными, если получены большинством ЭВМ. Иногда резервируют не отдельно ЭВМ, а весь комплекс — ЭВМ плюс внешние устройства памяти, связи и обмена. Такой комплекс на- зывают линейкой. Различают горячий и холодный резерв. В горячем резерве ЭВМ работает в режиме дублирования или ре- шения вспомогательных задач и в любой момент готова взять функции основной. В холодном резерве машина отключена. Повышение характеристик надежности управляющего ВК можно видеть на примере роста коэффициента готовности ВК. Пусть для одной ЭВМ Кг = 0,9. Тогда использование двух (одна резервная) одинаковых ЭВМ обес- печивает = 1 - (1 - Кг)2 = 0,99 («две девятки»); Использование трех (две резервные) одинаковых ЭВМ обеспечивает = 1 - (1 - Кг)3 = 0,999 («три девятки»). Если в системе несколько ЭВМ, то каждая из них может иметь одну или более резервных. Это — распределенный резерв. Но возможен скользящий резерв, когда несколько ЭВМ являются ре- зервными, и каждая из них способна заменить каждую из основных. Ко- личество резервных ЭВМ в этом случае согласуется с А-характеристикой ЭВМ и количеством основных ЭВМ и приводит к созданию более надеж- ных и более дешевых комплексов. 25.3. Особенности обеспечения надежности ВС Выше мы предположили, что для ЭВМ все сказанное бесспорно и во многом очевидно. Переход к многопроцессорным ВС требует допол- нительных разъяснений. Построение многопроцессорных ВС (в России — семейства МВК «Эльбрус») привело к пересмотру всех традиционных представлений о надежности. С одной стороны, большой объем оборудования при недостатках элементной базы приводит к резкому возрастанию сбоев и отказов в устройствах и модулях, с другой стороны — структурная и функциональ- ная избыточность, виртуализация ресурсов, управление распределением
работ, аппаратный контроль предназначены для выполнения устойчиво- го вычислительного процесса. В этих условиях подвергаются сомнению сами определения сбоя и отказа. Эти определения принимаются по согласованию между разработ- чиком ВС и системщиком, т. е. с учетом требований тех задач, которые должна решать ВС в составе, например, системы управления. Вышел из строя один из 10 процессоров ВС, — отказ ли это ВС? От- вет зависит от конкретной системы, решаемых задач, временного режима их решения, от требований к производительности, принимаемых мер по обеспечению устойчивого вычислительного процесса и т. д. Произошел сбой процессора, при котором сработал малый рестарт, перезапустивший весь процесс или процесс с контрольной точки. Потери времени на этот рестарт не приведут к необратимому нарушению работы всей системы? Т. е. это — действительно сбой или отказ? Тем более сбои в работе ОС или та категория сбоев, которая приводит к перезапуску ВС — к большому ре- старту. загрузке ОС и работе с начала. В «Эльбрусе-2» большой рестарт выполняется более чем за 3 секунды. К чему это отнести — к сбою или отказу? Это зависит от системы, в которой используется ВС. Таким образом, в проблемно-ориентированных ВС проблема сбоев и отказов решается комплексно в соответствии с применением ВС. Использование в ВС большого числа однотипных устройств с уче- том идеи виртуальных ресурсов вносит особенности и в понятие резерви- рования. Реализуется структурное резервирование (развивает идеи сколь- зящего резервирования), на основе которого при отказах производится реконфигурация системы: продолжение ее функционирования при изме- нившемся количестве устройств одной специализации. В этом смысле го- ворят о «живучести» системы. В связи с изложенным, в МВК «Эльбрус-2» одним из механизмов, обеспечивающих «живучесть» комплекса, является система автоматиче- ской реконфигурации и перезапуска при сбоях и отказах (САР). Она вклю- чает в себя специальную аппаратуру, распределенную по модулям МВК, системные шины, программные средства ОС. Аппаратно выполняются следующие действия: 1. Обнаружение аварии в модуле, определение ее типа, сохранение диагностической информации и приостановка работы аварийного моду- ля. 2. Передача информации об аварии по специальным шинам (а мы ду- мали, что связь между модулями ВС — только через коммутатор!) в другие модули. 3. Обработка сигналов аварии, приходящих от других модулей и ис- ключение аварийного модуля из конфигурации.
4. Системная реакция на аварию: либо запуск специальных проце- дур ОС (малый рестарт), либо перезапуск комплекса (большой рестарт). Программно выполняются следующие действия: 1. Сбор и обработка диагностической информации аварийного мо- дуля. 2. Попытка вернуть его в рабочую конфигурацию в предположении, что авария — в результате сбоя. 3. Сохранение в системном журнале информации об аварии. Таким образом, в САР предусмотрены различные реакции на разные типы аварий. Возникновение асинхронной аварии на процессе пользователя ве- дет к автоматическому исключению неисправного модуля из конфигу- рации и к запуску процедуры ОС, обрабатывающей аварийную ситуацию и определяющей дальнейшее течение аварийного процесса — аварийное завершение или перезапуск (малый рестарт). Остальные процессы «не чувствуют» аварийной работы. Исключение составляет случай, когда в конфигурации представлен лишь один модуль некоторого типа. Возник- новение в нем аварии приводит к перезапуску всего комплекса (к боль- шому рестарту). Возникновение асинхронной аварии на процессе ОС всегда заверша- ется большим рестартом. 25.4. Оценка надежностных характеристик ВС при испытаниях 1. Согласуют контрольную задачу (КЗ) или комплекс КЗ, с помощью которых будут производить испытание ВС. В основу КЗ берут те алгорит- мы или их аналоги, которые как можно ближе соответствуют назначению ВС в составе системы управления. Хороших показателей испытаний до- биваются тогда, когда в состав КЗ включают модели управляемых объек- тов и таким образом строят замкнутый контур управления объектом. Мо- дели объектов могут учитывать случайные возмущения, и, следователь- но, управление становится реальным. Такие КЗ наглядны, результатив- ны, бесспорны, поскольку опираются на принцип «удача — неудача». 2. Согласуют определение основных событий и состояний. Напри- мер, — малый рестарт считать обнаруженным сбоем с восстановлением; — «неудачный» цикл управления считать сбоем без восстановления; — большой рестарт считать отказом, где его время — время восста- новления;
— выход из конфигурации числа процессоров, снижающих бо- лее чем на 20% производительность ВС (2 процессора из 10 в МВК «Эльбрус-2»), считать отказом; — реконфигурацию, не снижающую более чем на 20% производи- тельность, считать отказом с переходом на резерв; Аналогичные соглашения принимаются и насчет памяти, внешней памяти, ПВВ и ППД, обеспечивающих выполнение КЗ. 3. Объявляют прогон — циклическое непрерывное решение КЗ (ком- плекса КЗ) в течение значительного времени (например, 5 суток), доста- точного для набора статистики. 4. Набирают статистику по ВС в целом и по группам устройств. Обычно разграничивают центральную часть и периферию. Непосред- ственно снимают те показатели, о которых говорилось выше: — среднее время То безотказной работы; — среднее время ТВ0Сст восстановления; — частоту Ai сбоев; из них — число «восстановленных» для опреде- ления -Рвосст? — частоту А2 отказов, из них — число приведших к успешной рекон- фигурации для нахождения Ррез. По приведенным выше формулам мы можем получить необходимые показатели надежности.
Лекция 26. GRID-ТЕХНОЛОГИИ Обсуждаются проблемы применения параллельных информационных технологий при создании мирового суперкомпьютера — объединения всемир- ных вычислительных ресурсов в сеть со свободным доступом, аналогично единой энергетической системе, что является естественным развитием со- временного Интернета. Исследуются вопросы организации и минимизации времени информационного обслуживания. Ключевые слова: паутина WWW, компьютер, рабочая станция, сер- вер, GWrf-решетка, база данных, гипертекст, браузер, циркуляция сегментов, вычислительный центр. 26.1. Основные направления исследований в области Grid-технологий Термин «Grid-вычисления» (Computinggrid), где «grid» означает «ре- шетка, сетка, сеть», по смыслу аналогичен выражению «единая энерго- система». Суть его заключается в стремлении объединить все компьюте- ры мира в единую систему — в виртуальный суперкомпьютер невиданной мощности, что позволит распределять и перераспределять ресурсы между пользователями в соответствии с их запросами. Именно так человечество пользуется электричеством единых энергетических сетей. Основу подоб- ного объединения можно рассматривать и для транспортных сетей, сетей обеспечения водой, нефтью, газом и т. д. Имея такой суперкомпьютер, пользователь может в любое время и в любом месте запросить столько вычислительных ресурсов, сколько ему требуется для решения своей задачи. Более того, он может заказать ее ре- шение, послав запрос-заявку на сайт одного из центров обслуживания. Так же, как единая энергосистема локально испытывает переменную на- грузку (потребление электроэнергии в отдельной стране, регионе или на- селенном пункте изменяется в зависимости от времени суток, года и т. д.), так и система Grid-вычислений способна перераспределять мощности, направляя запросы на недогруженные компьютеры в соответствии с воз- росшими требованиями. Предоставление вычислительных ресурсов по требованию связыва- ют с известным понятием «коммунальная услуга», что вполне соответ- ствует тенденции объединения и распределения ресурсов жизнеобеспе- чения.
Однако на Grid-технологии возложены задачи и информационно- го характера: сделать всю информацию мира оперативно доступной. Это означает, что пользователь должен ощущать, что вся информация, за ко- торой он обратился, находится здесь, рядом, не далее чем на сервере того провайдера, к которому он подключен. И мы ловим себя на мысли, что говорим об Интернете! Да, в сущности, речь идет о смелом, фантастическом развитии имен- но того, что фантастическим казалось вчера, о развитии всемирной пау- тины, о внедрении в нее вычислительных функций и о повышении ка- чества информационного обслуживания. Именно так и намечается даль- нейший путь развития Интернета: от WWW к GRID1. Таким образом, для Grid-технологии характерны два (традиционно смешиваемых) направления развития, определяемые их важностью и раз- личиями в исследовании. Первое направление, связанное с информационными задачами, пред- ставляет сегодня сущность Интернета. Это — обмен новостями, приобре- тение новых знаний, программных средств, мульти-медиа-развлечения, диалоговые системы телеконференции, электронная почта, финансовые операции и т.д. Эти функции «Всемирной Паутины» уже представляют- ся достаточными самым широким слоям населения, покрывая весь ком- пьютерный сервис. Они органично вошли в базовое воспитание детей, определяя уровень грамотности современного человека. Однако именно здесь существует основная проблема. Неуправляе- мое стихийное, даже «дикое» развитие Интернета приводит к парадоксу: доступность огромных объемов мировой информации породила значи- тельный вес отказов, ответов о действительной недоступности этой ин- формации, о превышении допустимого времени поиска, об ошибках. По- исковые системы блуждают по иерархической, запутанной системе Web- серверов, натыкаясь на их перегрузку, образуя трафик для обратного дви- жения информации. Мы с отчаянием следим за замершей планкой инди- катора, в ожидании выдачи такой знакомой записи «Error...» — с указа- нием предположения об окончании допустимого времени адресного об- ращения. Сделать всю информацию доступной, установить гарантированное время поиска, породить у пользователя ощущение того, что вся информа- ция по его запросу находится рядом, — это фантастическая задача. Мож- но ли объединить всю информацию мира, блуждающую в Интернете, в одну огромную базу данных, размеры которой даже трудно оценить? Да еще с неограниченным многоканальным доступом? 1 Петрушанко С. CERN: от WWW к GRID. «Компьютерра», 2004, №21.
Движение в направлении осуществления этой глобальной идеи и яв- ляется задачей исследователей в области Grid-технологий. Ясно, что иде- ального решения эта задача может никогда не получить. Однако стре- миться к минимизации времени выполнения запроса, несмотря на струк- турную «удаленность» информации, несомненно, следует. Второе направление развития Grid-технологий связано, как ранее го- ворилось, с таким расширением функций Интернета, при котором поль- зователь может получать ответы на запросы вычислительного характера. Речь, конечно, идет о тех задачах, решение которых недоступно широко- му пользователю — ученому, управленцу, коллективу, всем, кому необхо- дима достоверная информация для важных решений. Интернет должен принимать заказ на работу с задачами высокой сложности, большой раз- мерности, с задачами моделирования сложных физических явлений, та- ких, например, как точный метеорологический прогноз, с оптимизаци- онными задачами хозяйственного планирования, с задачами статисти- ческой обработки экспериментов, с задачами — запросами по контролю космического пространства, с имитационными задачами для испытания новых технических средств и т.д. Это означает, что в составе Интернета должны быть мощные вы- числительные центры, снабженные развиваемыми пакетами прикладных программ решения сложных задач, оболочками для решения классов за- дач. Такие центры должны комплектоваться высококвалифицированны- ми математиками, развивающими вычислительную базу, готовыми при- нимать заказы, консультировать пользователей при «доводке» заказов до требуемого формального представления, ибо мечты о полной автомати- зации процесса их выполнения еще долго будут неисполнимыми. Необходимо учесть и селекцию допустимых заказов: при желании, например, отстранить школьника-разгильдяя, препоручающего выпол- нение урока домашнему компьютеру. При построении Grid-систем особую актуальность обретают про- блемы защиты. Цель защиты — перекрыть доступ к ресурсам и инфор- мации для тех пользователей, которые не имеют соответствующих приви- легий. Таким пользователем может стать и собственник, предоставивший свой компьютер в аренду или по договору на время простоя. Базовыми элементами защиты являются: • аутентификация — проверка подлинности участника взаимодей- ствия с системой; • механизм авторизации — проверка допустимости затребованной операции; • конфиденциальность и целостность данных — защита от нелеги- тимного доступа;
• биллинг и аудит — способность контролировать и подсчитывать объем использованных ресурсов и обеспечиваемых ими служб; • строгое выполнение обязательств — способность устанавливать, что данный участник выполнил определенную задачу или согласился на ее выполнение, даже если сам он это отрицает. 26.2. Немного истории Первые опыты в области GWd-технологий связаны с расчетами экс- периментов в ядерной физике. Считается, что этот опыт вообще стал ба- зой формирования World Wide Web, WWW — Всемирной Паутины. С ним связывают имя: Тим Бернес-Ли. Перед этим ученым была поставлена за- дача найти способ, который позволил бы ученым, участвующим в экс- периментах на Большом адронном коллайдере, обмениваться данными и представлять результаты их обработки на всеобщее обсуждение. Многие физики, большую часть времени находящиеся в своих научных институ- тах, тоже хотели полноправно участвовать в анализе данных. Тим Бернес-Ли предложил создать в Европейской организации ядерных исследований (CERN) систему распределенного информацион- ного обеспечения, основанную на использовании гипертекста и способ- ную объединить научные центры всей Земли. Были написаны специаль- ные программы, установленные на многих компьютерах мира, которые были разбиты на группы, связанные со своим сервером. Эти программы могли работать с единой БД CERN, с помощью дополнительных серве- ров перерабатывая данные и возвращая результаты в единую БД. В 1990 году прототип того, что впоследствии получило название Все- мирной Паутины, был создан в CERN, а начиная с 1991 года, первые бра- узеры и WWW-серверы появились в распоряжении ядерных физиков все- го мира. Широкое распространение сразу же получили язык HTML и про- токол HTTP. Однако теоретическое обобщение опыта CERN и развитие идеи WWW в область современного представления о будущей сети Grid, было сделано американскими учеными Яном Фостером и Карлом Кессельма- ном2. По их представлению, Grid действительно является «надстройкой» над Интернетом, предназначенной для распределенных вычислений при решении задач высокой сложности в области науки и технологий. В отличие от бесструктурной паутины WWW, решетка Grid строго упорядочена. Характерно, что разделения на информационные задачи и 2 Forster I., Kesselman К., «The Grid: Blueprint for a New Computing Infrastructure». Morgan Kaufmann, 1998.
задачи вычислительные авторы не предполагают. Пользователь, подклю- чаясь к Grid, получает доступ к миллионам компьютеров, как для вычис- лений, так и для хранения данных, добытых в результате решения, и для размещения огромных массивов информации. Первостепенное внима- ние уделяется проблемам безопасности, анонимности, секретности. 26.3. Grid-технологии решения информационных задач Уже известны разработки3, поддерживающие сложные распреде- ленные базы данных для многоканального использования. Одним из проектов является разработка Oracle 10G, предназначенная для реализа- ции коммерческой Grid-системы. Ее механизмы поддерживают следую- щие подсистемы и функции: • Grid хранения данных; • Grid серверов БД; • Grid серверов приложений; • Средства самонастройки узлов БД; • Систему управления Grid; • Средства для разделения информации между узлами Grid. Проанализируем, что из изложенного в данном курсе материала о параллельных информационных технологиях можно использовать в рам- ках рассматриваемого направления исследований. Прежде всего, предполагая, что целью исследований является не просто сервисная поддержка, а оптимизация информационного обслу- живания, необходимо сформулировать критерий оптимизации. Логично выбрать таким критерием минимум среднего времени выполнения единично- го запроса с учетом времени его обработки поисковой системой. Но ведь именно в таком свете представляется проблема минимиза- ции времени обращения к базе данных, изложенная в лекции 15! И там математически, на основе теории массового обслуживания, доказано, что активизация совокупной памяти БД посредством «встречной» цирку- ляции сегментов не только обеспечивает синхронизацию независимого многоканального доступа, но, главное, способствует медленному, вполне приемлемому росту времени выполнения запроса в зависимости от ро- ста числа абонентов. (В противном случае это время быстро стремится к бесконечности.) 3 Ривкин М. ORACLE и коммерческая GRID, http://mrivkin.narod.ru.
Было показано, что одним из методов построения БД с циркули- рующей информацией является объединение серверов в единую замкну- тую систему — в «кольцо», по которому циркулируют сегменты этой ба- зы. Абоненты же жестко связаны со своими серверами, обеспечивая рас- пределенные, примерно равные, потоки запросов на каждый сервер. По каждому запросу должно учитываться среднее время ожидания нужного сегмента за счет его циркуляции. Тогда можно себе представить следующую схему функционирова- ния гипотетической Ассоциации Web-серверов (рис. 26.1), объединенных на основе гигантской совокупной базы данных, мирового (или хотя бы корпоративного) масштаба. Учитывая все возрастающую мощность сер- веров и, главное, — средств передачи данных, можно уже сегодня ожидать значительного сокращения числа отказов при выполнении запросов, тре- бующих сложного многоступенчатого трафика, зависящего от пропуск- ной способности многих промежуточных пунктов. Рис. 26.1. Ассоциация И^/ьсерверов мирового информационного пространства
26.4. Известные проекты Grid-технологии решения вычислительных задач Grid-технологии, быстро распространяясь, завоевывают ключевые позиции в области высоких технологий во всем мире, утверждая прио- ритетное развитие всей широкой области информационных технологий (ИТ) как локомотива государственного процветания. Итак, система Grid-вычислений — это распределенная программно- аппаратная компьютерная среда, с принципиально новой организацией вычислений и управления потоком заданий и данных. Поучительным примером практического воплощения концепции Grid может служить глобальный проект China Grid, запущенный корпора- цией IBM совместно с министерством образования Китая в целях повы- шения эффективности научно-исследовательской и образовательной де- ятельности ведущих китайских университетов. Grid-система, построен- ная на операционной платформе Linux, обеспечивает интегрированную, открытую, виртуализованную и автономную рабочую среду. Ею должно быть охвачено около 100 учебных заведений по всей стране, что вовлечет в проект более 200 тысяч студентов и преподавателей. Благодаря China Grid китайские университеты надеются сократить расходы на научно- исследовательские и опытно-конструкторские работы. Отечественным примером реализации рассматриваемой технологии может служить экспериментальный Grid-сегмент МГУ им. М. В. Ломо- носова4. В основе этого проекта лежит проект EDG (EU Data GRID — евро- пейский проект для физики высоких энергий, биоинформатики и си- стемы наблюдений за Землей). В свою очередь, им используется проект Globus (разработчик — Argonne National Lab.), предоставляющий инстру- ментальные средства связи, информационного обслуживания, безопас- ности, управления ресурсами, локального управления ресурсами и зада- ниями. Программное обеспечение Globus доступно и распространяется сво- бодно. Проект EDG предполагает формирование вычислительных ресур- сов на основе анализа сайтов организаций, подразделений, вычислитель- ных узлов. Типичный сайт содержит следующие разделы информации. • Компьютер конечного пользователя, позволяющий пользователю вза- имодействовать с Grid-средой, в частности, запускать задания и по- 4 Экспериментальный Grid-сегмент МГУ им. М. В. Ломоносова. Руководство для пользо- вателей. GRID — сеть для МГУ, ComNew.ru
лучать результаты. • Вычислительный элемент, представляющий ссылку на Grid-интер- фейс к локальной системе управления пакетной обработкой (СУ- ПО). • Рабочиеузлы, входящие в состав вычислительного элемента и управ- ляемые с помощью СУПО, что скрыто от пользователя. • Накопитель данных, управляющий единообразным доступом к лю- бым устройствам памяти. • Брокер ресурсов, принимающий задания от пользователя, согласую- щий требования к ресурсам, которые содержатся в описании зада- ния, с имеющимися, и направляющий задания на подходящий сайт вычислительного элемента. • Каталог реплик, поддерживающий базу данных о местах хранения оригинальных файлов и всех их копий. Чтобы получить доступ к ресурсам МГУ-GRID, необходим компью- тер с установленным пользовательским Grid-интерфейсом. Доступ в сре- ду Grid происходит под именем, содержащимся в сертификате, и контро- лируется с помощью специальной программы-посредника (электронной доверенности), которая создается на ограниченный срок с помощью пер- сонального ключа пользователя. Файл с описанием задания создается с помощью языка описания за- даний (Job Description Language) и содержит необходимые входные дан- ные, требования к ресурсам и сведения о том, куда должны быть записа- ны результаты обработки задания. 26.5. Основы проектирования Центра Grid-технологий В подходе к реализации идеи Grid-технологий наблюдается некото- рая поспешность. Не существует формального анализа возможных видов запросов, слабо выражено разделение на информационные и вычисли- тельные задачи. Материал предыдущих лекций говорит, что все алгоритмы и все ра- боты, выполняемые с помощью вычислительных средств, структуриро- ваны. Недостаточно связывать выполнение запроса на решение задачи только лишь с выделением вычислительных ресурсов. Ими надо управ- лять, а вычислительный процесс — распараллеливать.
В лекции 21 представлена общая схема параллельного вычислитель- ного процесса, из которой видно обязательное наличие двух управля- ющих элементов: супервизора и диспетчера. Супервизор управляет хо- дом вычислительного процесса, реализуя его функциональную направ- ленность. Диспетчер управляет использованием вычислительных ресур- сов. В отличие от задач перераспределения энергии, которые подоб- ны задачам оптимального использования бригады землекопов, роющих большую яму, задачи распараллеливания вычислений, как указывалось выше, сталкиваются с основной трудностью: с необходимостью соблюде- ния частичной упорядоченности работ, с необходимостью решения кон- кретных задач синхронизации (лекция 24). Первые опыты применения Grid-вычислений, сходные с опытом Тима Бернес-Ли, позволяли распределять между компьютерами мира ра- боты, мало связанные между собой. Это были независимые эксперимен- ты, большие массивы данных. Тем не менее, результаты возвращались и обрабатывались централизованно. Это — весьма простая схема распарал- леливания по информации, примитивный аналог SPMD-технологии. В общем случае, даже при реализации этой технологии, являющейся во- площением распараллеливания по информации, невозможно избежать синхронизации по общим данным. Механизмы синхронизации должны работать быстро, что требует конкретного анализа возможности и целе- сообразности решения задач на основе виртуального ресурса Интернет. Это замечание говорит в пользу идеи концентрации вычислительных ре- сурсов. Сообразуясь с требованиями практической целесообразности, необ- ходимо уяснить, какого типа бывают запросы вычислительного характера к Grid-системам (рис. 26.2). Представим себе, что Пользователь заходит на сайт крупной GRID- Компании. Его желания могут быть следующими: 1. Он готов, например, арендовать ресурс для построения заду- манной им автоматизированной системы управления железнодорожным транспортом. Пользователь в диалоговом режиме подробно излагает тре- буемые характеристики, в том числе и количественные. Компания на основе своих возможностей согласует с пользователем предоставляемую услугу. Далее следуют договоренности финансового и юридического характера. Таким образом, пользователь, получив подробное описание предо- ставленных ему ресурсов, сам работает с ними, введя по необходимости их адресацию или применяя принцип виртуальности, - по замыслу со- здаваемой системы. При этом, разумеется, он обладает средствами взаи-
Рис. 26.2. Типы запросов к системе Grid-вычислений модействия между отдельными средствами для организации нужной ему схемы вычислений. 2. Пользователь хочет решить или решать периодически, с задан- ным темпом, по динамически изменяемым исходным данным, транс- портную задачу (проблему Хичкока) с известными ограничениями про- пускной способности магистралей. Обращаясь к данной компании, он предполагает наличие в ее пакете прикладных программ (ППП) нужной программы, да еще решаемой быстро на основе применения метода рас- параллеливания. Он вступает в диалог с Компанией, уточняя постановку задачи, условия ее решения, режим решения, обещает продолжить отно- шения в случае успешного опыта, согласует условия оплаты и т.д. Если условия ему не нравятся, пользователь обращается к сайту дру- гой компании. 3. Пользователь хочет решить конкретную задачу нахождения экс- тремума функции от 1020 переменных на положительной области, огра- ниченной 524 гиперплоскостями и заданной системой дифференциаль- ных уравнений в частных производных второго порядка. Обращаясь к Компании, пользователь может рассчитывать лишь на наличие оболочек, в которые можно погружать конкретные условия задачи и описывающие выражения. В диалоговом режиме высококвалифицированный консультант пред- лагает решить задачу в два этапа: сначала с помощью существующей обо- лочки найти решение системы дифференциальных уравнений, а затем, с помощью другой оболочки, найти экстремум.
Если пользователь согласен на все условия относительно времени решения и оплаты, заключается договор. Правда, в договоре должна быть предусмотрена ситуация, когда в процессе решения выясняется некор- ректность задания исходных данных, неразрешимость, неоднозначность решения и т.д. Такие ситуации требуют дальнейших консультаций, уточ- нения постановки задачи и величины оплаты, а, возможно, и расторже- ния договора, после чего могут следовать значительные юридические и финансовые тяжбы. 4. Пользователь знает алгоритм решения своей задачи, описанный на языке Паскаль. Он ничего не желает знать об используемых ресурсах, он хочет получить трехмерный массив результатов решения или место его хранения. О статистической обработке и построении диаграмм он пока не думает, оставляя этот вопрос в рамках решения о целесообразности дальнейшего сотрудничества с Компанией. Обработка такого запроса пользователя более всего приятна Компа- нии, которая, не чувствуя ответственности, может выдать ответ о некор- ректности записи алгоритма или об ошибках. 5. Пользователь обращается за решением задачи по физике за IX класс. Компания может предоставлять и такую услугу — по неформаль- ной постановке задачи. Высококвалифицированный специалист (поль- зуясь совершенным справочником), выполнив нехитрые вычисления, в диалоговом режиме разъяснит пользователю необходимость родитель- ских гарантий в части предоплаты и изложит свое мнение об издержках воспитания. 6. Домохозяйка просит о льготной помощи при расчете оплаты ком- мунальных услуг, исходя из текущего тарифа, с опережением указывае- мых расходов электроэнергии, горячей и холодной воды на случай непре- менного и скорого его повышения. Компания, в лице опытного кон- сультанта, вступившего в диалог, располагая возможностями финансовых услуг по известным, постоянно обновляемым данным, предлагает опла- тить не 112 квт, а 200, т.к. тариф в следующем месяце повысится, а ука- занный расход лежит в пределах критически допустимого. В этом смысле Grid-технология действительно вторгается в сферу коммунальных услуг. На основе этих примеров можно заключить, что задачи нашей ги- потетической Grid-Компании, которую точнее следует назвать «Центр GRID-Технологий», весьма широки и многообразны. Приведем ряд принципов его деятельности и некоторые пункты его обоснования. 1. Необходимость (и неизбежность) таких компаний, владеющих большим арсеналом вычислительных средств, очевидна. Обезличенного обращения в Интернете не бывает. Кто-то должен обрабатывать запро- сы.
2. Такая компания, по-видимому, являясь акционерным обществом, в свою очередь, может арендовать средства более мелких собственников, а также сетевое оборудование, системы передачи данных, включая кос- мические. 3. Рассмотрим, какие вычислительные средства должны составлять собственную технологическую базу Центра. Центр, несомненно, должен объединять решение информационных и вычислительных задач. Поэтому наличие Web-серверов и участие их во Всемирной или Региональной ассоциации обязательно. Что касается исключительно вычислительных задач, то здесь, как говорилось выше, ресурс может быть составлен на договорной основе, на базе фактически разрозненных вычислительных средств организаций и отдельных собственников. Однако основной капитал Центра GRID-Технологий определяется собственными вычислительными средствами и сопутствующим оборудо- ванием. Его комплектование и развитие определяется двумя возможны- ми направлениями: • комплектацией на базе перспективных или разрабатываемых супер- компьютеров и многопроцессорных вычислительных систем на их основе; • комплектацией на базе существующего, стремительно развивающе- гося парка компьютеров, рабочих станций и серверов, которые с помощью сопутствующего сетевого оборудования объединены в ло- кальную вычислительную сеть, реализующую распределенные вы- числения. Это направление, не отрицающее первое, несомненно, более перспективно. 4. Центр должен быть укомплектован высококвалифицированными математиками-программистами и системотехниками, работающими по нескольким направлениям: • оперативное консультирование пользователей при «доводке» зада- ний; • разработка пакета прикладных программ и оболочек; • сотрудничество с пользователями при совместной разработке слож- ных программных и информационных проектов; • научно-исследовательская деятельность по развитию Grid-техноло- гий и их применению;
Проанализировав материалы лекций, обозначим тот пакет при- кладных программ и оболочек, который может быть предложен Центру GRID-Технологий. Это: • решение систем линейных уравнений; • задачи сортировки и поиска; • параллельный логический вывод; • параллельные технологии решения задач линейного программиро- вания; • параллельные технологии решения задач целочисленного линейно- го программирования; • параллельные технологии решения транспортной задачи без огра- ничений и с ограничениями пропускной способности магистралей; • параллельные технологии нахождения максимальной пропускной способности сети; • методы точного решения задач распараллеливания как задач сете- вого планирования и управления; • задачи оперативного параллельного планирования — задачи дис- петчирования; • оболочка: конечно-разностные методы решения систем дифферен- циальных уравнений; • оболочка: параллельная технология решения оптимизационной за- дачи нелинейного программирования при линейных ограничениях; • оболочка: параллельная технология решения «плоской» оптимиза- ционной задачи нелинейного программирования при нелинейных ограничениях (легко развивается на случаи большей размерности); • оболочка: параллельный ПРОЛОГ; • оболочка: расчет величины возбуждения нейронов нейросети. Следует отметить также предлагаемые многочисленные алгоритмы и схе- мы организации параллельных вычислений в ВС и процессорах различ- ной архитектуры, а также способы построения параллельных управляю- щих процессов с учетом их синхронизации.
Заключение Подведем итог, обсудив применение параллельных технологий при решении задач управления (в самом широком смысле), экономики, биз- неса, диагностики, туризма, игр и развлечений, искусства, — практиче- ски во всех областях человеческой деятельности. При этом выделим ас- пекты научного и хозяйственного направлений. 1. Динамическое распределение взаимосвязанных работ в коллективе исполнителей. Это направление в наибольшей степени отражено в настоящем по- собии. Если некоторый комплекс работ (например, обусловленный посев- ной кампанией, постройкой заградительного сооружения или промыш- ленного предприятия, экономической реформой и т.д.) можно описать графом, отражающим обязательный порядок их следования, то есть за- дающим частичную упорядоченность этих работ, и относительно каждой работы известны оценки трудоемкости и необходимая специализация ис- полнителей, то это — задача распараллеливания, и для различных вари- антов постановки можно найти адекватную модель почти во всех лекци- ях. Важной особенностью постановки этой задачи является не только знание априори множества работ, подлежащих параллельному выполне- нию. Может быть реализован теоретически бесконечный поток работ. Например, таким образом следует рассматривать обслуживание потока запросов к базам данных, к торговому или транспортному предприятию и т.д. Адекватная модель вычислительной системы рассматривается в тех главах, где потоки команд программы обрабатываются многими испол- нительными устройствами. При этом возможно применение двух видов критериев оптимиза- ции: минимум времени выполнения всего комплекса работ (характерен для известного конечного множества планируемых работ) и максимум коэффициента загрузки исполнителей (характерен для работ, следующих в потоке). 2. Распределение данных и объектов для совместной обработки (сов- местного обслуживания) коллективом исполнителей по единому ветвяще- муся алгоритму. Во многих лекциях исследуется принцип «одна программа — много потоков данных», обеспечивающий эффективное распараллеливание по критерию минимума времени выполнения или максимальной загрузки
исполнительных устройств. Этот принцип, обладающий малыми наклад- ными расходами на реализацию, управление и синхронизацию, свиде- тельствует о предпочтительности способа распараллеливания "по инфор- мации". В широком применении это приводит к рекомендации такой об- работки данных, при которой в буквальном смысле воспроизводится мно- гоканальная система массового обслуживания. Все обслуживающие прибо- ры специализированы одинаково (выполняют одну и ту же программу) и динамически закрепляются за заявками потока. Именно по такому принципу в лекциях 13—19 предлагается решать сложные оптимизационные задачи, распределяя варианты решения меж- ду процессорами ВС или станциями вычислительной сети. Именно этот принцип адекватен обработке заявок торговой фирмой, парикмахерской, базой данных, системой обслуживания потока целей перехватчиками ит.д. 3. Оперативное планирование и мониторинг выполнения сложных про- ектов. Задачи параллельного программирования, то есть оптимального планирования загрузки исполнительных устройств, составляют особый класс задач исследования операций. Это задачи высокой сложности, и методы их точного решения не могут быть положены в основу специаль- ного программного обеспечения вычислительной системы, требующего сверхвысокой оперативности. Однако при расчете, обосновании и сопро- вождении сложных проектов, при мониторинге строительства, эти зада- чи решаются, составляя основу оперативного планирования, допускаю- щего, ради точности результатов, повышенную трудоемкость. Здесь важное значение обретают такие задачи, как нахождение дли- ны критического пути в сетевом графе, описывающем взаимосвязанные работы с их временными оценками, нахождение ранних и поздних сро- ков выполнения работ, оценка снизу стоимости проекта и времени его реализации, связанных с размещением заказов и комплектацией испол- нителей. Однако эти задачи интегрируются в более глобальные и ответствен- ные: 1) минимизация стоимости проекта в соответствии с привлечением организаций-исполнителей при необходимости выполнения работ в за- данный срок; 2) минимизация времени выполнения проекта при задан- ном множестве исполнителей. В лекции 20 иллюстрируется решение по- добных задач для однородных систем исполнителей. В расширенной, бо- лее практической постановке эти задачи точно решаются в [4]. 4. Параллельные и сетевые методы моделирования и решения оптими- зационных задач.
Важность и множественность приложений в управлении, экономи- ке, проектировании сложных систем и др. таких задач, как линейное программирование, целочисленное линейное программирование, транс- портная задача, задача оценки пропускной способности сети, нелиней- ные задачи оптимизации, задачи, реализующие конечно-разностные и более общие схемы «метода сеток», задачи, использующие методы «вет- вей и границ», не подвергаются сомнению. Это задачи высокой слож- ности. С развитием параллельных вычислительных средств стало оче- видным, что традиционные методы, ориентированные на минимизацию количества операций, непригодны. Разработка параллельных алгорит- мов, ориентированных на многопроцессорные вычислительные систе- мы и вычислительные комплексы на базе локальных вычислительных се- тей, является актуальной и основанной на рассмотренных выше критери- ях эффективности. Как отмечалось, общий «рисунок» таких алгоритмов определяется схемой «одна программа — много потоков данных». Это со- ответствует запуску на каждом процессоре или рабочей станции одной и той же программы (для системы пишется одна программа!) при том, что каждый исполнитель обрабатывает «свои» данные при синхронной обра- ботке общих данных. Распределяемые данные — варианты поиска реше- ния, численные наборы аргументов, управляемые объекты, элементар- ные области или узлы пространства и т. д. 5. Схемы и структуры информационного взаимодействия при органи- зации сложных управляющих систем. Эти структуры отражены в книге в самом общем виде, вне рамок применения только лишь на уровне операционной системы процессора или вычислительного комплекса. Это и схема организации функциони- рования системы в реальном времени, и схема АСУ коллективного поль- зования, и схемы многоканальных сетевых баз данных, и схема самообу- чающейся системы управления, и другие схемы, не выделенные специ- ально, но достойные аналогичного воспроизведения. 6. Оперативное диспетчирование. В централизованных системах управления различного назначения с применением единого управляющего звена важным элементом становит- ся планирующий орган, динамически загружающий заданиями множе- ство исполнителей, задающий расписание их работы для максимизации их полезной загрузки и минимизации времени выполнения каждого ко- нечного комплекса работ. Предполагается, что задания образуют беско- нечный поток. Основная сложность диспетчирования следует из взаимо- зависимости заданий, то есть, из их частичной упорядоченности. К дис- петчеру предъявляются высокие требования по быстродействию и по ста- тистической близости порождаемого им плана выполнения работ к точ-
ному плану. В них используются эвристические алгоритмы планирова- ния, основанные на применении некоторого решающего правила. Такие алгоритмы, ориентированные на централизованные вычислительные си- стемы, но на деле имеющие широкое применение, представлены в лек- ции 23. Однако и в других лекциях присутствуют, но специально не выде- лены, алгоритмы и приемы «быстрого» распределения работ между ис- полнителями. Например, при компоновке «длинных» командных слов используется эффективный алгоритм назначения работ на основе состав- ного решающего правила: по времени выполнения работы, по суммар- ному объему связанных с ней последующих работ и по позднему сроку конца ее выполнения. 7. Синхронизация параллельных процессов. Многообразные технологии распараллеливания базируются на об- щих обязательных и наиболее простых средствах синхронизации во избе- жание коллизий и тупиковых ситуаций при использовании общих ресур- сов и при реализации частичной упорядоченности работ. Такими сред- ствами являются матрицы следования, динамический анализ имен объ- ектов, «семафорный» механизм, блокировка имен, «почтовые ящики». Они используются при решении весьма ограниченного набора задач син- хронизации, к которым сводятся все способы поддержки параллельного выполнения работ.
Литература [1] Бабаян Б.А., Бочаров А.В., Волин В.С. и др. Многопроцессорные ЭВМ и методы их проектирования. — М.: Высшая школа, 1990. [2] Бабенко Л.К., Кравченко П.П., Макаревич О.Б., Чефранов А.Г. Ар- хитектура и математическое обеспечение многопроцессорных су- перЭВМ. Учебное пособие. — Таганрог: Таганрогский радиотехни- ческий институт, 1992. [3] Баронов В.В. и др. Автоматизация управления предприятием. — М.: ИНФРА-М, 2000. [4] Барский А.Б. Параллельные процессы в вычислительных системах: планирование и организация. — М.: Радио и связь, 1990. [5] Барский А. Б. Параллельные технологии решения оптимизационных задач. — Информационные технологии. Приложение, №2, 2001. [6] Барский А.Б., Шилов В.В. Вычислительная система, управляемая потоком данных. — Информационные технологии, Приложение, №8, 2000. [7] Барский А.Б., Шилов В.В. Потоковая вычислительная система: про- граммирование и оценка эффективности. — Информационные тех- нологии, Приложение, №7, 2003. [8] Барский А.Б. Применение SPMD-технологии при построении сете- вых баз данных с циркулирующей информацией. — Информацион- ные технологии, №7, 2004. [9] Барский А.Б., Шилов В.В. Оптимизация ветвления при решении за- дачи сортировки па процессоре EPIC-архитектуры. — Информаци- онные технологии, №1, 2005. [10] Бурцев В.С. Принципы построения многопроцессорных вычисли- тельных комплексов «Эльбрус». Препринт. №1 — М.: ИТМ и ВТ АН СССР, 1977. [11] Бурцев В.С. Тенденции развития суперЭВМ. Оптические принципы обработки информации в архитектуре суперЭВМ. Препринт №24 — М.: ВЦКП АН СССР, 1992. [12] Вирт Н. Алгоритмы и структуры данных. — М.: Мир, 1989.
[13] Воеводин В.В., Воеводин Вл.В. Параллельные вычисления. — СПБ.: ВХВ—Петербург, 2002. [14] Волконский В.Ю., Окунев С.К. Предикатное представление как основа оптимизации программы для архитектур с явно выраженной параллельностью. — Информационные технологии, №4,2003. [15] Головкин Б.А. Параллельные вычислительные системы. — М.: Нау- ка, 1980. [16] Головкин Б.А. Расчёт характеристик и планирование параллельных вычислительных процессов. — М.: Радио и связь, 1983. [17] Зайченко Ю.П. Исследование операций. — Киев: Вища школа, 1979. [18] Игнатушенко В.В. Организация структур управляющих многопро- цессорных вычислительных систем. — М.: Энергоатомиздат, 1984. [19] Исследование операций в экономике. Под ред. Н.Ш. Кремера. — М.: Банки и биржи, ЮНИТИ, 1997. [20] Каган Б.М. ЭВМ и системы. — М.: Энергоатомиздат, 1991. [21] Когаловский М.Р. Энциклопедия технологий баз данных. — М.: Фи- нансы и статистика, 2002. [22] Корнеев И.К., Машурцев В.А. Информационные технологии в управлении. — М.: ИНФРА-М, 2001. [23] Котов В.Е., Сабельфельд В.К. Теория схем программ. М.: Наука, 1991. [24] Карцев М.А. Архитектура цифровых вычислительных машин. — М.: Наука, 1978. [25] Кравченко П.П., Чефранов А.Г. Методы управления ресурсами вы- числительных систем. Учебное пособие. — Таганрог: Таганрогский радиотехнический институт, 1991. [26] Ларионов А.М., Майоров С.А., Новиков Г.И. Вычислительные ком- плексы, системы и сети. — Л.: Энергоатомиздат, 1987. [27] Липаев В.В. Распределение ресурсов в вычислительной системе. — М.: Статистика, 1979. [28] Поспелов Д.А. Введение в теорию вычислительных систем. — М.: Сов. Радио, 1972.
[29] Поспелов Д.А. Ситуационное управление. Теория и практика. — М,: Наука, 1986. [30] Пятибратов А.П., Гудыно Л.П., Кириченко А.А. Вычислительные системы, сети и телекоммуникации. Учебник. — М.: Финансы и ста- тистика, 2003. [31] Саак А.Э., Пахомов Е.В., Тюшняков В.Н. Информационные техно- логии управления. Учебник. — СПб.: Питер, 2005. [32] Смирнова Т.Н. и др. Проектирование экономических информаци- онных систем. Учебник. Под ред. Ю.Ф. Тельнова. — М.: Финансы и статистика, 2002. [33] Смирнов А.А. Архитектура вычислительных систем. Учебное посо- бие. — М.: Наука, 1990. [34] Уткин В.Б., Балдин К.В. Информационные системы в экономике. Учебник. — М.: Академия, 2004. [35] Цифровая и вычислительная техника. Учебник. Под ред. Э.В. Евре- инова. — М.: Радио и связь, 1991. [36] Шилов В.В. Исследование языков высокого уровня в вычисли- тельных системах с потоковой обработкой информации. Вопро- сы кибернетики. Проблемы организации высокопроизводительных ЭВМ. - М.: АН СССР, 1984. [37] Присыпкин М. А., Сигал И. X., Галимьянова Н. Н. Параллельные ал- горитмы в задачах дискретной оптимизации: вычислительные мо- дели, бибилиотека, результаты экспериментов. — М.: Вычислитель- ный центр им. А. А. Дородницына РАН, 2006.
Учебное издание Барский Аркадий Бенционович ПАРАЛЛЕЛЬНЫЕ ИНФОРМАЦИОННЫЕ ТЕХНОЛОГИИ Учебное пособие Литературный редактор С. Перепелкина Корректор Ю. Голомазова Компьютерная верстка А. Широбоков Обложка М. Автономова Подписано в печать 30.10.2006. Формат 60x90 1/16- Гарнитура Таймс. Бумага офсетная. Печать офсетная. Усл. печ. л. 31,5. Тираж 2000 экз. Заказ № 6841 ООО «ИНТУИТ.ру» Интернет-Университет Информационных Технологий, www.intuit.ni Москва, Электрический пер., 8, стр.З. E-mail: admin@intuit.ru, http://www.intuit.ru ООО «БИНОМ. Лаборатория знаний» Москва, проезд Аэропорта, д. 3 Телефон: (499) 157-1902, (495) 157-5272 E-mail: Lbz@aha.ru, http://www.Lbz.ru При участии «ПФ«Сашко» Отпечатано в ОАО «ИПК «Ульяновский Дом печати» 432980, г. Ульяновск, ул. Гончарова, 14
2_9С-ьО ПАРАЛЛЕЛЬНЫЕ ИНФОРМАЦИОННЫЕ ТЕХНОЛОГИИ УЧЕБНОЕ ПОСОБИЕ Не следует судить по названию, буд- то книга посвящена узким пробле- мам архитектуры вычислительных средств и организации вычислений. Все приёмы организации и поддерж- ки эффективных параллельных вы- числений имеют значительно более широкое применение в различных областях управления и планирования сложно структурированных работ и их исполнителей. И этот опыт - ос- новная мысль и главный вывод отра- жённых в книге исследований. Потому справедлива рекомендация настоящего учебного пособия: • для разработчиков и пользователей параллельных суперкомпьютеров; • для проектировщиков и программи- стов, применяющих сетевые техно- логии для решения сложных вычис- лительных задач и построения сете- вых баз данных большого объёма; • для исследователей будущего при- менения параллельных информаци- онных технологий в GRID-системах - дальнейшем развитии ИНТЕРНЕТ; • для экономистов, управленцев, ор- ганизаторов производства и пред- принимателей, сталкивающихся с задачами оптимального планирова- ния и взаимодействия исполните- лей при разработке крупных хозяй- ственных, транспортных и научных проектов. Аркадий Барский ISBN 978-5-94774-546-7
ОСНОВЫ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ А. Б. Барский ПАРАЛЛЕЛЬНЫЕ ИНФОРМАЦИОННЫЕ ТЕХНОЛОГИИ I