Текст
                    

Архитектура ЭВМ и искусственный интеллект
л -ж ± а Ж Л <ШЭДЯ • ХГ-ttX ffl ф Ж ^1ЖГ^ЖЖ7 * - A
Амамия М., Танака Ю. АРХИТЕКТУРА ЭВМ И ИСКУССТВЕННЫЙ ИНТЕЛЛЕКТ Перевод с японского С. О. Махарадзе под редакцией д-ра физ.-мат. наук Н. Г. Волкова МОСКВА "МИР" 1993
ББК 32.973 А61 УДК 681.3 Амамия Мм Танака Ю. Архитектура ЭВМ и искусственный интеллект: А61 Пер. с японск.— М.: Мир, 1993.—400 с., ил. ISBN 5-03-002117-5 Книга является переводом седьмого тома 10-томной серии по инженерии знаний, написанной крупными японскими спе- циалистами в области искусственного интеллекта. Она охва- тывает все современные проблемы архитектур ЭВМ, в частно- сти рассматриваются архитектуры высокопроизводительных ЭВМ, модели обработки и вычислений, редукционные и по- токовые машины, архитектуры памяти ЭВМ, архитектуры Лисп- и Пролог-машин, а также машин баз данных. Для разработчиков перспективных архитектур ЭВМ и сту- дентов соответствующих специальностей вузов. 2404040000-165 А---------------91-130 041(01)-93 ББК 32.973 Редакция литературы по информатике ISBN 5-03-002117-5 (русск.) ISBN 4-274-07426-9 (япоп.) © М. Амамия, 10. Танака. «Омся», Токио, 1988 © перевод на русский язык, Маха- радзе С. О., 1993
ПРЕДИСЛОВИЕ РЕДАКТОРА ПЕРЕВОДА В последние годы благодаря разработке высокопроизводи- тельных микропроцессоров облик вычислительной техники суще- ственно изменился. Он характеризуется появлением персональ- ных ЭВМ, супер-ЭВМ, а также сетей ЭВМ. Новые технические возможности вызвали к жизни ряд новых задач. В частности, расширился круг решаемых на ЭВМ задач — от инженерно-эко- номических и математических расчетов к обработке сложноорга- низованных данных произвольной природы. Большое внимание уделяется созданию систем искусственного интеллекта, как наи- более сложного и перспективного направления в развитии инфор- матики. Из этого направления в качестве самостоятельной линии выделились проблемы инженерии знаний, т. е. проблемы созда- ния и функционирования баз знаний, относящихся к различным областям науки и техники. Эти проблемы, являясь сложными и объемными, предъяв- ляют жесткие требования к программному и аппаратному обес- печению, в частности, к быстродействию и объему памяти. В со- ответствии с этими требованиями был разработан ряд языков программирования (объектно-ориентированные и логические язы- ки), дающих гораздо большие возможности в создании систем искусственного интеллекта по сравнению с обычными процедур- ными языками. Но при этом оказалось, что структура этих язы- ков вошла в противоречие со стандартной (фон-неймановской) архитектурой ЭВМ, в основном приспособленной под нужды процедурных языков. Возникла необходимость в исследовании новых архитектур ЭВМ, учитывающих потребности задач искус- ственного интеллекта. В этом направлении ведется активный на- учный поиск во многих странах мира. Предлагаемая вниманию советского читателя книга ведущих японских специалистов в области архитектур ЭВМ М. Амамии и Ю. Танаки представляет собой попытку анализа современных архитектур ЭВМ с позиций задач искусственного интеллекта. В книге большое внимание уделяется проблемам увеличения ско- рости обработки данных. Рассматриваются методы, основанные на использовании более совершенных конструкций микропроцессо- ров, а также идей конвейерной, параллельной, распределенной обработок. Анализируются современные методы организации па- мяти и доступа к ней, обеспечивающие высокую эффективность и быстродействие. Основная часть книги посвящена описанию архитектур ЭВМ, наиболее полно учитывающих интересы задач искусственного интеллекта и, в частности, инженерии знаний. Сюда относятся потоковые машины, редукционные машины и т. д. Изложение ведется на доступном для начинающих уровне, требуется лишь знание основ устройства ЭВМ. Некоторые идеи
Предисловие редактора перевода основаны на довольно абстрактных математических моделях, ко- торые излагаются непосредственно в тексте. Для лучшего пони- мания содержания книги желательно знакомство с языками про- граммирования Лисп и Пролог, хотя в большинстве случаев необходимые пояснения даются непосредственно в тексте. По мо- ему мнению, книга вполне доступна студентам и аспирантам, специализирующимся в области архитектуры ЭВМ и искусствен- ного интеллекта, и будет полезна специалистам. Н. Г, Волков
Г лава 1 ИСТОРИЧЕСКИЙ ОБЗОР АРХИТЕКТУР ЭВМ И ИХ КЛАССИФИКАЦИЯ Одним из изобретений, совершивших небывалую техническую революцию в нынешнем столетии, яв- ляется хорошо известный всем самолет. Тем не менее техническая революция в области вычислительных машин еще более поразительна. Трудно представить, что ЭВМ, которая всего лишь 40 лет назад весила 30 т и занимала площадь 200 м2, теперь можно раз- местить на кремниевом кристалле площадью 5 мм2, а достаточно совершенные и быстродействующие ЭВМ можно приобрести по цене в несколько сотен иен. Вычислительные машины, для работы которых прежде необходимо было вводить коды, состоящие из единиц и нулей, сегодня доказывают теоремы, пе- реводят тексты с одного языка на другой, произво- дят спектральный анализ металлов, отображают на экране графического дисплея видимый из окна пей- заж и делают многое другое. В данной главе опи- саны этапы развития архитектур ЭВМ, отмечены основные тенденции в этом развитии, его движущие силы и перспективы на будущее. 1.1. ОСНОВНЫЕ ПОЛОЖЕНИЯ, КАСАЮЩИЕСЯ АРХИТЕКТУР ЭВМ Специалисты по архитектуре ЭВМ называются ар- хитекторами вычислительных машин. Задачей такого архитектора является разработка вычислительной машины, которая отвечала бы конкретным требова- ниям ее пользователей либо общим требованиям се- годняшнего дня. Пользователи ЭВМ, как правило, хотят иметь машину (1) как можно более универ- сальную, (2) способную решать как можно более сложные задачи, (3) как можно более быстродей- ствующую, (4) как можно более надежную, (5) как можно более «дружественную», (6) как можно более дешевую.
8 Глава 1 В комбинации друг с другом эти требования яв* ляются взаимоисключающими. Например, если по- пытаться увеличить производительность машины, со- хранив при этом ее функциональные возможности, неизбежно возрастает ее стоимость. Если же сде- лать ее более дружественной к пользователю при прежней стоимости, то получим явный проигрыш в производительности. То же самое можно ска- зать и о других комбинациях перечисленных тре- бований. Архитекторы ЭВМ ставят целью усовершенство- вание и обновление систем ЭВМ в каждом из 6 ука- занных направлений и в то же время хотят создать систему с оптимальным соотношением требований. Последняя работа называется «поиском компро- мисса», и для архитекторов ЭВМ это серьезный и весьма важный вид деятельности. Компромиссное ре- шение, удовлетворяющее два противоречащих друг другу требования, во многом зависит от области при- менения ЭВМ, пользовательской среды и т. д. Глав- ная особенность указанных требований заключается в том, что все они ничем не ограничены. Поэтому и усилия архитекторов ЭВМ никогда не прекра- тятся. Среди перечисленных требований требования (2), (3), (4) и (6) допускают количественную оценку. Размер задачи можно выразить размером массива или области памяти. Единицей измерения быстродей- ствия помимо известных MIPS (milllion instructions per second — миллион операций в секунду) hMFLOPS (million floating point, operations per second — мил- лион операций с плавающей запятой в секунду) яв- ляется LIPS (logical inferences per second — число логических выводов в секунду) (для Пролог-машин, в частности). Надежность измеряется показателем MTBF (mean time between failures — среднее время между отказами). Стоимость выражается в иенах, дол- ларах и других денежных единицах. Таким образом, характеристики, поддающиеся измерению, позволяют точно оценить степень усовершенствования и обнов- ления системы.
Исторический обзор архитектур ЭВМ и их классификация 9 Сложнее дело обстоит с «универсальностью» и «дружественностью», которые нельзя измерить коли- чественно. Для того чтобы выполнить модернизацию системы, удовлетворяющую этим требованиям, архи- тектор ЭВМ должен обладать гибким мышлением и индивидуальной философией проектирования. По- этому что касается этих двух требований, то здесь технологические аспекты возобладали над потреб- ностями. По упомянутым выше четырем направлениям японская технология занимает лидирующее место в мире, однако что касается «дружественности» и «универсальности», то ее отставание от США весьма ощутимо. Под архитектурой ЭВМ обычно понимают внут- реннюю структуру вычислительной машины, поэтому в Японии важное значение придают аппаратным средствам ЭВМ. Изначальная задача архитекторов ЭВМ заключалась в модернизации и обновлении си- стемы путем поиска компромиссов между этими по- стоянно растущими требованиями таким образом, чтобы как можно в большей степени удовлетворить каждому из них. Для этого необходимы: усовершен- ствование не только аппаратуры, но и программного обеспечения, а также модернизация на логическом и концептуальном уровнях, т. е. усовершенствование вычислительных моделей. Однако в отличие от про- граммиста сфера деятельности архитектора ЭВМ при модернизации системы ограничивается лишь уровнем аппаратных средств, поэтому большинство методов модернизации рассматривается лишь с точки зрения аппаратуры. В такой ситуации важно не упустить из виду модернизацию на более абстрактных уровнях, например уровне программного обеспечения, логиче- ском и концептуальном уровнях. В следующем разделе кратко описана история развития архитектур ЭВМ до середины 80-х гг., с тем чтобы заложить основы описания их современного развития и перспектив на будущее, которые приво- дятся в остальных главах книги.
10 Глава 1 1.2. ИСТОРИЯ РАЗВИТИЯ ВЫЧИСЛИТЕЛЬНОЙ ТЕХНИКИ ОТ МЕХАНИЧЕСКИХ МАШИН ДО ЭЛЕКТРОННЫХ Появление машины, способной автоматически вы- полнять четыре арифметических действия — сложение, вычитание, умножение и деление, — датируется нача- лом XVII в. В 1623 г. В. Шикард (1542—1635) изо- брел машину, способную не только суммировать и вычитать числа, но и частично перемножать и делить их. Однако, очевидно, об этой машине в то время было мало известно, поэтому более знаменитым счи- тается настольный арифмометр на основе зубчатого колеса, созданный в 1642 г. великим французским философом и ученым Б. Паскалем (1623—1662). Ему пришла в голову идея механизировать канцелярские расчеты, которые проводил его отец, бывший муни- ципальным инспектором по налогообложению. В 1671 г. немецкий философ и математик Г. Лейбниц (1646—1716) создал «зубчатое колесо Лейбница», выполняющее четыре основных арифметических операции. XIX век был веком значительных вычислений, вы- полняемых вручную, — это и составление таблиц ло- гарифмов, и расчеты в астрономии, и многое другое. Задавшись целью автоматизировать процесс состав- ления подобных числовых таблиц, английский мате- матик Ч. Бэббидж (1791—1871) начал работать в 1823 г. над проектированием «разностной машины». По замыслу создателя эта машина с зубчатыми ко- лесами должна была вычислять значения полиномов и печатать результаты на негативной пластине для фотопечати. Приводить в движение эту машину пред- полагалось с помощью парового двигателя. Однако реализовать машину имеющимися в то время техни- ческими средствами не представлялось возможным, кроме того, сам Бэббидж заинтересовался проекти- рованием более мощной счетной машины, и в 1842 г. проект его первой машины был заморожен. Затем в 1837—1853 гг. С. Г. Шойц (1785—1873) создал не- сколько моделей разностной машины малого мас- штаба.
Исторический обзор архитектур ЭВМ и их классификация 11 Новая счетная машина Бэббиджа получила на- звание «аналитическая», и в 1834 г. он изложил ее основные принципы. Эта машина впервые была при- менена в ткацком станке с перфокарточным управле- нием, изобретенным французом Жаккаром. На од- ном таком станке можно было ткать различные по узору ткани в зависимости от комбинации отверстий, пробитых на перфокарте. По замыслу Бэббиджа та- кая машина должна была автоматически выполнять различные вычисления при последовательном вводе набора перфокарт, содержащих пары команд и дан- ных, и изменять расположение отверстий на карте, а также порядок следования карт по мере выполне- ния вычислений. Аналитическая машина — это про- граммируемая автоматическая вычислительная ма- шина с последовательным управлением, содержащая арифметическое устройство (mill) и память (store). Меценат проекта — графиня Ада Августа Лавлейс (1815—1852)—была программистом этой машины; она первая в мире женщина-программист, именем которой был назван разработанный уже в наши дни язык программирования Ада. Замыслам Бэббиджа не суждено было воплотиться в жизнь из-за слабых технических возможностей того времени, и все завер- шилось лишь экспериментальной стадией, и то час- тично. К заслуживающим внимания отличительным чертам аналитической машины следует отнести внед- рение команды условного перехода, изменяющей управление обработкой в зависимости от результатов вычислений. Во второй половине XIX в. Г. Холлерит (1860— 1929) разработал машину с перфокарточным вводом, способную автоматически классифицировать и со- ставлять таблицы данных. Эта машина использова- лась в 1890 г. в Америке при проведении переписи населения. Наличие-отсутствие отверстия в перфо- карте обнаруживалось электрическими контактными щетками, а в счетчиках применялись реле. В 1896 г. Холлерит основал фирму, которая явилась предше- ственником знаменитой IBM (это название возникло в 1924 г.). Перфокарты, используемые в этой переписи
12 Глава 1 населения, были применены впоследствии фирмой IBM. После смерти Бэббиджа заметного прогресса в опытном производстве универсальных вычислитель- ных машин в Америке и Германии 30-х гг. не было. В Германии в 1938 г. К. Цузе создал механическую вычислительную машину Z1. В Z1 в отличие от по- следующих машин, оперировавших с десятичными числами, впервые были использованы операции с дво- ичными числами. Модель Z3, разработанная позже, в 1941 г., была универсальной программируемой вы- числительной машиной, ее операционное устройство было выполнено на реле, и в машине применялись операции с плавающей запятой. В Америке Г. Ай- кен из Гарвардского университета (1900—1973) спроектировал релейную универсальную вычислитель- ную машину, которая появилась на свет при содей- ствии фирмы IBM в 1944 г. под названием Марк 1 (Harvard MarkI). На проект этой машины оказали влияние идеи Бэббиджа, поэтому она оперировала десятичными числами. Скорость вычислений в механических машинах на основе зубчатого колеса и в электрических машинах, выполненных на реле, была ограничена, поэтому в 30-х гг. начались разработки электронных вычисли- тельных машин (ЭВМ), элементной базой которых стала трехэлектродная вакуумная лампа — триод,— изобретенная в 1906 г. Лидом Форестом. Первая универсальная ЭВМ была разработана в Универси- тете г. Пенсильвания (США) под руководством Дж. Маушли и Дж. Эккерта и называлась ЭНИАК (ENIAC). Разработка этой машины началась в 1943 г. и завершилась в 1946 г. Главной целью проек- тирования этой машины было составление числовых таблиц для вычисления траектории полета снарядов или ракет к цели. Машина весила 30 т, занимала площадь 200 м2, содержала 18 тыс. ламп и потреб- ляла мощность 140 кВт. Кроме того, она использо- вала десятичные операции и ее программирование осуществлялось путем установки переключателей и коммутации разъемов.
Исторический обзор архитектур ЭВМ и их классификация 13 1.3. СТАНОВЛЕНИЕ И УПРОЧНЕНИЕ ПОЗИЦИЙ АРХИТЕКТУРЫ ФОН НЕЙМАНА С появлением машины ЭНИАК скорость выпол- нения операций стремительно возросла, но на про- граммирование алгоритма вычислений, которое про- изводилось путем установки переключателей и ком- мутации разъемов, уходило много времени, кроме того, еще одна проблема была связана с многочис- ленными ошибками, возникающими при этом. Джон фон Нейман (1903—1957), известный математик и физик, являвшийся в то время консультантом проекта ЭНИАК, предложил записывать алгоритм вычисле- ний в память вместе с данными так, чтобы содержи- мое его можно было свободно изменять аналогично данным в соответствии с полученными результа- тами. Этот принцип получил название «принципа хранимой программы», он был использован в проек- тировании новой ЭВМ, названной ЭДВАК (EDVAC) в 1945 г. В машине ЭДВАК применялась двоичная ариф- метика, в ее основной памяти были использованы эле- менты на ультразвуковых ртутных линиях задержки, и память была способна хранить 1024 44-разрядных слова. Операции выполнялись поразрядно, начиная с младшего разряда двоичного числа. Машина ЭДВАК была введена в эксплуатацию в 1951 г., а первой ЭВМ с хранимой программой считается ЭДЗАК, работы над которой были завер- шены в 1949 г. М. Уилксом и др. из Кэмбриджского университета (Англия). Историю вычислительных машин принято обсуж- дать по поколениям: первое, второе, третье и т. д., сейчас можно говорить о 3-м и четвертом поко- лении. В 80-х гг. Япония предложила проект пятого поко- ления вычислительных машин, над разработкой ко- торых интенсивно работают ученые не только Япо- нии, но и США и европейских стран. Классификация машин по поколениям показана в табл. 1.
14 Глава 1 Таблица 1.1. История развития универсальных ЭВМ Поколение (годы) Элементная база Переключатель- ные элементы Элементы памяти Первое поколение (1945—1954) Второе поколение (1955—1964) Вакуумные лам- пы Транзисторы Ультразвуковые линии задержки, ЭЛТ Память на магнитных сердечниках, магнитные диски Третье поколение (1965—1974) ИС (МИС, СИС) ЗУ на магнитных сер- дечниках, ИС памяти 3,5-е поколение (1975— 1984) БИС БИС памяти Четвертое поколение (1985—?) СБИС СБИС памяти 1.3.1. ПЕРВОЕ ПОКОЛЕНИЕ ЭВМ (1945—1954) Первое поколение ЭВМ — это время становления архитектуры с хранимой программой» иными словами, архитектуры машин фон-неймановского типа. На рис. 1.1 в качестве классического примера архитек- туры машин первого поколения показана архитектура машины IAS, разработанной Дж. фон Нейманом и др. в Принстоне. Эта машина имела память на ЭЛТ с произвольным доступом и в отличие от ЭДВАК, ко- торая последовательно обрабатывала данные по од- ному двоичному разряду, составляющему слово, была параллельной машиной, одновременно обрабатываю- щей разряды данных. Машина состояла из трех структурных элементов: центрального процессора (ЦП), памяти и устройства ввода-вывода. В состав ЦП входило арифметико-логическое устройство (АЛУ) и устройство управления. Управление систе-
Исторический обзор архитектур ЭВМ и их классификация 15 Отличительные черты Аппаратные средства Программные средства Операционный блок с фиксиро- ванной запятой Машинный язык, язык ассемб- лера Операционный блок с плаваю- щей запятой, индексный ре- гистр, процессор ввода-вывода (ПВВ) Языки высокого уровня, биб- лиотека подпрограмм, мони- тор пакетного режима Микропрограммное управление, конвейерная обработка, кэш- память, мини-компьютеры, мик- ропроцессоры Мультипрограммирование, мультипроцессирование, опе- рационная система (ОС), вир- туальная память Мультиплексный конвейер, встроенный матричный процес- сор, супер-ЭВМ, многопроцессор- ные системы, персональные ком- пьютеры, рабочие станции Многосегментная виртуальная память, виртуальные маши- ны, базы данных, векториза- тор, языки искусственного интеллекта Компьютерные сети, разделение рабочих станций по назначению (проектирование, ИИ, коммерция), услуги компьютерных сетей Виртуальная аппаратура, вир- туальная машина, распреде- ленные ОС, сетевая архитек- тура, экспертные системы мой целиком было возложено на ЦП, и для пере- сылки данных пословно между устройством ввода-вы- вода и памятью также требовалось прямое управле- ние со стороны ЦП. Машинная программа была уже составлена не на машинном языке, а на языке ас- семблера. В это время, а именно в 1951 г., Эккерт и Маушли создали первую в мире коммерческую ЭВМ ЮНИ- ВАК 1 (UNIVAK1). Эта машина не была машиной с хранимой программой, и в 1952 г. фирма IBM соз- дала первую в мире коммерческую ЭВМ IBM 701 с хранимой программой. К передовым машинам этого поколения следует отнести Whirlwind I Массачусетсского технологическо- го института (МТИ), в которой впервые была исполь- зована память на магнитных сердечниках, и машина АТЛАС (ATLAS) Манчестерского университета, в
16 Глава 1 которой была предпринята попытка использования одноуровневой памяти, по существу концепции вирту- альной памяти, и индексных регистров. Рис. 1.1. Архитектура ЭВМ IAS. Для выполнения следующей последовательности операций: «для каждого i = 0 ~ 99 считать в акку- мулятор (АС) содержимое адреса 1000 + i, к содер- жимому аккумулятора прибавить содержимое адреса
Исторический обзор архитектур ЭВМ и их классификация 17 2000 + i и результат этой суммы записать по адресу 30000 + /» —- в машинах этого поколения необходимо было либо последовательно записать эти три коман- ды для каждого значения /, либо записать эти три команды для i = 0, а затем при изменении i переза- писывать поле битов в этих командах, показывающее адреса 1000, 2000, 3000. В первом случае необходима большая область памяти, а во втором — необходимо 100 Память Индексный регистр Рис. 1.2. Способы адресации. а — прямая адресация; б — косвенная адресация; в — индексная адресация. перезаписывать программу после ее выполнения. Од- нако повторно выполнить такую же обработку было невозможно. Для решения этой проблемы и был вве- ден индексный регистр. Адрес слова, с которым в зависимости от команды выполняются операции считывания, записи и другие операции, называется адресом операнда. Этот адрес может быть прямо указан в командном слове (рис. 1.2, а); такой способ называется прямой адре- сацией. Если адрес операнда содержится в слове, ко- торое хранится в памяти, то он может быть получек косвенным путем с помощью команды, указывающей 2—1145
18 Глава 1 адрес этого слова (рис. 1.2,6),— такой способ назы- вается косвенной адресацией. Чем больше способов адресации имеет машина, тем легче составлять про- грамму. В машинах, снабженных индексными реги- страми, можно свободно устанавливать значение индексного регистра и использовать команды инкре- мента-декремента, поэтому для указания адреса опе- ранда в различных командах можно указывать моди- фикацию с помощью индексного регистра, т. е. зна- чение, полученное в результате сложения адреса, прямо указанного в команде, и содержимого индекс- ного регистра и есть адрес операнда (рис. 1.2,в). В большинстве машин первого поколения индекс- ный регистр отсутствовал. Кроме того, для вызова подпрограммы не было предусмотрено команды, ав- томатически сохраняющей адрес возврата, когда осу- ществляется переход к подпрограмме. 1.3.2. ВТОРОЕ ПОКОЛЕНИЕ ЭВМ (1955—1964 гг.) Второе поколение ЭВМ ознаменовало собой на- чало применения транзисторов, созданных в 1948 г. в «Bell Laboratories», вместо вакуумных ламп. На смену ЗУ (запоминающим устройствам) на ЭЛТ и ультразвуковых ртутных линиях задержки пришли ЗУ на магнитных сердечниках и магнитных бараба- нах, которые стали применяться в качестве основной памяти. Широкое распространение получили также индексные регистры и аппаратные средства для вы- полнения операций с плавающей запятой. Стали при- меняться и специальные команды для вызова подпро- грамм. Были разработаны языки программирования высокого уровня, такие, как Алгол, Кобол, Фортран, которые позволили составлять программы, не учиты- вая тип машины [9]. Кроме того, были внедрены специализированные процессоры (процессоры ввода- вывода), способные управлять различными по быст- родействию устройствами ввода-вывода, что позво- лило освободить ЦП для выполнения основной об- работки. В машинах первого поколения системное программное обеспечение почти не применялось, а во втором поколении уже стали применяться компиля-
Исторический обзор архитектур ЭВМ и их классификация 19 торы, библиотеки подпрограммы, режим пакетной обработки и т. д. Первая экспериментальная машина на транзисто- рах ТХ-0 была создана в 1953 г. в лаборатории имени Линкольна (МТИ), но, как уже говорилось, первой ЭВМ с отличительными чертами второго поколения была IBM 704 на лампах, выпущенная в 1955 г. Она имела индексный регистр и аппаратные средства для выполнения операций с плавающей запятой, а также первый вариант операционной системы (ОС). В ма- шине IBM 700 — преемнике IBM 704 — был применен процессор ввода-вывода. Появились системы ЭВМ, и путем изменения конфигурации памяти или устрой- ства ввода-вывода в одной и той же ЭВМ стало воз- можным построение различных систем ЭВМ, отве- чающих конкретному приложению. Машины IBM 7090, IBM 7094 — это транзисторные модели IBM 709. 1. Процессор ввода-вывода (ПВВ). ПВВ — это специализированный процессор, управляющий обме- ном данных между устройствами ввода-вывода (УВВ) и основной памятью. Это управление осуществляется с помощью программы ввода-вывода, выполняемой ПВВ автономно. Программа ввода-вывода состоит из команд ввода-вывода, которые считываются ПВВ из основной памяти и выполняются им. ЦП только ини- циирует выполнение программы ввода-вывода в ПВВ. На рис. 1.3 показана структура ПВВ машины IBM 7094. Если обмен данными между ПВВ и основ- ной памятью осуществляется по 36 бит одновременно, то обмен данными между ПВВ и УВВ осуществляет- ся по 6 бит, поэтому ПВВ снабжен схемой для раз- биения и повторной компоновки данных. Регистр данных (РгД) выполняет роль буфера, а регистр команд (РгК) служит для хранения кода операции из выполняемой команды ввода-вывода (ад- рес операнда не сохраняется). В счетчике данных (СчД) устанавливается число одновременно пере- сланных слов по команде пересылки данных. Про- граммный счетчик (ПС) указывает адрес следующей команды ввода-вывода. Текущие состояния операции ввода-вывода последовательно устанавливаются в
20 Глава 1 регистре состояний (РгС). При инициировании опера- ции ввода-вывода ЦП передает в ППВ имя соответ- К аппаратуре ввода-вывода Шина данных памяти Шина адреса памяти Рис. 1.3. Процессор ввода-вывода ЭВМ IBM 7094. ПС — программный счетчик — хранит адрес следующей выполняемой команды ввода-вывода; РгД — регистр данных; РгК — регистр команд (5 бит) — хранит КОП-команды ввода-вывода; РгА—регистр адреса (5 бит); СчД — счетчик данных — хранит число переданных слов; РгС — регистр состояний. ствующего УВВ и начальный адрес хранения програм- мы ввода-вывода. После этого программа ввода-вывода выполняется ПВВ, а ЦП может выполнять другую программу. По окончании операции ввода-вывода ПВВ
Исторический обзор архитектур ЭВМ и их классификация 21 устанавливает РгС тем или иным способом в зависи- мости от нормального или аномального окончания и, послав в ЦП сигнал прерывания, извещает его об окончании ввода-вывода. 2. Пакетная обработка. В первых ЭВМ программы выполнялись поочередно, и каждый раз необходимо было вручную выполнять операции ввода программы и вывода ее результатов. Во втором поколении бла- годаря распространению ЗУ на магнитных лентах по- явилась возможность предварительно записывать на одну бобину с лентой несколько программ, автомати- чески выполнять их в том порядке, в котором они за- писаны на ленту, и результаты их выполнения после- довательно записывать на магнитную ленту другого ЗУ. Такой вид обработки получил название пакетной обработки, а системное программное обеспечение, управляющее ею, стало называться монитором пакет- ного режима. Поскольку монитор пакетного режима должен был постоянно храниться в основной памяти, ее объем пришлось увеличить. 3. Стековые машины. В это время появились ЭВМ, которые в основном использовали безадресные команды, т. е. команды, в которых нет поля адреса операнда. В машинах KDF-9 фирмы Electric (Вели- кобритания) и В 5000 фирмы Burroughs (США) вме- сто аккумулятора (Акк) использовался стек, поэтому вместо команды помещения в Акк содержимого ячей- ки памяти X использовалась команда PUSH X, а вме- сто команды записи содержимого Акк в ячейку па- мяти X использовалась команда POP X. Для сложе- ния значений X и Y использовались команды PUSH X и PUSH Y, с помощью которых значения X и Y после- довательно помещались в стек. Затем по команде ADD они извлекались из стека и суммировались, а их сумма снова помещалась в вершину стека. Ма- шины с такой конфигурацией получили название сте- ковых машин. 4. Первые суперкомпьютеры. Техника применения ЭВМ развивалась в направлении выполнения опера- ций над числовыми значениями, поэтому необходи- мость решать более крупные задачи с более высокой
22 Глава 1 скоростью привела к разработке суперкомпьютеров, целью которых было ускорение вычислений. К пер- вым машинам такого типа относятся LARC фирмы UNIVAC и Stretch (называемая также 7030) фирмы IBM. Эти машины нельзя назвать коммерческими, однако в них были применены методы параллельной обработки, увеличивающие число операций, выпол- няемых в единицу времени. Один из таких методов заключался в одновремен- ном выполнении некоторой команды и считывании из памяти следующей команды (считывание команды из памяти называется выборкой). Этот метод сейчас называется конвейеризацией команд. Другой метод заключался в параллельной обработке нескольких программ. Система, выполняющая параллельную об- работку с помощью нескольких ЦП, получила назва- ние многопроцессорной (или мультипроцессорной) системы. 5. Разделение времени и мультипрограммирование. Смысл этих названий заключается в том, что одним ЦП выполняется параллельная обработка несколь- ких программ. Во-первых, множество пользователей, работая каждый на своем терминале, выполняют на одном и том же ЦП свои программы в диалоговой форме. Таким образом создается видимость того, что каждый пользователь имеет собственную ЭВМ. Бла- годаря этому можно планировать эффективное ис- пользование такого ресурса, как ЦП. Во-вторых, когда некоторая программа ожидает окончания опе- рации ввода-вывода, ЦП имеет возможность частично выполнять в это время другую программу, — таким образом можно повысить эффективность применения такого ресурса, как время ЦП. Такой режим работы называется мультипрограммированием. Чтобы рабо- тать в мультипрограммном режиме, необходимо обес- печить возможность временного прерывания текущей программы, перехода к выполнению другой про- граммы, а затем возобновления выполнения прерван- ной программы. А для этого необходимо сохранить состояние выполнения программы, которое было до ее прерывания, т. е. сохранить значение программ-
Исторический обзор архитектур ЭВМ и их классификация 23 ного счетчика (ПС) и различных регистров, и в пер- вую очередь аккумулятора, причем эти значения не- обходимо сохранить до начала возобновления выпол- нения программы. Различные значения, сохраняемые в соответствующих регистрах, называются словом со- стояния программы (ССП). 1.3.3. ТРЕТЬЕ ПОКОЛЕНИЕ ЭВМ (1965—1974 rr.j Переход к третьему поколению завершился к се- редине 60-х гг. Третье поколение характеризуется тем, что вместо транзисторов узлы ЭВМ стали строить на интегральных микросхемах (или инте- гральных схемах, ИС), которые по степени интегра- ции разделяются на малые ИС (МИС), средние ИС (СИС) и большие ИС (БИС), а также тем, что вме- сто памяти на магнитных сердечниках стала приме- няться полупроводниковая память. В это время для управления ЦП стали использовать метод микропро- граммирования, который будет рассмотрен далее. Были доработаны и усовершенствованы методы кон- вейерной обработки, описанные выше применительно к суперкомпьютерам, и методы параллельной обра- ботки — мультипрограммирование и мультипроцесси- рование,— которые стали широко применяться в уни- версальных ЭВМ. Были разработаны методы эффек- тивного использования таких ресурсов, как время ЦП, пространство памяти и т. д. Среди них широкое распространение получил метод виртуальной памяти, целью которого было эффективное использование пространства памяти. Для повышения эффективности использования ЦП при параллельной обработке множества программ возникла необходимость в си- стемной программе, управляющей ЦП. Так была соз- дана операционная система (ОС). Большинство машин, относящихся к третьему по- колению по своим особенностям, входили в состав известной серии машин «System/ЗбО», выпущенной фирмой IBM в середине 60-х гг. Машины этой серии полностью взаимозаменяемы снизу вверх и образуют так называемое семейство ЭВМ.
24 Глава f 1. Техника высокоскоростной параллельной обра- ботки. Что касается области суперкомпьютеров, то здесь в.1964 г. была создана ЭВМ CDC6600, а в 1969 г. — CDC 7600, которые объединились в семей- ство CYBER. Для увеличения быстродействия машин путем одновременного выполнения множества опера- ций стали использовать два главных способа — кон- вейерную обработку и обработку с помощью матрич- ного процессора. При конвейерной обработке операционный блок, как показано на рис. 1.4, разбивается на несколько (допустим, и) частей, и каждая операция последова- тельно выполняется в каждой такой части, начиная с первой по n-ю, причем как только одна операция заканчивает выполняться на некоторой части опера- ционного блока, то эта часть начинает выполнять операцию, переданную с предыдущей части. Таким образом, все части операционного блока работают одновременно и выполняют п операций. Такой опе- рационный блок называется конвейером. Допустим, что операционный блок спроектирован таким обра- зом, что время прохождения одной операции до и после его разбиения на части одинаково и равно Т, а число операций, которые можно последовательно пропускать через конвейер, достаточно велико и рав- но N. В таком случае в исходном операционном блоке на выполнение одной операции потребуется время Т, но если используется n-звенный конвейер, то на обработку N операций потребуется время (п + N) • (Т/п), т. е. на одну операцию потребуется время (n + N) -T/(n-N). Если отношение N/п доста- точно велико, то это время приближается к Т/п. т. е. скорость вычислений возрастает в п раз по сравнению со случаем без разбиения операционного блока на части. Конвейер, рассчитанный на выполне- ние однотипных операций, легче проектировать по сравнению с конвейером, рассчитанным на выполне- ние различных операций, при этом сокращаются за- траты времени на разбиение операционного блока на части. Под матричным процессором понимается множе- ство процессорных элементов, расположенных в виде
Исторический обзор архитектур ЭВМ и их классификация 25 матрицы, так что обмен данными осуществляется между соседними элементами. Машины с матричными процессорами предназначены для решения числен- ными методами задач, представленных дифференци- NujTyK «стадий Время Г б Рис. 1.4. Конвейерная обработка операций. а — до конвейеризации; б — после конвейеризации. *
26 Глава 1 альными уравнениями с частными производными, и т. п. Конвейерная обработка была внедрена в машинах STAR-100 CDC и ASC фирмы Texas Instruments. Попытка применения матричного процессора была предпринята в машине ИЛЛИАК-IV (ILLIAC-IV) Иллинойского университета (США). В этой машине 64 процессора под управлением главного процессора могут выполнять распределенную обработку одной задачи и работают одновременно. 2. Мини- и микроЭВМ. Этот период называется еще периодом зарождения мини-компьютеров. Фир- ма DEC выпустила в 1963 г. ЭВМ PDP-5, а в 1965 г.— PDP-8. Появление мини-компьютеров приблизило ЭВМ к научным сотрудникам и инженерам и расши- рило область их применения. Область применения ЭВМ теперь не ограничивалась только числовыми расчетами, она стала простираться до такой высоко- уровневой обработки, как обдумывание ходов в шах- матной игре, составление комбинаций из детских ку- биков, лежащих на столе, путем управления схватом робота, снабженного органами зрения и проч. Стали интенсивно проводиться исследования в области соз- дания искусственного интеллекта и быстро разви- ваться новая отрасль науки — информатика, задачей которой было более глубокое исследование возмож- ностей ЭВМ и алгоритмов обработки. Мини-компью- теры явили собой самостоятельную вычислительную среду, на которую не распространяются ограничения сферы применения, будь то исследования по искус- ственному интеллекту или по вычислительной тех- нике, и в этом смысле они внесли огромный вклад в развитие ЭВМ. Быстрыми темпами развивалась и технология ИС: от малых ИС, содержащих 1—10 вентилей/кристалл, стал возможен переход к СИС, содержащим порядка 100 вентилей/кристалл, а в 70-х гг. произошел скачок к эпохе БИС, содержащих от нескольких сотен до нескольких тысяч вентилей/кристалл. Ускорителем такого развития была конкурентная борьба в погоне за увеличением емкости полупроводниковой памяти,
Исторический обзор архитектур ЭВМ и их классификация 27 а также уменьшением размеров и расширением функциональных возможностей карманных электрон- ных калькуляторов. В этой обстановке японские фирмы-изготовители электронных калькуляторов в целях создания много- функциональных калькуляторов, отвечающих разно- образным требованиям пользователей, стали обду- мывать идею применения универсальной программи- руемой БИС, модификация функций которой была бы возможна путем изменения программы. Изложив эту принципиальную идею, одна из японских фирм заказала американской фирме Intel изготовить кри- сталл подобной БИС. Так, в 1971 г. появился первый в мире микропроцессор 4004. Микропроцессор 4004 оперировал словами длиной 4 бит, поэтому он полу- чил название 4-разрядного микропроцессора. ЦП, реализованный на одном кристалле, был способен вы- полнять 45 видов команд. В 1973 г. эта же фирма выпустила 8-разрядный микропроцессор 8080, кото- рый оказал огромное влияние на последующее раз- витие микропроцессорной техники. 8080 был оснащен командами 72 типов, представленными 1—3 словами. 3. Микропрограммирование. Микропрограммиро- вание— отличительная черта машин третьего поко- ления— как способ гибкого и систематического управления работой ЦП был предложен М. В. Уилк- сом в 1951 г., и в некоторых машинах первого и вто- рого поколений была предпринята попытка исполь- зовать этот способ [10]. Выборка и выполнение команды ЦП осуществ- ляются, как правило, по следующему алгоритму (рис. 1.5). Для выборки команды в основную па- мять пересылается содержимое программного счет- чика (ПС) в качестве адреса (стрелка (а)), одновре- менно в память выдается сигнал, указывающий на то, что будет выполняться операция считывания. Резуль- тат считывания из основной памяти сохраняется в течение времени, необходимого для считывания, после чего с помощью управляющего сигнала пересылается в регистр команд (РгК) (стрелка (&)). В зависимо- сти от длины командного слова к значению ПС
28 Глава 1 добавляется соответствующее целое число, и результат этой суммы есть начальный адрес следующей коман- ды. Выполнение команды зависит от типа считанной о Рис. 1.5. Внутренняя структура и работа ЭВМ (упрощенный ва- риант). ПС — программный счетчик; Акк — аккумулятор; РгК — регистр команд; РгД— регистр данных; РгА — регистр адреса; ® вентиль (открывается/ закрывается управляющими сигналами). команды. Если это команда перехода к адресу X, то X, находящееся в поле операнда РгК, пересылается в ПС (стрелка (с)) и осуществляется переход к опе- рации выборки команды. Если команда, установлен-
Исторический обзор архитектур ЭВМ и их классификация 29 ная в РгК, указывает на операцию сложения содер- жимого Акк и адреса X, то значение X в поле опе- ранда РгК пересылается в качестве адреса в основ- ную память (стрелка (d)), одновременно пересылает- ся сигнал, указывающий на операцию считывания, и по истечении времени, необходимого для считыва- ния, результат считывания посылается на один из входов АЛУ (арифметико-логического устройства) (стрелка (е)). Одновременно на другой вход АЛУ посылается содержимое Акк (стрелка (/)), а на управляющий вход АЛУ — сигнал, указывающий на выполнение операции сложения. Результат сложения поступает в сдвиговый регистр, после чего содержи- мое сдвигового регистра пересылается в Акк, обра- ботка на этом завершается (стрелка (g)) и выпол- няется выборка следующей команды. Роль ЦП заключается, собственно говоря, в пе- ресылке данных из регистра в регистр и указании различным функциональным элементам типа АЛУ и памяти действий, которые им надлежит выполнять. Входы и выходы регистров, АЛУ и памяти соединены с другими регистрами. Эти соединения выполнены через отдельные вентили, и посредством передачи сигналов отпирания-запирания каждого вентиля осу- ществляется выбор только тех данных, которые над- лежит подать на вход конкретного регистра, а так- же выбор одного или нескольких регистров, в кото- рые нужно переслать данные. Управление выборкой команды и действиями ЦП, соответствующими коман- де, можно организовать при помощи стробирующих сигналов, управляющих пересылкой из регистра в регистр, и сигналов, указывающих действия различ- ным функциональным элементам, передавая их после- довательно в соответствующие временные интервалы. Одновременно выполняемые пересылки и операции с данными инициируются посредством одновременной передачи управляющих сигналов. До внедрения метода микропрограммирования разработчики ЭВМ проектировали последовательност- ные логические схемы, которые применялись для по- следовательной генерации этих сигналов. Входные сигналы этих схем соответствовали содержимому
30 Глава 1 регистра команд и части регистров, сохраняющих со- стояние ЦП, а выходные сигналы представляли собой стробирующие сигналы для пересылки данных из регистра в регистр и сигналы управления функцио- нальными элементами. Система управления, основан- ная на использовании последовательностных логиче- ских схем, называется системой аппаратного управ- ления. Последовательностную логическую схему можно заменить на вычислительную машину. Это обстоя- тельство становится очевидным, если вспомнить, что в большинстве электронных устройств, где необхо- димы такие схемы, например в автоматах по про- даже билетов, бытовой электроаппаратуре и т. п., ис- пользуются микропроцессоры. Главными удобствами замены последовательностей логической схемы на ЭВМ являются простота проектирования и гибкость, обусловленная возможностью программирования. Последовательностную логическую схему, управ- ляющую работой ЦП, также можно заменить на ЭВМ. Другими словами, для управления ЦП главной ЭВМ можно использовать другую, встроенную ЭВМ. Такой способ называется микропрограммным управ- лением [11, 12]. В данном случае программа внут- ренней ЭВМ управляет действиями (микрооперация- ми) ЦП. Программа внутренней ЭВМ называется микропрограммой, а память, которую имеет внутрен- няя ЭВМ для хранения микропрограмм, называется управляющей памятью. Для обычных ЭВМ отсут- ствует необходимость изменения микропрограммы после окончания проектирования, поэтому в качестве управляющей памяти используют ПЗУ (постоянное запоминающее устройство, или ЗУ только для чте- ния). Для того чтобы содержимое управляющей па- мяти можно было изменять в зависимости от прило- жения, используют перезаписываемую управляющую память. В машинах с перезаписываемой управляющей па- мятью систему команд (набор используемых команд) можно изменять путем перезаписи микропрограммы, хранимой в управляющей памяти. Таким образом, если в некоторой машине М перезаписать содержи-
Исторический обзор архитектур ЭВМ и их классификация 31 мое управляющей памяти и поместить в нее микро- программу, позволяющую реализовать систему ко- манд другой машины М/ на этой машине, то появ- ляется возможность имитировать работу машины М', т. е. выполнять на машине М объектную про- грамму (код), составленную для М', иначе говоря, программу, состоящую из машинных команд Мх. Этот процесс называется эмуляцией. Микропрограммы, ис- пользуемые для эмуляции различных ЭВМ, записы- ваются в виде файлов во вторичное запоминающее устройство, затем из них выбирается одна микропро- грамма и записывается в управляющую память, та- ким образом на одной ЭВМ можно имитировать ра- боту нескольких машин. Благодаря применению микропрограмм облегчает- ся описание и тех команд, которые требуют выпол- нения сложных действий. Появляется возможность описания системы команд, повышающей эффектив- ность применения специальных языков программиро- вания высокого уровня. Кроме того, используя микро- программы, можно так организовать управление ЦП, чтобы непосредственно на нем интерпретировать текст и выполнять программу, написанную на спе- циальном языке высокого уровня или на соответ- ствующем ему промежуточном языке. Машины, в ко- торых реализована эта система, называются маши- нами языков высокого уровня [13]. Команда внутренней ЭВМ (называемая микро- командой) состоит из поля кодов управляющих сиг- налов и поля управления переходом. Поле кодов управляющих сигналов содержит комбинацию нулей и единиц, показывающих включение/выключение ли- ний управляющих сигналов. В этом поле можно ис- пользовать полную комбинацию нулей и единиц, один к одному соответствующую полному набору управ- ляющих сигналов. Однако число разрядов поля ко- дов управляющих сигналов можно сократить, а зна- чит, и сократить длину слова управляющей памяти, если сначала закодировать последовательность управ- ляющих сигналов, а затем, после пересылки, декоди- ровать их. Здесь следует заметить, что при пересылке данных в регистры и порты АЛУ нельзя одновре-
32 Глава 1 менно отпирать больше двух вентилей из тех, что расположены между этими регистрами и портами и соединенными с ними регистрами. Отсюда стано- вится очевидным, что из полной комбинации нулей и единиц, соответствующей последовательности управ- ляющих сигналов, одновременно используется только часть ее, и эту часть можно закодировать. Микропро- граммы, в которых используется полная последова- тельность управляющих сигналов (т. е. полная ком- бинация нулей и единиц в поле кодов управляющих сигналов), называются горизонтальными микропро- граммами, а микропрограммы с частичным кодиро- ванием комбинации нулей и единиц называются вер- тикальными. В поле управления переходом указываются адрес следующей микрокоманды, подлежащей выборке, и тип перехода (условный/безусловный). При условном переходе начало перехода определяется сигналом состояния из ЦП и обычно, если условие не установ- лено, путем перехода к следующей команде указы- вается только один начальный адрес перехода. К сигналам состояния ЦП относятся сигналы, ука- зывающие на положительность/отрицательность ре- зультата операции в АЛУ, отсутствие нуля, наличие/ отсутствие переполнения и прочее. В системе с вертикальными микропрограммами поле управления переходом можно закодировать вме- сте с полем управляющих сигналов. Для посылки разных последовательностей управ- ляющих сигналов, соответствующих выборке или вы- полнению разных типов команд, микропрограмма содержит разные начальные адреса. Внутренняя ЭВМ выполняет микропрограмму, начиная с начального адреса, соответствующего выборке команды. В ре- зультате команда устанавливается в регистре команд (РгК), как это показано на рис. 1.5. С помощью де- кодера, например на базе быстродействующего ЗУ, содержащего таблицу декодирования, код операции (КОП) РгК (рис. 1.6) преобразуется в начальный адрес микропрограммы, соответствующей этой коман- де, и внутренняя ЭВМ выполняет микрокоманду, на- чиная с этого адреса. В самой последней микрокоман-
Исторический обзор архитектур ЭВМ и их классификация 33 де в управляющей последовательности указывается безусловный переход к начальному адресу, соответ- ствующему выборке команды, поэтому осуществляет- ся возврат к операции выборки команды. Таким об- РгК (регистр команд) КОП Операнд Микрооперация Сигналы управления Рис. 1.6. Принцип микропрограммного управления. разом, действия, выполняемые внутренней ЭВМ, до- вольно просты и это управление можно реализовать на последовательностных логических схемах. 4. Архитектура памяти. В третьем поколении ЭВМ наряду с микропрограммированием были развиты и распространены различные архитектуры памяти. В частности, большое распространение получили ар- хитектура с диспетчеризацией памяти, целью которой является повышение эффективности использования пространства памяти, расслоение памяти, целью ко- торого является увеличение фактической скорости 3—1145
34 Глава 1 доступа к памяти, а также кэш-память. Более по- дробно об их особенностях изложено в гл. 6. Для параллельной обработки нескольких про- грамм методами мультипрограммирования и разде- ления времени ограниченное пространство памяти необходимо таким образом распределить между про- граммами, чтобы избежать конфликтных ситуаций. Рис. 1.7. Виртуальная и реальная память. Обычно в основной памяти невозможно одновремен- но разместить области хранения и рабочие области всех программ, поэтому параллельная обработка осу- ществляется путем динамического распределения пространства памяти для каждой программы и пере- сылки информации между основной памятью и вто- ричной памятью. Если, добавив некоторый аппаратно реализованный механизм, сделать так, чтобы про- граммисту казалось, будто для хранения программы данных имеется достаточно большое пространство памяти, то можно существенно облегчить его работу. Подобная система памяти получила название вир- туальной памяти. В системе с виртуальной памятью основную память обычно называют реальной па- мятью.
Исторический обзор архитектур ЭВМ и их классификация 35 Адреса виртуальной памяти не соответствуют ад- ресам реальной памяти (рис. 1.7). Первые называют- ся логическими адресами, а вторые — физическими адресами. Для указания адреса операнда в машин- ной команде используется логический адрес. Для пре- образования его при выполнении команды в физиче- ский адрес необходим механизм трансляции адресов. Пространство виртуальной памяти обычно разби- вается на несколько непрерывных областей опреде- ленного размера. Такие области называются страни- цами. Поэтому каждый логический адрес можно представить в виде двух составляющих: номера стра- ницы и адреса внутри страницы (смещения). Номер страницы называется также адресом страницы. Трансляция адресов выполняется по страницам и для преобразования логического адреса страницы в фи- зический адрес страницы используется специальная таблица. Адрес внутри страницы не преобразуется. Более подробно работа виртуальной памяти описана в разд. 6.3. 1.3.4. 3,5-Е ПОКОЛЕНИЕ ЭВМ (1975—1984 гг.) Развитие полупроводниковой технологии привело к появлению БИС (больших интегральных схем), со- держащих от нескольких тысяч до нескольких десят- ков тысяч элементов на кристалле. Для построения памяти стали применять МОП БИС емкостью 16К—64К бит. Появились однокристальные 8- и 16- разрядные микропроцессоры (ЦП), и с невероятной быстротой расширился рынок персональных компьюте- ров, выполненных на их основе. Цены на БИС памяти быстро падали, и это дало новый толчок к увеличению степени интеграции микросхем. К типичным универсальным большим ЭВМ этого периода относятся модели 158, 168, IBM 370, сле- дующая за ними серия 303 X, М-серия фирмы «Хи- тати», серия PC фирмы «Фудзицу» и т. д. Для уве- личения скорости векторной обработки старшие мо- дели этих серий были снабжены встроенным матрич- ным процессором. 3*
36 Глава 1 Что касается области мини-компьютеров, то здесь были разработаны высокопроизводительные машины типа «System 20» серии VAX 11 фирмы DEC, которые стали называться супермини-компьютерами. Благода- ря им существенно сократился разрыв между боль- шими универсальными и мини-компьютерами. В це- лях повышения производительности некоторых пер- сональных компьютеров были созданы так называемые рабочие станции, назначение которых — предоставле- ние каждому пользователю вычислительных ресурсов высокопроизводительного мини-компьютера. В рабо- чих станциях существенная доля вычислительной мощности процессора используется для реализации высокоуровневой диалоговой функции, в них также широко используются такие технические приемы, как полиэкранный режим, манипуляции с изображениями и «мышь». В отличие от первых ОС, главным назначением которых было эффективное использование вычисли- тельных ресурсов, появление персональных компью- теров и рабочих станций привело к созданию ОС, для которых главное — это сделать ЭВМ «дружествен- ной» к пользователю. Примером такой ОС является Юникс (UNIX). В больших универсальных машинах стали приме- нять многосегментную виртуальную память, кроме того, виртуализация коснулась не только памяти, но и самих машин, другими словами, стала возможной реализация программным путем вычислительной машины. Что касается области суперкомпьютеров, то здесь были разработаны машины типа CRAY-1, которая и поныне определяет структуру суперкомпьютеров, CYBER-205 и др. В конце этого периода в Японии также появились суперкомпьютеры: VP-100, VP-200 фирмы «Фудзицу», 810/10, 810/20 фирмы «Хитати» и т. д. Интенсивно проводились разработки вектори- заторов, способных компилировать программы, на- писанные на Фортране, в форму, удобную для век- торной обработки, и максимально использовать воз- можности суперкомпьютеров.
Исторический обзор архитектур ЭВМ и их классификация 37 1.3.5. 4-Е ПОКОЛЕНИЕ ЭВМ (С 1985 г. ПО НАСТОЯЩЕЕ ВРЕМЯ) Дальнейшее развитие полупроводниковой техноло- гии сделало возможным создание СБИС (сверхболь- ших интегральных схем), содержащих свыше 100тыс. элементов на кристалле. Появились не только 16-, но и 32-разрядные однокристальные микропроцессоры (ЦП) , а также БИС статического ОЗУ (СОЗУ) емкостью 256К бит и динамического ОЗУ (ДОЗУ) емкостью 1М бит. Все эти элементы были выполнены на основе кремния, однако создавались и другие ин- тегральные схемы на основе полупроводниковых хи- мических соединений, обладающие более высоким бы- стродействием, которые нашли применение в высоко- скоростных АЛУ и регистрах. Прогресс в микропроцессорной технике привел к появлению 16-разрядных персональных компьюте- ров, а затем и 32-разрядных машин этого типа. Стоимость рабочих станций постоянно снижается, и постепенно ликвидируется разрыв между высокопро- изводительными персональными компьютерами и не- дорогими рабочими станциями. Благодаря удобству в применении ОС Юникс, ко- торая первоначально предназначалась для персональ- ных компьютеров и рабочих станций, начали приме- нять и в больших универсальных ЭВМ, а также су- перкомпьютерах. Компьютерные сети объединили существовавшие до сих пор разрозненно вычислительные машины, сделали возможной передачу файлов и сообщений и привели к развитию технологии распределенной об- работки. На базе специализированных процессоров, которыми оснащались ЭВМ, объединенные в сети, возникли различные службы управления файлами, печати, электронной почты и т. д. Распределенная обработка через посредство сетей от обычной гори- зонтальной обработки (между ЭВМ сравнимой про- изводительности) в последнее время ориентируется на вертикальную обработку, при которой можно использовать машины различной производительно- сти, например мини-компьютеры, рабочие станции,
38 Глава 1 персональные компьютеры и проч. Для того чтобы ее можно было распространить не только на соединение машин одной фирмы, но и машин различных типов, продолжается внедрение стандарта OSI (соединение открытых систем) как стандартного сетевого про- токола. В области универсальных больших ЭВМ идея вир- туализации распространяется не только на память, но и на терминальные и периферийные устройства, а также на сами машины, что привело к возникнове- нию концепции виртуальных терминалов и виртуаль- ных машин. Если для каждой программы задать свою виртуальную машину, т. е. сделать так, чтобы одна -реальная машина соответствовала нескольким виртуальным машинам, то появится возможность реализации параллельной обработки. При решении проблемы увеличения размера основной памяти в су- перкомпьютере неизбежно возникает другая проб- лема, связанная с увеличением времени доступа к дисковой памяти. Поэтому путем частичной замены вторичной памяти на полупроводниковую осуществ- ляют так называемое расширение памяти. Создание многопортовых регистровых файлов, используемых в векторных регистрах, ускорило разработку много- портовых элементов памяти и, по всей видимости, окажет большое влияние на архитектуру ЭВМ в бли- жайшем будущем. 1.4. ИСТОРИЯ И КЛАССИФИКАЦИЯ ПАРАЛЛЕЛЬНЫХ ЭВМ НЕЙМАНОВСКОГО ТИПА 1.4.1. ДВА ВИДА ТРЕБОВАНИЙ К ВЫСОКОСКОРОСТНОЙ ОБРАБОТКЕ Постоянное требование решения проблемы увели- чения быстродействия привело к созданию техники параллельной обработки. Это требование фактически состоит из двух различных требований. Первое за- ключается в том, как за более короткий интервал времени решить отдельную задачу. Второе — как за один и тот же интервал времени решить как можно
Исторический обзор архитектур ЭВМ и их классификация 39 больше задач. Если выполнить первое требование, то второе выполнится автоматически, однако это не означает, что, выполнив второе требование, можно автоматически выполнить и первое. Если объем ра- бот, необходимый для решения задачи, разделить на время, необходимое для ее решения, то получим скорость обработки. Однако это определение не под- ходит как мера измерения того, в какой степени удовлетворяется второе требование. Поэтому рас- смотрим значение W/T — отношение суммарного объ- ема работ, необходимого для решения множества за- дач в течение времени Т, к этому времени. Возьмем в качестве меры измерения предельное значение W/T, когда Т стремится к бесконечности. Этот пока- затель называется производительностью. Производи- тельность— это расширение понятия скорости обра- ботки, и ее еще принято называть эффективной ско- ростью обработки. В зависимости от того, что необходимо увеличи- вать, скорость обработки или производительность, определяются и особенности архитектуры, отвечаю- щей этим требованиям. Желательно, конечно, иметь архитектуру, удовлетворяющую обоим требованиям. Скорость обработки и производительность можно увеличить, либо заменив элементы, из которых со- стоит ЭВМ, на более быстродействующие, либо ис- пользовав какой-либо технический прием. Повысить скорость обработки за счет использования новой эле- ментной базы обычно более сложно, чем повысить производительность. Следовательно, даже в тех слу- чаях, когда повышение скорости обработки обеспе- чивается только на данном уровне развития архитек- туры,— а в будущем оно считается трудноосуществи- мым, — следует в дополнение к этому рассмотреть возможные пути повышения производительности. В частности, в настоящее время имеет смысл увели- чивать производительность больших ЭВМ, которые яв- ляются общим инструментом для многих пользовате- лей. Правда, в тех случаях, когда нет необходимости одновременно выполняемые программы выполнять на одной и той же машине, производительность можно повысить путем выполнения этих программ на
40 Глава 1 отдельных машинах. Следовательно, для того чтобы был смысл повышать производительность в пределах одной системы, необходимо создать условия для того, чтобы можно было понизить стоимость за счет сов- местного использования аппаратных или программ- ных ресурсов, обеспечить доступ из каждой програм- мы к совместно используемой информации, например к библиотекам программ или к базе данных, и обес- печить передачу данных между программами. 1.4.2. ДВА СПОСОБА ПОВЫШЕНИЯ СКОРОСТИ ОБРАБОТКИ Для повышения скорости обработки и производи- тельности желательно мультиплексировать устрой- ство обработки либо выполнять множество операций одновременно на разных устройствах обработки. Этот способ называется параллельной обработкой. Иногда под параллельной обработкой подразумевается со- гласованная (concurrent) обработка, однако в этом случае не обязательно используется множество устройств обработки, — этот термин означает, что множество программ выполняется на одном и том же устройстве обработки, но в каждый момент времени выполняется только одна из них. Однако если увели- чить интервал наблюдения, то будет казаться, что множество программ выполняются одновременно. Для того чтобы параллельная обработка была эффективной, необходимо, чтобы число одновремен- но выполняемых единиц обработки было достаточно велико. В противном случае увеличивается время простоя устройства обработки, а следовательно, сни- жается эффективность параллельной обработки. Од- новременно выполняемые единицы обработки могут быть большими и малыми: к большим обычно отно- сятся программы, а к малым — основные команды. Размер единицы обработки называется грануляр- ностью параллельной обработки. Для одновременного выполнения единиц обработ- ки существуют два способа (рис. 1.8). Первый за- ключается в том, что «каждый делает всю работу». Второй — в том, что «каждый делает определенный вид работы». Другими словами, в первом случае
Исторический обзор архитектур ЭВМ и их классификация 41 каждое устройство обработки выполняет последова- тельно всю обработку от начала до конца. Прежде 0 0 0 0 Рис. 1.8. Два способа параллельной обработки. а — многоэлементная обработка; б — многостадийная обработка. такой способ назывался узкопараллельной обработ- кой, но в этой книге он называется многоэлементной обработкой. Во втором случае все устройства обра- ботки располагаются в ряд так, что г-е устройство
42 Глава 1 выполняет i-ю стадию обработки. Таким образом, множество объектов обработки запускаются с пер- вого устройства, последовательно проходят через все устройства, т. е. через все стадии обработки. Такой способ параллельной обработки называется конвейер- ной обработкой (или конвейеризацией). Принцип конвейеризации операции как один из видов этой обработки уже был рассмотрен в разд. 1.3. В дан- ной' книге конвейерная обработка называется еще многостадийной обработкой по аналогии с указанной выше многоэлементной обработкой. При многостадийной обработке одновременно вы- полняемые объекты не обязательно должны быть одного типа, но в таких случаях звенья конвейера проектируются таким образом, чтобы не было сбоев в его работе. 1.4.3. КЛАССИФИКАЦИЯ ПАРАЛЛЕЛЬНЫХ МАШИН НЕЙМАНОВСКОГО ТИПА Общепринятой классификацией параллельных ма- шин неймановского типа является классификация, предложенная Флинном [14]. Он предложил класси- фицировать быстродействующие компьютеры по чис- лу потоков команд и данных: 1) одиночный поток команд, одиночный поток данных (ОКОД); 2) одиночный поток команд, множественный по- ток данных (ОКМД); 3) множественный поток команд, одиночный по- ток данных (МКОД); 4) множественный поток команд, множественный поток данных (МКМД). (Среди перечисленных типов ОКОД-машины соответ- ствуют обычному неймановскому компьютеру.) Тем не менее классификация по Флинну являет- ся слишком примитивной и не дает достаточно пол- ного представления об отличительных чертах совре- менных параллельных компьютеров неймановского типа. Предпринимались попытки классифицировать по- другому параллельные компьютеры, и в данной книге
Исторический обзор архитектур ЭВМ и их классификация 43 описывается новый способ классификации, отличный от известных способов. Как уже говорилось, парал- лельную обработку можно выполнять двумя спосо- бами: многоэлементной обработкой и многостадий- ной обработкой — и в то же время использовать одновременно оба этих способа. Объекты одновремен- ной обработки для каждого из этих способов можно, в свою очередь, разделить на три больших класса: 1) программы; 2) команды; 3) операции. Первый класс помимо отдельных программ вклю- чает также процессы, состоящие из одной програм- мы. Второй класс в отличие от третьего включает также операции считывания операндов из памяти и записи их в память. С точки зрения гранулярности для каждого способа — многоэлементной и многоста- дийной обработки — неймановские параллельные ма- шины можно классифицировать следующим образом (см. табл. 1.2). Таблица 1.2. Классификация параллельных машин неймановского типа Гранулярность параллельной обработки Многоэлементная Многостадийная обработка обработка Название класса Программа Нет/команда/операция Многопроцессорная си- стема Команда Операция Нет/операция Матричный процессор Нет Процессор со многими д nv Нет Команда Процессор с конвейери- зацией команд Нет/операция Операция Процессор с конвейери- зацией операций Если определена единица обработки, то можно определить и типы устройств обработки, работаю- щих параллельно. Например, если гранулярностью многоэлементной обработки является программа, то каждое устройство обработки должно иметь по
44 Глава 1 крайней мере ЦП. Память и устройства ввода-вывода могут быть общими, но лучше, если каждое из устройств обработки будет иметь свои память и УВВ, которые называются соответственно локальной па- мятью и локальным УВВ. В локальной памяти, как и в общей, хранятся программы и данные. Если гранулярностью является команда, то, по- скольку последовательное управление выполнением программы осуществляется вне каждого устройства обработки, в качестве его следует использовать ЦП, лишенный функции последовательного управления. Такое устройство обработки называется процессор- ным элементом (ПЭ). ПЭ выполняет операции счи- тывания и записи операндов в память, а также вы- полняет операции над операндами, хранящимися в памяти. Эти функции у АЛУ отсутствуют. ПЭ мо- жет быть дополнен локальной памятью, однако она не предназначена для хранения программ. Для управления УВВ необходима соответствующая про- грамма, поэтому в данном случае локальное УВВ не применяется. Если гранулярностью многоэлементной обработки является операция, то считывание/запись операндов выполняются вне устройства обработки, поэтому в качестве такого устройства можно использовать АЛУ либо РАЛУ (регистровое, т. е. дополненное регист- рами, АЛУ). 1.4.4. МНОГОПРОЦЕССОРНАЯ СИСТЕМА Многопроцессорные системы, как показано на рис. 1.9, классифицируются на системы с общей па- мятью и системы с коммутацией сообщений. Первый тип систем называют еще системами с сильной связью, а вторые — со слабой связью. Каждый про- цессор в многопроцессорной системе второго типа имеет особую память и особый канальный процессор. Структура с распределением функций между раз- личными системами называется полипроцессорной. Каждый ЦП в многопроцессорной системе может выполнять многостадийную обработку, либо это мо- жет не предусматриваться.
Исторический обзор архитектур ЭВМ и их классификация 45 В системах с общей памятью одно (единое) про- странство памяти совместно используется всеми про- цессорами. Фактически общая память организуется с помощью сети связи, как это показано на рис. 1.10. Процессоры Общая память Локальная память Рис. 1.9. Структуры многопроцессорных систем. а — с общей памятью; б — с коммутацией сообщений. Общее пространство памяти разбивается на множе- ство ЗУ, которые соединяются с процессорами при Процессоры Сеть связей "процессор- память" Банки памяти Рис. 1.10. Способ реализации многопроцессорной системы с общей памятью помощи сети связи. В разд. 6.4 подробно рассмот- рены архитектуры общей памяти, использующей раз- ные сети связи. Число процессоров, которое можно использовать для реализации многопроцессорной си- стемы с общей памятью, ограничивается конфлик- тами при доступе к общей памяти, каждый процессор снабжают кэш-памятью либо локальной памятью. В системах с коммутацией сообщений связь меж- ду процессорами осуществляется в форме передачи
46 Глава 1 сообщений через посредство портов ввода-вывода и процессорную сеть связи. В таких системах часто используется пакетный режим передачи. По сравне- нию с системами с общей памятью данным системам свойственен большой перерасход времени при пере- даче данных, поэтому их невыгодно использовать в тех случаях, когда сложные структуры данных обра- батываются совместно несколькими ЦП, однако, если частота передач и объем передаваемых данных не- большие, такую систему можно использовать даже при большом числе процессоров. Для взаимосвязи между процессорами помимо многоуровневой сети связи, описанной в разд. 6.4, можно использовать полную сеть в виде полного графа, в узлах которого находятся процессоры, ра- диальную сеть, в центре которой находится один процессор, соединенный с остальными, сеть в виде решетки, тора, кольца, цепи, бинарного дерева, би- нарную n-кубическую сеть, процессоры которой рас- положены в вершинах гиперкуба, сеть в виде гипер- куба, в вершинах которого расположены кольцевые сети, и т. д. (рис. 1.11). Примерами систем с коммутацией сообщений яв- ляются Ст* [15] университета Карнеги — Меллона, так называемый «Космический куб» (Cosmic Cube) Калифорнийского университета, серия FPS-Т фирмы Floating Point и другие. В системе Ст* путем соеди- нения процессоров по общей шине образованы кла- стеры, которые, в свою очередь, также соединены с помощью межкластерной шины. В системе Cosmic Cube используется сеть связи в виде двоичного ше- стимерного куба, которая связывает 64 процессора. Каждый процессорный элемент этой сети состоит из двух процессоров фирмы Intel: 8086 и 8087. В серии FPS-Т при максимальной конфигурации используют- ся 16 384 процессорных элемента, соединенных с по- мощью двоичной 14-мерной кубической сети. Каж- дый процессорный элемент этой сети состоит из управляющего процессора и двух арифметиче- ских процессоров. В качестве управляющего про- цессора используется транспьютер фирмы «Ин- мос» [18].
Исторический обзор архитектур ЭВМ и их классификация 47 Рис. 1.11. Типы сетей связи (только одноуровневые сети связи), а — с общей шиной; б — полная сеть; в — радиальная сеть; г — сеть в виде решетки; д — матричная сеть; е — линейная сеть; ж — кольцевая сеть; з — сеть в виде двоичного дерева; и — двоичная n-кубическая сеть; к — гиперкуб.
48 Глава 1 К многопроцессорным машинам с общей памятью помимо С. mmp [19] университета Карнеги — Мел- лона и S-1 Ливерморской лаборатории им. Лоуренса относятся еще несколько коммерческих машин. В си- стеме С. mmp 16 машин PDP-11 и 16 банков памяти соединены при помощи матричного коммутатора. В системе S-1 16 процессоров MARK И А соединены через матричный коммутатор с 16 банками памяти. В сфере коммерческих машин различные фирмы-из- готовители выпускают системы, содержащие 2—4 про- цессора для большой универсальной ЭВМ типа IBM 370 К 168 МР, 3081, 3084 и т. д. Известна также система на базе суперкомпьютера CRAY Х-МР, целью которой является безостановочная (non-stop) обработка (например, Tandem/16 [21]). В послед- ние годы появились также коммерческие машины типа НЕР [22] фирмы Deneclor, содержащие 16 про- цессоров, взаимосвязанных с помощью сети с пакет- ной коммутацией и соединенных с таким же числом банков памяти; эта система способна осуществлять гибкую обработку типа ОКМД и конвейерную обра- ботку типа МКМД. О системах с общей памятью подробно изложено в разд. 6.4. 1.4.5. МАТРИЧНЫЙ ПРОЦЕССОР Матричные процессоры разделяются на матричные ОКМД-процессоры и ассоциативные матричные про- цессоры. Последний тип указывает на архитектуру, в которой ассоциативный поиск в памяти осуществ- ляется матричным процессором. Архитектура ассо- циативной памяти подробно рассмотрена в разд. 6.5. Матричные ОКМД-процессоры имеют структуры, показанные на рис. 1.12, а, б. Структуру, показанную на рис. 1.12, а, имеет машина ИЛЛИАК-1 [23—25], а показанную на рис. 1.12, б — машины типа BSP [26—28]. В структурах обоих типов имеется множе- ство процессорных элементов (ПЭ) и одно устрой- ство управления (УУ). УУ передает всем ПЭ одно- временно одну и ту же команду. Поэтому все ПЭ параллельно выполняют одни и те же операции.
Управление Управление б Рис. 1.12. Структуры матричного ОКМД-процессора. а — типа ILLIAC IV; б — типа BSP. 4—1145
50 Глава 1 Поток команд в такой системе одиночный, и управле- ние им производится при помощи УУ. Управление осу- ществляется следующим образом: если необходим переход по условию, соответствующему результату про- верки каждого ПЭ, то сначала определенная опера- ция выполняется в ПЭ, результат проверки которого был истинным, а затем другая операция выполняется в ПЭ, результат проверки которого оказался лож- ным. Такое управление можно осуществить, снабдив каждый ПЭ регистром состояний и используя способ выйблнения/останова команды в каждом ПЭ по зна- чению этого регистра либо, в случае если команда генерируется УУ, используя способ одновременной посылки вместе с командой карты битов маски, по- казывающей, в каком ПЭ выполняется команда. Во многих ОКМД-машинах в УУ собирается по одному специальному биту регистра состояния от каждого ПЭ, где они анализируются. При доступе к памяти из каждого ПЭ эта опера- ция также указывается командой, передаваемой из УУ. В команде указывается только один адрес, но каждый ПЭ содержит индексный регистр, поэтому адрес, передаваемый из УУ, модифицируется в соот- ветствующем индексном регистре, благодаря чему каждый ПЭ осуществляет доступ по своему адресу. Связь между ПЭ осуществляется синхронно че- рез сеть связи. Сети связи, как уже было описано в разделе, посвященном многопроцессорным систе- мам, бывают одноуровневыми и многоуровневыми. По типу соединения сети связи подразделяются на сети с управляемой связью и фиксированной связью. В сетях с управляемой связью распределенное управ- ление отсутствует, а УУ осуществляет централизо- ванное управление, поэтому в таких сетях исполь- зуется коммутатор каналов, а коммутатор паке- тов — нет. Во многих матричных ОКМД-процессорах каждый ПЭ обрабатывает одно слово данных, однако в по- следних моделях ПЭ способен вести побитовую об- работку, поэтому предпринимаются попытки построе- ния ОКМД-процессоров, содержащих от нескольких тысяч до нескольких сотен тысяч ПЭ на кристалле
Исторический обзор архитектур ЭВМ и их классификация 51 (причем на одном кристалле БИС монтируется до нескольких десятков ПЭ). Эти процессоры называют- ся разрядно-модульными матричными ОКМД-процес- сорами. Устройство управления (УУ) Буфер данных Регистры Рис. 1.13. Структура машины ILLI AC IV. ЛБД — локальный буфер данных; АккР — аккумулятор и регистры; А — аккумулятор (64 бит); В — регистр операнда (64 бита); R—регистр марш- рутизации данных (для пересылки данных между ПЭ) (64 бит); S — ре- гистр общей памяти (64 бит); X — индексный регистр (16 бит); D — ре- гистр режима (8 бит для хранения маски ПЭ). Для рассмотрения примеров матричных ОК.МД- процессоров обратимся к известным в прошлом про- ектам Unger [29] (1958 г.) и Solomon [30, 31], пред- ложенному Слотником в 1962 г. Разработанная во второй половине 60-х гг. система ИЛЛИАК. IV была 4*
52 Глава 1 преемником проекта Solomon, и в 1972 г. началась ее эксплуатация. Система ИЛЛИАК IV была спроектирована в Ил- линойсском университете, а разработана в фирме Burroughs. Как показано на рис. 1.13, она имеет одно УУ и 64 ПЭ, причем каждый ПЭ содержит локальную память емкостью 2К слов. ПЭ этой си- стемы соединены сетью связи, как это показано на Рис. 1.14. Сеть связи между ПЭ в машине ILLI AC IV. рис. 1.14. Программы хранятся в памяти каждого ПЭ, и УУ считывает программу по одной команде по шине УУ. Эти команды выполняются УУ, при- чем по типу они классифицируются на команды управления процессом выполнения программы и опе- рационные команды, которые посылаются одновре- менно на все ПЭ и выполняются в каждом из них. Поставив перед собой цель создать более высоко- производительную систему, чем ИЛЛИАК IV, исполь- зуя в то же время ее как базовый вариант, фирма Burroughs начала разработку системы BSP (Bur- roughs Scientific Processor — процессор для научных расчетов фирмы Burroughs) [26—28]. Однако, к со- жалению, работы над ней были приостановлены в 1979 г. Структура BSP показана на рис. 1.12, б: 16 ПЭ соединены с 17 банками общей памяти через коммути- рующую сеть. УУ дополнительно снабжено управляю- щей памятью, в которой хранятся программы. Коман-
Исторический обзор архитектур ЭВМ и их классификация 53 ды, считанные при помощи УУ, преобразуются в 128- битовые микрокоманды и одновременно посылаются на все ПЭ. Отличительной особенностью системы BSP яв- ляется то, что число банков памяти в ней равно 17, т. е. оно превосходит число ПЭ, равное 16, всего лишь на единицу. Такая система называется системой пер- вичной памяти [28]. Благодаря такой структуре можно одновременно считывать данные с горизон- тальных, вертикальных и диагональных элементов матрицы данных. На рис. 1.15 показан способ хране- ния элементов матрицы, делающий возможным по- добный доступ для случая, когда число ПЭ равно 6, а число элементов матрицы — 7. В лаборатории Ватсона фирмы IBM проводилась разработка матричного ОКМД-процессора, который сегодня известен под названием CF-11 [32]. CF-11 — это специализированная машина, разрабатываемая с целью выполнения со скоростью 11,5 GFLOPS сверх- больших расчетов для проверки гипотез в квантовой механике, на которые потребуется больше года. Она состоит из одного УУ и 576 ПЭ, взаимосвязанных по сети «Мемфис» (Memphis), которая рассмотрена в разд. 6.4. Каждый ПЭ представляет собой 32-разряд- ный процессор, который состоит из четырех опера- ционных блоков с плавающей запятой, одного опера- ционного блока с фиксированной запятой, регистро- вого файла объемом 256 слов, динамического ОЗУ объемом 256К байт и статического ОЗУ объемом 64К байт. ПЭ управляются одновременно при помощи команды длиной 180 бит, передаваемой из УУ. В Японии в 1984 г. была разработана машина РАХ-128 (Университет г. Цукуба) [33, 34]. РАХ-128 содержит 128 процессоров, соединенных в виде мат- ричной сети. Цель этой разработки — моделирование трехмерных непрерывных систем. Примером разрядно-модульного матричного ОКМД-процессора является знаменитый МРР (Mas- sively Parallel Processor — глобальный параллельный процессор), разработанный фирмой Goodyear по за- казу NASA для обработки изображений, передавае- мых из космоса [35—37]. МРР — это специализиро-
54 Глава 1 ванный процессор для обработки изображений, кото- рый состоит из У У и 16384 ПЭ, соединенных в виде матрицы размерностью 128X 128. Каждый ПЭ в такой матрице связан только с четырьмя соседними ^11 fl12 °13 а14 а15^ 021 022 <323 ° 24 fl25 031 032 О33-О34 аЗЬ \O41 O42 O43 O44 045/ а • Первая О Первый Д Диагональный строка столбец элемент Состояние сети связи показывает параллельный доступ к первой строке б Рис. 1.15. Способ хранения матрицы в первичной памяти, а — матрица размерностью 4X5; б — хранение матрицы (о) и параллельный доступ. ПЭ. Ввод данных в матрицу ПЭ осуществляется для 128 крайних левых ПЭ, как показано на рис. 1.16, и последовательным продвижением вправо данные вводятся во все остальные ПЭ. На каждом кристалле смонтировано 8 ПЭ.
Исторический обзор архитектур ЭВМ и их классификация 55 Помимо этой модели к разрядно-модульным мат- ричным ОКМД-процессорам относятся CLIP-4 [38] Лондонского университета и DAP [39] фирмы ICL. В CLIP-4 ПЭ расположены в виде матрицы размер- ностью 96X96, и одновременно можно обрабатывать данные ПЭ 4- или 6-угольной решетки. На каждом Рис. 1.16. Структура процессора МРР и ввод-вывод данных. кристалле смонтировано 8 ПЭ. В лаборатории связи г. Ацуги (фирма NTT, Япония) был разработан кри- сталл, содержащий 64 одноразрядных ПЭ, на базе которого построен процессор ААР, состоящий из 256X256 ПЭ [40]. Каждый ПЭ может устанавли- вать связь с восемью соседними ПЭ. 1.4.6. ПРОЦЕССОРЫ С МНОГИМИ АЛУ Процессоры этого типа содержат, как показано на рис. 1.17, множество параллельно соединенных АЛУ, а также многопортовый регистровый файл, сов- местно используемый этими АЛУ, либо регистровый файл, состоящий из множества банков, соединенных с помощью сети. Каждое АЛУ может автономно вы- полнять операции с двумя данными из регистрового файла и возвращать результат операции в регистро- вый файл. Для одновременного управления п АЛУ используются длинные микрокоманды, состоящие из п полей.
56 Глава 1 Поскольку обеспечить эффективную работу одно- временно всех АЛУ весьма проблематично, такие процессоры используются для специальных видов обработки, например обработки сигналов, изображе- ний, графической информации и т. д. В зависимости от вида обработки оптимизируются и микропрограммы в целях эффективного использования АЛУ. Управляющий сигнал Рис. 1.17. Структура процессора с многими АЛУ. Процессор АМР, разработанный в 1973 г. в Ара- гонской национальной лаборатории (США) [41], содержит два АЛУ и предназначен для обработки в реальном времени графической информации и т. п. В Университете г. Киото (Япония) в 1976 г. был разработан процессор QA-1, а в 1983 г. — QA-2 [42, 43]. Оба процессора имели в своем составе по 4 АЛУ и предназначались для обработки сигналов или изображений. Длина команды в каждом состав- ляла соответственно 160 и 256 бит. Процессор МС, разработанный в 1985 г. в радиотехнической лабора-
Исторический обзор архитектур ЭВМ и их классификация 57 тории фирмы «Мацусита дэнки», содержал 5 АЛУ и предназначался для обработки графической инфор- мации. Длина команды для этого процессора состав- ляет 96 бит [44]. 1.4.7. ПРОЦЕССОРЫ С КОНВЕЙЕРИЗАЦИЕЙ КОМАНД Выполнение команды осуществляется последова- тельно путем повтора операций выборки команды (IF), декодирования команды (D), преобразования адреса операнда (ОА), выборки операнда (OF), вы- полнения операции (ЕХ), сохранения результата (S) | IF | D |OA|OF|EX| S | IF | D |OA|OF|EX| S | IF | D |OA| • •- | IF I D |OA|OF|EX| S I Машинная команда 1 | IF | D IoaIofIEXI S | Машинная команда 2 | IF | D |OA|OF|EX| S | Машинная команда 3 Рис. 1.18. Принцип конвейеризации команд. а — последовательное выполнение команд; б — конвейерное выполнение команд. (рис. 1.18, а). В первых ЭВМ управление осуществ- лялось таким образом, что выборка новой команды была возможна только по окончании прохождения всех перечисленных стадий выполнения текущей команды. Если организовать непрерывное выполне- ние команд, как это показано на рис. 1.18,6, то для одной команды потребуется время, затрачиваемое на прохождение одной стадии. Такой способ выполнения команд называется конвейеризацией команд [45]. Для реализации конвейера команд необходимо иметь независимые аппаратные средства для каждой
58 Глава 1 стадии обработки, чтобы можно было одновременно выполнять команды на разных стадиях. Конвейер команд работает наиболее эффективно, когда вре- мена, требуемые для прохождения каждой стадии, равны, однако если есть некоторый разброс по вре- Устройство Устройство Рис. 1.19. Структура универсальной большой ЭВМ. мени, то его можно устранить, установив в нужных местах буферы. На рис. 1.19 показана структура большой универсальной ЭВМ с конвейеризацией команд. Связь между функциональными блоками в данном случае осуществляется с использованием буферов. Работа конвейера команд может быть нарушена ио многим причинам [46]. К наиболее важным от- носятся:
Исторический обзор архитектур ЭВМ и их классификация 59 1) необходимость использования результата опера- ции, выполненной в некоторой команде, в следую- щей команде; 2) определение адреса операнда в некоторой коман- де с помощью предыдущей команды; 3) изменение последовательности выполнения команд в результате проверки условия в команде услов- ного перехода; 4) необходимость блочной пересылки из основной памяти в кэш-память (в системе с кэш-памятью, описанной в разд. 6.2), если в последней отсут- ствует команда или адрес операнда; 5) наложение стадий выборки команды, выборки операнда, сохранения результата, т. е. возникно- вение конфликтов при доступе к памяти; 6) возникновение прерываний, переключение про- цессов; 7) выполнение слишком длинной команды, для кото- рой не хватает времени обычной стадии выпол- нения и т. п. Причины (1), (2), (4), (5) можно в какой-то сте- пени устранить, если пересылать некоторые данные отдельно от основного потока кратчайшим путем к местам, где они требуются, либо если устано- вить буферы, разделить память и регистровый файл по назначению. Причину (7) можно устранить пу- тем мультиплексирования АЛУ или его конвейери- зации. Если обнаруживается команда условного пере- хода, то адрес следующей команды определяется по результату ее выполнения. В тех случаях, когда усло- вие не задано, порядок следования команд остается прежним, и поскольку следующая команда уже вве- дена в конвейер, его работа не нарушается. Проб- лемы возникают в том случае, когда имеется неко- торое условие. В таких случаях следующая по по- рядку команда, введенная в конвейер, является недействительной, поэтому конвейер необходимо пере- запустить со стадии выборки команды. Для решения этой проблемы предложены способы с использованием буфера цикла, множественного
60 Глава 1 потока команд, таблицы с предысторией переходов 147, 48]. Система с буфером цикла была использована в машине CDC 6600. Суть ее в следующем. В машине имеется буфер команд большого размера, способный хранить весь программный цикл. Благодаря этому в тех случаях, когда условие задано, доступ осуще- ствляется только к буферу цикла, а к основной па- мяти — нет. Система с множественным потоком команд была использована в машине IBM 370/168. По этому спо- собу машина оснащается двумя буферами команд: основным и вспомогательным. Основной буфер ис- пользуется для выполнения стадий выборки коман- ды, декодирования, преобразования адреса операнда, выборки операнда, когда условие не задано, а вспо- могательный буфер используется для параллельного выполнения аналогичной обработки последовательно- сти команд, когда условие задано. В машинах IBM 3033, IBM 3090 используются два и более вспомогательных буфера, и если обнаружи- вается другая команда условного перехода, то для последовательности команд, предусмотренных в этом условии, осуществляется предвыборка аналогичным путем с использованием другого буфера. Система с таблицей предыстории переходов осно- вана на использовании ассоциативной памяти, в ко- торой в ходе выполнения программы запоминаются наиболее часто используемые переходы, встречаю- щиеся в командах условного перехода. Таким обра- зом, если снова обнаруживается некоторая команда условного перехода, то выполняется быстрый доступ к ассоциативной памяти, делается предположение о том, что начало перехода в данном случае являет- ся наиболее часто используемым началом перехода в данной команде, и осуществляется предвыборка команды. Конвейеризация команд, которая первоначально использовалась только в больших универсальных ЭВМ, теперь широко используется и в универсаль- ных микропроцессорах.
Исторический обзор архитектур ЭВМ и их классификация 61 1.4.8. АРИФМЕТИЧЕСКИЙ КОНВЕЙЕРНЫЙ ПРОЦЕССОР Процессоры этого типа имеют конвейерную орга- низацию операционного блока, т. е. следующая опера- ция начинает выполняться в нем до окончания пре- дыдущей операции [49, 50]. Иначе говоря, опера- ционный блок разбивается на несколько частей. На рис. 1.20 показана схема конвейерного сумматора с плавающей запятой. В арифметическом конвейерном процессоре может также использоваться и конвейер команд. Часто та- кие процессоры имеют специализированные опера- ционные блоки, рассчитанные на выполнение опре- деленных операций. Добавим, что в современных суперкомпьютерах иногда используют множество оди- наковых операционных блоков. Арифметические кон- вейерные процессоры предназначены для высокоско- ростных вычислений, и можно привести множество примеров их использования в суперкомпьютерах [51]. В частности, процессоры, которые используются для матричных и векторных вычислений, называются также векторными процессорами. В программах, используемых для векторной обра- ботки, встречаются фрагменты, требующие последо- вательных действий, например при управлении пото- ком команд, вычислении скалярных констант. Эти фрагменты называют еще скалярными фрагментами. Векторные машины можно разделить на два больших класса в зависимости от того, обладает ли она воз- можностями скалярных вычислений или нет. Ма- шины, способные выполнять скалярную обработку, называют суперкомпьютерами, а неспособные — при- соединенными векторными процессорами. Изготови- тели вычислительной техники часто называют их матричными процессорами, однако в данной книге это название не применяется, для того чтобы не пу- тать их с описанными выше матричными процессо- рами, в которых ПЭ расположены в виде матрицы. Присоединенные векторные процессоры соединяют с помощью каналов ввода-вывода и каналов ПДП (прямого доступа к памяти) с ЭВМ типа мини-ком- пьютера и используют в составе большой универсаль-
Рис. 1.20. Конвейерный сумматор с плавающей запятой.
Исторический обзор архитектур ЭВМ и их классификация 63 ной ЭВМ для выполнения векторных вычислений. Примером такого применения являются машина АР-120В фирмы Floating Point [52] (содержащая один сумматор и один умножитель для выполнения операций с плавающей запятой) и более усовершен- ствованные модели FPS-164 [17] (дополненная бло- ком для операций над целыми числами, например вы- числения адреса), 3838 фирмы IBM [53] (четыре сум- матора с плавающей запятой, один умножитель с плавающей запятой, один операционный блок для вычисления обратных чисел, один операционный блок для вычисления функций sin/cos), МАТР [54] фирмы Datawest (четыре конвейерных процессора) и т. д. Примером встроенного векторного процессора яв- ляется IAP (интегральный матричный процессор, ис- пользуемый в машинах ACOS 1500, М-680Н, IBM 3090 и т. д.) [55]. 1.4.9. СУПЕРКОМПЬЮТЕРЫ Суперкомпьютер [56—59] состоит из трех глав- ных элементов: блока векторной обработки, блока скалярной обработки и основной памяти. Блок век- торной обработки имеет в своем составе АЛУ и ре- гистровый файл. АЛУ обычно содержит несколько типов арифметических блоков с плавающей запятой и логический блок (блок для выполнения логических операций), причем каждый из этих компонентов АЛУ может быть мультиплексирован. Каждый операцион- ный блок АЛУ имеет конвейерную организацию. Ре- гистровый файл используется для сохранения теку- щих результатов вычислений для применения их в последующих операциях; из него одновременно из- влекаются данные для операционных блоков, рабо- тающих параллельно, и одновременно помещаются результаты операций. Регистр, размер которого поз- воляет хранить от нескольких до нескольких сотен векторов, состоящих из нескольких десятков слов, называется векторным регистром. Начальные формы подобной структуры прогляды- ваются в первых суперкомпьютерах типа STAR 100
64 Глава 1 [60] фирмы CDC и ASC [61] фирмы TI, однако пол- ностью сформировалась она только в машине CRAY-1 фирмы Cray Research [62]. Архитектуры по- явившихся следом машин Cyber 205, S-810 («Хита- ти»), серии VP («Фудзицу»), NEC SX-2 базируются целиком на архитектуре CRAY-1. В последние годы проводятся исследования по объединению двух — че- тырех таких суперкомпьютеров в систему с общей памятью (сильной связью) в целях еще большего увеличения производительности. Примером тому яв- ляется система CRAY Х-МР [63]. На рис. 1.21 показана структура машины VP-200 фирмы «Фудзицу» [64]. Узел векторной обработки состоит из трех конвейерных операционных блоков: сложения/логических операций, умножения и деле- ния, два из которых могут работать параллельно. Основная память и векторный регистр соединены при помощи двух конвейеров загрузки и хранения. Эти конвейеры работают параллельно с конвейерами опе- раций. Конвейер сложения/логических операций и кон- вейер умножения имеют производительность 267 Мфлопс, а конвейер деления — 38 Мфлопс. По- скольку два конвейера могут работать параллельно, то максимальная суммарная производительность со- ставляет 534 Мфлопс. Каждый из конвейеров за- грузки/хранения имеет скорость передачи в обоих направлениях 267 Мслов/с, т. е. в сумме 534 Мслов/с, поэтому при работе с максимальной производитель- ностью скорость выполнения операций и скорость подачи данных из основной памяти совпадают. Для реализации такой скорости передачи данных основ- ная память расслоена на 256 каналов. О расслоении памяти подробно рассказано в разд. 6.2. Векторный регистр состоит из 256 страниц по 36 слов в каждой. Для того чтобы векторные опера- ции можно было выполнять только для нескольких выбранных элементов, а не для всех сразу, регистр имеет функцию маскирования векторной операции. Кроме того, он имеет функцию формирования корот- ких векторов путем последовательного сбора только тех элементов заданного вектора, которые выби-
Исторический обзор архитектур ЭВМ и их классификация 65 Блок векторной обработки Рис. 1.21. Структура ЭВМ. VP-200 фирмы «Фудзицу». раются при помощи заданной маски, а также функ- цию выполнения обратной операции. В функции его входит также косвенная адресация вектора для об- работки типа A(I) = B(IND(I)), где А, В — векторы, IND — вектор положительных целых чисел. Для обеспечения параллельного функционирования множества арифметических конвейеров, как, напри- мер, в машине VP-200, часто используют функцию, 5—1145
66 Глава 1 называемую настройкой. Например, когда с помощью пяти векторных регистров выполняются вычисления V3-<—Vi*V2, V5^-V3 + V4, и если сделать так, чтобы следующую команду можно было выполнять, не ожи- дая окончания первоначальной команды, т. е. с мо- мента получения первого элемента вектора V3(l) ре- зультата операции V3, и сначала вычислить ^~V3(1) +V4(l), то соединив конвейер умножения с конвейером сложения, можно создать один конвейер и тем самым повысить производительность. Функция, которая позволяет сделать это, называется функцией автоматической настройки. 1.5. ПЕРЕСМОТР ПРИНЦИПОВ НЕЙМАНОВСКОЙ АРХИТЕКТУРЫ И ОЖИВЛЕНИЕ В СФЕРЕ НЕНЕЙМАНОВСКИХ АРХИТЕКТУР 1.5.1. ПРОБЛЕМЫ, С КОТОРЫМИ СТОЛКНУЛАСЬ НЕЙМАНОВСКАЯ АРХИТЕКТУРА Все архитектуры, рассмотренные выше, можно объединить одним названием «неймановская архи- тектура». К ее особенностям относятся: (1) хранимая программа: программы вместе с данными хранятся в памяти; (2) линейная память: линейное пространство ад- ресов, которым присваиваются порядковые номера 0, 1,2,...; (3) последовательное выполнение программы: каждая программа выполняется последова- * тельно, начиная с самой первой команды, если нет специальных указаний. Для измене- ния этой последовательности с помощью команды перехода указывается адрес начала перехода; (4) отсутствие различий между данными и коман- дами; (5) отсутствие различий в семантике данных. В 70-х гг. начался активный пересмотр прин- ципов неймановской архитектуры, причинами которого были:
Исторический обзор архитектур ЭВМ и их классификация 6 7 (1) понимание неизбежности кризиса программ- ного обеспечения; (2) расширение приложений, требующих высокой надежности; (3) сложность задач и сложность обеспечения па- раллелизма при их обработке; (4) проблема с пересылками «процессор — основ- ная память»; (5) развитие СБИС-технологии. Среди этих причин первые две были связаны с ростом потребностей пользователей ЭВМ, (3) — осознанием проблем в сфере программного обес- печения, (4) — осознанием проблем в сфере архи- тектуры ЭВМ и (5)—стимулировалась развитием элементной базы. Все эти причины возникли почти одновременно, что привело к многочисленным пред- ложениям архитектур, в которых какой-либо из пе- речисленных принципов неймановской архитектуры был улучшен с точки зрения какой-либо из данных причин. Поскольку это были уже архитектуры дру- гих типов, то их объединили названием «ненейма- новские архитектуры». 1.5.2. СЕМАНТИЧЕСКИЙ РАЗРЫВ И ТЕГОВЫЕ МАШИНЫ В стоимости компьютерной системы доля про- граммных средств год от года увеличивается, что обусловлено резким повышением расходов на содер- жание персонала, многообразием приложений, рас- ширением функциональных возможностей систем и т. д. Многообразие приложений и расширение функ- циональных возможностей систем делают более за- метной тенденцию к выпуску сложных программных изделий малыми партиями с широким ассортимен- том. Число программистов, требуемое для разработки программного обеспечения, увеличивается с каждым годом, и если эта тенденция сохранится, то в XXI в. оно превысит численность населения Японии. В то же время благодаря прогрессу в СБИС-технологии стоимость аппаратных средств постоянно снижается. Следовательно, в будущем необходима такая архи- тектура, которая за счет некоторого увеличения 5*
68 Глава 1 числа аппаратных средств (несмотря на увеличение при этом стоимости аппаратуры) позволит упростить программы, а следовательно, и снизить затраты на разработку программного обеспечения. Одним из факторов, усложняющих разработку программного обеспечения, является наличие боль- шого различия между понятиями операций и их объектов на языке программирования высокого уровня и понятиями операций и их объектов, опреде- ляемыми архитектурой компьютера. Это отличие но- сит название семантического разрыва [65]. Иначе говоря, если на языке высокого уровня можно опи- сать различные операции и типы данныхг то в нейма- новской архитектуре разницы между программами и данными нет, как нет и разницы между типами данных. Это обстоятельство тяжелым бременем ло- жится на плечи программиста при составлении про- граммы. И впоследствии оно является причиной усложнения отладки программы. Из-за отсутствия различий в типах данных и между программами и данными нельзя обнаружить, была ли ошибка свя- зана с выполнением команды или с обращением к данным. Нельзя также обнаружить, выполняются ли данные в качестве команды или что к команде осуществляется обращение, как к данным. Для решения этой проблемы Илифф предложил с помощью некоторого алгоритма добавлять ко всем данным информацию, необходимую для того, чтобы идентифицировать их как данные, использовать вме- сто линейного адресного пространства памяти струк- турированное пространство и добавлять к каждому элементу памяти информацию, показывающую атри- бут этого элемента [66]. Эта дополнительная инфор- мация получила название «тег» Ч Машины, основан- ные на этом принципе, называют теговыми машинами [67]. Так, различные типы данных характеризуются своими тегами, а однотипные команды, отличающие- ся только типами операндов, никак не различаются. Например, программисту нет необходимости разли- !> Тег (tag) в переводе с английского означает «признак».— Прим, перев.
Исторический обзор архитектур ЭВМ и их классификация 69 чать команды ADD (сложения) с плавающей и фик- сированной запятой: машина это сделает автомати- чески, проверив типы операндов. В случае обращения с массивами данных добавляется такая теговая ин- формация, как длина, ширина массива, индексы, а выход за пределы массива 'автоматически контро- лируется машиной при обращении к данным. Машина Илиффа получила название Бейсик-ма- шины [66]. Аналогичные идеи проглядываются и в архитектуре машин фирмы Burroughs. Эти маши- ны относятся к классу стековых, хотя они используют теги, называемые дескрипторами, для поддержки структурированной памяти [68]. Майерс предложил проект SWARD-машины, в которой эти идеи были развиты. В SWARD-машине данные представлены структур- ным элементом, называемым ячейкой. На рис. 1.22 приведены различные типы ячеек. Каждая ячейка состоит из поля тега и поля данных. Численные зна- чения представлены в двоично-десятичном коде, и один разряд десятичного числа представлен четырьмя двоичными разрядами (битами). Память разбита на 4-разрядные единицы, которые называются призна- ками. Разрядность данных, указанных в поле тега, выражается числом признаков. Положительный знак числа выражается кодом 0000, отрицательный — 0001. Если используются массивы данных, то в поле тега указываются размерность массива, тип ячейки эле- мента массива, длина каждого измерения. Если эле- ментом массива является целое число, то к типу ячейки после 1111 добавляется информация о длине числа. В SWARD-машине теговая информация ис- пользуется не только применительно к данным, но и применительно к программным модулям. Структур- ный элемент, в котором хранится программный мо- дуль, называется «модулем». Для того чтобы еще больше сократить семантиче- ский разрыв, было предложено проектировать ма- шины таким образом, чтобы они были пригодны для прямого выполнения программ, написанных на спе- циальном языке высокого уровня или на промежу- точном языке. Такие машины получили название
70 Глава 1 «машин языков высокого уровня» [13, 69]. Если преж- де подобные машины разрабатывались в расчете на применение таких высокоуровневых языков, как Ко- бол, Фортран, АПЛ, Алгол, то особенностью текущего момента является разработка машин, и в частности Целое число 1111 Длина Знак Значение Дробное число .----------.--------г-я------1--------।--------------\. (с фиксированной 1110 Длина ЯЬй части’ Знак Значение запятой) 1-------1--------1-----------------*—-------— ..Д,--------1 Символ Г 1011 | Код символа ^°оВваТеЛЬНОСТЬ| ООН | Массив | ОШ | ностьР~ | товИ^Л6МеН I Длина одномерного массива | | Длина n-мерного массива |— vj Одномерное значение 1 1 'У 1 С -- - — — — - .... . Часть Двумерное значение ч L данных А — 1 п-мерное значение | Рис. 1.22. Представление данных в машине SWARD. рабочих станций, для применения языков искусствен- ного интеллекта типа Лиспа и Пролога. Лисп- и Пролог-машины имеют большой семантический раз- рыв с традиционными неймановскими машинами. Ар- хитектуры машин языков искусственного интеллекта типа Лиспа и Пролога подробно рассмотрены в гл. 7, здесь же отметим лишь, что помимо большого про- странства виртуальной памяти они имеют большое пространство реальной памяти, стековый механизм и другие особенности, которые свойственны теговым машинам.
Исторический обзор архитектур ЭВМ и их классификация 71 1.5.3. ОТКАЗОУСТОЙЧИВОСТЬ И МАНДАТ Расширение приложений, требующих высокой на- дежности, ускорило развитие высоконадежных архи- тектур [70]. Высокая надежность характеризуется тремя факторами: (1) правильностью результатов обработки, (2) не требующим останова обработки техническим обслуживанием и (3) гарантией защиты программ и данных от несанкционированного досту- па. Для обеспечения правильности результатов об- работки необходимо помимо повышения надежности используемых элементов вводить в архитектуру до- полнительно различные диагностические средства, чтобы можно было обнаружить неисправность. Один из способов — использование двух или трех процес- соров. Для повышения эксплуатационных характеристик необходимо либо увеличить среднее время между от- казами (MTBF), либо сократить среднее время для восстановления (MTTR). Для увеличения MTBF ис- пользуют способ мультиплексирования устройств, при котором отказавшее устройство заменяется на резерв- ное; способ мажорирования, при котором одну и ту же обработку выполняют несколько одинаковых устройств; способ амортизации отказов, который за- ключается в том, что в случае отказа одного из нескольких однотипных устройств, выполняющих раз- ную обработку, это устройство отключается, осталь- ные устройства перестраиваются (система реструкту- рируется), и обработка продолжается, несмотря на некоторую потерю в производительности. Машины, спроектированные с увеличенным временем MTBF, получили название «безостановочные машины» (non- stop). Широко известна серия NON-STOP-компью- теров фирмы TANDEM, выпущенная в 1976 г. впер- вые в мире [71]. Для сокращения времени MTTR необходимы ме- тоды, позволяющие быстро выполнять следующую последовательность действий: локализация неисправ- ности, ее устранение, реконфигурация системы. Сово- купность методов, с помощью которых увеличивается время MTBF и сокращается время MTTR, называется
72 Глава 1 техникой обеспечения отказоустойчивости, а компью- теры, эксплуатационные характеристики которых по- вышены благодаря использованию этой техники, на- зываются отказоустойчивыми компьютерами. Еще один фактор надежности машин касается обеспечения защиты программ и данных от посторон- них, которая может быть достигнута двумя путями: (1) добавлением атрибутов, обеспечивающих защиту нужного объекта, и (2) введением правил, касающих- ся доступа к объекту и операций над ним. Первый способ называется объектно-ориентиро- ванной защитой [72], а второй — защитой, основан- ной на использовании мандата [73]. Мандат показы- вает право доступа, т. е. указывает путь доступа к объекту и разрешенные над ним операции. Инфор- мация, которую имеет сторона, осуществляющая до- ступ в отношении различных объектов, называется списком мандатов. Поскольку право на доступ к каж- дому объекту передается обязательно с адресом этого объекта, то, не имея права на доступ, невоз- можно определить и место хранения объекта. Такой способ адресации называется адресацией, основанной на использовании мандата, или мандатной адреса- цией. Принципы мандатной адресации были предло- жены в 1966 г. Деннисом и Ван Хорном. При мандатной адресации память рассматривает- ся как множество объектов, которым присвоены име- на. Программа может осуществлять доступ к каж- дому объекту, используя его имя, причем место хра- нения этого объекта она может и не знать. Мандат содержит специфичное имя объекта и информацию, касающуюся права на доступ к нему. Когда про- грамма генерирует некоторый объект, то машина автоматически присваивает ему специфичное имя и выдает программе мандат на доступ к этому объ- екту. Программа делает копию мандата и может передать ее другой программе, однако генерация и изменение мандатов осуществляются только в ядре системы, а программа делать этого не может. Когда осуществляется доступ к объекту на основании ман- дата, то сначала исследуется право доступа к этому объекту: если доступ разрешен, то местоположение
Исторический обзор архитектур ЭВМ и их классификация 73 объекта в памяти определяется начиная с его имени. К типичным машинам с мандатной адресацией относятся IBM System 38 [75] и iAPX 432 фирмы Intel [76, 77]. 1.5.4. ВЫСОКОПАРАЛЛЕЛЬНАЯ ОБРАБОТКА И ФУНКЦИОНАЛЬНЫЕ ЯЗЫКИ По мере продвижения исследований в области па- раллельной обработки помимо явно выраженной па- раллельности задач и обрабатывающих алгоритмов получила довольно широкое распространение неявно выраженная параллельность, поэтому стало очевид- ным, что для повышения производительности за счет параллельной обработки необходимо не только обра- щать внимание на первый тип (явно выраженную форму), но и эффективно использовать и второй тип. В параллельных машинах с неймановской архитекту- рой можно реализовать первый тип параллельности — это соответствует векторной обработке; однако вто- рой тип, скрывающийся за скалярной обработкой, реализовать невозможно. Повышение скорости ска- лярной обработки и теперь остается серьезной за- дачей суперкомпьютеров с неймановской архитек- турой. Причиной, затрудняющей извлечение параллель- ности, содержащейся в алгоритмах обработки, и реа- лизацию параллельной обработки на неймановском компьютере, является необходимость описания обра- ботки на процедурном языке. Особенности процедур- ных языков: (1) в описании операции располагаются в некотором порядке, и последовательность выпол- нения операций в основном совпадает с последова- тельностью их описания, (2) выполнение обработки определяется как последовательное изменение со- стояния машины путем перезаписи памяти. Вторая особенность означает не только, что по входным дан- ным генерируются выходные данные, но также и про- сто изменение состояния машины. Это явление носит название побочного эффекта (side effect). Для опи- сания на процедурном языке параллельной обработки
74 Глава 1 нужно четко описать, как из одномерного описания образуется многомерное описание. Помимо процедурных языков для описания алго- ритмов обработки можно использовать функциональ- ные языки типа Лиспа. Строго говоря, функциональ- ный язык не имеет побочного эффекта. Программа на таком языке представляется некоторой функцией Д а выполнение программы определяется как резуль- тат действия этой функции (ее оценка) f(x) по от- ношению к входу х. В определении функции f можно использовать другую функцию или саму эту функ- цию. Например, если f = kx g(h(x), k(x)), то f(x) = = g(h(x),k(x)). Если эту оценку можно получить из оценки внешней величины g, то ее можно полу- чить, разумеется, из оценок внутренних величин й(х) и £(х), а значит, ft(x) и k(x) можно оценить одно- временно. В строгом функциональном языке гаранти- руется одинаковость результатов оценки, полученных при использовании любой из этих различных после- довательностей оценки. Это свойство указывает на возможность описания параллельной обработки. Иначе говоря, это указывает на то, что посредством описания алгоритма на функциональном языке мож- но использовать неявно выраженную параллельность для реализации параллельной обработки. Неймановская архитектура в том виде, в котором она существует, не годится для параллельной обра- ботки на функциональном языке [78]. Поэтому в 70-х гг. начались интенсивные исследования архитек- тур, удовлетворяющих этому назначению. Результа- том их было появление потоковых и редукционных машин. Об этих машинах подробно изложено в гл. 4 и 5 соответственно. 1.5.5. УЗКИЕ МЕСТА ФОН-НЕЙМАНОВСКОЙ АРХИТЕКТУРЫ В неймановских машинах программы и данные не разделяются и хранятся в одной и той же памяти; основу их действия составляют последовательная об- работка на процедурном языке и выполнение вычис- лений с побочным эффектом — перезаписью памяти. Поэтому для выполнения одной операционной коман-
Исторический обзор архитектур ЭВМ и их классификация 75 ды необходимы по меньшей мере два доступа к памяти: для считывания команды и для считыва- ния операнда. Если для указания операнда исполь- зуется косвенная адресация, то с каждым разом число доступов к памяти увеличивается на 1. Посколь- ку вычисления выполняются с побочным эффектом, то результат операции нужно каждый раз записывать в память. Следовательно, в неймановских машинах пересылки данных между ЦП и памятью выполняют- ся довольно часто. В то же время эти пересылки вы- полняются поочередно, и так как ширина канала, по которому пересылаются данные, мала, то здесь и об- разуется «узкое место». Его еще называют «узким местом фон-неймановской архитектуры» [78]. Для решения этой проблемы были предложены три главных способа. Первый, и наиболее простой, заключался в том, чтобы расширить канал передачи данных между ЦП и памятью. Второй — в том, чтобы отказаться от обработки с побочным эффектом, и, наконец, третий — в том, что данные, считанные однажды из памяти, должны пройти как можно больше этапов обработки, прежде чем они снова по- падут в память. Первый способ можно реализовать путем увели- чения быстродействия памяти и использования мно- гопортовой памяти. Он описан в гл. 6. Второй способ можно реализовать с помощью архитектуры, основан- ной на использовании функционального языка. Функ- циональный язык не имеет побочного эффекта, а также не связан последовательным считыванием и выполнением команд. Этот способ подробно изложен в гл. 3—5. Третий способ можно рассмотреть на примере систолической матрицы, предложенной Кунгом в 1978 г. [79, 80]. В неймановских машинах данные, считанные из памяти, обрабатываются один раз в АЛУ, после чего снова возвращаются в память (рис. 1.23, а). Иначе говоря, каждый раз при обра- ботке в АЛУ данные необходимо извлечь из памяти и возвратить в память. Кунг предложил устранить узкое место неймановской архитектуры, сделав таким образом, чтобы данные на пути от их считывания из
76 Глава 1 памяти до возвращения в память пропускались через как можно большее число АЛУ (рис. 1.23, б). Если сравнить память с помпой, перекачивающей данные, то применительно к живому организму ей можно от- вести роль сердца, множеству АЛУ — роль тканей, Сердце б Рис. 1.23. Принцип действия систолической матрицы. а — машина неймановского типа; б — принцип действия систолической матрицы. а поток данных рассматривать как циркулирующую кровь. Отсюда и происходит название «систолическая матрица» (от лат. systol — пульсация). Последова- тельную обработку данных множеством АЛУ нельзя представить в другой форме. Систолические матрицы эффективны для выполнения макроопераций, напри- мер матричных вычислений, обработки сигналов, сор- тировки и т. д. Используемые при этом АЛУ обра- зуют специальную схему для выполнения однотипной
Исторический обзор архитектур ЭВМ и их классификация 77 обработки, и их расположение является регулярным. По этой причине систолические матрицы, имеющие архитектуру, подходящую для реализации на СБИС, было предложено специализировать на выполнение различных макроопераций. Подробное описание си- столических матриц дано в разд. 2.2. 1.5.6. ВЛИЯНИЕ РАЗВИТИЯ ТЕХНОЛОГИИ СБИС Во второй половине 70-х гг. и в начале 80-х гг. в США произошло формирование среды Опытного производства заказных СБИС, что сделало возмож- ным их применение и разработчиками вычислитель- ной ' техники, работающими в университетах [81]. В подобной ситуации зародилось несколько новых направлений и в исследованиях архитектур ЭВМ. Результатом одного из них явилось создание специа- лизированных СБИС систолических матриц, упомя- нутых выше. Не меньшего внимания заслуживают компьютеры с RISC-архитектурой (RISC — reduced instruction set computer — компьютер с сокращенным набором команд), память с интеллектуальными ячейками и т. д. К сожалению, в Японии подоб- ные идеи до сих пор не нашли должного распро- странения. RISC-компьютеры имеют архитектуру с универ- сальным процессором, работающим с высокой ско- ростью [82]. По мере расцвета эпохи неймановских машин увеличивалось многообразие команд, они ста- новились более сложными. Вычислительная машина, снабженная набором сложных команд, называется CISC-компьютером (CISC — complex instruction set compiler — компьютер с полным набором команд) [83, 84]. Наличие полного набора команд в CISC-компью- тере позволяет удовлетворить разнообразным требо- ваниям пользователей. Однако составление програм- мы, в которой непосредственно используются эти команды, является задачей системного программиста, и большинство программистов пишут программы на языке высокого уровня, которые затем компилируют- ся машиной. Для быстрого выполнения программы,
78 Глава 1 написанной на языке высокого уровня, не нужны слож- ные командные слова — гораздо более важно сокра- тить время выполнения наиболее часто используемых команд. Этот принцип был положен в основу RISC- архитектуры, которая представляет собой улучшен- ный вариант неймановской архитектуры. Благодаря сокращению набора команд упрощаются аппаратные схемы, а значит, обеспечивается оптимизация вы- полнения часто используемых команд. Кроме того, за счет применения большого числа регистров умень- шается частота (число) доступов к памяти, что так- же позволяет повысить скорость выполнения коман- ды. Типичные представители этих машин: компьютер RISC [85] Калифорнийского университета в Беркли, IBM 801 [86], MIPS [87] Станфордского универси- тета, jx3L [88] Университета шт. Юта, RIDGE 32 [89] фирмы Midge, Pyramid 90Х [90] фирмы Pyra- mid и др. RISC-архитектуру имеет и транспьютер фирмы «Инмос» — 32-разрядный процессор, спроек- тированный с оптимальным набором команд, позво- ляющим использовать язык высокого уровня Оккам. Используя комбинации из транспьютеров в качестве стандартных блоков (building block), можно строить цифровые системы [91]. Память с интеллектуальными ячейками — это па- мять, ячейками которой являются одноразрядные процессоры, т. е. каждая ячейка наделена интеллек- туальными способностями. Такую память можно раз- бить на два класса: универсальная память с интел- лектуальными ячейками (разрядно-модульный мат- ричный ОКМД-процессор), используемая в машине DAP [92] фирмы ICL, и память с семантической структурой, используемая в машине Connection Machine (Машина соединений) фирмы Thinking Machine [93]. Первый тип памяти можно рассмат- ривать как разновидность обычного матричного про- цессора, но в будущем по мере увеличения числа ячеек ее можно принять за новое направление в раз- витии архитектур памяти. Память второго типа используется для хранения семантической сети — одного из средств представле- ния знаний в искусственном интеллекте; это память,
Исторический обзор архитектур ЭВМ и их классификация 79 в которой осуществляется ассоциативный поиск по семантической сети. Подробное описание этой памяти приведено в разд. 6.5. 1.6. АРХИТЕКТУРЫ ДЛЯ ОБРАБОТКИ ЗНАНИЙ В 1982 г. Министерство внешней торговли и про- мышленности Японии учредило Комитет по разра- ботке компьютеров новых поколений (ICOT), кото- рый разработал национальный проект, нацеленный на создание в течение 10 лет ЭВМ пятого поколения. Современные компьютеры можно назвать ком- пьютерами «3,7-го» поколения или даже четвертого поколения. Особенностью четвертого поколения яв- ляется использование СБИС-элементов, однако с точ- ки зрения архитектуры трудно пока систематизиро- вать особенности этих ЭВМ. В качестве новых идей, характеризующих особенности архитектуры, можно привести виртуализацию, которая охватила не толь- ко память, но и аппаратные средства и даже всю машину, распределенную обработку, сетевую архи- тектуру и т. п. С первого по четвертое поколение ЭВМ прогресс был связан только с развитием элементной базы. Что же касается перехода от четвертого к пятому поколению, то здесь внимание акцентируется не столько на элементной базе, сколько на переходе от архитектуры, ориентированной на обработку данных, к архитектуре, ориентированной на обработку знаний. Обработка знаний — это одна из сфер практического применения искусственного интеллекта, предполагаю- щая использование компьютером знаний, которыми владеет человек, для решения проблем и принятия решений. В современных ЭВМ для того, чтобы выполнить некоторую обработку, программист должен написать алгоритм обработки в виде программы, которую нужно ввести в компьютер. Если попытаться этим методом разработать систему обработки знаний, осу- ществляющую медицинскую диагностику либо диаг- ностику неисправностей в автомобиле, то можно столкнуться со следующими проблемами.
80 Глава 1 1) Слияние знаний с механизмом логического вывода. Знания об объекте и механизм логического вы- вода, использующий эти знания, не отличаются друг от друга и представляются в виде цельной про- цедуры, таким образом, они растворяются в про- грамме. 2) Сложность обновления знаний. Пополнение, уничтожение или изменение зна- ний, касающихся объекта, означает изменение про- граммы, и трудно точно определить, до какой части программы распространяется это влияние. Эти проблемы можно в некоторой степени разре- шить, если разработать систему с модульным пред- ставлением знаний, с языком программирования, имеющим функцию получения выводов на основании этих знаний, и т. п.; однако семантический разрыв между языком и архитектурой становится при этом больше, чем при обработке данных. Поэтому и воз- никла необходимость разработки архитектуры, отве- чающей требованиям обработки знаний. Общим на- званием таких архитектур является «архитектура ЭВМ пятого поколения». Фурукава и др., являющиеся руководителями этого проекта, поставили целью решить две пробле- мы— увеличения семантического разрыва при обра- ботке знаний и сложности реализации высокоуров- невой параллельной архитектуры, основанной на ар- хитектуре фон-Неймана, — и осуществить обработку знаний с помощью сверхпараллельной архитектуры. Они выдвинули гипотезу, основанную на парадигмах логического программирования, которая позволяет одновременно решить обе проблемы. Логические языки, как будет показано в гл. 3, обладают парал- лельностью, которая называется ИЛИ-параллель- ностью и И-параллельностью. Фурукава и др. избрали в качестве логического языка Пролог и на нем опи- сывали знания об объекте и механизм логических выводов. Проект ЭВМ пятого поколения состоит из трех этапов: начального (1982—1984), промежуточного
Исторический обзор архитектур ЭВМ и их классификация 81 (1885—1988) и заключительного (1989—1991). Если излагать только то, что имеет отношение к архитек- туре, то нужно отметить, что на начальном этапе были разработаны Пролог-машина PSI с последова- тельной обработкой и машина Delta с реляционной базой данных. PSI — это теговая машина с микро- программным управлением, содержащая стек. Delta — это машина базы данных, имеющая спе- циальный механизм для поточной обработки бинар- ных операций. Обе эти модели имели ярко выражен- ный характер средств разработки, однако оригиналь- ностью не отличались. На промежуточном этапе было запланировано разработать параллельную машину логического вы- вода и параллельную машину базы знаний, а на за- ключительном — разработать объединенную машину, в которой эти машины соединялись с помощью под- системы. Первоначально исследования сверхпарал- лельной обработки на основе потоковой архитектуры были успешными, однако оставалось множество не- решенных проблем, поэтому в настоящее время пла- нируется изучение реализации параллельной машины вывода на основе множества машин PSI, использую- щих параллельный кэш. В составе такой системы предполагается использовать от нескольких десятков до сотни PSI. Что касается машины базы знаний, то здесь изучается возможность применения многопор- товой памяти со страничной организацией, предло- женной Танакой. Изучается возможность применения в этой машине архитектуры, состоящей из множества соединенных механизмов для быстрой обработки уни- фикации— базовой операции языка Пролог. Ме- ханизм унификации — это, как правило, линейный сортировщик совокупности последовательностей сим- волов переменной длины, причем изучается возмож- ность видоизменения пирамидального сортировщика последовательностей символов переменной длины, предложенного Танакой, в битональный сортировщик слиянием (см. разд. 2.3). Если критически взглянуть на проект, то можно заметить попытку отхода от первоначальных задач, 6—1145
82 Глава 1 касающихся параллельной обработки, и вместе с тем заметить, что целевая система отходит от систем, основанных на знаниях, в сторону высокопроизводи- тельных систем обработки сигналов, основанных на использовании языка Пролог. Однако думается, что таким путем будет сложно ликвидировать семанти- ческий разрыв в обработке знаний, что было по сути главной целью.
Глава 2 ВЫСОКОСКОРОСТНАЯ ОБРАБОТКА И АРХИТЕКТУРА СБИС В разд. 1.4 предыдущей главы были рассмотрены два вида параллельной обработки, предназначенные для повышения скорости обработки. В ней обсужда- лась параллельная обработка гранулярностей (еди- ниц обработки), больших по размеру, чем операции. В настоящей главе будет рассмотрена высокоскоро- стная обработка самих операций. Операции, которые в процессе некоторой обра- ботки (1) используются наиболее часто и (2) зани- мают сравнительно большое время обработки, назы- ваются «примитивными операциями». К примитивным операциям принято относить четыре арифметических действия, которые используются в обычных числовых расчетах, вычисление скалярного произведения, ис- пользуемое в матричных расчетах, операцию сорти- ровки при работе с базами данных и т. д. Среди перечисленных операций скалярное произведение и сортировка разлагаются обычно в ЭВМ на более мел- кие операции, поэтому они называются примитив- ными макрооперациями. Прогресс в технологии СБИС, который наблю- дается в последние годы, сделал возможным проек- тирование и использование специализированных аппа- ратных средств, выполняющих с высокой скоростью примитивные операции и макрооперации. В данной главе рассмотрены алгоритмы операций, используе- мые в этих аппаратных средствах, и структуры этих средств. 2.1. ПОВЫШЕНИЕ СКОРОСТИ ВЫПОЛНЕНИЯ ЧЕТЫРЕХ АРИФМЕТИЧЕСКИХ ДЕЙСТВИЙ 2.1.1. ПОВЫШЕНИЕ СКОРОСТИ ВЫПОЛНЕНИЯ ОПЕРАЦИИ СЛОЖЕНИЯ Базовой операцией в четырех арифметических действиях, выполняемых в цифровой машине, являет- ся сложение. Вычитание сводится к сложению с 6*
84 Глава 2 использованием дополнительного кода числа. Умноже- ние выполняется путем сложения нескольких чисел, полученных последовательным сдвигом множимого. При делении используются операции сдвига и вычи- тания, а также операция умножения. Для выполне- ния с высокой скоростью этих операций необходимо ускорить выполнение операций сложения. При сло- жении/вычитании необходимо принимать в расчет ускорение выполнения операции сложения двух чи- В — Сложение в каждом л = разряде и С ш CSA СРА A + B+D =C+S=1 0 0 0 1 0 1 0 Рис. 2.1. Сумматор с сохранением переноса (СА). сел, в то время как при умножении/делении необхо- димо учитывать ускорение сложения более чем трех чисел. В соответствии с этими требованиями исполь- зуются два типа сумматоров: с распространением переноса (CPA —carry propagation adder) и с сохра- нением переноса (CSA — carry save adder). В сум- матор с распространением переноса вводят два числа, а на выходе получают их сумму и переполне- ние в самом старшем разряде. В отличие от этого в сумматор с сохранением переноса вводятся, напри- мер, три числа, А, В, D, (см. рис. 2.1) и для каждого разряда вычисляются сумма соответствующих разря- дов трех чисел S и перенос С. Поскольку S являет- ся суммой в каждом разряде, то она отличается от полной суммы трех чисел. Правильное значение сум- мы чисел А + В + D равно S + С причем эту сумму
Высокоскоростная обработка и архитектура СБИС 85 (S + С) получают с помощью сумматора типа СРА. В сумматоре типа* CSA отсутствует необходимость распространения переноса, как в СРА, т. е. операции в нем выполняются с более высокой скоростью, чем в СРА. Поэтому при сложении более чем трех чисел Рис. 2.2. CSA-дерево. а — 6-входная схема сложения, выполненная только на СРА-сумматорах (время задержки = ЗГсра): б — 6-входная схема сложения с помощью CSA-дерева (время задержки=37’с$д+ 7^рд). 7^рд— время задерж- ки в сумматоре СРА, Г^зд— время задержки в сумматоре CSA. скорость вычислений можно увеличить за счет ис- пользования сумматоров типа CSA и лишь на самой последней стадии использования сумматоров типа СРА. На рис. 2.2 приведено сравнение случаев с ис- пользованием только CPA-сумматоров и с исполь- зованием CSA- и CPA-сумматора для 6-входовой схемы. Многоступенчатое соединение сумматоров CSA, показанное на рис. 2.2,6, называется CSA-де- ревом. CSA-дерево с поразрядной организацией на- зывается деревом Уоллеса [3]. Увеличение быстродействия CPA-сумматора дости- гается путем сокращения длины распространения переноса. Для этого существуют способ обнаружения
86 Глава 2 окончания переноса, способ сложения суммы усло- вий, способ выбора переноса, способ предсказания переноса, и др., которые изложены в специальной ли- тературе [1]. 2.1.2. ПОВЫШЕНИЕ СКОРОСТИ ВЫПОЛНЕНИЯ ОПЕРАЦИИ УМНОЖЕНИЯ Используя CSA-дерево, можно построить конвей- ерный умножитель, как показано на рис. 2.3. А — множимое, В — множитель, который представляет со- бой двоичное число Ь^Ь^Ь^ЬзЬ2Ь\ длиной 6 бит. Wi— это число, которое при bi = 0 равно 0, а при bi = 1 равно А, сдвинутому влево на (I—1) разрядов. Каж- дое значение Wi можно получить путем задержки А, В в одном каскаде вентиля. Установив фиксаторы до и после CSA-сумматоров и CPA-сумматоров каж- дого блока формирования Wi, можно разбить схему на каскады и реализовать конвейерную обработку. Если число разрядов множителя велико, то, как показано на рис. 2.4, он разбивается на 4-разрядные секции, которые суммируются с помощью CSA-дерева с четырьмя разрядами сдвигаемого множимого. Ре- зультат сложения — частичная сумма и перенос снова поступают на вход CSA-дерева, затем таким же образом обрабатываются следующие 4 бита множи- теля, т. е. для множителя любой длины можно организовать конвейерную обработку. Схема с та- кой структурой называется итеративным CSA-depe- вом [2]. Технология БИС сделала возможным применение модуля скоростного умножения, структура которого показана на рис. 2.5. Он представляет собой разно- видность сумматора с массивом повторяющихся ячеек, который называется модулем умножения без сложения (NMM — Nonadditive Multiply Module). FA — это полный сумматор. Каждая строка в мат- рице FA, исключая самую нижнюю, состоит только из CSA-сумматоров. В самой нижней строке исполь- зуются СРА-сумматоры. Модуль NMM имеет ограничение на число разря- дов вводимых чисел, однако, комбинируя такие мо-
Высокоскоростная обработка и архитектура СБИС 87 дули, можно построить умножитель двух входных чисел, которые имеют достаточно большое число раз- А В Р= АхВ Фиксатор Фиксатор Фиксатор Фиксатор Фиксатор Фиксатор Рис. 2.3. Конвейерный умножитель на основе CSA-дерева. рядов [3]. На рис. 2.6 показан пример построения умножителя 8X8 разрядов на основе четырех модулей типа 4X4. Множимое А разбивается на 4 старших
68 Глава 2 В Р - А х В Рис. 2.4. Конвейерный умножитель со сдвигом,, выполненный на основе CSA-дерева.
Высокоскоростная обработка и архитектура СБИС 89 разряда и 4 младших разряда (XL). Множитель В таким же образом разбивается на части Вн и BL. Четыре модуля NMM вычисляют соответственно про- Множимое аз «г <4 во X) 63 bj bi bp «эбо агДо aibo «2^1 «А аоб] «3^2 «2^2 «1^2 «о4г 4-) азЬз агЬз а\Ьз аоЬз Л Р< Рз Рг Рх Рв изведения АНХВН, AHXBL, AlXBh, ALXBL. Ha выходах модулей получаются 8-разрядные результа- ты, которые соответствуют частичным произведениям в разрядах 215 — 28, 211 — 24, снова 211 — 24, 27 — 2°. Результат получается путем суммирования этих че- тырех чисел, причем для каждого из разрядов 215—2°
90 Глава 2 Вн 2и 2м 2й 2“ 211 2ю 2* 2* 27 2е 2е 2* 23 2* 21 2е \____________________________________________________________________________________________f 16-разрядный выход (произведение) Рис. 2.6. Умножитель типа 8X8, выполненный на базе четырех модулей NMM. типа 4 X 4 и дерева Уоллеса. используется дерево Уоллеса. С помощью этого ме- тода можно для любого целого числа п построить умножитель типа 4пХ4п. 2.1.3. ПОВЫШЕНИЕ СКОРОСТИ ВЫПОЛНЕНИЯ ОПЕРАЦИИ ДЕЛЕНИЯ Остановимся на одном из способов с использова- нием умножения. Этот способ, получивший название «деление методом последовательного умножения»,
Высокоскоростная обработка и архитектура СБИС 91 применялся во многих моделях системы IBM 360/370, в машине CDC 6660/7600 [4]. Рассмотрим случай, когда для двух чисел N и D определяется частное от деления Q = N/D. Предположим, что после нормали- зации каждого числа выполняется неравенство 0,5 <£)<!. Определим величину 6 как 6 = = 1—D. Тогда справедливо соотношение 0 < 6 < < 0,5. Определим величину RL как 7?. = 1 +d2f-i, i= 1, 2, k. Тогда о — N _ X X /?2 X • • • X R R _ Ч— D ~ DXR1XR2X ...XRk — flX(l-H)(l + 6)...(l+62*-') (1 - б) (1 + б)(1 + б2) ,..(1 + б2*-1) = (l+62T1X/VX(l+6)(l + 62) ... (1+62*-1). При довольно больших значениях £(1—62fe)~ 1, по- этому достаточно вычислить только произведение Q = WX/?iX/?2X ...хя*. Помимо этого метода ускорения операции деления существует множество других методов, все они опи- саны в соответствующей литературе [1]. 2.2. ПОВЫШЕНИЕ СКОРОСТИ ВЫПОЛНЕНИЯ МАКРООПЕРАЦИЙ 2.2.1. СИСТОЛИЧЕСКИЕ МАТРИЦЫ Кунг из университета Карнеги — Меллона выдви- нул идею систолической матрицы [5, 6] как метода решения проблемы узкого места в неймановской ар- хитектуре (см. разд. 1.5). В основу этого метода был положен принцип размещения как можно боль- шего числа операционных устройств на пути прохож- дения данных: от считывания их из памяти до воз- вращения обратно в память. Подобная обработка потока данных, последовательно проходящего через множество операционных устройств, необходима, когда выполняются макрооперации.
92 Глава 2 К настоящему времени выпущено уже множество разнообразных систолических матриц, ориентирован- ных на выполнение таких макроопераций, как мат- ричные вычисления, обработка сигналов, поиск, сор- тировка и т. д., причем некоторые из них уже при- меняются на практике [7]. Операционные устройства, используемые для выполнения макроопераций, пред- ставляют собой специализированные схемы, предна- значенные для однотипной обработки, которые имеют регулярное расположение — одномерное (линейное) или двухмерное (плоское). Систолические матрицы удобно реализовать на СБИС. 2.2.2. ПЕРЕМНОЖЕНИЕ МАТРИЦ И ВЕКТОРОВ Для того чтобы пояснить основную идею систоли- ческой матрицы, обратимся к рис. 2.7, где показана такая матрица, используемая для перемножения мат- рицы специального вида (см. рис. 2.7, а) с вектором. Цикл используемой операционной схемы (см. рис. 2.7, б) определяется двумя тактовыми импуль- сами. По первому тактовому импульсу слева посту- пает входной сигнал X, справа — У, а сверху — А и вычисляется выражение У + Л*Х. Следующим тактовым импульсом результат этой операции выво- дится влево и одновременно вправо выводится зна- чение X. Как показано на рис. 2.7, а, эти схемы располо- жены в один ряд и слева по одному в каждом цикле вводятся значения х в последовательности хь х2, . • •, сверху в каждом цикле вводится по одной строке элементов матрицы в том порядке, в котором они показаны на рисунке, а справа, также в каждом цикле, вводится значение 0.
Высокоскоростная обработка и архитектура СБИС 93 Принцип Действия (1) У^у;х*-х;д<-а (2 ) У—У+4*Х Шаги (У1=О) (У1-01ГЖ1) Sfe= 021**1 ? / Уг — вггХ] 4-о22-Х2 \Уз = а31-х1 t Рис. 2.7. Систолическая матрица, вычисляющая произведение матрицы и вектора.
94 Глава 2 Работа систолической матрицы в первые пять циклов показана на рис. 2.7, в. Работа систолической матрицы напоминает работу сердца, где пульсу соот- ветствует тактовый импульс, с помощью которого поток данных продвигается последовательно вперед. Результирующий вектор получается в виде выходного потока данных: на вход поступает поток данных, первоначальное значение всех элементов которого рав- но 0; этот поток преобразовывается по мере прохож- дения через систолическую матрицу, и на выходе по- лучается конечный результат. Особенность систолической матрицы, как видно из приведенного примера, заключается в том, что она представляет собой матрицу однотипных операцион- ных схем, все обрабатываемые данные представлены в виде потоков, тактовым импульсом эти потоки про- двигаются на один шаг вперед и результат операции также представлен в виде потока данных, выходя- щего из матрицы. 2.2.3. ПЕРЕМНОЖЕНИЕ МАТРИЦ На рис. 2.8 показан пример более сложной систо- Каждый элемент этой матрицы имеет три входа ain, bin, cin и три выхода aout, bout, cout и производит вычисления aout = ain, bout = bin, cout = cin + ain *bin. Как показано на рисунке, на каждый вход систоли- ческой матрицы с помощью тактовых импульсов вво- дятся элементы перемножаемых матриц. В качестве
Высокоскоростная обработка и архитектура СБИС 95 eq всегда вводится 0. Таким образом, сверху выво- дятся элементы результирующей матрицы. 2.2.4. БЫСТРОЕ ПРЕОБРАЗОВАНИЕ ФУРЬЕ Быстрое преобразование Фурье (БПФ) также реализуется параллельной обработкой с использо- ванием макроопераций. Для этого предложены спо- соб многоэлементной обработки, в котором исполь- зуется матричный ОКМД-процессор или соединение в виде сети процессоров с перераспределением об- мена, а также различные способы конвейерной обра- ботки (многостадийной).
96 Глава 2 Оо Oi 02 Оз Рис. 2.10. Систолическая матрица для 8-точечного БПФ.
Высокоскоростная обработка и архитектура СБИС 97 8-точечное БПФ, как известно, вычисляется по диаграмме, показанной на рис. 2.9. На этой диа- грамме участки, напоминающие по форме крылья бабочки, обозначают операции, называемые butterfly («бабочка»). На рис. 2.10 показана систолическая матрица, с помощью которой реализуются эти опера- ции [8]. 2.3. УСКОРЕНИЕ ПОИСКА И СОРТИРОВКА Системные программы для ЭВМ и ее внутренний механизм выполняют операции табличного поиска и сортировки. В различных прикладных областях, на- пример в системах баз данных, системах составления таблиц, а также графических системах, широко ис- пользуются эти операции. Для быстрого выполнения их было предложено множество специальных аппа- ратных средств [9—11]. 2.3.1. УСКОРЕНИЕ ОПЕРАЦИИ ПОИСКА К аппаратным средствам, предназначенным для быстрого поиска в таблице, относится ассоциатив- ная память. Ассоциативная память подробно описана в разд. 6.5, здесь отметим лишь, что она позволяет с высокой скоростью выполнять табличный поиск пу- тем обнаружения заданных ключей, при этом суще- ствует возможность обновления таблицы. Однако по сравнению с обычным ЗУ с произвольной выборкой ячейки ассоциативной памяти значительно сложнее, поэтому в настоящее время она используется там, где требуется сравнительно небольшая емкость. Предположим, что таблица упорядочена по зна- чениям ключей. В таких случаях можно использовать метод двоичного поиска. Предположим далее, что обновление таблицы не производится. Кроме того, будем рассматривать случай пакетной обработки по- иска со многими ключами поиска в одной и той же таблице (а не случай поиска только с одним клю- чом). Такая обработка называется групповым поис- ком. Групповой поиск можно реализовать с высокой скоростью, используя для этого конвейеризацию. 7- 1145
98 Глава 2 На рис. 2.11 показана структура механизма по- иска, предложенного Танакой из Университета Хок- кайдо [9, 12]. Каждый уровень механизма поиска состоит из схемы сравнения и памяти, причем память z-ro уровня имеет емкость 2*-1 слов. В памяти хранится Рис. 2.11. Структура механизма поиска. таблица. Предположим, что содержимое таблицы упо- рядочено по значениям ключей, как это показано на рис. 2.12, а. Ключ z-ro адреса таблицы (Ki) распола- гается в памяти каждого уровня способом, представ- ленным на рис. 2.11. Таким образом, в ходе обработки возможно переключение банков памяти по отношению к последовательно вводимым значениям Ко, К\, К2, .... Таблицы, хранимые в механизме поиска, ло- гически представлены в виде двоичного дерева (см. рис. 2.12). Такое двоичное дерево называется двоичным деревом с заполнением слева. Поскольку данные помещаются в таблицу, начиная с самого
Высокоскоростная обработка и архитектура СБИС 99 левого узла (0) в порядке (1), (2), то правые нижние узлы данного маршрута остаются пустыми, поэтому проверяется наличие данных только в самом нижнем левом узле. Таблица Т Адрес 0123456789 10 Данные 3 4 7 11 15 20 22 24 27 28 30 а б Рис. 2.12. Табличный поиск с помощью механизма поиска. a — таблица; б — процесс поиска. Значения узлов этого дерева для гго уровня по- следовательно помещаются в память этого уровня, причем крайний левый узел соответствует нулевому адресу. Рассмотрим в качестве примера последова- тельность поиска значения 28. Сначала в схеме сравнения первого уровня сравниваются значения 24 и 28. Поскольку значение 28 больше, поиск осуще- 7*
100 Глава 2 ствляется вправо вниз. Для аппаратных средств пг ремещение влево вниз означает «0», а перемещение вправо вниз — «1». Значит, в данном случае в каче- стве адреса для второго уровня передается «1». В схеме сравнения второго уровня используется пе- реданный адрес «1» и из его памяти считывается содержимое этого адреса. Однако поскольку данные по этому адресу отсутствуют, то поиск продолжается влево вниз. В схеме второго уровня значение «0», по- казывающее поиск влево-вниз, приписывается справа к «1», представляющей текущий адрес, и полученный новый адрес «10» передается на третий уровень. На третьем уровне считывается содержимое памяти по адресу «10» (т. е. в десятичной системе счисления это 2) и получается значение 28. Поскольку это зна- чение равно ключу поиска, то устанавливается флаг, показывающий, что поиск завершился успешно. При обнаружении ключа, равного ключу поиска, поиск продолжается влево вниз. На четвертый уровень пе- редаются адрес 100 и флаг. На этом уровне считы- вается содержимое памяти по адресу 100 (или 4 в де- сятичной системе счисления) и получается значение 27. Значения 28 и 27 сравниваются и поиск продол- жается вправо вниз. Адресом для аппаратных средств является значение 1001, при этом осуществляется вывод установленного флага. Это значение (1001) соответствует 9 в десятичной системе счисления, и, как видно из рис. 2.12,6, это является минимальным адресом ключа, равного 28. Если флаг не установлен, иначе говоря, ключ поиска не обнаружен, выдаваемая информация показывает минимальный адрес ключа, который больше ключа поиска и присутствует в таблице. В описанном выше примере использовался один ключ поиска, однако, когда ключ поиска 28 пере- дается на второй уровень, схема сравнения первого уровня может приступить к обработке следующего ключа поиска. Таким образом можно организовать конвейерную обработку со степенью параллелизма, равной числу уровней. При этом механизм поиска можно рассматривать как конвейер, в котором поток ключей поиска преобразуется в поток адресов та б-
Высокоскоростная обработка и архитектура СБИС 101 лицы и флагов. Способ обработки в таком механизме поиска носит название двоичного пакетного конвейер- ного поиска. Этот алгоритм можно расширить до разрядно-мо- дульного типа, он был предложен Танакой в 1982 г. [1.3]. 2.3.2. УСКОРЕНИЕ СОРТИРОВКИ Аппаратные средства, предназначенные для вы- сокоскоростной сортировки, можно классифициро- вать по трем величинам: числу используемых схем сравнения Л, максимальному времени обработки t и максимальной временной задержке D от момента завершения ввода данных об объекте до момента начала вывода результата сортировки. Иначе говоря, аппаратные средства разделяются на типы1) О (Л (и)), О (Z(n)), Оф (и)), в которых Л, D и t являются функциями Л (и), Z(n), D(ri) от числа объектов п. В табл. 2.1 показана эта классификация [9, 10]. Рассмотрим для сравнения три алгоритма началь- ной группы в данной таблице, которые являются про- граммными алгоритмами. Конвейерная сортировка слиянием и конвейерная пирамидальная сортировка (в следующей группе) выполняются линейным сорти- ровщиком, который использует О (log и) схем сравне- ния и заканчивает сортировку за время О (и). При этом в конвейерной пирамидальной сортировке вре- мя, требуемое только на обработку, т. е. исключая время последовательного ввода-вывода данных, равно 0. Сортировщики такого типа называются сорти- ровщиками с нулевым временем. Сортировщики сле- дующей группы — параллельные сортировщики с перестановкой четного-нечетного и параллельные дре- вовидные сортировщики — по своей производительно- сти уступают основным типам. Сортировщики парал- лельных вычислений, сортировщики методом рикоше- та, конвейерные сортировщики пузырьковым методом, относящиеся к следующей группе, являются сорти- *> Подразумевается порядок величины параметра, которым характеризуется данное аппаратное средство. — Прим. ред.
102 Глава 2 Таблица 2.1. Аппаратные средства для различных видов сортировки h t D Сорти- ровка С при- свое- нием номера Примеры 1 п2 п2 О Пузырьковая сорти- ровка 1 п log2n п log2 п о Битональная сорти- ровка 1 log я п log п п га log га log га о о Пирамидальная сорти- ровка Конвейерная сорти- ровка слиянием log га п п п 0 п о о Конвейерная пирами- дальная сортировка Параллельная сорти- ровка с перестанов- кой четного-нечет- ного п п п п log га 0 о О Параллельная древо- видная сортировка Сортировка с парал- лельным вычисле- нием п п 0 о Сортировка методом рикошета п п п 0 У~п о о Конвейерная пузырь- ковая сортировка Битональная сорти- ровка по решетке п п2 log2 га log га log2 га log га о о Битональная сорти- ровка с перена* страиваемой связью Теоретическая Мюл- лера—Препарата п log га log га о Теоретическая Хирш- берга (1)
Высокоскоростная обработка и архитектура СБИС 103 Продолжение табл. 2.1. h t D Сорти- ровка С при- свое- нием номера Примеры п1 + 1/* k log n k log n О Теоретическая Хирш- берга (2) n log n logn logra О Теоретическая Препа- рата (1) n'+w k log n k log n о Теоретическая Препа- рата (2) Примечание. Пузырьковая, битональная и пирамидальная сортировки являются программно-реализованными алгоритмами, но для сравнения они показаны вместе. h — число компараторов; t — время обработки; k — любое значение, боль- шее 1; D—задержка времени от окончания ввода данных до начала ввода данных. ровщиками с нулевым временем типа (и, и, 0), однако количество аппаратных средств, используемых ими, больше чем О (и). Битональные сортировщики по ре- шетке и битональные сортировщики с перемещаемой связью (shuffle connect) относятся к группе самой скоростной обработки среди остальных практически используемых аппаратных средств, которые содержат менее О (и) схем сравнения. Однако нужно отметить, что когда ввод-вывод данных сортировщика выпол- няется последовательно, возрастает доля времени ввода-вывода в общем времени обработки, поэтому получить высокую скорость не удается. К последней группе относятся сортировщики, имеющие более чем О (и) схем сравнения, причем используемые ими ал- горитмы по своим характеристикам близки к нижнему теоретическому пределу времени обработки. С точки зрения теории такие сортировщики имеют смысл, но с практической стороны они не представляют интереса. Ниже будут рассмотрены только типичные сортировщики. 1. Конвейерная сортировка слиянием [14]. Сор- тировка может выполняться методом периодического
Вход Iе II Лн с ||а h/'l pi' f'\b ! Слияние верхней и нижней пар Получаются четыре последовательности длиной 2 (ed) (hg) (fc) (bah Поочередно разбивается на две последовательности Поочередно разбивается на две последовательности I (hg) 11 (ba) 1 (ed) 11 (fc) Слияние верхней и нижней лар Получаются две последовательности длиной 4 ^~(hged) (fcba) I--------- | (fcba) 1 (hged) I_________ •^(hgfedc ba) Окончание сортировки слиянием m. Устройство Буфер слияния Рис. 2.13. Конвейерный сортировщик, использующий метод слияния, а — сортировка слиянием; б — структура конвейерного сортировщика, использующего метод слияния.
Высокоскоростная обработка и архитектура СБИС 105 слияния двух последовательностей, при котором дли- на подпоследовательностей, расположенных строго по порядку, увеличивается на 1, 2, 4, ... (см. рис. 2.13). Такую обработку можно осуществить конвейерным способом с помощью структуры, показанной на рис. 2.13,6. Устройство слияния каждого каскада на- чинает слияние (объединение), как только из преды- дущего каскада поступят заголовки двух подпоследо- вательностей. Принцип такой конвейерной обработки показан на рис. 2.14. Этот алгоритм был предложен Тоддом в 1978 г., а в 1982 г. Танака расширил его до разрядно-модульных структур [13]. 2. Конвейерная пирамидальная сортировка [12]. Конвейерная пирамидальная сортировка представляет собой разновидность пирамидальной сортировки. Это алгоритм, который с помощью аппаратных средств реализуется методом параллельной обработки. Как алгоритм механизма сортировки он был предложен Танакой из Университета Хоккайдо в 1980 г. В этом алгоритме используется пирамидальная (древовид- ная) структура данных, как показано на рис. 2.15, а. В этом дереве все данные на пути от корня к каж- дому листу расположены в порядке возрастания. Структура механизма сортировки схожа со структу- рой механизма сортировки, показанной на рис. 2.11, и на каждом уровне имеет независимые память и схемы сравнения. С вводом данных размеры пирамиды увеличи- ваются от верхнего уровня к нижнему, а внутри уровня они растут слева направо. В каждом узле пирамиды в начальном состоянии хранятся данные, большие любых других данных, которые являются объектами сортировки. На рисунке эти данные обо- значены символом «оо» (бесконечность). Узел, в ко- тором каждый раз при вводе следующих данных они подставляются вместо бесконечности, называется «следующим узлом». Для ввода данных в пирамиду, выросшую до размеров, показанных на рис. 2.15, а, следует считать данные, расположенные на маршруте, проходящем от корня через следующий узел и дости- гающем крайнего левого нижнего узла, в направле- нии, указанном стрелкой на каждом уровне, затем
106 Глава 2 Рис. 2.14. Процесс сортировки методом слияния, выполняемой конвейерным сортировщиком, структура которого показана на рис. 2.13. Ро — расщепитель; Рх- (t^l): устройство слияния+ расщепитель.
Входные данные '.5 Рис. 2.15. Операция ввода при конвейерной пирамидальной сортировке, а — до обновления; б — после обновления.
108 Глава 2 в последовательность считанных таким образом дан- ных нужно вставить заново вводимые данные, а уча- Рис. 2.16. Процесс оо при конвейерной пирамидаль- вывода данных ной обработке. стки считывания повторно перезаписать (см. рис. 2.15,6). Результатом также является пирамида. Вывод данных из пирамиды в порядке возраста- ния выполняется, как показано на рис. 2.16. По-
Высокоскоростная обработка и архитектура СБИС 109 скольку минимальные данные расположены в корне, то сначала выводится корневое значение и в этом месте возникает пустота. Таким образом, если на некотором уровне возникает пустота, то на следую- щем уровне из памяти считываются данные узлов, расположенных слева внизу и справа внизу от этой пустоты; наименьшее из этих данных передается на верхний уровень и производится регистрация того, что в выбранном узле возникла пустота. На верхнем уровне переданные данные записываются в пустое место. Если подобную обработку выполнять парал- лельно на всех уровнях, то можно организовать кон- вейерную обработку типа той, что показана на рис. 2.16. Добавим, что при возникновении пустотьГ на самом нижнем уровне в этом месте записывается оо. Благодаря этому по окончании вывода данных пирамида возвращается в свое первоначальное со- стояние. Для инициализации пирамиды следует вве- сти минимальные значения данных объекта только в том количестве, которое позволяет емкость меха- низма сортировки, и вывести только это число дан- ных. При этом каждый узел пирамиды инициализи- руется в оо. Этот алгоритм был усовершенствован Танакой в 1985 г. для возможности использования данных переменной длины [15]. 3. Битональная сортировка [16]. Если члены не- которой последовательности (а0, а\, ..., ап_\) удов- летворяют условию ^а1 + \ • • • ^ап~Ь то эта последовательность, а также последовательно- сти, полученные ее циклическим сдвигом, называют битональными. Если битональную последовательность (Ко, Кь •••, Кп-1), где п — 2т, преобразовать с по- мощью (программы) for i = 0 to т — 1 do begin ж-min (Ki, Ki+m)', « <-max (Kf, Kj-bm); Ki <- x; end;
110 Глава 2 то первая и вторая подпоследовательности (/Со, К1, •••, (Кт, Кт+1, ...» К п-1) ВО ВНОВЬ ПОЛу- ченной последовательности являются битональными, причем максимальное значение в последовательности /Со, Къ ...» /Cm-i будет меньше минимального значе- ния в последовательности /Ст, /Ст-ь ...» /Сл-ь Это можно проиллюстрировать графически, например как Рис. 2.17. Принцип битональной сортировки. а — пример битональной последовательности; б — пересечение первой по- ловины второй половиной; в — разделение на минимальное и максималь- ное значения каждого элемента последовательности. показано на рис. 2.17. Допустим, имеем битональную последовательность (1, 3, 4, 6, 9, 5, 2, 0), которая после указанного выше способа преобразования при- нимает вид (1, 3, 2, 0, 9, 5, 4, 6). При этом ее первая половина (1, 3, 2, 0) и вторая половина (9, 5, 4, 6) являются битональными, и, как видим, максимальное значение первой половины (3) меньше минимального значения (4) второй половины. Если п является степенью 2, то, используя эле- мент наподобие показанного на рис. 2.18, а, битональ- ную последовательность можно преобразовать в по- следовательность, которая сортируется (упорядочи-
Высокоскоростная обработка и архитектура СБИС 111 вается) с помощью сети, структура которой показана на рис. 2.18,6. —д £ —Минимальное (А, В) В Н —Максимальное (А, В| а1» а2' •••< а2т ’ битональная последовательность с1<с2<-с2т Рис. 2.18. Структура битонального сортировщика. а — базовый элемент; б — структуры битонального сортировщика с 2т входами. Обычно набор входных данных не является бито- нальной последовательностью, поэтому, чтобы исполь- зовать сеть, показанную на рис. 2.18, входные дан- ные необходимо привести к виду битональной после-
112 Глава 2 Рис. 2.19. Структура 8-входового сортировщика, выполняющего битональную сортировку. Рис. 2.20. Битональный сортировщик с перенастраиваемой связью.
Высокоскоростная обработка и архитектура СБИС 113 довательности. При битональной сортировке в этой части также используется базовая сеть, показанная на рис. 2.18, и, как показано на рис. 2.19, сортиров- щик строится по методу последовательного увеличе- ния длины битональной последовательности путем умножения на степень 2, начиная с 21. Если п — это степень 2, то в используемой сети по вертикали рас- положено в ряд п/2 элементов, показанных на рис. 2.18,а, а по горизонтали—(log2 п, + log п)/2 элементов. Сортировщик, в котором каждый уровень такой сети накладывается на все начальные уровни, а число базовых элементов ограничено п/2, называет- ся битональным сортировщиком типа (n, log2 n, log2 п). При такой структуре связь между элементами сильно усложняется, однако вместо увеличения числа шагов обработки эту связь можно сделать достаточно гибкой (перемещаемой) (shuffle) (рис. 2.20) [17]. Поскольку порядок требуемого на сортировку времени сохра- няется в пределах O(log2n), то этот случай также относится к типу (n, log2n, log2n). Перемещаемая связь эквивалентна связи в гиперкубе, поэтому бито- нальный сортировщик типа (n, log2n, log2n) можно реализовать и с помощью структуры гиперкуба, рас- положив в каждом его узле базовый элемент. 8—1145
Глава 3 ВЫЧИСЛИТЕЛЬНЫЕ МОДЕЛИ И МЕТОДЫ ОЦЕНКИ Для описания процесса вычислений в настоящее время используются в основном четыре типа моделей: императивные, функциональные, объектно-ориентиро- ванные и логические модели. Кроме того, если в вы- числения ввести неопределенность и параллельность, то каждый из этих типов можно разбить на два под- типа: неопределенные вычислительные модели и па- раллельные вычислительные модели. Для каждой модели существует соответствующий метод оценки. Эти методы разделяются на три основных типа: с по- током управления, потоком данных и редукционные. В процессе оценки необходимо осуществлять обмен информацией. Для этого используются способы вы- зова по значению, вызова по ссылке, вызова по тексту, вызова по имени, вызова по запросу и т. д. В неймановской архитектуре используются импера- тивная вычислительная модель, метод оценки с по- током управления, а обмен информацией выполняется главным образом на основе вызова по значению и вызова по ссылке. Различные виды ненеймановских архитектур можно рассматривать с точки зрения при- менения различных вычислительных моделей, мето- дов оценки и способов передачи информации. 3.1. ВЫЧИСЛИТЕЛЬНЫЕ МОДЕЛИ Как уже упоминалось выше, существует 4 основ- ных класса вычислительных моделей: императивные, функциональные, объектно-ориентированные и логиче- ские. Алгоритмы, используемые в этих моделях, реа- лизуются с помощью языков программирования 4 ти- пов: императивных, функциональных, объектно-ориен- тированных и логических.
Вычислительные модели и методы оценки 115 3.1.1. ИМПЕРАТИВНАЯ ВЫЧИСЛИТЕЛЬНАЯ МОДЕЛЬ Неймановская архитектура предполагает последо- вательное расположение команд ЦП в программе. ЦП последовательно по одной считывает эти коман- ды из памяти и в соответствии с имеющимися в них указаниями считывает данные, хранящиеся по неко- торому адресу в памяти, выполняет заданные опера- ции и записывает результаты операции в некоторый адрес памяти. Содержимое памяти соответствует со- стоянию машины, а вычисления выполняются путем последовательного изменения этого состояния. Таким образом, выполнение вычислений сопровождается побочным эффектом. Такая вычислительная модель называется импера- тивной моделью. Языки программирования такие, как Фортран, Алгол, ПЛ/1, Паскаль и др., основываются на этой вычислительной модели и объединяются под названием «императивные языки» В императивных языках побочный эффект представлен оператором присваивания, который указывает подстановку не- которого значения в переменную. Программа, написанная на императивном языке, выполняется последовательно по одному оператору, т. е. в соответствии с последовательностью описания, но для изменения такого порядка выполнения можно использовать операторы if и goto, которые указывают на условный или безусловный переход, оператор while, используемый для создания программного цик- ла, и т. д. Кроме того, в тех случаях, когда одна и та же обработка выполняется часто, используют про- цедуры, функции и способы их вызова, т. е. такая об- работка описывается в виде модуля и программа составляется таким образом, что различные модули ее вызываются по мере надобности. Если некоторая процедура Р(хь х2, • ••, хп) и функция f(%1, х2> • • • > Хт) представляются в виде Р(У1, У2, ...» Уп) и f(//i, у2, ...» Ут), то каждое значение Xi называется формальным параметром, а каждое значение yi — реальным параметром. При 11 Другое название — процедурные языки. — Прим. ред. S*
116 Глава 3 вызове необходимо связать реальный параметр с фор мальным параметром, для чего существуют такие способы, как вызов по значению, вызов по ссылке, вызов по тексту, вызов по имени и проч. В вызове по значению формальный параметр xi является локальной переменной, которая использует- ся только в процедуре или функции, и при запуске процедуры или функции значение реального пара- метра yi подставляется в формальный параметр Xi в качестве начального значения. При вызове по ссылке если реальный параметр yi является переменной, то формальный параметр Xi отождествляется с переменной yi. Таким образом, если в инициированных прсцедуре или функции зна- чение формального параметра xt обновляется, то ав- томатически обновляется и значение переменной yi. При вызове по тексту выражение, написанное в качестве реального параметра, записывается в том же самом виде в позицию соответствующего формаль- ного параметра. Если в записанном выражении имеются локальные переменные, используемые только в процедуре или функции, и другие переменные с та- кими же именами, то при вызове по тексту (посколь- ку это выражение в таком же виде записано в про- цедуре и функции) эти переменные используются в качестве локальных переменных. Допустим, напри- мер, что для формального параметра х существует реальный параметр уz, а также что до вызова значения у и z были равны 1 и 2 соответственно, а у — это также имя локальной переменной в вызы- ваемой процедуре. Тогда если сама процедура имеет вид #:=3; print (х), то на печать будет выводиться не 3, а 5, но при этом значение у = 1 в вызывающей процедуре не изме- няется даже после окончания вызова. Для того чтобы избежать конфликтных ситуаций, связанных с одинаковостью имени переменной, ис- пользуемой локально, и имени, вводимого извне при вызове по тексту, используетс$: вызов по имени, кото-
Вычислительные модели и методы оценки 117 рый накладывает некоторые ограничения на вызов по тексту. При этом способе формальный параметр так- же заменяется на текст выражения, которое является реальным параметром, однако при оценке внутри про- цедуры или функции подставленного выражения ис- пользуется связь между переменной и ее значением до вызова. То есть в приведенном выше примере на печать будет выведено значение 3. 3.1.2. ФУНКЦИОНАЛЬНЫЕ ВЫЧИСЛИТЕЛЬНЫЕ МОДЕЛИ Вычислительная модель, в которой программа рассматривается как множество определений функ- ций, называется функциональной моделью. Для опи- сания функциональных моделей используются два метода: первый основан на использовании апплика- тивного языка, а второй — на использовании языка с однократным присваиванием. Отличительной чертой этих моделей является то, что в основу их положена простая и четкая математическая модель, называемая «лямбда-исчислением». Примерами аппликативного языка являются «чистый» Лисп, предложенный Мак- карти [1], ISWIM Ландина [2], SASL Тернера [3], FP Бэкуса [4] и др. К языкам с однократным при- сваиванием относятся Id Арвинда [5], VAL Аккер- мана и Денниса [6], LUCID Ашкрофта [7] и др. 1. Лямбда-исчисление. В выражении f(x), которое используется обычно для представления функции, не- ясно: то ли оно означает функцию f, то ли ее значе- ние при заданном значении параметра х. Поэтому для четкого описания функции f было введено выра- жение Xxf(x). То есть, когда выражение М хотят рас- сматривать как функцию от х, следует использовать запись ХхМ Получение выражения кхМ из выраже- ния М называют «лямбда-абстракцией». Таким обра- зом, выражение Хх(х + «/) является функцией от х, а не от у. При этом х называется связанной перемен- ной, а у — свободной переменной. Если f = ХхМ, то подстановка выражения А в х внутри М называется применением А к f и записывается как fA.
1f8 Глава 3 Если переменная х в выражении Af заменяется на выражение Z, то результат N' подстановки [Z/x\N определяется следующим образом: (1) Если N — переменная: а) при N = х N' = Z; б) если N =£ х, то N' остается равным N. (2) Если N имеет вид КуМ: а) если у является той же переменной, что и х, то N' = JV; б) если у — переменная, которая отличается от х: б— 1) если х не является свободной перемен- ной выражения М, либо у не является свободной переменной выражения Z, N'= Ky[Z/x]M. б — 2) в противном случае 2V, = XZ[Z/x]- •([z/#]Af), где Z — переменная, кото- рая не фигурирует ни в М ни в Z. (3) Если N имеет вид FA, то N' = ([Z/x]F)- •([Z/x\A). В лямбда-исчислении определены три правила преобразования. (1) a-правило (замена имени связанной перемен- ной) Если у не является свободной переменной вы- ражения 7И, то КхМ^^'КуУу/х\М. (2) p-правило (подстановка) [KxMN)^[Nlx] М. (3) т)-правило (расширение) Если х не является свободной переменной А1, то Хх (Мх) <=> М. Если р- и т]-правило использовать слева направо, то можно упрощать выражения. Такое использование правил называется p-редукцией и т]-редукцией, а фор- мы KxMN и Хх(А1х), являющиеся симметричными в приложениях, называются редексом. Оценка выражений в лямбда-исчислении выпол- няется путем периодического повторения р- и т]-ре- дукции. В результате получается выражение, к ко- торому невозможно применить указанные выше правила редукции. Такое выражение называется про- стым. Оценка выражения М завершается после того,
Вычислительные модели и методы оценки 119 как оно станет простым выражением ЛГ, при этом М' считается результатом оценки М. Однако это не означает, что простое выражение существует для каждого выражения. Способ редукции некоторого заданного выраже- ния, очевидно, зависит от порядка выбора редекса. Однако если при различных порядках преобразования получаются две простые формы, то они преобразуют- ся друг в друга с помощью a-преобразования по крайней мере теоретически. Существует способ, по которому обычно выбирается самый левый (самый внешний) редекс. Этот способ называется редукцией нормального порядка. Если для заданного выраже- ния X существует простая форма У, то существование редукции нормального порядка из X в У гаранти- руется теоретически. Если отложить оценку параметра при вызове функции и приступить к оценке самой функции, то потребуется оценка тех ее частей, в которых имеется ссылка на параметр, поэтому оценка нормального порядка соответствует оценке параметра. Это похоже на вызов по имени. Порядок редукции, при котором в отличие от нормального порядка, прежде чем приступить к ре- дукции редекса kxMN (который является объектом Р-редукции), необходимо оценить значение ЛГ, назы- вается аппликативным порядком, он соответствует вызову по значению. При нормальном порядке оцен- ка может закончиться даже при неопределенных зна- чениях параметра, что невозможно при аппликатив- ном порядке. Однако если при аппликативном по- рядке оценка параметра производится только один раз, то при нормальном порядке каждый раз, когда необходимо значение параметра, нужна переоценка этого значения. Поэтому с точки зрения эффектив- ности почти во всех языках программирования функ- ционального типа используется способ оценки с по- мощью аппликативного порядка. 2. Аппликативный язык и язык с однократным присваиванием. В аппликативных языках оператор присваивания не используется. Программа состоит из
120 Глава 3 множества равенств, определяющих функции, и опи- саний приложений этих функций при вводе данных. Например, в языке SASL3 функция fact, вычисляю- щая факториал, определяется следующим образом: fact п where fact 0 = 1 fact п = п * fact (п — 1) В аппликативных языках допускается присваива- ние имени значению. Эта операция представлена в форме оператора присваивания, однако если значению присвоено имя, то в ячейку данных с уже присвоен- ным именем нельзя подставлять новые значения, по- этому смысл этого оператора присваивания несколько отличается от традиционного. Оператор присваива- ния можно использовать в качестве формы представ- ления, однако в этих случаях его роль нужно огра- ничить присваиванием значению, стоящему в правой части, имени, указанного в левой части. Для реали- зации этого ограничения следует использовать пра- вило, которое гласит, что «присваивание имени одной и той же переменной допускается только один раз». Это правило называется «правилом однократного при- сваивания», а язык программирования, в котором это правило используется, называется «языком с одно- кратным присваиванием». Таким образом, языки с однократным присваиванием по существу не отли- чаются от аппликативных языков. Для описания циклической обработки необходимо сделать возможным неоднократное присваивание значения одной и той же переменной цикла. В языках с однократным присваиванием эта проблема решает- ся обычно путем автоматической модификации пере- менной в каждом цикле. Рассмотрим для примера программу, написанную на языке Id [5], которая вычисляет сумму чисел от 1 до 11 (см. рис. 3.1). В этой программе старые и новые переменные цикла разделяются с помощью оператора, таким образом в пределах одного цикла можно применять правило однократного присваивания. В языках с однократным присваиванием исполь- зуется такое же формальное описание, что и в им-
Вычислительные модели и методы оценки 121 перативных языках, однако в отличие от императив- ных языков порядок расположения операторов при- сваивания в программе не имеет значения. Порядок оценки определяется не последовательностью описа- ния, а зависит от данных. Например, оператор S : = X + Y можно выполнять только после оценки значений X и У. Поскольку значение S можно оце- нить только после выполнения этого оператора, то (initial while new new return /<-1; /<-0 do /<-/+1; /<-/+1; /) Рис. 3.1. Программа на языке Id, вычисляющая сумму чисел от 1 до 2V. выполнить оператор присваивания, в правой части которого содержится S, до выполнения этого опера- тора нельзя. В аппликативных языках возможна параллельная оценка множества параметров. Что же касается язы- ков с однократным присваиванием, то здесь воз- можно параллельное выполнение всех операторов присваивания, для которых завершена оценка всех переменных, содержащихся в правой части. Нужно отметить, что оба этих языка не имеют побочного эффекта. Благодаря этому свойству оба языка поль- зуются большим вниманием при создании вычисли- тельных моделей высокопараллельных машин. 3. Оценка с задержкой и вызов по запросу [8]. Если при оценке применений f(g(a),/i(a)) функции f (х, у) = if х>0 then 1 else у • (у + к g(a), h(a) выясняется, что g(a)>0, то оценивать h(a) нет необходимости. Однако при оценке в ап- пликативном порядке в подобных случаях оценка h(a) необходима. Для того чтобы избежать ненужной оценки, программист должен указать, что оценка па- раметра откладывается до тех пор, пока в ней не возникнет потребность. Это можно сделать, указав
122 Глава 3 перед параметром «delay». Наоборот, для принуди- тельного выполнения задержанной оценки исполь- зуется указание «force». С помощью этих указаний эту функцию можно определить следующим образом: f (х, у) = if (х>0 then 1 else (force у) ((force у) + 1), и записав f(g(a)), delay (Л («)), оценку h(a) можно задержать до принудительного выполнения ее по указанию force. Такой способ оценки называется «оценкой с задержкой». Иногда при этом способе бы- вает необходимо провести оценку одного и того же параметра (оценка которого была задержана) два и более раз. Приведенный выше пример является как раз таким случаем. Для повышения эффектив- ности можно использовать способ, который заклю- чается в том, что значение, полученное при первой принудительной оценке, сохраняется и используется в остальных случаях, если оценка выполняется два и более раз. Подобный способ передачи параметра называется вызовом по необходимости. Одним из преимуществ оценки с задержкой яв- ляется возможность конвейеризации передачи беско- нечного списка. Если функция intlist (n) cons (n, intlist (п+1)), генерирующая бесконечный список целых чисел, на- чиная с п, применяется для целых чисел, то выпол- нение ее не останавливается. Используя указание de- lay, запишем эту функцию как dintlist (n) = cons (n, delay dintlist (n + 1)), а функцию sum определим следующим образом: sum (n, Z)^if п —О then О else саг (/) + sum (п — 1, force cdr (Z)). Тогда при оценке sum (k, dintlist (1)) каждый раз при рекурсивном вызове sum элементы dintlist (1) после- довательно оцениваются, начиная с первого, и в ка- честве результата определяется значение 1 + 2 + + ... + k. В этом случае оценку dintlist и оценку sum можно рассматривать как два параллельных процесса, причем dintlist последовательно генери-
Вычислительные модели и методы оценки 123 рует целые числа и передает их процессу sum, кото- рый их последовательно использует и определяет полную сумму. Таким образом, между двумя этими процессами существует поток данных, и можно счи- тать, что оба этих процесса выполняют конвейерную обработку. Подобный режим обработки, существую- щий между двумя параллельными процессами, на- зывается потоковой обработкой. 3.1.3. ОБЪЕКТНО-ОРИЕНТИРОВАННЫЕ ВЫЧИСЛИТЕЛЬНЫЕ МОДЕЛИ В императивных и функциональных вычислитель- ных моделях операция принимается за субъект, а вы- числения представляются в виде использования опе- раций с некоторых объектов. Однако если сделать наоборот, т. е. объект операций принять за субъект, то можно построить такую вычислительную модель, в которой применение операции рассматривается как передача запроса объекту, а интерпретация запроса и действия, предусмотренные в нем, выполняются самим объектом, принявшим запрос, который счи- тается субъектом. Такая модель называется объ- ектно-ориентированной моделью. В объектно-ориен- тированных моделях вычисления моделируются с помощью множества объектов, передающих друг другу запросы. Итак, «объектом» называется объект операций, который в данной модели считается субъ- ектом. В объектно-ориентированной модели операция «3 + 4» представляется как передача объекту «3» запроса «+» от другого объекта «4», выступающего в качестве параметра. Предполагается, что объект «3» сам знает, какую обработку ему нужно делать по этому запросу. В результате обработки генери- руется новый объект «7». Объект обладает следующими особенностями. Он имеет внутреннее состояние, которое при приеме за- проса становится активным. Управлять внутренним состоянием объекта извне можно только посредством передачи ему запросов. В ходе вычислений объ- ект может передавать запросы другим объектам.
124 Глава 3 Объекты одного типа определяются как класс, и из этого класса можно генерировать другие объекты (классы). Объект можно рассматривать как новый абстракт- ный тип данных. Кроме того, если сделать возмож- ным одновременный переход в активное состояние множества объектов, то объект можно рассматри- вать как процесс. Примером объектно-ориентирован- ного языка программирования является в первую очередь PLASMA [10], основанный на теории actor [9], языки Mesa [11], CLU [12], Смолток [13, 14], LOOPS [15] и др. В модели actor объекты рассмат- риваются как процессы, и с ее помощью можно опи- сывать параллельные процессы. 3.1.4. ЛОГИЧЕСКИЕ ВЫЧИСЛИТЕЛЬНЫЕ МОДЕЛИ Модели, в которых вычисления представляются с помощью логики предикатов, называются логически- ми, а язык программирования, используемый для описания вычислений, называется логическим язы- ком [16]. Типичным примером такого языка являет- ся Пролог, основанный на хорновской логике, пред- ставляющей собой подмножество логики предикатов первого порядка. Предикат (Л, /2, ...» tn) в Прологе называется литералом. Параметр ti может быть константой, пе- ременной или структурным элементом типа списка, но все эти его формы объединяются общим назва- нием «термЗ». Если считать Pi и Q/ литералами, то множество высказываний в логике предикатов пер- вого порядка можно представить в виде множества высказываний, имеющего форму (QiAQ2A ... AQn)-> (Pi V Р2 V-\ . V Рт). Это представление называется клаузальным представлением, а форма высказывания называется клаузальной формой. Высказывание в та- кой форме называется предложением. В хорновской логике используются только те предложения, для которых m 1. В Прологе это описывается как Р\'. — Qi, Q?, ..., Qn, и для оценки Р\ достаточно оценить Qi, 'Q2, ..., Qn.
Вычислительные модели и методы оценки 125 Предложение для т = 0 соответствует запросу и представляется как «?— Qi, Q2, ...» Qn»- Это пред- ложение называется целевым и соответствует основ- ной программе. Оно интерпретируется как «пусть оценивается Qb Q2, ...» Qn». Предложение для п = О при т — 1 записывается как Pi, оно показывает факт, что существует Р\, и вместе с тем показывает, что оно оценено как Рь Предложение при т = 0 и п = 0 называется пустым и обозначается □. Структурный элемент имеет вид <функтор> (<терм>ь <терм>2, <терм>*). Список, который являет- ся примером структурного элемента, можно предста- вить как сопз(<терм>1, <терм>2), а в Прологе это записывается как [<терм>11 <терм>2]. Это соответ- ствует записи (<терм>1 <терм>2) на языке Лисп. Спи- сок (<терм>1, <терм>2, ..., <терм>*) выражается как [<терм>1, <терм>2, ..., <терм>*]. Программа на языке Пролог представляется в ви- де совокупности предложений, одно из которых це- левое. Рассмотрим в качестве примера следующую программу: ? - append (X, Y [1, 2, 3, 4]), Y = [2 | _] append ([ ], X, У). append ([U | X], У, [U | Z]):- append (X, У, Z) Здесь символ «_» в списке [2|__] показывает пере- менную, не имеющую имени. Эта программа среди способов разделения списка [1, 2, 3, 4] на два списка X и У определяет такой способ разделения, при кото- ром начальный элемент в списке У является 2. Во второй и третьей строке дается определение append. Оценка целевого предложения начинается с оцен- ки головного литерала. Для оценки выражения ap- pend (X, У, [1, 2, 3, 4]) нужно выбрать такое пред- ложение, которое можно было бы унифицировать с левой частью путем подстановки в переменную со- ответствующего значения. Поиск такого предложе- ния выполняется по порядку, начиная сверху. Вы- брав вторую строку, получим Х=[ ], У = [1, 2, 3, 4]. Для оценки переходим ко второму литералу в целевом предложении, однако решение противоречит
126 Глава 3 У=[2|_], поэтому оно недействительно. Попытаем- ся отыскать другое решение для головного литерала. Такой поиск называется перебором с возвратами. На этот раз выберем третью строку и оценку append (X, У, [1, 2, 3, 4]) заменим на оценку (XI, У, [2, 3, 4]). В этой унификации предполагается подстановка Х = [1 | XI]. При оценке нового литерала попы- таемся также проделать унификацию с левой частью в последовательности «вторая строка, третья строка». Подставив во второй строке XI = [ ], У = [2, 3, 4], убеждаемся, что'унификация прошла успешно и мож- но перейти к оценке следующего литерала У = [2|_]. Поскольку на этот раз противоречия нет, то прини- маем его за решение, т. е. решение определяется как У = [2, 3, 4], X = [1 | XI] = [1]. Таким образом, выполнение программы на языке Пролог отличается использованием операций унификации и перебора с возвратами. В указанной выше программе правильное реше- ние можно определить даже в том случае, если по- менять местами первый и второй литералы целевого предложения. Далее, если рассматривать литералы как процессы, то возможна их параллельная оценка. Эта параллельность называется И-параллельностью. Кроме того, для оценки предложения append (X, У, [1, 2, 3, 4]) необходимо попытаться провести унифи- кацию второй и третьей строк, причем это можно проделать параллельно. Такая параллельность назы- вается ИЛИ-параллельностью. Язык программирования, в котором впервые бы- ли применены средства описания этих параллель- ностей, называется Парлогом (PARLOG) [18] (пред- ложен Кларком). В Парлоге запятая, разделяющая литералы, означает И-параллельность, а точка, раз- деляющая предложения, означает ИЛИ-параллель- ность. Эти параллельности могут обрабатываться одновременно. Последовательно обрабатываемые И- и ИЛИ-параллельности обозначаются соответственно «&» и «;». Введение ИЛИ-параллельности приводит к по- лучению множества решений, но из них принимается только первое решение, а остальные отбрасываются.
Вычислительные модели и методы оценки 127 В И-параллельности сторона, вводящая в переменную значение, и сторона, использующая это значение, раз- деляются. В языке Парлог это разделение выпол- няется путем описания режима и указания ввода- вывода относительно переменной. Сначала при опре- делении предиката нужно обязательно описать режим в виде отношения P(ai, 02, ...» 0и). Режим описы- вается с помощью символов «?» и «~», которые ста- вятся перед каждым аг, причем «?» означает ввод, а «~»—вывод. При вызове этого предиката входная переменная указывается как «X?», а выходная пере- менная — «Х~», В случае когда при последователь- ной операции И указывается р(Х~) & q(X), то на сто- роне р оценка не выполняется до тех пор, пока на стороне q не потребуется значение, т. е. выполняется оценка с задержкой. Язык Парлог имеет оператор, который соответ- ствует оператору сечения языка Пролог, он обозна- чается символом «|». Таким образом оценка Р | Q означает, что сначала выполняется оценка Р, первое полученное решение считается действительным, все остальные отбрасываются, а затем выполняется оценка Q. Шапиро исключил последовательные операции И и ИЛИ из Парлога и создал язык, получивший на- звание «Параллельный Пролог» (Concurrent Pro- log) [29]. В этом языке предикат, который сам себя рекурсивно вызывает и в то же время продолжает выполняться, рассматривается как процесс. При ука- зании ввода-вывода переменной только входная пе- ременная разделяется символом «?». Приведем для примера следующие два процесса: out ( [X I У]): — print (X), out (У). in ( [X | У]): - read (X), in (У). out — это процесс, осуществляющий вывод, a in — процесс, осуществляющий ввод. Когда вызываются процессы in(X) и out(X?), то из процесса in в про- цесс out последовательно передается по одному сим- волу и между обоими процессами реализуется пото- ковая обработка.
128 Глава 3 В ICOT описание параллельной обработки, присут- ствующее в Параллельном Прологе, было еще более усовершенствовано и выдвинута концепция «охра- няемого хорновского предложения» [20] (CHG). Предложение CHG имеет вид Н: -G | В, где часть G называется «сторожем». «|» имеет такой же смысл, что и в языках Парлог и Параллельный Пролог. Та- ким образом, указанные выше процессы in и out с по- мощью GHC-предложения записываются как out ( [X I У] ): - true I print (X), out (У). in (Z): - true ] read (X), Z = [X|y], in (У). В «охраняемом хорновском предложении» не исполь- зуются указание режима и указание ввода-вывода переменной. Вместо этого считается, что переменная, стоящая слева от вертикальной черты «|»,— входная, а справа — выходная. Так, в процессе out [X | У] считается входной переменной. В процессе in входной переменной считается X, а поскольку Z = [X | У] на- ходится справа от вертикальной черты, то по требо- ванию Z Z— [X | У] и выводится [X | У]. Предло- жение GHC также можно использовать для описания потоковой обработки. 3.2. МОДЕЛИ ВЫЧИСЛИТЕЛЬНЫХ МЕХАНИЗМОВ Если рассматривать оценку вычислений с точки зрения механизма обработки, то последний можно представить состоящим из двух компонентов: меха- низма управления и механизма данных. Механизм управления определяет, каким образом каждое вы- числение запускает выполнение другого вычисления. Механизм данных определяет, как используются дан- ные в различных вычислениях. Механизмы управления можно разделить на три класса: с управлением с помощью формирователя последовательности, с управлением по готовности и управлением по необходимости. При управлении с помощью формирователя последовательности зара- нее определяется последовательность вычислений, и они выполняются в этой последовательности с по- мощью формирователя последовательности. В маши-
Вычислительные модели и методы оценки 129 нах с неймановской архитектурой формирователю последовательности соответствует программный счет- чик. При управлении по готовности выполнение каж- дого вычисления начинается только после того, как будут определены все его входные параметры. При управлении по необходимости когда запускается не- которое вычисление, то до его выполнения запускает- ся вычисление, которое определяет значения входных параметров первого вычисления. Только после этого возможно его выполнение. Механизмы данных мож- но разбить на два типа: совместного использования по значению и совместного использования по ссылке. В первом случае все данные копируются для каждого вычисления, для которого они являются входными, и в каждое из них передается эта копия. Во вто- ром — значения данных накапливаются в одном мес- те и в вычисление, для которого они являются вход- ными, передается только информация, указывающая место хранения этих значений. На основании классификации этих двух типов механизмов (управления и данных) вычислительные механизмы можно классифицировать, как показано в табл. 3.1. Рассмотрим подробно каждый механизм, взяв для примера вычисление а = (& + с) *(& — с). Таблица 3.1. Классификация вычислительных механизмов Механизмы данных к Я я О) Совместного исполь- зования по значе- нию Совместного исполь- зования по ссылке *=3 СП Л сх СП Я я С формировате- лем последова- тельности По готовности С потоком данных си- стемы копирования Неймановского типа С потоком данных структурированной системы ей X а> По необходимо- сти Строчной редукции Графовой редукции Модель с потоком управления — это модель вы- числительного механизма неймановской машины. 9—1145
130 Глава 3 Модель с потоком данных можно представить в виде направленного графа, вершины которого пока- зывают функции, а ветви — передачи данных. На рис. 3.2 показан пример процесса вычислений с по- мощью модели с потоком данных. Черный кружок на ветви направленного графа называется фишкой (token) данных, которая означает передачу значения данных и передачу управления. Каждый узел стано- вится выполнимым, когда на всех его входных вет- вях существуют фишки данных. По мере выполнения вычислений фишки исчезают с входных ветвей и ре- зультат вычислений выводится в виде фишки. Если данные, подлежащие передаче, являются структури- рованными, то при передаче непосредственно их зна- чений эффективность системы ухудшается, поэтому можно сделать таким образом, что будут передавать- ся только указатели значений этих данных. Такая расширенная система называется структурированной системой совместного использования. В отличие от нее стандартная система, в которой передаются не- посредственно сами значения, называется системой копирования. Машины, основанные на модели с по- током данных, называются потоковыми машинами, они подробно описаны в гл. 4. Наряду с потоковыми машинами в последние го- ды интерес стал проявляться к так называемым ре- дукционным машинам, которые подробно описаны в гл. 5. Вычислительные механизмы редукционных ма- шин основаны на принципе редукции (сокращения) посредством перезаписи строк символов в програм- ме и графов. В редукционной модели запуск вычислений осу- ществляется при необходимости данных. Способы ре- п Фишка—это термин, относящийся к теории сетей Петри. Означает наличие на входе некоторого блока сигнала, кода, лек- семы, данных и др. условий, разрешающих срабатывание этого блока. После начала работы блока разрешающие условия на вхо- де аннулируются, а по завершении работы разрешающие условия появляются на выходе и передаются на входы других блоков, связанных с данным. Процесс перемещения условий срабатыва- ния напоминает перемещение фишки на игровом поле. — Прим, ред.
Вычислительные модели и методы оценки 131 дукции подразделяются на два класса: строчную ре- дукцию и графовую редукцию в зависимости от того, что передается в функцию: скопированные значения данных или же только указатели, указывающие места хранения данных. Рис. 3.2. Пример вычислений с помощью потоковой модели. На рис. 3.3 показан процесс вычислений с по- мощью строчной редукции. Если требуется значение а (см. рис. 3.3, а), то копируется граф программы, определяющий вычисление а (см. рис. 3.3,6). При этом запускается вычисление «*». Поскольку это вы- числение невозможно без предварительного расчета двух параметров, то запускаются вычисления «+» и «—>. При этом получается редуцированный граф (с ветвями «6» и «2»), который показан на рис. 3.3, в. 9*
132 Глава 3 Результат получается, путем дальнейшей редукции (см. рис. 3.3, г). На рис. 3.4 показан пример процесса вычислений с помощью графовой редукции. В этой модели, когда требуется определить значение а, определение вычис- Рис. 3.4. Процесс вычислений с помощью модели с графовой редукцией. ления а не копируется, а передается указатель опре- деляющей программы. При достижении узла на-
Вычислительные модели и методы оценки 133 правление переданного указателя меняется на про- тивоположное для того, чтобы запомнить место, из которого будет выдаваться результат вычисления (рис. 3.4,6). Далее, путем повторения операции сме- ны направления указателя (текущего указателя) на противоположное получается граф, показанный на рис. 3.4, в. Операции «+> и «—> можно выполнять, граф редуцируется до рис. 3.4, г, а затем — до рис. 3.4, д.
Глава 4 РЕДУКЦИОННЫЕ МАШИНЫ В этой главе в доступной форме рассмотрена мо- дель лямбда-исчисления, которая положена в основу редукционных машин. Редукционными называются машины, выполняющие вычисления в соответствии с этой моделью лямбда-исчисления. Модель лямбда-исчисления [1, 2] позволяет с по- мощью довольно простых синтаксиса и семантики представлять все функции функциональных про- грамм. Кроме того, семантизация вычислений выпол- няется полностью унифицированно на основе базово- го понятия, называемого «перезаписью». 4.1. СИНТАКСИС ЛЯМБДА-ИСЧИСЛЕНИЯ Выражение в лямбда-исчислении представлено в префиксной форме, т. е. вначале располагается опе- ратор, например (+58). Таким образом, в префикс- ной форме арифметическое выражение, например а/Ь + b X с, будет представлено как (+(/а&) (Х&с)). На функциональном языке все программы представ- ляются в виде выражений, а процесс выполнения про- граммы заключается в определении значения этого выражения (это называется оценкой выражения). Оценка выражения производится путем повторения операции выбора и упрощения тех частей этого вы- ражения, которые можно упростить (такая часть вы- ражения называется редексом, причем сам редекс также является отдельным выражением). Операция упрощения называется редукцией. Преобразование некоторого выражения Е в вы- ражение F посредством многократной редукции запи- сывается как E-+F. Процесс редукции завершается, когда выражение, преобразованное редукцией, не со- держит больше редекса. Выражение, не содержащее редекса, называется нормальной формой (нормаль-
Редукционные машины 135 ная форма является результатом оценки). Процесс редукции выражения A (=Ai), при котором после- довательно получаются выражения А2, Л3, ...» Ап (—В), записывается в виде А (=Л1)“^Л2-^Лз~> Например, при оценке выражения (+(/6 2)(Х 2 5) сначала выбираются его редуцируемые части (/6 2) и (X 2 5) и упрощаются соответственно до 3 и 10). При этом не имеет значения очередность ре- дукции частей (/6 2) и (Х2 5). Кроме того, обе час- ти могут быть проредуцированы одновременно. Если редукция выполняется последовательно слева напра- во, то процесс оценивания записывается следующим образом: (+ (/ 6 2)(Х 2 5))->(+3(Х 2 5))->(+ 3 10) Полученное в результате редукции выражение (+310) также является редуцируемым, поэтому имеем (+ 3 10)—> 13 Результат 13 невозможно упростить, поэтому он счи- тается нормальной формой. 4.1.1. ПРИМЕНЕНИЕ ФУНКЦИИ В лямбда-исчислении применение функции яв- ляется чрезвычайно важным понятием. Применение функции f к аргументу х обозначается как (fx). Если функция применяется к нескольким аргументам, то она представляется, например, следующим образом: (f(x, у, z)) Однако если разложить функцию на несколько эле- ментарных функций от одного аргумента, то функцию от нескольких аргументов можно интерпретировать как результат синтеза функций от одного аргумен- та. Например, если выражение (+3 5) рассматри- вать как ((+3)5), то (+3) можно интерпретиро- вать как функцию прибавления к некоторому аргу- *> Другое название — аппликация. — Прим. ред.
136 Глава 4 менту значения 3, а саму эту функцию можно счи- тать результатом применения функции + к аргумен- ту 3. Поскольку (+ 3) невозможно редуцировать, то оно используется в качестве нормальной формы; при- меняя его к значению 4, выполним редукцию ((+3)4)—>- 7. Обращение со всеми функциями с по- мощью функций от одного аргумента называется карризацией ° (по имени первооткрывателя этого метода — X. Карри [3]). 4.1.2. О СКОБКАХ Слишком большое число скобок затрудняет вос- приятие выражения. Поэтому желательно сократить их число настолько, чтобы не было двусмысленности выражения. Например, в выражении ((+3)5) мож- но опустить внутренние скобки и представить его в виде (+3 5). Кроме того, можно опустить и внеш- ние скобки и представить в виде + 3 5. В качестве других примеров: ((((a b)c)d)e) можно представить как а b с d е, a (/((+4)3) ((gx)i/)) можно предста- вить как (/(+ 43) (g х у)) или /(+4 3) (gx г/). 4.1.3. ВСТРОЕННЫЕ ФУНКЦИИ И КОНСТАНТЫ Далее будут использоваться встроенные функции и констайты, Например арифметические операторы типа +, —, X, /, целочисленные значения (0, 1, 2, ...), логические операторы типа И, ИЛИ, НЕ, ло- гические значения (истина, ложь), последователь- ности символов (’a’, ’dog’, ...) и др. Например, опе- ратор «—» и правило редукции И могут быть ис- пользованы в следующих выражениях: (—62)—>4 (и истина ложь)—ложь Кроме того, функция условия if (если) может быть использована как встроенная функция, с по- мощью которой правило редукции определяется сле- *> Другое название — оптимизация Карри.—Прим, перев.
Редукционные машины 137 дующим образом: (if true Ei Е2)->Е[ (if false Ei E2)-+E2 Для обращения co структурами данных здесь ис- пользуются встроенные функции cons, head, tail (они соответствуют функциям cons, car, cdr языка Лисп), с помощью которых правило редукции определяется следующим образом: (head (cons а b))->a (tail (cons a b))->b Аналогично языку Лисп в a-исчислении исполь- зуется пустой список (nil) в качестве константы. На практике в целях повышения эффективности системы лямбда-исчисления при необходимости мо- гут быть введены дополнительно специальные встро- енные функции. 4.1.4. ЛЯМБДА-АБСТРАКЦИЯ В лямбда-исчислении можно определять новые функции, используя для этого механизм, который на- зывается лямбда-абстракцией. Лямбда-абстракция — это одно выражение, определяющее функцию. На- пример, выражение (КХ' + х 1) определяет функцию прибавления к переменной х единицы. Хх показывает, что это выражение являет- ся лямбда-абстракцией, формальным параметром ко- торой является х. Выражение, которое следует за точкой, в данном случае это (+х1), называется те- лом лямбда-абстракции. Телом лямбда-абстракции может быть любое выражение. Тело лямбда-абстрак- ции — это максимальное выражение после точки. Например, в лямбда-выражении (А.х.А.1/. + (Х х у) (J у х))(3 7) тело лямбда-абстракции есть не + и не + (Х*{/), а +(Х ху) (/ух).
138 Глава 4 Если упорядочить все вышеизложенное, то син- таксис лямбда-выражения можно задать следующим образом, используя для этого метод описания Бэкуса. (выражение) | (константа) | (переменная) | (выражение) (выражение) | Л (переменная), (выражение) 4.2. СЕМАНТИКА ЛЯМБДА-ИСЧИСЛЕНИЯ Используя лишь описанный выше метод редукции, нельзя смоделировать обычное лямбда-исчисление, включающее лямбда-абстракцию. В данном разделе рассмотрены три правила преобразования лямбда- выражений. Но сначала речь пойдет о переменных лямбда-выражения. 4.2.1. СВЯЗАННАЯ И СВОБОДНАЯ ПЕРЕМЕННЫЕ Рассмотрим следующее лямбда-выражение: (Хх, + х у) 3 Для оценки этого выражения необходимо, чтобы у уже имело какое-либо значение. Что касается х, то из записи %х ясно, что это формальный параметр, и когда лямбда-выражение применяется к аргументу 3, то его значение задается как 3. Таким образом, переменная, которая явно является формальным па- раметром (обозначенным стоящей впереди буквой %), называется связанной переменной, и в случае приме- нения лямбда-выражения определение ее значения называется связыванием переменной и значения. В отличие от нее переменная, не связанная с %, на- пример у, называется свободной переменной. Обычно значение свободной переменной некоторого лямбда- выражения определяется во внешнем выражении, ко- торое включает это лямбда-выражение, поэтому зна- чение лямбда-выражения определяется в зависимости от этого выражения.
Редукционные машины 139 Если для некоторой переменной существует лямб- да-выражение, которое либо включает эту перемен- ную, либо связано с ней, то эта переменная являет- ся связанной переменной, в противном случае — сво- бодной переменной. Например, в выражении Ьх, + ((Л.1/. + у 2) 7) X хну являются связанными переменными, az — сво- бодной переменной. Обратите внимание на тот факт, что переменная, описанная одним и тем же символом, может быть как связанной, так и свободной в зависимости от место- положения ее в выражении. Например, в выражении + x((U +х 1) 4) первая переменная х является свободной, а вторая — связанной переменной (обратите внимание на тот факт, что это совершенно различные переменные). 1. Определение свободной переменной (1) Переменная х является свободной в выраже- нии, состоящем только из нее самой. (2) Переменная х является свободной в выраже- нии Е или выражении F, <=> х — свободная переменная в выражении (EF). (3) Допустим, есть две переменные, х и у, и х — свободная переменная в выражении Е, является свободной переменной в выра- жении КулЕ. 2. Определение связанной переменной (1) Переменная х является связанной переменной в выражении Е или выражении F, ч=>х яв- ляется связанной переменной в выражении (EF). (2) Переменные х и у одинаковы, и х является свободной переменной в выражении Е или связанной переменной в выражении Е. ч=>х является связанной переменной в выражении Ьу.Е. (Примечание. -<=> обозначает необходимое и до- статочное условие.)
140 Глава 4 4.2.2. ^-ПРЕОБРАЗОВАНИЕ Как уже говорилось ранее, лямбда-абстракция — это формализм для определения функции. Здесь не- обходимо пояснить, что такое применение функции, определенной лямбда-абстракцией, точнее, что такое правило применения этой функции к аргументу. На- пример, в выражении (Лх. +х 1) 4 записаны последовательно лямбда-абстракция (Кх9 + + х1) и аргумент 4, и эта запись означает, что лямбда-абстракция (Лх. + х 1) применяется к аргу- менту 4. Правило этого применения является простым и заключается в следующем. «Результатом применения лямбда-выражения к аргументу является тело выра- жения (называемое реализацией (instance)), полу- ченное путем замены связанной переменной (фор- мального параметра) лямбда-абстракции (которая в теле лямбда-выражения является свободной перемен- ной) на аргумент». В приведенном выше примере при замене х на 4 получим выражение (+4 1). Это правило преобразо- вания называется ^-преобразованием. Редукция с по- мощью p-преобразования описывается с помощью символа -> следующим образом: (Лх. + х 1) 4->+ 4 1 Рассмотрим простые примеры p-преобразования: (Лх. + х х) 5-> + 5 5 ->10 (Лх.З) 5->3 МУ./У *))2 у 2) & ->/6 2 ->3
Редукционные машины 141 Как будет показано в следующем примере, аргу- ментом может быть любое выражение: (Л/.f 3)(Лх. + х 1)->(Лх. +х 1) 3 -> + 3 1 —>4 При замене связанной переменной на аргумент необ- ходимо обратить внимание на следующий факт. Одно и то же имя может быть присвоено как связанной, так и свободной переменной, но операцию замены нельзя проводить для переменной, которая является связанной в теле лямбда-выражения. Например, в процессе редукции (Лх.(Лх. + (- х 1))х 3) 9 - >(**. + (- х 1)) 9 3 - ++ (— 3 1) 9 - >1 1 в теле лямбда-выражения (Лх.+ (—х 1))хЗ самая первая переменная (подчеркнутая) является связан- ной, поэтому при первом p-преобразовании она не была объектом замены. Обычно в лямбда-выражении, имеющем вложен- ную структуру, например (Лх.(Лу.(Лг. £))), можно опустить скобки, при этом в полученном пред- ставлении (Лх. Кул Е) неоднозначного толкования не возникает. Несколько усложним p-преобразование и рассмот- рим пример обработки структуры д шных. Упомяну- тые выше в качестве встроенных функций функции cons, head, tail не обязательно являются таковыми, их можно определить с помощью лямбда-абстракции сле- дующим образом: cons = (Ла. Л&. Л/. f а Ь) head = (Ле. с (Ла. Л&. а)) tail = (Ле. а (Ла. Л&. Ь))
142 Глава 4 Эти лямбда-абстракции удовлетворяют правилам редукции cons, head, tail, описанным выше. Напри- мер, head (cons р q) = (Лс. с (Ла. kb. а)) (cons р q) ->(cons р q)(ka.kb.d) = ((Ла. ЛЬ. Л/. f a b)p q)(kaukbua) Р q)(ka.kb.a) (Ла. ЛЬ. а) р q -+W,p) q ->Р 4.2.3. ПРЕОБРАЗОВАНИЕ, РЕДУКЦИЯ, АБСТРАКЦИЯ Использование p-преобразования,описанного в пре- дыдущем разделе, в обратном порядке, например (Лх.+х 1) 4<-+ 4 1, называется p-абстракцией. -<---это символ абстрак- ции, а ->—символ редукции. Обычно р-преобразова- ние означает либо абстракцию, либо редукцию и обозначается двунаправленной стрелкой Кроме того, для Того чтобы подчеркнуть, что это преобра- зование является именно p-преобразованием, под стрелкой приписывается буква р, например + 4 1 *->(Лх +* 1) 4. 3 P-преобразование используют для того, чтобы по- казать эквивалентность выражений (одинаковость их смысла), несмотря на различия в форме этих выра- жений, обусловленные преобразованием в процессе вычислений. В отличие от этого р-редукцию (->) ис- пользуют для того, чтобы показать процесс лямбда- исчисления. Помимо P-преобразования существуют также а- и ^-преобразования.
Редукционные машины 143 4.2.4. а-ПРЕОБРАЗОВАНИЕ В лямбда-абстракциях (Лх. + х 5) №. + у 5) используются разные связанные переменные х и у, однако результаты ^-преобразования, полученные пу- тем применения этих абстракций к любому аргу- менту, одинаковы. Иначе говоря, имя связанной пе- ременной не имеет существенного значения. Таким образом, если допустить регулярное изменение выра- жения так, чтобы не было противоречий между фор- мальным параметром и связанной переменной, то смысл выражения не изменится. Преобразование с изменением имени формального параметра или свя- занной переменной называется а-преобразованием. Пример: (Лх.+ х 5) (Ку, + у 5) Отметим, что новое имя переменной, вводимое при a-преобразовании, не должно использоваться в каче- стве имени свободной переменной в теле исходной лямбда-абстракции, a-преобразование используется для предотвращения возникновения конфликта имён при замене имени в ходе p-преобразования. Например, если выполнить p-преобразование вы- ражения (Лх. Ку* (—ху) у) 4 5) (подчеркнутой его части), то получим №. (Лх. Ку (— х у) у) 4 5 -*№.№.(- У У)) 4 5)-*0 В этом случае первая переменная у (подчеркнутая) является связанной во внутреннем лямбда-выраже- нии, что приводит к неправильному результату. По- этому сначала выполняем а-преобразование: №.(Лх. At/. (— х у) у) 4 5) -*№, (Лх. Az. (— х z) у) 4 5)
144 Глава 4 а затем, используя 0-преобразование, получаем пра- вильный результат: (Ху.(Хх. Xz.(— х z) у) 4 5) -> (Хг/. (Xz. (— у г)) 4 5) -»(Xz.(- 4 z) 5) 4 5) 1 В показанном ниже примере также — при невни- мательном отношении к оценке необходимости вы- полнить сначала p-преобразование— возникает конф- ликт имен, результатом которого является непра- вильный результат: twice = (Xf. Xx. f (f х)) Рассмотрим p-редукцию twice twice twice twice = (Xf, Xx, f (f (x)) twice — ► (Xx, twice (twice x)) = (Xx. twice ((Xf. Xx. f (f x)) x)) - > (Xx. twice (Xx. x (x x))) Этот результат ошибочен. Для получения правиль- ного результата необходимо прежде выполнить «-пре- образование, для того чтобы избежать конфликта по х: twice twice = (Xf. KxJ (fx)) twice - * (Xx, twice (twice x)) - »(Xx. twice ((Xf.Xx. f(f x)) x)) - >(Xx. twice ((Xf. Xz/.f(f y)) x)) - ♦ (Xx. twice (Xx. x (x y))) 4.2.5. ^-ПРЕОБРАЗОВАНИЕ ^-преобразование является эффективным прави- лом преобразования для упрощения сложной %-аб- стракции. Рассмотрим для примера следующие два ° Имеется в виду применение функции twice к значению аргумента, равному также twice. — Прим. ред.
Редукционные машины 145 выражения: (Лх, + 1 х) (+ 1) Если оба этих выражения применить к произволь- ному аргументу, то результатом будет прибавление к этому аргументу единицы. Иначе говоря: (Хх + 1 х) 5->(+ 1 5)—>6 (+ 1) 5 = (+ 1 5)—>6 Другими словами, можно говорить о некотором преобразовании (Ххв + 1х)<-* (+1), учитывающем подобную эквивалентность. Это преобразование носит название т]-преобразования, ^-преобразование эффек- тивно с точки зрения упрощения лямбда-абстракции. Обычно правило ^-преобразования трактуется в следующей форме: «если переменная х не является свободной переменной в выражении F и F обозначает функцию, то (Xxe Fx)+-+ F". 4.2.6. СВОДКА ПРАВИЛ ПРЕОБРАЗОВАНИЯ Попытаемся систематизировать все вышесказан- ное и формализовать правила преобразования. Для формализации введем прежде всего представ- ление замены, а именно: Е[М/х]9 это означает, что свободная переменная х в выраже- нии Е заменяется на М. Определение Е[М/х] х[А4/х] = М с[М/х] = с (где с — любая переменная, отличная от х или константа) (EF) [М/х] = Е[М/х] F[M/x] (Хх. £)[М/х] = Хх Е (Хг/. Е) [А4/х] (у отличается от х) — Е[Л4/х] — если х несвободная переменная 10—1145
146 Глава 4 выражения Е, либо у — несвободная перемен- ная выражения М = kza (E[z/yJ) [Af/x] — в других случаях (здесь 2 —новая переменная, которая не явля- ется свободной в выражениях Е или М). a-преобразование: если у не является свободной пе- ременной в Е, то (Лх. Е) ► (kzu Е[у!х]) p-преобразование: (кхл Е)М++ Е[М/х] ^-преобразование: если х не является свободной переменной в£и£ - это функ- ция, то (Лх. Ех) Е. 4.3. ПОРЯДОК РЕДУКЦИИ Как уже говорилось ранее, выражение обычно содержит несколько редексов, поэтому существует множество порядков редукции в зависимости от того, какой редекс выбирается. Например, редукция вы- ражения (+ (Х4 5) (/8 2)) может выполняться сле- дующими способами: (+ (X 4 5)( / 8 2))->(+ 20( / 8 2) -*(+ 20 4) —>24 либо (+ (X 4 5)( / 8 2))->(+ (х 4 5)4) -4+ 20 4) —>24 либо (+ (X 4 5)( / 8 2)->(+ 20 4) —>24 (обратите внимание, что в последнем случае редук- ция двух частей (Х4 5) и (/8 2) выполняется одно- временно). Кроме того, необязательно, чтобы все выражения имели нормальную форму. Иначе говоря, редукция не всегда выполняется конечным числом операций. На-
Редукционные машины 147 пример, редукция выражения (D D), где D = (Xxexx), продолжается бесконечно: (D D) = (Лх. х х) (Лх. х х) ->(Лхш х х)(кХ'Х х) ->(Лхшх х)(кхах х) Это соответствует бесконечному циклу в программе процедурного типа. Обычно от способа выбора редекса зависит воз- можность определения нормальной формы. Напри- мер, если для выражения (U3)(DD) сначала выполняется редукция (DO), то из-за того, что это выражение не имеет нормальной формы, про- цесс редукции получается бесконечным. Если же пе- ред редукцией (D D) применить лямбда-абстракцию (Лх.3) к аргументу (DD), то сразу же получим нор- мальную форму 3. Таким । образом, для определения нормальной формы очень важное значение имеет способ выбора редекса. ' Итак, относительно способа выбора редекса и по- лученной нормальной формы возникает вопрос: рав- ны или нет нормальные формы, полученные из одного выражения двумя разными порядками редук- ции? Ответ на этот вопрос дает теорема (ы) Чер- ча — Россера. Теорема Черча-Россера I. Допустим, что Ei ++ Тогда существует выраже- ние £*, такое, что Е\-+Е, Е2-+Е. Из этой теоремы вытекает следующее утверж- дение. Утверждение Никакое выражение нельзя преобразовать в две разные нормальные формы (с точностью до а-пре- образования). ю*
148 Глава 4 Это утверждение показывает, что для любого процесса редукции, которая заканчивается при ко- нечном числе операций, получается одна и та же нормальная форма. Таким образом, процесс редук- ции имеет важное свойство, которое формулируется в виде следующей теоремы. Теорема Черча-Россера II Допустим, что £,i->E2 и Е2 является нормальной формой. Тогда существует редукция нормального по- рядка из Ei в Е2. Эта теорема утверждает, что если существует нормальная форма, то обязательно существует и спо- соб редукции, с помощью которого получается эта нормальная форма (этот способ называется редук- цией нормального порядка). По этому способу сна- чала выбирается крайний левый редекс выражения и в первую очередь выполняется редукция этого ре- декса. Например, в приведенном выше примере (Лх,3)(£) D) сначала был выбран крайний левый ре- декс Хх, что позволило получить правильно нормаль- ную форму. Следующий вопрос касается оптимальности редук- ции нормального порядка, а именно: как получить нормальную форму при минимальном числе шагов? Обычно редукция нормального порядка не является оптимальным способом редукции. Тем не менее из описываемых ниже процессов редукции графов и редукции на основе комбинатора мы узнаем, что ре- дукцию нормального порядка можно оптимизировать. Помимо редукции нормального порядка суще- ствует еще редукция аппликативного порядка. При таком способе редукции выбирается самый внутрен- ний редекс. Преимуществом этого способа является простота управления, когда редукция аппликативного порядка выполняется непосредственно на ЭВМ. Од- нако существенным его недостатком является отсут- ствие гарантии получения нормальной формы. Вер- немся к примеру (Хх. 3) (DD). Если выполняется
Редукционные машины 149 редукция аппликативного порядка, то сначала выби- рается редекс (DD), но в этом случае получить нор- мальную форму нельзя. 4.4. РЕКУРСИВНЫЕ ФУНКЦИИ Важным понятием в функциональных программах является понятие рекурсии. В этом разделе будет рассмотрен механизм обращения с этим понятием в лямбда-исчислении. Прежде всего рассмотрим для примера следую- щую рекурсивную функцию: FAC = (Xn if(= п 0)1 (X n(FAC(— п 1)))). (1) В этом лямбда-выражении присваивается имя и в процессе лямбда-абстракции к этому имени осу- ществляется обращение. Однако в самой системе лямбда-исчисления нет подобной функции определе- ния имени. В лямбда-абстракции используются толь- ко безымянные функции. То есть проблема заклю- чается в том, каким образом представить подобную рекурсию в системе лямбда-исчисления. Ниже рас- смотрен способ этого представления. Сначала выполним 0-абстракцию определения ре- курсии FAC, где FAC = Xn ( FAC ••>) В результате преобразования получим FAC = (А/. (Ал. ( • f ))) FAC и представим его следующим образом: FAC = tf FAC, где Я = ШАл (---/--))) (2) Здесь Н определяется как лямбда-абстракция. Кроме того, обратите внимание на тот факт, что вы- ражение (2) является математическим уравнением, например оно может быть такого же вида, что и х2 — 2 = х. В данном случае лямбда-выражение есть корень этого уравнения.
150 Глава 4 Смысл уравнения FAC = //FAC заключается в том, что когда фукнция Н применяется к FAC, то результатом этого является не что иное, как FAC. При этом FAC называется неподвижной точкой функ- ции Н. У функции может быть несколько неподвиж- ных точек (это очевидно из того, что уравнение х2 — 2 = х имеет два корня, х =—1, х = 2). На- пример, функция (Лх.Ххх), определяющая вторую степень, имеет две неподвижные точки, 0 и 1. Итак, если задать функцию У, такую, что она яв- ляется входом, а ее неподвижная точка — выходом, то это будет выглядеть следующим образом: YH = = H(YH). Здесь У называется комбинатором непо- движной точки. Если предположить, что подобный комбинатор У существует, то решение уравнения (2) можно получить следующим образом, не используя для этого рекурсивное выражение: FAC = YH H = Kf.Kn.if(= п 0) 1 (Xn(f(~ п 1))) Попытаемся убедиться в правильности этого опре- деления путем доказательства, что (FAC 1)—>-1. ЕАС=УЯ1 =Я(УЯ)1 =(Я/.Лп. if (=п 0)1 (♦я(/(-л1))))(УЯ)1 — (Яп. if (=и 0) 1 (♦п(УЯ(—nl))))l -if (=10)1(*1 (УЯ(-И))) -♦1(УЯ0) = *1(Я(УЯ) 0) = ♦ 1((Л/.Лп. if (= п 0) 1 (♦ и (/(—я 1))))( У Я) 0) — ♦1(Ля. if (=«0) 1 (♦я(УЯ(-»1))))0) - *lif (=00) 1 (♦0(УЯ(-0 1))) -♦11 -1
Редукционные машины 151 Таким образом, комбинатор У, такой, что YH = = обычно задается с помощью следующего лямбда-выражения: У = (ЛЛ. (Лх,Л(х.х))(Лх,Л(х х))) т. е. фактически УЯ = (Лй.(Лх й(х х))(Лх.й(х х)))Я - *->(Лх. Н (х х))(кХ'Н(х х)) * ->Я(Лх.Я(х х))(Лх.Я(х х)) < -*Я(У Н) откуда следует, что равенство YH = H(YH) выпол- няется. Таким образом, смысл определения рекурсивной функции, при котором в лямбда-абстракции задается имя, полностью соответствует лямбда-исчислению. Ниже будет показано, что существует способ опи- сания, при котором лямбда-выражению присваивает- ся имя и используется выражение (1), определяющее функцию. Возможен также способ описания, при котором формальный параметр располагается в левой части, например FUNC = (U.X//.£) можно представить так же, как FUNCxy = £'. 4.5. РЕДУКЦИЯ ГРАФОВ Выражение, подлежащее редукции, можно запом- нить в памяти компьютера в виде графовой струк- туры и путем упрощения этой структуры реализовать эффективную редукцию выражения [4]. Кроме того, с точки зрения гарантии окончания вычислений (т. е. если существует нормальная форма, то процесс ре- дукции обязательно завершится) желательно исполь- зовать редукцию нормального порядка, для реали- зации которой также подходит графовая редукция. Самой простой графовой структурой является дре- вовидная структура. В частности, выражение, не со- держащее рекурсии, удобно представлять с помощью
152 Глава 4 древовидной структуры. Листья дерева соответ- ствуют константам, встроенным функциям (+, —, /, X и др.) либо именам переменных. Например, при- менение функции f к аргументу х может быть пред- ставлено графом, показанным на рис. 4.1. Вершина @ на этом рисунке показывает факт применения этой Рис. 4.1. Применение функции. функции. Когда функция методом карриации при- меняется к нескольким аргументам, например (fxi х2 ... хл), то ее можно представить с помощью графа, показанного на рис. 4.2. В данном случае f сначала применяется к Xi, получается функция (fxj), Рис. 4.2. Граф функции. затем эта функция применяется к х2, получается функция ((fxi)x2) и результат применяется к х3. Повторяя эту операцию, в заключение применяем полученную функцию к аргументу хп. Если обозна- чить через а и b любые выражения, а через f—функ- цию, то выражение (f а Ь) можно представить в виде графа, показанного на рис. 4.3. Например, вы- ражение (+(—а&)(Хс(—de))) показано в виде графа на рис. 4.4.
Редукционные машины 15? Рис. 4.4. Граф выражения (+(—a b)(Xc(—d е))). Рис. 4.5 Граф лямбда-абстракции. Рис. 4.6. Граф выражения (consEi Е2). Рис. 4.7. Ячейка cons.
154 Глава 4 Лямбда-абстракцию (%х. тело) можно представить в виде графа, показанного на рис. 4.5. Здесь по- казывает, что ниже этой вершины находится лямбда- абстракция и что формальным параметром яв- ляется х. Граф выражения (consfi^) показан на рис. 4.6, а результатом оценки этого выражения являются структурированные данные (ячейка cons). Ячейка cons показана на рис. 4.7, и она отличается от графа (consfi f2). Символ : означает, что это ячейка cons. 4.5.1. «ЛЕНИВОЕ» ВЫЧИСЛЕНИЕ В процедурных программах, например Паскаль- программах, при выполнении (команды) вызова функции сначала выполняется оценка ее аргумента (реального параметра). Такой способ вызова назы- вается вызовом по значению. Однако поскольку в теле функции не всегда используются все аргументы, то оценка всех аргументов является нерациональной. В данном случае более эффективным является способ выполнения оценки функции без предварительной оценки аргументов в момент, когда возникает необ- ходимость в значении аргумента. Такой способ вызова называется вызовом по необходимости. Однако в про- цедурных программах вызов по необходимости почти не используется по следующим причинам. (1) В процедурных программах при оценке аргумен- та возникает побочный эффект, из-за которого воз- можно получение разных результатов. выполнения программы. Поэтому, когда время оценки аргумента точно не определяется, невозможно правильно опре- делить смысл программы. (2) При использовании стека эффективная реализа- ция вызова по необходимости затрудняется. В функциональных программах оценка при вызове по необходимости выполняется с задержкой, поэтому этот процесс называют «ленивым» вычислением [5, 6, 7]. Напротив, вызов по значению называют «энер- гичным» вычислением. В области функциональных программ ленивое вычисление является очень важ-
Редукционные машины 155 ным понятием. Это объясняется тем, что с помощью ленивого вычисления можно не только избежать не- нужных оценок, но и обрабатывать данные бесконеч- ной структуры, а также бесконечные потоки данных. Механизм «ленивого» вычисления заключается в следующем: (1) Оценка аргумента функции выпол- няется не в момент применения функции, а при вы- полнении функции, когда возникает необходимость в его значении. (2) Оценка аргумента производится только один раз. Иначе говоря, даже в том случае, когда значение аргумента используется в нескольких местах в процессе выполнения функции, оценка его производится только один раз при первом использо- вании, а затем везде используется полученное при этом значение. Ленивое вычисление удобно с точки зрения вычис- лений, однако проблематично с точки зрения скоро- сти выполнения программы. Поэтому на практике используются такие функциональные языки, которые не требуют проведения ленивого вычисления. В по- добных языках при выполнении функций, для опре- деления значения которых требуются значения всех аргументов (эти функции называются строгими функ- циями), используются, например, методы предва- рительного определения значения аргумента при помощи энергичного вычисления либо ленивого вы- числения значений только тех аргументов, для кото- рых оно является очевидным. Примерами языков, предполагающих использование энергичного вычисле- ния, являются языки ML [8] и Норе [9]. Язык Valid, описанный в гл. 5, также относится к языкам этого типа. Существует метод, по которому компилятором анализируется строгость функции, выявляются необ- ходимые аргументы (обязательно используемые ар- гументы) и по отношению к ним выполняется энер- гичное вычисление. К языкам, использующим подоб- ное вычисление, относятся SASL [10], KRC [11], LML [12], Миранда [13] и др. С точки зрения порядка редукции ленивое вычис- ление соответствует редукции нормального порядка, а энергичное вычисление — редукции аппликативного порядка. В модели вычислений потоков данных
156 Глава 4 используется энергичное вычисление — это вычисли- тельная модель, которая параллельно выполняет ре- дукцию аппликативного порядка. 4.5.2. РЕДУКЦИЯ ГРАФОВ Итак, рассмотрим процесс редукции нормального порядка графа. На графе крайний левый редекс рас- познается следующим образом. Если задан граф вы- ражения fE{ Е2Е3... Е (см. рис. 4.2), то система следует от корневого узла вдоль левой ветви до достижения самого левого листа f (рис. 4.8). f может быть данными, встроенной функцией или лямбда-абстракцией, поэтому ниже рассмотрены операции, которые выполняются в каж- дом из этих случаев. Рис. 4.8. Трассировка графа. 1) Данные (численное значение или ячейка cons): в этом случае редукция завершается. Однако при этом необходимо, чтобы п #= 0 (в противном случае данные используются в аргументах ЕХЕ2 ... Еп, что расценивается как ошибка). 2) Встроенная функция от k аргументов: если п, k, то (fEiE2 ... Ek) является крайним левым редексом. Корневая вершина графа (fE\E2 ... Ek) помечается символом редекса ($) (см. рис. 4.9, а). Если п < k, то с этого момента редукция невозможна, поэтому выражение остается без изменений.
Редукционные машины 157 3) Лямбда-абстракция ([ = (Хх тело)): если п 1 (поскольку аргументы заданы), то редексом являет- ся (f£i), т. е. ((%х. тело)£1). Корневая вершина этого графа помечается символом $ (см. рис. 4.9,6). Од- нако если п, = 0, то аргументов нет, редукция с этого момента невозможна, поэтому выражение остается без изменений. а б Рис. 4.9. а —применение встроенной функции; б — применение лямбда-абстракции. Теперь, после того как редекс найден, посмотрим на простом примере, каким образом выполняется редукция нормального порядка на графе: р-редукция (Хх.(+ х х))3->(+ 3 3) При подстановке аргумента вместо формального параметра в случае p-редукции сначала создается копия аргумента (на графе) и рассматриваются спо- собы замены на эту копию. Однако поскольку для создания копии требуются память и время, а кроме того, когда в аргументе содержится редекс, то при редукции нормального порядка с вызовом по необ- ходимости следует выполнять редукцию для каждой копии, этот способ нельзя назвать хорошим. Поэтому
158 Глава 4 вместо него используется способ замены на указатель аргумента (графа) без создания копии. Способ с об- щим графом, основанный на использовании указате- лей, называется способом с общим графом. Например, если рассмотреть выражение(Хх.(+хх)) (maxprime 100000) (на вычисление maxprime 100000 число, меныиее 100000 Рис. 4.10. Принцип редукции с общим графом. (определение максимального простого числа, меньше- го 100000) требуется довольно большое время), по способу создания копии необходимо дважды выпол- нять вычисление (maxprime 100000), а по способу с общим графом — только один раз (см. рис. 4.10). Встроенная функция В случае встроенной функции сначала выполняет- ся оценка аргумента, значение которого необходимо. Например, в случае (+ 6(Х 4 5))
Редукционные машинь 159 Рис. 4.11. Редукция встроенной функции. Рис. 4.12. Редукция графа выражения (Хх.(«/(=хО)(+х(-х 5)) (-6 2)))(Х2 3).
160 Глава 4 сначала для вычисления суммы необходимы значе- ния двух аргументов, поэтому вычисляется произве- дение (X) (см. рис. 4.11). В графовой редукции, если в принципе сущест- вуют два указанных выше механизма редукции, воз- можна редукция сколь угодно сложного выражения. В качестве примера на рис. 4.12 показан процесс ре- дукции следующего выражения: (Лх. (if (= х 0)(+ х(- х 5))(— 6 2)))(Х 2 3). 4.6. КОМБИНАТОРЫ Еще один способ редукции нормального порядка основан на использовании комбинаторов. При этом способе используется несколько простых комбина- торов, с помощью которых все выражения представ- ляются в виде последовательности символов и по- средством операции преобразования символов выпол- няется редукция выражения. В комбинаторах обычно не используется понятие переменной, поэтому в лямб- да-абстракции нет ни связанной, ни свободной пере- менной. Существуют самые различные комбинаторы, однако с точки зрения практической реализации си- стемы редукции простыми являются комбинаторы S, К, I [14], предложенные Д. Тернером. Преобразование с помощью этих комбинаторов определяется следующим образом: s f g x-+f х (g x) К x y->x I x-^x Комбинаторы S, К, I получаются путем преобра- зования соответствующих лямбда-абстракций сле- дующим образом: 1-преобразование Лх. х I К-преобразование Лх.с=>К с(с=/=х) S-преобразование Лх. ехе2 => S (Лх. (Лх. е2) Рассмотрим далее простые примеры.
Редукционные машины 161 (1) Преобразование в комбинаторы S, К, I (Лх. + х х) 5 => S (Лх. + х) (Лх. х) 5 (S-преобразование) =>5(5(Лх. +)(Лх. х))(Лх. х) 5 (S-преобразование) =^S(S(K +)(Лх.х))(Лх. х) 5 (К-преобразование) =>S(S(K +)1)(Лх.х) 5 (1-преобразование) =>S(S(K +)!)! 5 (1-преобразование) (2) Вычисление с помощью комбинаторов S (S (К +)I)I 5 ->S(K +)I 5 (I 5) ^K + 5(I 5)(I 5) 5 (I 5) ->+ 5 5 ->10 Комбинаторы выполняют ленивое вычисление. Это обстоятельство иллюстрируется следующим приме- ром. В случае преобразования выражения Лх. if ecetef с помощью комбинаторов получим S (S (S (К 1ЩЛх. erf) (Лх. е,)) (Лх. erf (в этом читатель при желании может убедиться сам). Поскольку (Лх. erf, (Лх. еД (Лх. erf также можно пре- образовать в соответствующие комбинаторные выра- жения, то, обозначив их через Сс, Et, Ff, получим S (S (S (К if)CrfErfEf 11 — 1145
162 Глава 4 Применяя это комбинаторное выражение к аргу- менту, получим S (S (S (К iV)Ce)Et)Ef х) S(S(K ii)Cc)Et x(Ef х) - >S(K if)Cc x(Et x)(Ef x) - >K if x(Cc x)(Et x)(Ef x) - >if(Cc x)(Et x)(Ef X) Далее, если результат оценки (Сс) является ис- тиной, то оценивается (£/х), а если ложь, то оцени- вается (Efx), однако до этого этапа (Etx)(Efx) по- мещают без оценки. Другими словами это не что иное, как ленивое вычисление. 4.7. ПАРАЛЛЕЛЬНАЯ РЕДУКЦИЯ До сих пор предполагалось, что редукция выпол- няется последовательно по одному редексу. Однако если выражение содержит несколько редексов, то возможно одновременное редуцирование их. Как уже говорилось выше, функциональная программа отли- чается от традиционной процедурной программы (если только сохраняется порядок редукции), и по- скольку результат работы программы не зависит от того, когда осуществляется редукция редекса, то по- средством параллельной редукции всех редексов можно легко увеличить скорость вычислений. Для реализации параллельной редукции подхо- дит представление в виде графа. Рассмотрим редук- цию графов на простом примере. На рис. 4.13, а по- казан граф выражения (Х(+3 5) (—5 2)), однако для облегчения понимания процесса параллельной редукции графов представим его в виде графа, по- казанного на рис. 4.13,6. Из этого графа понятно, что части (+3 5) и (—5 2) можно выполнять неза- висимо (параллельно). В случае параллельной редукции возникает проб- лема синхронизации операций редукции. Синхрони- зация — это определение очередности редукции ре- дексов А и В, существующих в выражении. Например, в рассмотренном выше примере редукция (X---) вы-
Редукционные машины 163 полняется после завершения редукции частей (+ 3 5) и (—5 2). Кроме того, редукцию (+3 5) и (—5 2) можно выполнять параллельно. Таким об- разом, возникает проблема управления очередностью выполнения операций редукции. Управление синхро- низацией в случае графовой редукции выполняется посредством графа. Например, когда графы (+3 5), (—5 2) перезаписываются в соответствующие верши- ны, показывающие данные 8, 3, то возникает редук- ция (Х8 3). Подобный механизм называется ини- циированием, управляемым данными. Понятие пото- ковых машин, рассмотренных в гл. 5, основано на управлении данными. Рис. 4.13. Представление в виде графа выражения (Х(+3 5) (-5 2)). Еще одним большим преимуществом, которым обладает управление синхронизацией с общим гра- фом, является возможность естественной реализации механизма вызова по необходимости, осуществляю- щего однократное вычисление общего выражения. Например, при выполнении (Ax.(if(¥= х 0)(+ х(- х 5))(— 6 2)))(Х 2 3) значение х необходимо в трех местах. Однако в про- цессе графовой редукции, показанной на рис. 4.14, вычисление (X 2 3) производится при выполнении (=/=х0), его результат 6 подставляется вместо графа (Х2 3) и при выполнении (+х(— х5)) используется непосредственно 6.
164 Глава 4 Редукция графов выполняется в две стадии. Пер- вая называется нисходящей стадией, при этом запрос редукции передается от корневой вершины к листьям. Когда запрос редукции достигает листа, наступает восходящая стадия. На восходящей стадии под уп- равлением данных выполняется редукция в направ- лении от листьев к корню. Если опустить первую ста- дию распространения запроса и начать редукцию со второй стадии под управлением данных, то получим редукцию аппликативного порядка. Как будет пока- зано в гл. 5, потоковые машины начинают выполне- ние редукции со второй стадии, т. е. это машины, реализующие редукцию аппликативного порядка (в потоковых машинах часть обработки, соответствую- щая первой стадии, выполняется компилятором и фор- мируется (генерируется) машинный код, управляю- щий выполнением восходящей стадии (потоковый граф)). Особенности редукции графов с точки зрения па- раллельной обработки можно упорядочить следую- щим образом. (1) Графовая структура — это структура, которая позволяет выявить редексы для параллельной редук-
Редукционные машины 165 ции, поэтому она оптимальна с точки зрения выпол- нения редукции. (2) При редукции графов нет необходимости в централизованном управлении операциями редукции (ниже называемыми задачами) каждого редекса, т. е. возможна полностью распределенная обработка. (3) Связь между задачами и управление синхро- низацией можно выполнять полностью унифициро- ванно на основе графа. (4) Состояние обработки (завершение или про- должение вычислений) определяется непосредствен- но по состоянию графа (структуре). Функциональные языки, в основу которых положе- на параллельная редукция с описанными выше свой- ствами, по сравнению с традиционными процедурны- ми языками обладают следующими преимуществами с точки зрения параллельной обработки. (1) В процедурных программах те фрагменты, которые можно обрабатывать параллельно, необхо- димо выявить и описать в виде фиксированных задач. Однако в функциональных программах нет необходимости сознательного описания подобных па- раллельных задач, т. е. в ходе выполнения про- граммы фрагменты, которые можно обрабатывать параллельно (параллельно редуцируемые редексы). извлекаются автоматически и выполняются. (2) В процедурных программах связь между за- дачами и управление синхронизацией должен плани- ровать и описывать сам программист, но обычную параллельную программу, в которой множество задач выполняются асинхронно, весьма сложно описать в виде процедурной программы. При параллельной ре- дукции синхронизация между операциями редукции выполняется автоматически (например, при графо- вой редукции синхронизация выполняется через по- средство общего графа), поэтому при описании функ- циональной программы нет необходимости учиты- вать связь и синхронизацию подобно тому, как это делается в процедурной программе. (3) В процедурных языках спецификацию языка необходимо дополнять специальными функциями для синхронизации или (и) специальными языковыми
166 Глава 4 функциями для описания параллельной обработки, т. е. задач. В функциональных языках в самом опи- сании функций и выражений наряду с фрагментами для параллельной обработки содержится описание связей между ними и синхронизации, поэтому необ- ходимость дополнения функциональных языков сред- ствами описания параллельной обработки отсут- ствует. Таким образом, функциональные программы об- ладают качествами, делающими их пригодными для параллельной обработки, однако необходимо обратить внимание на тот факт, что описание в виде функцио- нальной программы обладает не только высокой па- раллельностью. Если в исходном алгоритме отсут- ствует параллельность, то параллельная обработка невозможна. К типичным алгоритмам, пригодным для параллельной обработки, относятся метод разделе- ния-слияния и метод производителя-потребителя. По первому из этих методов одна задача разбивается на несколько независимых подзадач определенного раз- мера, которые решаются параллельно. Такой подход эффективен, например, при решении проблемы по- иска в задачах искусственного интеллекта. Метод производителя-потребителя предполагает четкое раз- граничение генерации и потребления данных и делает возможной параллельную обработку между произ- водителем и потребителем. Этот метод эффективен в случае производства и потребления больших объ- емов данных. В сфере искусственного интеллекта при- мером этого метода является Generate-and-Test (ге- нерация и проверка). Рассмотрим для примера случаи описания про- граммы, вычисляющей сумму чисел от 1 до 10000 и не содержащей параллельностей, методами разделе- ния-слияния и производителя-заказчика. Исходная программа, не содержащая параллель- ностей (линейная рекурсивная структура): sigma / = if (= i 0) 0 (+ i (sigma (— i 1))) prog = sigma 10000
Редукционные машины 167 Программа, написанная по методу разделения- слияния (нелинейная рекурсивная структура): sigma ij ~ if (= i j) i (+(sigma i k) (sigma (+ k 1) /)) k = div (+ i j) 2 prog = sigma 1 10000 Программа, написанная по методу производите- ля-потребителя (потоковая обработка): intseq i = if (= i 10000) nil (cons i (intseq (+ i 1))) sigma x = if (= x nil) 0 (+ (head x) (sigma (tail x))) 4.8. РЕДУКЦИОННЫЕ МАШИНЫ Ознакомимся с некоторыми примерами редукцион- ных машин. В частности, рассмотрим G-машину как пример последовательных редукционных машин и машину «Алиса» в качестве примера параллельной редукционной машины. Кроме этих машин сущест- вуют также комбинаторные машины, основанные на использовании комбинаторов, и машины с древовид- ной структурой, выполняющие параллельную редук- цию последовательностей (строк) символов, но эти типы машин здесь не рассмотрены. 4.8.1. G-МАШИНА G-машина выполняет с высокой скоростью ре- дукцию графов, используя для этого стековый меха- низм [12]. Несмотря на то что G-машина не имеет специальных аппаратных средств, ее можно создать программным путем на машине, которая с высокой скоростью выполняет операции со стеком (например, машине VAX). Однако для реализации действительно высокоскоростной обработки необходимо разработать специализированные аппаратные средства. В частно- сти, были попытки реализовать аппаратуру G-маши- ны на СБИС методом RISC (компьютер с сокращен- ным набором команд) [15].
168 Глава 4 Ниже в простой форме изложен принцип работы G-машины. G-машина, используя один стек, выполняет редук- цию графов, описанную в п. 4.5.2. Рассмотрим в ка- честве примера процесс выполнения следующего вы- ражения: (X (+ 5 3)(- 5 2)) (1) В самом начале вычислений вершина стека указывает на верхнюю вершину графа (рис. 4.15, а). Сначала анализируется левая ветвь и в стек поме- щаются указатели каждой вершины (обратите вни- мание, что верхняя вершина графа указывает аргу- мент) (рис. 4.15, б). (2) Затем выполняется встроенная функция X- В стеке хранятся два аргумента этой функции :(+ 5 3) и (— 5 2), однако они еще не редуцированы до нор- мальной формы. Поэтому сначала выполняется ре- дукция этих аргументов. (3) Выполняется обработка, аналогичная п. (1), для получения нового выражения из (+5 3). Резуль- тирующее состояние стека показано на рис. 4.15, в. (4) Выполняется сложение. На этот раз оба ар- гумента имеют нормальную форму, поэтому, непо- средственно проредуцировав (+5 3), получим 8 (см. рис. 4.15,г). (5) Таким же путем из (—5 2) получаем 3 (рис. 4.15, д). (6) Выполнив п. (3) — (5), приводим оба аргумен- та функции X к нормальной форме, поэтому можно выполнить редукцию (Х8 3) и получить результат 24 (рис. 4.15, е). Обращение к аргументам осуществляется с по- мощью относительного адреса из некоторой (опор- ной) позиции в стеке. Например, в функции f = (hx.ky. + x у) формальные параметры х и у определяются соответ- ственно прибавлением 1 и 2 к некоторой опорной точ- ке (позиции) стека А. Следовательно, на графе этой функции листья х и у — это указатели входов стека
Редукционные машины 169 А + 1 и А + 2 (опорная точка А стека определяется в ходе выполнения вычислений). На рис. 4.16 пока- Рис. 4.15. Процесс редукции выражения (Х(+5 3) (—5 2)). Рабочая область в ходе выполнения тела функции f ►х: А + 1 у: А + 2 А + 1 А + 2 Опорный адрес А 8 Рис. 4.16. Механизм обращения к формальным параметрам. зан пример применения функции для аргументов 5 и 8 (/5 8).
170 Глава 4 4.8.2. МАШИНА «АЛИСА» Параллельная редукционная машина способна одновременно редуцировать множество редексов с помощью множества процессоров. Каждый процессор может быть обычным процессором с последователь- ным выполнением вычислений. Если используются процессоры последовательного типа, то каждый из них при выполнении одной операции редукции обра- батывает один редекс. Граф, который является объек- том редукции, хранится в общей памяти, он изме- няется каждый раз при выполнении операции редук- ции. Другое название графа — пакет. Например, выполнение функции f X у Z = (X (+ X у)2), когда она применяется к аргументам 5 2 8, показано на рис. 4.17, а, а когда она представлена в виде па- кетов — на рис. 4.17, б. Абстрактная структура машины «Алиса» приве- дена на рис. 4.18. Каждый процессор независимо от других обращается к памяти пакетов, выбирает от- туда редуцируемый пакет, выполняет операцию ре- дукции и помещает ее результат снова в память. Как видим, принцип работы машины довольно прост, однако для реализации такого процесса редукции используются различные приемы. В частности, для различения состояний редуцируе- мых пакетов используются три режима: активный, ожи- дания и останова. Активный режим показывает, что получен пакет, который является объектом редук- ции. Режим ожидания показывает ожидание прихода аргументов, которые необходимы для выполнения редукции этого пакета. Режим останова показывает, что данный пакет не имеет никакого отношения к редукции. Сначала рассмотрим структуру пакета: Id | Mod | Func | Arg 1 | Arg 2 | ... | Sec | Id — это идентификатор пакета (его адрес). На- пример, идентификатор @п показывает, что этот па- кет хранится по адресу п.
Редукционные машины 171 Рис. 4.17. Принцип редукции в машине ’’Алиса”. а — редукция графов; б — редукция пакета. Рис. 4.18. Абстрактная схема машины ’’Алиса”.
172 Глава 4 Mod показывает режим, в котором находится па- кет. Режимы активный, ожидания и останова обо- значаются символами 1, # пи ~ соответственно. Func показывает функцию этого пакета. Можно использовать встроенные функции (+, —, X, / и др.), а также функции, определенные пользователем, и прочие. Arg указывает аргументы. В качестве аргумен- тов могут быть указатель, указывающий на другой пакет, либо значение (в нормальной форме). Указа- тель пакета с адресом п обозначается \п. Sec — это указатель возврата, который показы- вает, куда нужно возвратить результат редукции. Указатель m-го поля в пакете с адресом п обозна- чается f zz. т. Итак, рассмотрим, как выполняется редукция на конкретном примере. Допустим, что функция f опре- деляется следующим образом: f х у = (Х (+ X у)(— X у)) и рассмотрим выполнение f 4 2. Сначала этот пакет находится в активном режиме: @a!|f |4|2| Этот пакет начинает обрабатываться, и функция f видоизменяется следующим образом: @a!|X|f Ш Н (О @*~| + |4|2| (2) @с~|-|4|2| (3) Затем в активном режиме предпринимается по- пытка редукции пакета (1), но аргументы X еще не имеют нормальной формы, поэтому пакет (1) пере- водится в режим ожидания, а пакеты (2) и (3) — в активный режим: @а#2|Х| I I (1') @ b ! | + | 4 | 2 | f а. 1 | (2') @с!|-|4|2|фа. 2| (3') Имя пакета (1') @а#2 говорит о том, что этот па- кет находится в режиме ожидания двух данных (one-
Редукционные машины 173 рандов). В это время редуцируются пакеты (2х) и (3х). После этого пакет (Г) снова переходит в актив- ный режим: @ а ! | X I 6 | | 2 | и в заключение получаем @ а ~ [ 11121 (здесь I показывает, что этот пакет содержит цело- численные данные). В этом примере вычисления вы- полняются по необходимости. Иначе говоря, при пер- вой попытке выполнить операцию умножения выпол- няется редукция «+» и «—» для получения нормаль- ной формы двух аргументов, необходимых для этого. Однако этот процесс можно выполнить и под управ- лением данных. Если коды тела функции имеют вид @а#2|Х|1| ' (1') в d 11 + | 4 | 2 | | а. 1 | (2') @с!|- | 4 | 2 | ф а. 2| (3') то после раскрытия функции можно сразу же начи- нать редукцию пакетов «+» и «—». Пакеты, указывающие данные, также хранятся в памяти пакетов. Пакет, показывающий целочислен- ные данные п, представляется в формате |/|п|. Структурированные данные, например список cons «а» (cons (cons «с» nil)), представляются в фор- мате @ п\ | cons | "а" | f п 2 | | @ п21 cons | "b" | f п 3 | f nl. 2 | @ иЗ | cons | "с" | f п 4 | f п2. 21 @ п4 | nil 11 f n3. 2 | а матрица [a, ft, с, d] представляется в формате | Array 4 | а | b | с | d | Фактически структура машины включает множе- ство банков памяти пакетов, а связь процессоров с банками памяти выполняется через сеть связи, как показано на рис. 4.19. Для того чтобы можно было
174 Глава 4 Процессоры и пулы пакетов соединяются через сеть связи Рис. 4.19. Структура машины ’’Алиса”. 2М-байт память пакетов PMU — блок управления пакетами ETU — блок передачи на внешние устройства Сеть "Дельта? Рис. 4.20. Структура памяти пакетов. ТР1-5 — транспьютеры с 1-го по 5-й ERU- блок запроса с внешнего устройства ETU -блок передачи на внешнее устройство PRU- блок записи/чтения пакета FDU - блок определения функции Каждый блок выполнен на базе соответствующего транспьютера Сеть "Дельта" Рис. 4.21. Структура процессора.
Редукционные машины 175 управлять режимами пакетов, память является не- простым запоминающим устройством — она снабже- на интеллектуальными функциями. Как показано на рис. 4.20, пакет в каждом режиме разбивается на отдельные области с независимым управлением. Для быстрого выполнения операций с пакетами (т. е. вы- полнения вычислений, замены пакетов, генерации но- вых пакетов и т. д.) процессоры, выполняющие редук- цию, имеют многопроцессорную структуру, как по- казано на рис. 4.21. В прототипе машины «Алиса» память пакетов и процессоры были реализованы на основе транспьютеров, разработанных фирмой INMOS (Великобритания).
Глава 5 ПОТОКОВЫЕ МАШИНЫ ° Функциональные языки делают возможным ясное описание программ и естественное описание парал- лельной обработки, поэтому большие надежды на них возлагались как на средство резкого повышения производительности программного обеспечения [1,2]. Тем не менее попытки реализовать их на существую- щих компьютерах не давали желаемых результатов, поэтому возник вопрос о непригодности этих языков для практического применения. Однако, как уже го- ворилось в гл. 4, функциональные языки имеют структуру, пригодную для параллельной обработки, и если умело использовать эту особенность, то по- явится возможность эффективного выполнения про- грамм, а значит, можно будет устранить проблему, связанную с низкой скоростью выполнения. Потоковые машины имеют очень важное значе- ние с точки зрения архитектуры, которая извлекает внутренний параллелизм функциональных языков и реализует высокоскоростную параллельную обра- ботку. В данной главе рассмотрена архитектура потоко- вых машин как архитектура, которая позволяет с вы- сокой скоростью выполнять программы, написанные на функциональном языке, а также структура и от- личительные особенности потоковых машин. В част- ности, внимание уделено описанию параллельной структуре функционального языка и тому, каким об- разом она выявляется потоковой машиной и исполь- зуется для выполнения программ. В данной главе сначала поясняются принцип об- работки потоков данных и особенности потоковых машин. Затем рассматривается параллельная струк- тура, которой обладают функциональные языки. п Другое название — машины, управляемые данными.— Прим. ред.
Потоковые машины 177 В частности, описывается связь между рекурсивной обработкой и параллельной обработкой, что является самой главной особенностью функционального языка. Кроме того, описывается связь между символьной обработкой (обработкой списков), которая является основой обработки знаний, и функциональным языком, а также параллельной обработкой. Затем говорится о динамической потоковой архитектуре, используемой для реализации рекурсивной обработки и обработки списков, а также об обработке структурированных данных и обработке, связанной с биографией, об- суждаются способы реализации аппаратных средств динамической потоковой машины. 5.1. ПОВОДЫ ДЛЯ РАЗРАБОТКИ ПОТОКОВЫХ МАШИН Как правило, когда речь идет о мотивах, послу- живших толчком к разработке новых архитектур ЭВМ, то называют три основные цели: 1) повышение производительности ЭВМ, 2) повышение производительности программного обеспечения, 3) эффективное использование СБИС-элементов. Однако почти все ЭВМ, существующие в настоя- щее время в мире, относятся к так называемым ней- мановским ЭВМ, т. е. они выполняют вычисления на основе принципа, который определил Дж. фон Ней- ман. Этот принцип требует, чтобы в центральном уз- ле ЭВМ было устройство управления, содержащее программный счетчик, указывающий текущую коман- ду, чтобы команды (указанные программным счет- чиком) последовательно считывались и декодиро- вались по заранее заданному в виде программы алгоритму вычислений, вычисления выполнялись в операционном устройстве и данные последовательно перезаписывались в запоминающее устройство. Особенности принципа работы машин нейманов- ского типа можно упорядочить следующим образом: 1) последовательное выполнение программы при централизованном управлении с помощью програм- много счетчика; 12—114?
178 Глава 5 2) обработка данных с перезаписью памяти (и регистров). При таком способе обработки создать новый компьютер, удовлетворяющий перечисленным выше требованиям, было очень и очень сложно. Прежде всего при последовательной обработке в неймановской машине скорость обработки определя- лась быстродействием элементов, что ограничивало производительность ЭВМ. Поэтому для реализации высокой производительности при существующем ограничении на скорость обработки, обусловленной элементной базой, ничего не оставалось, как исполь- зовать параллельную обработку. Кроме того, в программировании, основанном на концепции перезаписи памяти (побочного эффекта), соответствие между переменной и данными, которые являются ее значением, не обязательно определено однозначно и порядок перезаписи оказывает боль- шое влияние на смысл программы. Это является при- чиной возникновения ошибок в программе, поэтому при составлении программы нужно быть предельно внимательным. В результате все это приводит к сни- жению производительности программного обеспече- ния. В этой связи возникла необходимость отказа от подобной концепции перезаписи памяти и соответ- ствующего алгоритма, а для этого важным является функциональный язык, основанный на понятии функ- ции, показывающей отношения между данными. Кроме того, возникла необходимость в архитектуре ЭВМ, способной эффективно выполнять функциональ- ную программу. Благодаря небывалому прогрессу в технологии БИС в последние годы появились интегральные схе- мы со сверхбольшим уровнем интеграции (СБИС). Логическую схему, содержащую несколько сотен тысяч вентилей, удалось разместить на одном кристал- ле СБИС, однако разработка архитектуры ЭВМ, эф- фективно использующей множество подобных СБИС- элементов, является отдельной сложной задачей. В централизованной системе неймановского типа, в которой всеми операциями управляет центральное устройство управления, сложно добиться эффектив-
Потоковые машины 179 ной работы множества процессоров, поэтому в целях органической связи большого числа СБИС-процессо- ров и эффективной работы их возникла необходимость в разработке архитектуры, позволяющей несложным путем реализовать высокоскоростную параллельную обработку и распределенную обработку. Предполагается, что архитектура потоковой ЭВМ отвечает этим требованиям, поэтому повсеместно ве- дутся разработки и исследования этих архитектур. 5.2. ПАРАЛЛЕЛЬНАЯ ОБРАБОТКА И ФУНКЦИОНАЛЬНЫЙ ЯЗЫК В качестве удобного описания параллельной об- работки подходит описание программы, основанное на понятии функции (отображения). Особенности функциональных программ можно упорядочить сле- дующим образом. (1) Программа составляется на основе математи- ческих функций и алгебраических понятий. Принцип подстановки, характерный для традиционных проце- дурных языков, отсутствует, и переменные обладают алгебраическими свойствами. Иначе говоря, перемен- ная — это имя, указывающее значение, и ссылка к ячейке памяти не осуществляется. (2) Значение функции однозначно определяется значением входного аргумента. Поскольку операция подстановки отсутствует, а следовательно, отсут- ствует и побочный эффект, то при выполнении неко- торой функции на ее результаты не оказывает нега- тивного влияния процесс выполнения другой функ- ции. Следовательно, выполнения функций являются взаимно независимы, а значит, возможна парал- лельная обработка. (3) Соединение и синтез функций выполняются просто, и можно использовать концепцию функции высшей ступени, аргументом которой является функ- ция и значением также является функция. Благодаря использованию функций высшей ступени становится возможным простое и четкое описание программы. (4) При обработке структурированных данных, такйх, как списки, векторы и записи, сами структури- рованные данные используются в качестве одного 12*
180 Глава 5 значения. Иначе говоря, аргументом функции яв- ляются структурированные данные и в качестве зна- чения также возвращаются структурированные дан- ные. В тех случаях, когда часть структурированных данных модифицируется, генерируются новые дан- ные, в которых модифицируемая часть создается за- ново, а остальные части просто дублируются. Ниже рассмотрен пример функциональной про- граммы,. В этой программе определяются все мар- шруты от начальной точки (start) до цели (goal) (рис. 5.1). Функция р search (поиск) осуществляет поиск маршрута от точки р до цели, и если таковой найден, то ответом являются сообщение success (ус- пех) и маршрут от точки р до цели (который пред- ставлен списком). В противном случае выдаются со- общение failure (отказ) и пустой список (nill). Кро- ме того, функция try (попытка) управляет поиском для каждого элемента q множества начальных точек. ([а, Ь\ в нижеприведенной программе означает cons(а,6)). function search (/>) return (message, list) — if />-“goal” then (“success”, [A nil]) elsif p=“blackhole” then (“failure”, nil) else (if /—“success” then (t,[p.path]) else (/, path) Where q = successor (/>), (/, path)-try (<?)). function try (q) return (message, list) =if null (?) then (“failure”, nil) else (if t— “success” then (/1, [pathl. path2j) else (/2, path2) where (/1, pathl)-search(head (q)), (/2, path2) “try(tail (?))). Рассмотрим несколько подробнее структуру па- раллельной обработки функциональной программы. Все структуры параллельной обработки можно раз- делить на два больших класса: параллельного выпол- нения программы и конвейерного выполнения про-
Потоковые машины 181 граммы [4, 6]. Параллельное выполнение возможно в том случае, когда функции взаимно независимы и не имеют зависимости от данных. Конвейерное выпол- нение возможно в случаях конвейерной обработки последовательностей данных типа потоков или спи- сков между функциями, имеющими отношения зави- симости от данных. В обычной программе параллель- ное и конвейерное выполнения смешаны и она имеет структуру, в которой они переплетены сложным образом. (1) Параллельное выполнение программы • Параллельная оценка аргументов функции Поскольку аргументы функции не зависят от дан- ных и взаимно независимы, то возможно параллель- ное выполнение их оценки. • Параллельная оценка списков или элементов массива Поскольку списки и элементы массива не зависят от данных и взаимно независимы, то возможны па- раллельный доступ и их обработка. (2) Конвейерное выполнение программы • Конвейерная обработка с участием блока, при- меняющего функцию, и тела функции Благодаря параллельной оценке аргументов функ- ции заранее определенные значения пересылаются в тело функции и выполняется, ее вычисление, кроме
182 Глава 5 того, значения, определенные в теле функции, также непосредственно передаются в блок их применения и посредством продолжения выполнения в применяю- щем блоке становится возможной параллельное вы- полнение в блоке, применяющем функцию, и теле функции. • Конвейерная обработка, включающая генера- цию списков (потоков) или массивов и их исполь- зование. При обработке структурированных данных типа списков или массивов возможно параллельное выпол- нение на генерирующей и использующей стороне по- средством передачи части данных в процессе их генерации (не ожидая всех структурированных дан- ных) использующей стороне. Классическим примером параллельной обработки является метод разбиения со слиянием. Например, программа, вычисляющая сумму квадратов чисел от 1 до п, по методу разбиения-слияния имеет следую- щий вид: function sigma (i, j) return (integer) = if i=j then i ♦ i else {sigma (*, k)+sigma (k+1, j) where k=(z +»-r 2} Кроме того, в предыдущей программе поиска мар- шрута также возникает эффект разбиения-слияния. Поскольку функции search (head (q)) и try (tail (q)) можно выполнять параллельно, то в ходе выполнения функции try можно повторно выполнять функции search и try. Благодаря тому что функция search выполняется рекурсивно любое число раз, функция поиска выполняется почти параллельно для каждого конечного узла q и узла successor (преемник) и по- средством разбиения со слиянием маршруты, в кото- рых узел q является начальным, определяются парал- лельно. Классическим примером конвейерной обработки является одновременное выполнение с участием про- изводителя и потребителя. Например, в следующей программе функция consumer (потребитель) и функ-
Потоковые машины 183 ция producer (производитель) работают совместно, и когда producer генерирует ряд квадратов чисел 1, 4, 9, 16, 25 ..., то consumer последовательно прини- мает квадраты чисел, которые являются выходами функции producer, и одновременно вычисляет их сумму. Рис. 5.2. Потоковая обработка. Схема этой программы показана на рис. 5.2. {consumer (х, 0) where х=producer (1)} where function producer (0 return (stream) =0* ♦ producer (f+1)). function consumer (x, s) return (integer) = if endof-stream (x) then s else {consumer (v, s + i) where (i, y)=x). Ниже приведен пример параллельной программы, определяющей последовательность простых чисел. function primnum ( ) return (list) = {sieve (яг) where m=intseq (2)}. function intseq (i) return (list) = (/, intseq (г+ 1)), function sieve (m) return (list) = (head (яг). sieve (delete (head (яг), tail («)))). function delete (яг, n) return (list) if remainder (head (я), яг)=0 then delete (яг, tail (и)) else (head (и), delete (яг, tail (я))). Здесь функция primnum определяет бесконечную последовательность простых чисел.
184 Глава 5 Функция intseq (г) генерирует последовательность целых чисел г, /+ 1, ... в виде потока данных, одно- временно функция sieve (ап) на входе consumer из- влекает по одному данные потока т, начиная с пер- вого, и умножает его на предыдущее число. 5.3. ОБРАБАТЫВАЮЩИЕ МОДЕЛИ ПОТОКОВОГО ТИПА В данном разделе рассматривается, каким обра- зом при помощи потоковой обработки выявляется па- раллельная структура, которую имеют рассмотрен- ные ранее функциональные программы [4]. Сначала дается определение потоковой программы, затем упорядочиваются особенности потоковой обработки и демонстрируется, каким образом параллельная струк- тура, которую имеет функциональный язык, преобра- зуется в потоковую программу. 5.3.1. ОПРЕДЕЛЕНИЕ ПОТОКОВОЙ ПРОГРАММЫ Потоковая программа описывается в виде ориен- тированного графа, вершины которого (называемые акторами) показывают операции и управление, а дуги соединяют между собой вершины. Будем считать, что вершина имеет п входных дуг и т выходных дуг, причем т, п 1. Число входных- выходных дуг вершины определяется в зависимости от способа реализации. Например, если считать, что арифметические операции над комплексными чис- лами входят в элементарные операции (некоторой) вершины, то получается, что система имеет вершину элементарных операций с 4 входами и 2 выходами (см. рис. 5.3, а), а если разложить их еще на опера- ции с вещественными числами, то можно будет реа- лизовать систему с помощью комбинации вершин элементарных операций с двумя входами и одним выходом, как показано на рис. 5.3,6. Обычно вер- шину с п входами и т выходами можно реализовать при помощи комбинации примитивных вершин, имею- щих максимум два входа и выхода. Будем считать,
Потоковые машины 185 что примитивными вершинами являются изображен- ные на рис. 5.4. Операция примитивной вершины выполняется только при поступлении всех фишек (данных) из входных дуг (это называется активацией вершины). Исключение составляют вершины слияния и арбит- ража. В случае разделения двух входных дуг одной а б Рис. 5.3. Примеры операций с функциями высших ступеней (сло- жение комплексных чисел). a — представление в виде вершины элементарной операции; б — представ- ление операции сложения вещественных чисел в виде вершины элемен- тарной операции. вершины одна из них называется левой входной вер- шиной, а другая — правой входной вершиной. Кроме того, дуга, по которой поступают данные, являю- щиеся, объектом обработки, называется дугой данных, а дуга, по которой течет поток сигналов управления, называется дугой управления. Одни и те же данные в зависимости от вершины могут использоваться в ка- честве объекта обработки и в качестве сигналов управления. 1. Операционная вершина (1) Двухвходовая операция: вершина с двумя вхо- дами и одним выходом. Входные дуги являются ду- гами данных. Операции выполняются с данными, по- ступающими с левой и правой дуг, результат опера- ции выводится через выходную дугу.
186 Глава 5 (2) Одновходовая операция: вершина с одним входом и одним выходом. Входная дуга является ду- д е ж 1 1 Дуга данных -о— • Дуга управления з и Рис. 5.4. Примитивные вершины. а — двухвходовая операционная вершина; б — одновходовая операционная вершина; в — вершина ветвления; г — вершина слияния; д — TF-комму- татор; е — Т-коммутатор; ж — F-коммутатор; з — вентиль; и — арбитр. гой данных. Операция выполняется с входными дан- ными, результат операции выводится через выходную дугу. К элементарным операциям в зависимости от цели обработки могут относиться операции сравне-
Потоковые машины 187 ния, логические операции, операции с целочислен- ными значениями, операции со строками символов, векторные операции, операции со списками и др. 2. Вершина ветвления. Вершина с одним входом и двумя выходами. Осуществляются копирование входных данных и вывод их через две выходные дуги. Путем комбинации таких вершин можно строить вер- шины ветвления с одним входом и т выходами, по- этому в приводимом ниже описании вершины с одним входом и т выходами используются в качестве при- митивных. 3. Вершина слияния. Вершина с двумя входами и одним выходом. Данные поступают только с какого- нибудь одного из двух входов. Входные данные без изменения подаются на выход (так же, как и в слу- чае с вершиной ветвления, вершина слияния с вхо- дами и одним выходом используется в качестве при- митивной). 4. Вершина управления. (1) TF-коммутатор: вершина с двумя входами и двумя выходами. Левый вход — это дуга данных, а правый — дуга управления (логические данные). Если значение правого входа — истина (Т), то дан- ные левого входа выводятся через левый выход, а если значение правого входа —ложь (F), то они выводятся через правый выход. (2) Вентиль: вершина с двумя входами и одним выходом. Левый вход — это дуга данных, а правый вход — дуга управления. Данные левого входа выво- дятся через выходную дугу. (3) Арбитр: вершина с двумя входами и двумя выходами. Все дуги являются дугами данных. Пер- вые прибывшие данные от двух входов выводятся через левую выходную дугу, а другие (прибывшие впоследствии) данные выводятся через правую вы- ходную дугу. Среди остальных вершин только арбитр имеет биографическую зависимость. Кроме того, ак- тивация вершины происходит в момент прихода дан- ных с какого-либо одного входа. Потоковая про- грамма представляется с помощью ориентированного
188 Глава 5 графа, в котором подобные вершины объединены дугами, и имеет несколько входных и выходных пор- тов. Выполнение потоковой программы начинается при поступлении данных в порт ввода, а результат выполнения выводится через порт вывода. 5.3.2. ОСОБЕННОСТИ ПОТОКОВОЙ ОБРАБОТКИ Обработка при помощи потоковой программы, определенной в предыдущем разделе, называется по- токовой обработкой (обработкой, управляемой пото- ком данных). Потоковая обработка, судя по определению, дан- ному в предыдущем разделе, базируется на принципе выполнения программы, называемом управлением данными. Принцип управляемости потоком данных гласит: «Все операции выполняются только при нали- чии всех операндов (данных), необходимых для их выполнения». В программе, используемой для пото- ковой обработки, описывается не поток сигналов управления, а поток данных. Обработка, управляемая потоком данных, исходя из описанного выше принципа, отличается от обработки неймановского типа следующими мо- ментами. (1) Операцию со всеми операндами (с имеющи- мися операндами) можно выполнять независимо от состояния других операций, т. е. появляется возмож- ность одновременного выполнения множества опера- ций (параллельная обработка). (2) Обмен данными между операциями четко определен, поэтому отношение зависимости между операциями обнаруживается легко (функциональная обработка). (3) Поскольку управление операциями осуществ- ляется посредством передачи данных между ними, то нет необходимости в управлении последователь- ностью выполнения и, кроме того, нет необходимости в централизованном управлении (распределенная об- работка). (4) В программе, управляемой потоком данных, нет понятия адреса памяти, поэтому отсутствуют
Потоковые машины 189 проблемы, связанные с управлением памятью (ис- ключение понятия адреса). Ниже будет показано с помощью конкретных при- меров, каким образом отражаются эти особенности на выполнении функциональной программы. 5.3.3. СТРУКТУРА ПРОГРАММЫ, УПРАВЛЯЕМОЙ ПОТОКОМ ДАННЫХ Рассмотрим на простых примерах потоковые про- граммы для простого выражения, условного выраже- ния, итерации, определения и применения функции, которые являются конструктивными элементами функционального языка. Алгоритм преобразования этих выражений в граф потоковой программы здесь не рассматривается, но это преобразование выпол- няется просто. Кроме того, здесь не приводится детальное опи- сание синтаксиса и семантики функционального язы- ка, однако структура и семантика каждого выраже- ния понимаются легко. 1. Определение значения и ссылка на значение. Обычно значению, которое определяется выражением, присваивается имя переменной и по этому имени осуществляется ссылка на значение. Допустим, что выражение Е определяет п значений с помощью имени переменной (r/i,r/2, ...» Уп). Тогда имеет место представление (У\, Уч, , уп) = Е{хь хт> Здесь выражение Е<%1, ...» показывает операцию с переменными ... ,хт. Представление потоковой программы для опреде- ления этих значений показано на рис. 5.5. 2. Простое выражение. Каждый элемент этого выражения выполняется безусловно. Потоковая про- грамма представляется в виде простого графа, не имеющего вершин управления. Представление пото- ковой программы выражения Е с обращением к пере- менным Xi, х2, ...» Хт показано на рис. 5.6.
190 Глава 5 Примеры: (1) {(и, v) where х = а*с~ b * d9 у — а * d + b * с, u = xf2 + yf2, v = y/z] (2) {cons (ui, t>i) where (ub u2) = (head (x), tail (x)), (Db V2) = (head ((/), tail (y))} (3) (x, y) = (f(a, H g(a, c)) 3. Условное выражение. Выражение выполняется выборочно в зависимости от того, удовлетворяется Рис. 5.5. Потоковый граф для определения значений. Рис. 5.6. Потоковый граф простого выражения. или нет условие. Потоковый граф условного выра- жения if Р(х1..xk)then Б1 (01....Уп) else £2(zb ...» zm) имеет вершины с коммутаторами и представляется, как показано на рис. 5.7.
Потоковые машины 191 Примеры: (1) z = (if х > 3 then у + 2 else у •— 1) * у (2) if null (х) then у else cons (head (x), app (tail (x), y) 4. Итерация. Выполнение итерации представляется с помощью потоковой программы, имеющей цикли- *1 • •. х* Рис. 5.7. Потоковый граф условного выражения. ческую структуру. Обычно итерация имеет следующее представление: for (xi, ..., хп) initial (еь ..., еп) do if р(хь ..., х„) then £i(xb .... хп) else recur (£2(*ь •••» *л)) Потоковая программа такой итерации представлена на рис. 5.8. Пример: (1) (remainder, quotient) = for (х, у, z) initial (хи, 0, п) do if х > z then {recur (и, v, z) where и = x — zt else (x, y) v = y + 1} Смысл этого выражения состоит в следующем: х, У, z— это переменные цикла с начальными значе-
192 Глава 5 ниями т, 0, п. Пока х > z, будет выполняться {recur (ц, vt z) where и = х — z, v = у + 1}. Здесь recur (и, и, z) означает повторное выполнение выраже- ния, стоящего после оператора do, с использованием значений u, и, z в качестве новых значений х, у, z. 5. Определение и применение функции. Что ка- сается выполнения функции, то этот процесс нужно разбить на два этапа: определение функции и при- менение функции. При определении функции ее тело представляется с помощью потоковой программы, входные аргументы которой являются портом ввода, а возвращаемые значения (обычно допускается мно- жество значений) — портом вывода. Применение функ- ции представляется вершиной Apply (применение), для которой имя функции и входные аргументы яв- ляются входными дугами, а значение функции — вы- ходной дугой. Входные-выходные дуги вершины Apply соответствуют положению входных-выходных портов тела применяемой функции, а сама вершина Apply является моделью (template) тела функции. Когда в вершину Apply поступают входные значения функции, она подставляет их в тело функции и начи- нает ее выполнение.
Потоковые машины 193 Определение функции включает определение име- ни функции, входных аргументов, числа выходных данных и типа данных. Определение функции: function F (хь .... хт) return (typeh ... • • typen) = £<xi, ..., xm) Применение функции: Соответствующая потоковая программа приведена на рис. 5.9. Рис. 5.9. Потоковые графы для определения и применения функции. а — определение функции; б —применение функции. Примеры: Определение функции: function F (х, у) return (real, real) = {(и, v) where u = x + у, -v = x — у} Применение функции: (Xi, x2) = F(a, b) 5. Рекурсивная функция. Функция, в теле которой применяется сама эта функция, называется рекурсив- ной, а потоковая программа рекурсивной функции называется программой с рекурсивной структурой. Среди рекурсивных функций различают непосред- ственную рекурсию (когда в теле функции непосред- ственно используется сама функция) и косвенную 13—1145
194 Глава 5 рекурсию (когда в теле функции, используемой для определения данной функции, используется сама функция). Кроме того, рекурсивные структуры раз- деляют на заключительную рекурсию (когда функция использует сама себя после окончания обработки) и встроенную рекурсию (когда функция себя исполь- зует в процессе обработки). Например, функция search, рассмотренная в разд. 5.2, является косвенно рекурсивной через функ- цию try, а функция try включает заключительную рекурсию. В функциональных программах понятия рекурсивной функции и рекурсивных функций выс- ших ступеней являются особенно важными (в на- стоящее время не найдено эффективных способов реализации функций высших ступеней на потоковых машинах, однако в этом нет практической необходи- мости. Поэтому большинство функциональных язы- ков, имеющих отношение к потоковым машинам, не содержат функций высших ступеней [7—11]. В связи с этим в настоящей книге эти функции не рассмат- риваются). Пример. Функция Аккермана function Ackman (m, n) return (integer) = if m — 0 then n + 1 else if n = 0 then Ackman (rn — 1, 1) else Ackman (tn — 1, Ackman (m, n — 1)) 5.4. ПОНЯТИЯ ЗАПУСКА ФУНКЦИИ И СВЕРХМУЛЬТИОБРАБОТКИ 5.4.1. ЗАПУСК ФУНКЦИИ В СРЕДЕ ПАРАЛЛЕЛЬНОЙ ОБРАБОТКИ В среде параллельной обработки, каковой яв- ляется, например, метод разбиения-слияния, одна и та же функция может быть активирована в несколь- ких местах и выполняться параллельно. Следова- тельно, для параллельной работы этих активаторов необходимо в каждом из них сделать логическую ко- пию тела функции. Кроме того, при выполнении ре- курсивной функции для реализации параллельной
Потоковые машины 195 обработки в гнездовой структуре рекурсий также не- обходима копия. Вопрос, каким образом реализовать физически по- нятие копии тела функции, определяется компромис- сом между стоимостью аппаратных средств, с одной стороны, и производительностью и функциональными возможностями машины — с другой. Для решения этого вопроса предлагаются следую- щие пути. (1) Способ копирования кода: для каждого ак- тиватора делается полная копия кода тела функции. (2) Способ с общим кодом (способ цветной фиш- ки): каждому экземпляру (активатору) присваивает- ся имя (называемое именем экземпляра или цветом), которое разделяет среду обработки для различных данных, а физически означает использование общего кода для активаторов. Управление генерацией, при- сваиванием и удалением цвета осуществляется при выполнении функции. (3) Способ с общим кодом (статический способ): аналогичен способу (2), за исключением того, что управление цветом осуществляется при компиляции, что устраняет издержки при динамическом управле- нии цветом. Способ (3) эффективен в тех случаях, когда основное внимание уделяется производительности, например сверхскоростному выполнению вычислений [12, 13]. Однако этот способ накладывает существен- ные ограничения на функциональные возможности, например, он не допускает использования программ с рекурсивной структурой. Этот способ соответ- ствует статической архитектуре системы цветных фи- шек. В отличие от него способ (2) соответствует ди- намической архитектуре системы цветных фишек [14—17]. Поскольку управление цветом осуществ- ляется динамически, то в данном случае возможно выполнение рекурсивной функции, за исключением функций высших ступеней. Ключевым моментом этого способа является эффективная реализация динами- ческого управления цветом (генерация, удаление, изменение). По способу (1) полностью копируется функциональный код, поэтому, считая этот код 13*
196 Глава 5 объектом обработки, можно динамически определять и использовать результаты частичного выполнения функции в качестве новой функции, а также выпол- нять функции высших ступеней. Способ (1) в зависимости от способа распределе- ния памяти, хранящей код, можно разделить на (а) способ распределения ячеек памяти для каждой команды в программе и (б) способ распределения блоков памяти для нескольких команд или для каж- дой функции. По способу (а) управление возможно для каждой ячейки, и поскольку нет разбиения на блоки, как в способе (б), то возможно получение полной копии кода. Однако здесь возникает проб- лема издержки при управлении памятью и адресации. По способу (б) активатор разбивается на адреса блоков и адрес каждой команды задается в виде «адрес блока + адрес внутри блока». Понятие адреса блока близко к понятию общего кода (2). Фактиче- ски если извлечь из ячейки команды поле операнда и построить новую память (память операндов), а также сократить размер памяти за счет использо- вания механизма ассоциативного доступа, то получим способ (2). Далее обсуждение будет продолжено с учетом идеи динамической архитектуры с общим кодом (2), использующей ассоциативный доступ. 5.4.2. МЕХАНИЗМ ЗАПУСКА ФУНКЦИИ Механизм применения функции (Уь Уч, , = е2, .... е„) показан на рис. 5.10. Потоковый граф стороны, ис- пользующей функцию, общий вид которого показан на рис. 5.10, а, более детально изображен на рис. 5.10,6. В нижеследующем описании формат фишки будет иметь представление (активатор, зна- чение). Вершина запуска функции call инициируется сигналом запуска sig. Допустим, к примеру, что в активаторе in произошел запуск функции. При этом вершина call генерирует новое имя активатора (цвет) in' функции f и фишка <m, in'} передается вершинам
Потоковые машины 197 link, rlink. Вершины rlink, входами которых являются имя вершины у; (/=1, 2, т) применения функ- ции и имя активатора in', вырабатывают фишки </и', </м, у/» и передают их в порты О/ программы тела функции. При этом имя активатора in на ис- пользующей стороне и адрес результата передаются Рис. 5.10. Механизм запуска функции. а — применение функции; б — развернутый вид. вершине return тела функции, которая при этом ак- тивируется. Вершины link каждый раз при поступ- лении значения аргумента х/ (/=1, 2, ..., п) выра- батывают фишки <т', %/> и передают их в порты If тела функции. Вершины return передают значения vk (k= 1, ... ..., т), определенные в теле функции, вершинам ук активатора in. Вершина rins инициируется только после выполнения операций во всех вершинах return и возвращает в систему (машину) текущее имя ак- тиватора in'. Посредством описанного выше механизма возмож- на реализация обмена данными между активаторами
198 Глава 5 в блоках, применяющих функцию, и новыми акти- ваторами. Обратите внимание на тот факт, что благодаря этому механизму становятся возможными (1) параллельная оценка аргументов функции и (2) параллельное выполнение в блоке, применяю- щем функцию, и в теле функции [18]. Если вместо активатора функции рассмотреть про- цессы, работающие под управлением традиционной операционной системы (ОС), каждому процессу при- своить имя и блоки данных для каждого процесса различать по этим именам и составить общую про- грамму, то понятие мультиобработки (мультипро- граммирования) в традиционной среде ОС будет в точности соответствовать понятию цветной фишки. Кроме того, поскольку для каждого активатора функции генерируются параллельные процессы, то единица параллельных процессов (называемая гра- нулярностью) будет гораздо меньше, чем в случае традиционной ОС, и число параллельных процессов увеличится. В этом смысле понятие обработки, управ- ляемой потоком данных, является более глубоким, чем понятие мультиобработки, поэтому ее еще на- зывают сверхмультиобработкой [4, 19]. 5.4.3. ЦИКЛИЧЕСКОЕ ВЫПОЛНЕНИЕ ФУНКЦИЙ С ЗАКЛЮЧИТЕЛЬНОЙ РЕКУРСИЕЙ Программу с заключительной рекурсивной струк- турой, показанную на рис. 5.11, а, можно преобразо- вать в эквивалентную ей программу с циклической структурой (см. рис. 5.11,6). Вершина slink, пока- занная на рис. 5.11,6, соответствует вершине link, за исключением того момента, что начало перемеще- ния фишки является фиксированным. Кроме того, вершина nins служит только для генерации нового имени активатора. В рекурсивной функции активатор создается толь- ко в гнездовой структуре рекурсии, и эти активаторы ожидают выполнения до возвращения значений от активаторов (нижнего уровня), запущенных ими. При заключительной рекурсии значение, поступившее от
<io,vo> a 6 Рис. 5.11. Циклическое выполнение функции с заключительной редукцией (u = f(u0)). а —функция заключительной рекурсии; б — циклическое выполнение.
200 Глава 5 активатора нижнего уровня, никогда не обрабаты- вается, а лишь передается на активатор верхнего уровня. Следовательно, если активатор верхнего уровня передает адрес значения на нижний уровень, то, не ожидая результата от активатора нижнего уров- ня, он самостоятельно завершает обработку и может возвратить в систему собственное имя. Благодаря этому даже при глубокой гнездовой рекурсивной структуре вычисления можно выполнять без труда, используя всего лишь имя активатора. Аналогичный эффект можно получить и для функ- ций, допускающих нестрогость в заключительных операциях (рекурсии), например при обработке структурированных данных, описанной в следующем разделе. 5.5. БИОГРАФИЧЕСКАЯ ЗАВИСИМОСТЬ И ОБРАБОТКА СТРУКТУРИРОВАННЫХ ДАННЫХ 5.5.1. ОБРАБОТКА СТРУКТУРИРОВАННЫХ ДАННЫХ Ранее указывалось, что отличительной особен- ностью функциональных языков является обработка структурированных данных типа списков и массивов как одного значения. В потоковых машинах также обрабатываются структурированные данные, им со- ответствует фишка, представляющая собой значение подобной структуры. Структурированные данные имеют рекурсивную структуру и обычно представляются в древовидной форме. Вершинам этого дерева соответствуют значе- ния, а ветвям присваиваются имена. Значениями яв- ляются атомарные данные или структурированные данные, например целые и вещественные числа, сим- волы и т. д. Различные структурированные данные, например массивы, списки и т. п., рассматриваются с точки зрения особенностей этой структуры. Обра- ботка данных, имеющих рекурсивную структуру, мо- жет быть описана просто, с помощью рекурсивной функции. При обработке массивов и обработке спи-
Потоковые машины 201 сков (если в деталях выполняемые операции расхо- дятся) используются одни и те же основные идеи (подробности см. ’ в гл. (4)). Сначала рассмотрим обработку данных списка. Среди элементарных операций [20] обработки списков только cons генерирует новые ячейки для со- хранения данных списка, в которые записываются значение head (указатель левой ветви, который в терминологии языка Лисп называется значением саг) и значение tail (указатель правой ветви, соот- ветствует значению cdr). Все остальные операции только обращаются к содержимому (head, tail) этой ячейки, но не изменяют его. Следовательно, если в программе, состоящей из таких элементарных опера- ций, входное значение определено, то выходное зна- чение будет определено однозначно. Даже в том слу- чае, когда изменяется часть данных списка, генери- руется новая структура (значение), отличная от этой части. Внедрение управления с помощью потока данных в обработку списка имеет следующие преимущества [17, 18]. (1) Благодаря поддерживающей функциональ- ность обработке списка логично появляется возмож- ность добиться высокоскоростной параллельной об- работки. (2) Различные примитивные операции можно вы- полнять лишь на основании отношений, зависящих от данных, поэтому наблюдается хорошая совместимость с потоковой машиной. (3) Параллельное выполнение функций при обра- ботке списков можно реализовать при помощи управ- ления потоком данных. (4) Возможна конвейеризация процессов управле- ния потоком данных и операций с памятью при обра- ботке списков. Нужно отметить, что при обработке структуриро- ванных данных типа списков можно запараллелить выполнение функций генерирующей стороны и ис- пользующей стороны путем передачи части сгенери- рованных структурированных данных в функцию ис- пользующей стороны (это называется «энергичным»
202 Глава 5 вычислением1) структурированных данных [18, 21, 22]). В частности, посредством «энергичного» вычис- ления можно реализовать концепцию потоковой об- работки [23—25] при обработке списков. Концепцию «энергичного» вычисления списка можно реализовать с помощью механизма lenient Рис. 5.12. Реализация механизма. cons [18]. Этот механизм в отличие от обычного ме- ханизма cons сначала сохраняет ячейку cons, а затем возвращает эту ячейку в качестве значения cons (при этом значения полей head и tail можно не определять). Запись значений head и tail ячейки cons выполняется в момент определения этих значе- ний. Для управления синхронизацией считывания/за- писи используется тег, которым снабжается ячейка памяти (способ управления синхронизацией при по- мощи тега используется и для данных массива [26]). На рис. 5.12 показан способ реализации механизма lenient cons. Вершина cons (х, у) разделяется на три примитивные вершины: get cell, write car, write cdr, n Иначе говоря, вычисления в этом случае производятся не тогда, когда в них есть необходимость, а загодя, когда имеется возможность.—Прим. ред.
Потоковые машины 203 в ячейке данных помимо тега garbage (мусор) имеет- ся тег ready (готовность), показывающий поступле- ние значения. Когда операция вершины getcell за- пускается фишкой signal (сигнал), то создается новая ячейка и ее адрес передается вершине, ожидаю- щей результата cons, и вершинам write саг и write cdr. В момент выборки ячейки (get cell) теги head, tail ц ready сбрасываются и доступ к этой ячейке запрещается. Вершины write саг и write cdr иниции- руются только по прибытии операндов, операнды за- писываются в поля head или tail и посредством уста- новки тега ready аннулируется запрет на доступ. Фишка signal, которая является сигналом запуска операции выборки ячейки (get cell), генерируется при открытии функции, включающей эту вершину cons, или блока. В механизме lenient cons даже в том случае, когда значения head и tail определяются активато- ром низкого уровня, значение cons передается зара- нее, без ожидания прихода этих значений, что поз- воляет завершить обработку, поэтому механизм при обработке функций, расположенных в поле tail, поз- воляет выполнять без труда обработку при любой глубине гнездовой структуры рекурсии аналогично случаю с функцией заключительной рекурсии. Это имеет большое значение, например, при обработке бесконечной последовательности данных (потока дан- ных) [6, 25]. При обработке структурированных данных типа массива вместо вершин get cell, write car (writecdr), car (cdr) используются соответственно вершины get- array-area, write-element, read-element. Вершина get-array-area (n) генерирует область массива размером п, (вектор) и передает ее в каче- стве значения. Вершина write-element (a, i, v) уста- навливает значение v в ячейке Z-го элемента мас- сива а и, когда установка завершена, передает сиг- нал done (обслужено) в качестве значения. Вершина read-element (а,/) считывает значение ячейки f-го элемента массива (рис. 5.13). В момент установки области массива тег ready каждой ячейки элемента массива сбрасывается,
204 Глава 5 Рис. 5.13. Обработка данных массива. Рис. 5.14. Программа функции.
Потоковые машины 205 а устанавливается он при выполнении операции записи элемента (вершина write-element). Операция считывания элемента в массив (read-element) задер- живается до установления этого тега. Потоковая программа функции, определяющей сумму векторов с использованием массива данных, которая имеет вид function vect^tim (u, vy n) return (vector) = {for (i) initial (0) do if i = n then w else {recur (i + 1) where write_element (wy i, и (i) + v (i))} where w = get__array_area (n) показана на рис. 5.14. 5.5.2. СПОСОБ РЕАЛИЗАЦИИ СОСТОЯНИЯ В простом принципе управления данными в том случае, когда активизируется вершина, фишка на входной дуге гасится, но если несколько расширить этот принцип, то можно сделать так, что фишка бу- дет сохраняться на входной дуге даже после акти- Рис. 5.15. Перманентная дуга. визации вершины [13]. Такая дуга называется пер- манентной дугой и обозначается символом О, как показано на рис. 5.15. Вершина с перманентной ду- гой имеет собственное состояние. Если в качестве перманентной дуги использовать, например, констан- ту цикла, то можно увеличить эффективность обра- ботки (перманентные дуги, показанные на рис. 5.14, сохраняют имя вектора и верхнее предельное значе- ние индекса в ходе выполнения цикла).
206 Глава 5 5.5.3. УПРАВЛЕНИЕ ПОСЛЕДОВАТЕЛЬНОСТЬЮ ВВОДА-ВЫВОДА Для управления последовательностью, например, ввода-вывода, используются сигналы [4]. Для при- V 9 а б Рис. 5.16. Вершины примитивных операций ввода-вывода. a — ввод; б — вывод. Рис. 5.17. Пример выполнения операции ввода-вывода. мера примитивные вершины, соответствующие вводу- выводу с телетайпа v == input (s), s== output (и),
Потоковые машины 207 показаны на рис. 5.16. Вершина input (ввод) управ- ляется сигналами $, считывает данные из телетайпа и передает их в качестве значения v. Это значение может быть использовано как сигнал для управления следующей вершиной ввода. Вершина output (вывод) после окончания вывода передает сигнал окончания и. На рис. 5.17 показан граф программы, определяющей сумму п входных данных и выводящей это значение. 5.5.4. ОБРАБОТКА НЕОПРЕДЕЛЕННОСТЕЙ И АРБИТР В случае когда данные вводятся с нескольких тер- миналов, невозможно заранее предугадать, с какого терминала данные будут введены в первую очередь. Рис. 5.18. Программа размещения данных в порядке их поступ- ления. Для правильного обслуживания этих терминалов не- обходима не только функция разделения данных от фиксированных правых и левых дуг, но также и функция разделения на ранее введенные данные и данные, введенные позже. Для реализации этой функ- ции необходима в свою очередь специальная прими- тивная вершина, учитывающая биографическую за- висимость. Арбитражная вершина, определение которой было дано в разд. 5.3.1, работает следующим образом: первые введенные данные сразу выводятся на л,е- вую выходную дугу, а следующие введенные данные
208 Глава 5 выводятся на правую выходную дугу. Используя та- кие арбитры, можно организовать вывод данных в по- рядке их поступления, например с четырех входов (см. рис. 5.18). В том случае, когда множество данных располо- жено в одной последовательности, можно использовать понятие потока данных. Например, для правиль- ного обращения с командами, вводимыми с мно- жества терминалов, необходима функция образова- ния потока (последовательности) команд (функция слияния). Это можно организовать при помощи сле- дующей программы (функции) слияния двух потоков с использованием арбитра (обратите внимание на тот факт, что в данном примере имеется ввиду-бесконеч- ный поток): function merge (х, у) return (stream) = {lenientcons (head (u), merge (tail (u), v) where (u, u) = Arbit(x, y)} 5.6. АППАРАТНЫЕ СРЕДСТВА ПОТОКОВЫХ МАШИН Рассмотрим способы реализации аппаратуры об- рабатывающих моделей, управляемых потоком дан- ных, которые были описаны в разд. 5.3—5.5. Из об- суждения, которое велось до сих пор, следует, что в потоковой программе можно описывать всевозможные структуры параллельной обработки. Аппаратные средства потоковых машин нужно проектировать та- ким образом, чтобы за счет разумного использования подобных обрабатывающих структур можно было по- высить производительность. При проектировании по- токовых машин особое внимание уделяется следую- щим моментам. (1) Процессоры и банки памяти, соединенные па- раллельно, должны иметь высокую степень автоном- ности, и скорость обработки нужно повышать за счет их параллельного независимого функционирования. . (2) Производительность можно повысить посред- ством конвейеризации модулей процессоров и памя- ти и эксплуатации их в максимальном режиме.
Потоковые машины 209 (3) Повысить быстродействие средств памяти для высокоэффективной и скоростной обработки структу- рированных данных типа списков и массивов. Обсудим способы реализации аппаратных средств потоковых машин, исходя из перечисленных выше со- ображений. Не вдаваясь в подробности сравнения ха- рактеристик существующих в настоящее время ре- альных машин, рассмотрим пример виртуальной ма- шины с динамической архитектурой, позволяющей обрабатывать рекурсивную структуру, и обсудим способы ее реализации. 5.6.1. ПРИНЦИП ОРГАНИЗАЦИИ АППАРАТНЫХ СРЕДСТВ В случае потоковых машин также используется принцип хранимой программы, и машинное слово представляется в виде графа потока данных. Граф потоковой программы в свою очередь можно пред- ставить с помощью структуры списка связей. На- пример, граф потоковой программы, показанный на рис. 5.19, а, хранится в памяти в виде таблицы, по- казанной на рис. 5.19,6. Принципиальная схема потоковой машины вклю- чает блок управления (CS—control section), в кото- ром хранится потоковый граф и который использует- ся для выборки выполнимых команд, и функциональ- ный блок (FS), выполняющий команду, переданную из CS, и возвращающий результат ее выполнения в CS. Блоки CS и FS, как показано на рис. 5.20, рабо- тают асинхронно и параллельно, обмениваясь много- численными пакетами команд и результатами их выполнения. В пакете результата из блока FS указы- вается адрес команды (адрес назначения, обозначае- мый des), использующий этот пакет. На основании этого адреса блок CS проверяет возможность выпол- нения этой команды. Команды обычно бывают одно- операндные или двухоперандные. В случае двухопе- рандной команды необходимо подтверждение нали- чия двух операндов, и для этого устанавливается тег t. В принципиальной структуре активатор функции создается путем копирования кода. Блок управления 14—1145
210 Глава 5 Рис. 5.19. Пример формы хранения потоковой программы. а — потоковый граф; б — память функционального блока, орс: код команды, орг!, орг2: поле операнда: des: адрес назначения; tag: тег поступления данных (2 бита).
Потоковые машины 211 загрузкой (LC) каждый раз при активизировании функции загружает из памяти программ ее код (LC Рис. 5.20. Принципиальная структура потоковой машины. управляет пустыми ячейками в блоке для кодирова- ния кода). 5.6.2. МУЛЬТИПЛЕКСИРОВАНИЕ БЛОКА УПРАВЛЕНИЯ И ФУНКЦИОНАЛЬНОГО БЛОКА В структуре, показанной на рис. 5.20, можно ожи- дать только параллельное функционирование блоков CS и FS. Здесь рассматриваются методы повышения степени параллелизма посредством мультиплексиро- вания блоков CS и FS. Мультиплексирование может быть выполнено сле- дующими способами. (1) * Полностью распределенная система (рис. 5.21, а): если адрес назначения указывается в форме <имя блока CS + адрес внутри CS>, то это полный адрес и графы потоковой программы можно распределить между всеми блоками CS. Кроме того, путем унификации функций блоков FS можно распре- делить их нагрузку. (2) Система, использующая локальность (рис. 5.21,6): конвейер, состоящий из блоков CS—FS, принимается за обрабатывающую единицу (которая называется процессорным элементом, ПЭ) и из таких 14*
2X2 Глава 5 единиц строится мультиплексированная структура. Для каждого ПЭ назначается локальный програм- мный объект (например, тело функции). Каждый функциональный блок FS имеет средства связи меж- ду процессорными элементами (в частности, связи б Рис. 5.21. Примеры мультиплексирования блоков CS и FS. а — полностью распределенная система; б — система с использованием локальности. для обмена параметрами, требуемыми при выполне- нии функций в тех случаях, когда существует рас- пределение функций). В настоящее время большинство машин, в част- ности Массачусетсского технологического института (МТИ) [14, 27], Манчестерского университета [28] и т. д., выполнено на основе первого метода. Недо- статок этого метода заключается в задержке пере-
Потоковые машины 213 дачи данных, вызванной наличием сети — обязатель- ного компонента для передачи пакетов между бло- ками FS и CS. Однако в основе архитектуры потоко- вых машин лежит передача пакетов между блоками, элемент Рис. 5.22. Пример сетевой структуры (сеть с передачей пакетов). Используется соединение типа процессор — память; любые про- цессоры и блоки памяти расположены на равном расстоянии; распределение доступа к памяти (коммутатор имеет функцию управления нагрузкой). и поскольку это система, высокая производитель- ность которой достигается за счет высокоуровневом конвейерной обработки, то упомянутая выше про- блема является не столь важной. Для решения этой проблемы был использован метод локальности (2), целью которого является устранение. суммарной
214 Глава 5 задержки при передаче пакетов [17]. Рассматривают- ся также иерархические системы, объединяющие си- стемы этих двух типов [12, 19]. 5.6.3. СЕТЕВАЯ СТРУКТУРА Итак, как было сказано выше, основой потоковых машин являются пакетные передачи [29]. Следова- тельно, в качестве сети, соединяющей между собой блоки FS, CS или ПЭ, подходит сеть маршрутизации с многоуровневой комбинацией пакетных коммутато- ров типа 4X4 (в принципе можно 2X2), как пока- зано на рис. 5.22. В данной структуре дальность па- кетных передач между аппаратными модулями оди- накова, поэтому требуются одинаковые затраты на передачу сообщения. Для обеспечения этого в систе- ме (2) (см. (5.6.2)), осуществляющей распределение функций, учитывается расстояние между ПЭ и ис- пользуется либо сеть связи матричного типа [30], реализующая логическую древовидную структуру либо сеть, структура которой показана на рис. 5.23. 5.6.4. СТРУКТУРА БЛОКА УПРАВЛЕНИЯ Недостатком способа копирования кода в струк- туре, изображенной на рис. 6.20, как уже упомина- лось в разд. 5.6.3, являются издержки, связанные с загрузкой кода. Для их сокращения предлагается ме- тод цветной фишки с общим кодом, который к тому же позволяет эффективно использовать память. В си- стеме с общим кодом предполагается, что к моменту выполнения код программы уже загружен в память, поэтому необходимость в блоке LC отпадает. (1) Разделение на память команд и память опе- рандов. Из ячеек команд, хранящихся в основной струк- туре, извлекаются поля операндов и они организуют- ся в виде отдельной памяти. Иначе говоря, осущест- вляется разделение на скелет потокового графа и память для хранения операндов (первый называется памятью команд (ПК), а второй — памятью операн- дов (ПО)). Память команд — это память только для
Потоковые машины 215 Коммутатор пакетов Характеристики коммутатора типа 4x4 Параллельная передача 32 бит Число выводов: 276 (32 х 8 + 20) Время коммутации : 180 нс Скорость передачи пакетов: 128 бит/пакет = 720 нс (180 х 4) Пример структуры с 32 процессорными элементами (РЕ) а b с d е ( 8 h i i k 1 m n о P Рис. 5.23. Пример сети связи между процессорными элементами (ПЭ). чтения, т. е. без перезаписи в процессе выполнения программы. Память операндов может быть использо- вана в качестве регистра данных, поэтому необходи- мо иметь быстрый доступ к этой памяти.
2 Гб Глава 5 6 Рис. 5.24. Хранение программы в памяти команд. а — потоковый граф (без вершины dup); б — пример структуры памяти chaini, chain2 — цепи начала ветвления (указатели); des—адрес назначе ния (указатель); at указывает поле chaini в адресе а.
Потоковые машины 217 Что касается способов соединения ПК и ПО, то здесь могут быть три варианта: (1) ПК расположена после ПО, (2) ПК и ПО расположены параллельно и (3) ПО расположена после ПК. В первом случае сначала осуществляется проверка выполнимости, а затем код команды считывается из ПК. Второй ва- риант имеет целью снижение числа каскадов цикличе- ского конвейера [31]. Третий вариант позволяет при- дать гибкость управлению памятью операндов за счет упреждающей выборки памяти команд. Кроме того, путем размещения внутри ПК лексем можно обой- тись без команды dup [32]. При обработке, требую- щей информации о состоянии, например для сохра- нения постоянных циклов, операций арбитража и т. д. [4, 13, 25], эта информация должна храниться в памяти операндов. Данная управляющая информа- ция задается в качестве атрибута операнда в коде команды и пересылается в ПО. Что касается устра- нения команды dup, то эту проблему можно решить путем сцепления узлов лексем (команд) внутри ПК, как показано на рис. 5.24. 5.6.5. СПОСОБЫ ОРГАНИЗАЦИИ ПАМЯТИ ОПЕРАНДОВ Рассмотрим следующие три способа. (1) ПО организуется из множества блоков и для каждого активатора отводится свой блок. В данном случае номер блока ПО является именем активатора (блоки ПО являются динамически распределяемы- ми). Кроме того, в этом случае ПК разбивается на блоки, каждому блод<у присваивается функциональ- ный код и доступ выполняется в том случае, когда адрес внутри блока ПО совпадает с локальным в бло- ке ПК адресом команды для заданного функциональ- ного кода внутри ПК [33]. (2) Для сокращения размера блока памяти опе- рандов (см. п. 1) используется метод ассоциативного доступа к блокам ПО. При этом нет необходимости в разбиении ПК на блоки, т. е. распределение выпол- няется свободно и каждый функциональный код мож- но пересылать в любое место памяти команд. Для
218 Глава 5 ассоциативного доступа используется ключ <адрес команды в ПК> [17] (см. рис. 5.25). (3) ПО не разбивается на блоки и ассоциативный поиск осуществляется во всей области ПК. Ключом для ассоциативного доступа является <имя активато- ра + адрес команды). В. первом случае доступ к ПО осуществляется как к обычному ОЗУ, однако необходима большая ем- Рис. 5.25. Пример блочной структуры памяти операндов. При доступе к памяти операндов номер блока декодируется по имени активатора in, а ассоциативный поиск внутри блока выполняется по имени вершины /. кость памяти. В третьем способе в качестве механиз- ма ассоциативного доступа используется метод хэ- ширования [15, 31], но здесь имеется проблема из- держек при ассоциативном доступе. Во втором ва- рианте используется смешанный способ доступа по адресу и ассоциативного доступа, и хотя по сравнению с вариантом (3) он позволяет несколько снизить не- эффективность разбиения на блоки, тем не менее он обладает обоими упомянутыми выше недостатками. Для решения проблемы переполнения блоков при вы- полнении программы используется расширенный блок в виде дерева.
Потоковые машины 219 5.6.6. СТРУКТУРА ФУНКЦИОНАЛЬНОГО БЛОКА Для увеличения быстродействия функционального блока можно использовать мультиплексированную структуру, если в этом есть необходимость. Мульти- плексирование может быть следующих двух разно- видностей: с распределением нагрузки и распределе- нием функций. В системе с распределением функций параллельно расположены различные специализиро- ванные устройства, например для выполнения опе- раций с численными значениями, операций пропуска- ния, переключения, управления запуском функций, ввода-вывода, запоминания структурированных дан- ных и т. п. (рис. 5.26). 5.6.7. АРХИТЕКТУРА ПАМЯТИ СТРУКТУРИРОВАННЫХ ДАННЫХ Память структурированных данных (или память структур, ПС) расположена в качестве специализи- рованного устройства внутри функционального блока (однако изучается вариант расположения ПС вне функционального блока для динамического управле- ния программой [34]). При обработке структуриро- ванных данных используется специальная память, снабженная функциями для операций со структуриро- ванными данными. Рассмотрим работу ПС для данных списков, чтобы продолжить связь с изложением разд. 5.5.1. С помощью механизма lenient-cons можно логиче- ски организовать высокоуровневую параллельную об- работку [18, 21]. Для того чтобы этот эффект был ощутим физически, каждую ячейку памяти снабжают операционным блоком и организуют параллельный доступ к ним. Однако для реализации подобной кон- цепции логической памяти необходимо найти компро- миссное решение относительно ее стоимости. Для мультиплексирования ПС предлагаются сле- дующие три способа. (1) ПС организуется в виде множества банков, каждый из которых соединяется с каждым ПЭ марш- рутом одинаковой длины с помощью сети маршрути- зации. Таким образом, за счет распределения доступа устраняется проблема конфликтов.
220 Глава 5 Память команд Память операндов Рис. 5.26. Структура функционального блока (система с распре- делением функций) (на рисунке также изображена часть блока управления). (2) Банк ПС используется в качестве локальной памяти каждого ПЭ. В этом случае список данных не может находиться в общем пользовании функций,
Потоковые машины 221 поэтому каждый раз при применении функции необ- ходимо делать копию данных. (3) Комбинация первых двух способов. Другими словами, банки ПС используются в качестве локаль- ных ЗУ процессорных элементов и в то же время к ним возможен дистанционный доступ через сеть из других ПЭ. Рис. 5.27. Пример конфигурации системы. Что касается обработки списков, то пока еще не выяснено, в какой степени должна быть локальность данных списка внутри функции. В способе (1) ло- кальность почти отсутствует, однако этот способ про- блематичен с точки зрения издержек, связанных с необходимостью копирования. На рис. 5.27 показана структура системы, использующей третий подход. Пример структуры банка памяти ПС показан на рис. 5.28. Доступ к каждому полю памяти возможен из каждого операционного блока CAR-OPU, CDR- OPU, REF-OPU. Блоки CAR-OPU(CDR-OPU) вы- полняют операции, связанные с работой указателей списков, например операции чтения/записи функций
222 Глава 5 car(cdr). Блок REF-OPU помимо сбора мусора с по- мощью счета обращений выполняет команду get cell, создающую новые ячейки. Те из команд, кото- Рис. 5.28. Пример архитектуры памяти структур. рые не требуют обращений к ячейкам ПС, например atom и null, выполняются операционным устройством внутри ПЭ. 5.7. ЗАДАЧИ И ПЕРСПЕКТИВЫ НА БУДУЩЕЕ 5.7.1. ПРОБЛЕМЫ И МЕТОДЫ ИХ РЕШЕНИЯ Что касается производительности и эффективно- сти потоковых машин, то здесь остается еще ряд су- щественных проблем. В книге эти проблемы будут затронуты вскользь, однако обратите внимание, чта
Потоковые машины 223 они присущи не только потоковым машинам, но и вообще архитектуре параллельной обработки. 1. Управление ресурсами. Если повторное исполь- зование ячеек памяти для хранения цвета и лексем для распознавания активаторов будет невозможно, то выполнение больших программ ограниченными ре- сурсами также окажется невозможным. То же самое можно сказать и об управлении структурированной памятью. Поэтому необходимо организовать ста- бильный и эффективный сбор мусора в среде парал- лельной обработки, например утилизацию ресурсов и памяти. 2. Предотвращение ошибок при обработке и уп- равление нагрузкой. При управлении данными по ме- ре расширения типов данных расширяется и обработ- ка, поэтому имеется опасность превышения объема ресурсов системы. Когда обнаруживается локаль- ность обработки в среде параллельной обработки, то необходимо с помощью управляющего сигнала пре- дотвратить массовые ошибки. Иначе говоря, необхо- димо более эффективное управление нагрузкой, в частности оптимальное разделение программ, отра- жающих характеристики обработки, и распределение их между ресурсами, а также уравнивание нагрузки между ресурсами. Как уже было сказано в разд. 5.7.1, способ рас- пределения тела функции между процессорами счи- тается эффективным с точки зрения специфики обра- ботки функционального языка. Что касается динами- ческого управления нагрузкой путем распределения активаторов функций, то здесь можно использовать способ, основанный на контролировании величины на- грузки процессора с помощью каждого коммутатора в сети маршрутизации, и наличие механизма управле- ния, который на основании этой информации будет переключать начало распределения и осуществлять распределенное управление нагрузкой. Кроме того, для предотвращения ошибок при об- работке можно использовать концепцию управления по необходимости.
224 Глава 5 3. Внедрение концепции управления по необходи- мости. В системе, управляемой данными, из-за необ- ходимости передачи оценки выражения из устройства обработки во внешнюю среду приходится делать лишнюю оценку с упреждением, поэтому в зависи- мости от случая возникает опасность останова. Для предотвращения этого необходим механизм управле- ния по необходимости (называемый также механиз- мом «ленивого» вычисления), который бы осуществлял оценку в соответствии с необходимостью. Для реализа- ции этого рассматриваются архитектуры машин с пол- ным управлением по необходимости [35] и машин, совмещающих управление данными и управление по необходимости [25, 36, 37]. 4. Издержки и поток управления в параллельной обработке. В потоковых машинах извлечение парал- лельной обработки осуществляется в максимальной степени. Однако при параллельном протекании лек- сем, например в TF-коммутаторах, вентилях, или ути- лизации имени уже использованного активатора воз- никает проблема издержек. Для устранения этой проблемы необходимо либо увеличить гранулярность параллельной обработки, либо внедрить концепцию потока управления [38, 39]. Что касается внедрения концепции потока управ- ления, то здесь предлагается использовать метод, ко- торый заключается в том, что вместо понятия «по значению», лексемой которого являются непосред- ственные данные, используется понятие «по ссылке», лексемой которого является ячейка переменной, по- ток данных анализируется и посредством удаления ненужных обходных путей из потока данных извле- кается поток уравнения [40]. 5. Обработка на основании биографической зави- симости. Функциональный язык и потоковая архи- тектура в том виде, в котором они существуют, не подходят для обработки процессоров, имеющих био- графию. Однако обработка, учитывающая биографи- ческую зависимость, имеет очень большую практи- ческую ценность. Рассмотрим несколько способов решения этой проблемы. Прежде всего обработку, ре-
Потоковые машины 225 зультат которой изменяется в зависимости от преды- дущего состояния, можно реализовать при помощи механизма заключительной рекурсии (цикла) с ис- пользованием обработки потока и переменных со- стояния. Что касается проблемы монопольного управления, например вводом-выводом или базой данных, то здесь необходим механизм преобразования в после- довательную форму при параллельном доступе, и для этого эффективны синхронное управление, описан- ное в разд. 5.5.3, и концепция потоковой обработки. 5.7.2. ПЕРСПЕКТИВНЫЕ НАПРАВЛЕНИЯ Помимо архитектур, рассмотренных в данной главе, основанных на концепции потока данных, су- ществуют следующие типы архитектур. 1. Матричные процессоры с обработкой по прин- ципу волнового фронта. В структуре, зависящей от данных, например при обработке сигналов или мат- ричных вычислениях, объектом являются регулярные задачи [41, 42] (в [41] фронтальные процессоры не рассмотрены). Этот вид архитектуры применяется также при моделировании схем и т. д. Архитектура, в которой в виде матрицы соединены потоковые про- цессоры с несложной структурой, имеющие ограни- ченные функциональные возможности, подходит для реализации на СБИС. Эта архитектура похожа на архитектуру систолической матрицы, за тем исклю- чением, что процессоры работают асинхронно и уп- равляются данными. Эта архитектура отличается сравнительно простой реализацией. 2. Объектно-ориентированные машины. Концеп- ция потока данных имеет схожесть с моделью actor [43]. Если несколько расширить модель потока дан- ных, то в понятие «данные» можно включить запро- сы. Например, механизм активации функций и обме- на параметрами, используемый при применении функции, очень похож на механизм actor и имеет отно- шение к обмену запросами. Концепция объектной ори- ентации предполагает параллельную распределенную 15—1145
226 Глава 5 обработку, и проблемой, представляющей интерес, является реализация управляемой потоком данных параллельной обработки процессорами, учитываю-* щими биографическую зависимость [44]. 3. Редукционные машины. Реализация управляе- мой данными, в частности по методу цветной фишки, обработки функций высокого порядка, что являет- ся отличительной особенностью редукционных машин, представляет собой сложную проблему. При обра- ботке функций высших ступеней необходимы опера- ции между различными активаторами, находящими- ся в отношениях «потомок — предок». Эту пробле- му можно решить методом копирования кода [45, 46], однако эффективность будет низкой. Если ис- пользовать метод «по ссылке», то благодаря возмож- ности работы в среде через посредство указателей становится возможной обработка отношений включе- ния и обработка функций высших ступеней [40]. Не- обходимо, очевидно, слияние потоковой архитектуры с редукционной машиной. Это объясняется тем, что недостатком потоковой архитектуры являются огра- ниченные возможности обработки функций высших ступеней, а с другой стороны, когда выполняется кон- кретизация управления параллельной редукцией, то необходимо использование концепции потока данных. Отметим, что архитектуру (1) можно реализовать уже сейчас, но для этого сначала нужно оценить пре- имущества асинхронной обработки с двух сторон: производительности и простоты программирования (в сравнении с традиционными матричными процес- сорами). Архитектуры (2) и (3) содержат пока множество нерешенных проблем и нуждаются в серьезных ис- следованиях.
Глава 6 АРХИТЕКТУРЫ ПАМЯТИ В любой вычислительной машине — будь то ма- шина с неймановской архитектурой или с ненейма- новской архитектурой, — программы и данные хранят- ся в памяти. Объем памяти и быстрота доступа к ней определяют размеры задач, которые можно решать на этой машине, и скорость обработки. Компромис- сным решением, позволяющим увеличивать простран- ство памяти и сделать более быстрым доступ к ней, без роста стоимости вычислительной машины, являет- ся иерархизация памяти. Иерархическая память обыч- но состоит из ЗУ различных типов, поэтому програм- мист должен использовать команды и алгоритмы доступа, соответствующие типу ЗУ, из которого осуще- ствляется выборка команды. Безусловно, это являет- ся большой нагрузкой для программиста. Кроме того, память может находиться в общем пользовании у множества одновременно выполняемых программ. В таких случаях необходимо программировать рас- пределение областей памяти, используемых каждой программой, и заботиться о сохранности программ, что еще более тяжким бременем ложится на плечи программиста. Желательно, чтобы программисту ка- залось, будто существует довольно большая основ- ная память, которая находится в пользовании только одного человека. В данной главе рассматриваются различные архитектуры памяти, повышающие ее быстродействие, позволяющие создать иерархическую память, виртуальную память и память для совмест- ного использования, а также рассмотрены специаль- ные архитектуры, например ассоциативной памяти. 6.1. АРХИТЕКТУРЫ ПАМЯТИ 6.1.1. ТРЕБОВАНИЯ, ПРЕДЪЯВЛЯЕМЫЕ К ПАМЯТИ Излишне говорить о том, что возможности вычис- лительной машины определяются характеристиками ее памяти, в которой хранятся программы и данные. 15*
228 Глава 6 Архитектура памяти является наиболее важным эле- ментом в архитектуре ЭВМ, и можно с полной уве- ренностью сказать, что важность этого элемента по- стоянно возрастает. В первой главе было сказано о том, что основны- ми задачами архитектора ЭВМ являются: 1) сделать машину более универсальной, 2) способной решать более сложные задачи, 3) более быстродействующей, 4) более надежной, 5) более «дружественной», 6) бо- лее дешевой. Было также сказано, что сложность этой работы заключается в проектировании такой системы, для которой был бы найден компромисс между этими взаимопротиворечащими требованиями. Постоянно желательные требования, которые опре- делены как 1) универсальность, 2) общность решаемых задач, 3) высокое быстродействие, 4) надежность, 5) дружественность, 6) низкая стоимость, Таблица 6.1. Архитектуры памяти Архитектура Требования х. Быстро- действую- щая память Быстро- действую- щая память большой емкости Виртуальная память Одинар- ная Множест венная Универсальность Глобальность решаемых про- О О О блем Высокое оборудование о о О о Надежность Дружественность Низкая стоимость д д о д о д Возможность совместного использова- ния о
Архитектуры памяти 229 распространяются и на память вычислительной ма- шины. Кроме того, когда множество программ или процессоров совместно используют одно и то же про- странство памяти, то к этим требованиям добавляется еще одно, седьмое требование: обеспечение совмест- ного использования памяти. В отличие от первых шести требований, которые выполнимы только на определенной стадии эволюции в развитии ЭВМ, ме- ра необходимости или отсутствия необходимости со- вместного использования зависит от спецификации системы, в которой эта память используется. Для со- вместного использования может быть предназначено как физическое пространство памяти, так и логиче- ское пространство памяти. Если классифицировать архитектуры памяти по приведенным выше требованиям, то получим 6 клас- сов архитектур (см. табл. 6.1): 1) архитектура быстродействующей памяти (че- редование адресов памяти, кэш-память); 2) архитектура быстродействующей памяти боль- шой емкости (дисковая кэш-память); Общая память Высоконадежная память Интеллектуальная память Множест- венность программ Множественность ЦП Исправ- ление ошибок Защита Память для ИИ Ассоциа- тивная память Совмест- ное ис- пользова- ние Много- портовая память О О О о о о д О о о О о д о о о д д д д д X X о о о о
23<J Глава 6 3) архитектура виртуальной памяти (виртуальная память, многосегментная виртуальная память); 4) архитектура общей памяти (совместное ис- пользование памяти, многопортовая память); 5) архитектура высоконадежной памяти (коды с обнаружением и исправлением ошибок, ман- датный доступ); 6) архитектура интеллектуальной памяти (ассо- циативная память, память правил, память се- мантической структуры). В этой таблице символ О означает архитектуру, целью которой является улучшение характеристики, указанной в соответствующей строке, символ Д озна- чает архитектуру, целью которой является замора- живание ухудшения этой характеристики в соответ- ствующих пределах, X означает архитектуру, в ко- торой эта характеристика игнорируется. Отсутствие символа означает, что архитектура не сказывается никаким образом на характеристике. 6.1.2. ИЕРАРХИЯ ПАМЯТИ И ВИРТУАЛЬНАЯ ПАМЯТЬ В настоящее время используется множество ти- пов ЗУ, и если попытаться сравнить их по времени доступа и стоимости в расчете на бит информации, то получим картину, показанную на рис. 6.1. Произве- дение времени доступа на стоимость бита информа- ции является почти постоянной величиной для всех типов ЗУ, поэтому для того, чтобы повысить быстро- действие памяти и увеличить ее емкость без увели- чения стоимости, необходимо, используя не менее двух типов ЗУ, построить иерархическую память (рис. 6.2). При такой архитектуре увеличение емко- сти памяти становится очевидным. Однако что же происходит со временем доступа? Если ко всему про- странству памяти осуществляется произвольный до- ступ, то количество обращений за единицу времени к каждому ЗУ пропорционально его емкости и сред- нее время доступа к иерархической памяти почти равно времени доступа к самому медленному ЗУ. Тем не менее если рассмотреть процесс выполне- ния программы, то легко видеть, что данное предпо-
Архитектуры памяти ложение не соответствует действительности. Как пра- вило, адрес следующей исполняемой команды сле- дует либо за адресом, по которому была считана те- кущая исполняемая команда, либо расположен 102 10"5 10“6 |Биполяр-\ |ныезу, \ 1КМОПЗУ I J__I__I__1—1___I__I--1--L 10-8 ю~6 IO-4 10-2 Время доступа , с Рис. 6.1. Соотношение времени доступа и стоимости ЗУ. вблизи него. Такое расположение адресов называет- ся пространственной локальностью программы. Счи- тывание и запись данных, являющихся операндами, также выполняются последовательно в соседние ячей- ки памяти. Это называется пространственной локаль- ностью данных. Из-за наличия в программе циклов и подпрограмм выборка команды по одному и тому же
232 Глава 6 адресу, а также доступ к данным по некоторому ад- ресу могут часто повторяться в течение сравнитель- но короткого интервала времени. Это называется временной локальностью. Общее название простран- ственной локальности и временной локальности — локальность по доступу [1—3]. Рис. 6.2. Иерархия памяти. Если имеет место временная локальность, то раз- местив в памяти самого верхнего уровня иерархии наиболее часто используемые команды и данные, можно уже за счет этого повысить эффективность доступа к памяти верхнего уровня. Пересылка дан- ных с нижнего уровня на верхние может осуществ- ляться блоками довольно большого размера. Вели- чина блока определяется характеристиками памяти нижнего уровня. В большинстве ЗУ на блочную пе-
Архитектуры памяти 233 ресылку уходит гораздо меньше времени, чем сум- марное время пересылки отдельных данных блока. Если в памяти верхнего уровня отсутствует содержи- мое нужного адреса, то из памяти нижнего уровня в нее пересылается блок, содержащий этот адрес. Ко- гда используется пространственная локальность, то вероятность того, что доступ будет осуществляться последовательно к соседним ячейкам памяти, велика, поэтому, переслав содержимое соседних ячеек по- блочно в память верхнего уровня, можно повысить эффективность доступа к памяти верхнего уровня. Таким образом, эффективность иерархической организации памяти зависит во многом от временной и пространственной локальностей. Эффект от времен- ной локальности увеличивается с ростом числа блоков, которые можно разместить в памяти верхнего уров- ня. Эффект от пространственной локальности тем выше, чем лучше соотношение времен блочной пере- сылки и одинарной пересылки. Если время блочной пересылки равно суммарному времени одинарной пе- ресылки данных блока, то необходимость в блочной пересылке отпадает и эффект влияния простран- ственной локальности на среднее время доступа сни- жается. Размер блока, пересылаемого между основной и вторичной памятью, велик — порядка 4 кбайт, поэто- му высока эффективность блочной пересылки, а зна- чит, и существенным является сокращение среднего времени доступа за счет пространственной локаль- ности. При большом объеме основной памяти — от нескольких мегабайт до нескольких десятков мега- байт — и достаточно большом числе блоков основ- ной памяти — от 1000 до 10 000 — влияние времен- ной локальности на среднее время доступа также велико. В отличие от этого, когда для построения иерар- хической памяти используют кэш-память (которая является разновидностью архитектур быстродей- ствующей памяти), расположив ее над основной па- мятью, то блоки имеют небольшой размер: 8— 16 слов (64—128 байт), поэтому эффект сокращения времени доступа за счет пространственной локально-
234 Глава 6 сти ниже, чем в промежутке от основной памяти до вторичной. В то же время число блоков в кэш-памя- ти достаточно велико: 500—4000, поэтому влияние временной локальности весьма ощутимо. Использование иерархической памяти требует, что- бы обмен блоками между быстродействующей и медленнодействующей памятью выполнялся в соот- ветствии с алгоритмом доступа к каждому ЗУ. Это требование является большой нагрузкой для про- граммиста. Ответом на него было рождение идеи вир- туализации памяти. Под виртуализацией понимается метод автоматического управления иерархической па- мятью таким образом, что программисту кажется, будто существует одна быстродействующая память большей емкости [3]. 6.1.3. СОВМЕСТНОЕ ИСПОЛЬЗОВАНИЕ ПАМЯТИ Архитектура общей памяти предназначена для совместного использования памяти несколькими про- граммами, одновременно выполняемыми одним ЦП, либо множеством ЦП. Для того чтобы с точки зре- ния каждой программы выглядело так, будто суще- ствует отдельная (независимая) память, необходимо, несмотря на совместное использование физического пространства памяти, выделить для каждой програм- мы независимое логическое пространство памяти. Архитектура, в которой реализован этот принцип, на- зывается архитектурой с общим физическим прост- ранством памяти. В отличие от нее архитектура, в ко- торой имеется возможность совместного использования множеством ЦП логического пространства памяти, называестя архитектурой с общим логическим про- странством памяти. 6.1.4. ОБЕСПЕЧЕНИЕ ВЫСОКОЙ НАДЕЖНОСТИ Высокая надежность системы определяется двумя факторами. Первый — это снижение ошибок при чте- нии/записи в память и второй — защита информации, хранящейся в памяти. Снижения ошибок при чте- нии/записи можно достичь путем кодирования запо-
Архитектуры памяти 235 минаемой информации с помощью кодов с обнару- жением ошибок и кодов с исправлением ошибок. Ис- следования в этом направлении сформировались в одну отдельную область исследований, по этой про- блеме было написано много трудов, поэтому в дан- ной книге она не рассматривается [4]. Защиту ин- формации, хранящейся в памяти, можно обеспечить, задав для каждого процесса условия, разрешающие считывание или запись только определенных данных. Такие условия называются мандатом* а механизм ограничения доступа с использованием мандата на- зывается механизмом с мандатной адресацией. Этот способ был уже описан в разд. 1.5.3. 6.1.5. ИНТЕЛЛЕКТУАЛЬНАЯ ПАМЯТЬ В устройствах памяти, описанных выше, при до- ступе указывается адрес ячейки памяти, из которой считывается или в которую записывается информа- ция. В отличие от этого в интеллектуальной памяти для доступа к некоторым данным указываются часть этих данных и смысловая связь с другими данными, к которым уже был произведен доступ. К памяти та- кого типа относятся ассоциативная память, память правил, память семантической структуры. В памяти правил хранится совокупность правил, например, для продукционной системы. Эта память используется для поиска и считывания следующего применяемого правила. Память семантической структуры хранит семантическую сеть и используется для считыва- ния записи содержимого в соответствии со смысловой связью. В памяти правил памяти семантической структуры одной или нескольким ячейкам можно придать интеллектуальные функции, оснастив их, на- пример, процессорами. Очевидно, что такую архитек- туру памяти можно считать разновидностью архитек- туры для параллельной обработки, но в данной кни- ге с учетом мотивов предложения подобных архитек- тур и перспективных направлений развития их место однозначно определено как разновидность архитектур памяти.
236 Глава 6 6.2. АРХИТЕКТУРА БЫСТРОДЕЙСТВУЮЩЕЙ ПАМЯТИ 6.2.1. УВЕЛИЧЕНИЕ БЫСТРОДЕЙСТВИЯ ПАМЯТИ С увеличением быстродействия устройств обра- ботки быстродействие памяти, которая снабжает устройство обработки командами и операндами и принимает от него результаты обработки, стало от- рицательно сказываться на производительности си- стемы. Казалось бы, для решения этой проблемы до- статочно использовать элементы памяти с малым временем выборки, однако нужных элементов либо не существовало, либо стоимость системы настолько возрастала, что их было невыгодно использовать. По- этому понадобились структурные подходы в решении данной проблемы. К структурным методам относят- ся (рис. 6.3) : 1) пакетная обработка множества доступов к па- мяти; 2) конвейерная обработка множества доступов к памяти; 3) использование кэш-памяти. При выборке команд, исключая переходы и вет- вления, команды, как правило, считываются в стро- гой последовательности из соседних ячеек памяти. Если сделать возможным одновременный доступ к содержимому определенного числа соседних ячеек памяти, то последовательные запросы на доступ к этим соседним ячейкам можно обрабатывать посред- ством последовательного доступа к фиксаторам (стробам) данных, число которых равно числу запро- сов. Поскольку время доступа к фиксаторам данных гораздо меньше времени доступа к памяти, то сред- нее время доступа можно существенно сократить. Иногда в зависимости от режима работы для до- ступа к памяти не требуется ожидания окончания предыдущего доступа. В подобных случаях можно организовать конвейерную обработку доступов. Для этого память разбивают на множество банков и для буферизации последовательно поступающих запро- сов доступа и последовательно выводимых резуль-
1 Пакетный доступ к 4 словам Кэш-память Адрес addr Данные а addr | о Копия Ассоциативная память Доступ выполняется не ко всей памяти, а к кэш-памяти, которая хранит копию части ее содержимого в Рис. 6.3. Способы увеличения быстродействия памяти. а — пакетный доступ; б — конвейерный доступ; в — кэш-память.
238 Глава 6 татов считывания дополняют ее очередью запросов доступа и очередью данных. Если два соседних за- проса требуют доступа к разным банкам памяти, то последний запрос может не дожидаться окончания предыдущего доступа. Реализовав на кристалле па- мяти очередь запросов доступа и очередь выходных данных, можно уже на уровне кристаллов построить конвейерную память. Это позволяет в несколько раз увеличить внутреннее быстродействие интегральных схем памяти по сравнению с внешним быстродей- ствием. Кэш-память — это быстродействующая память которую располагают между основной памятью и устройством обработки. Обычно емкость кэш-памяти составляет 1/1000—1/500 емкости основной памяти, а время доступа—1/5—1/10 времени доступа основ- ной памяти. Кэш-память вместе с основной памятью образует иерархическую память. Как уже говорилось, из-за наличия в программе циклов и подпрограмм в сравнительно короткий интервал времени приходится многократно обращаться к одним и тем же ячейкам памяти. Если считанное однажды содержимое неко- торой ячейки сохранить в кэш-памяти, то при после- дующих обращениях к этой ячейке можно использо- вать значение, хранящееся в кэш-памяти. Таким об- разом, начиная со второго доступа, время доступа можно сократить в 5—10 раз. 6.2.2. ЧЕРЕДОВАНИЕ АДРЕСОВ ПАМЯТИ Разделим память на пг банков Во, Вь ..., Вт_\ одинаковой емкости и установим связь между банком В, содержащим адрес г, и адресом d внутри банка Вь, соответствующим адресу г, с помощью следующе- го равенства: i = d‘m-\-bt d^0, O^.b^m—1. (6.1) Распределение адресов между т банками памяти на- зывается /n-кратным чередованием адресов памяти. Таким образом, память, состоящая из т банков с распределенными адресами, называется памятью
Архитектуры памяти 239 с /и-кратным чередованием адресов \т — обычно сте- пень числа 2). На рис. 6.4 показан пример использования чередо- вания адресов при пакетной обработке запросов до- Адрес внутри банка доступ/адрес Распределение адресов Время цикла памяти /Содержимое адресов Г---------------- I 4, 5, 6, 7 считывается Доступ ко всем у в фиксаторы банкам ------------Доступ к фиксатору Чтение Чтение Чтение Чтение Чтение Адрес 5 Адрес 6 Адрес 8 Адрес 9 ---Доступ к фиксатору Содержимое адресов 8, 9, 10, 11 считывает- ся в фиксаторы Время б Рис. 6.4. Пакетный доступ к памяти с использованием чередо- вания адресов. а — 4-кратное чередование адресов памяти (пакетный доступ); б —результат пакетного доступа. ступа. Допустим, что при считывании по z-му адресу b является неотрицательным целым числом, опреде- ляемым выражением (6.1), тогда все значения от ад- реса i — b до адреса i + т — b — 1 считываются в фиксаторы данных. Если существует локальность по
2 VO Глава 6 доступу и доступ осуществляется последовательно, начиная с адреса г, к адресам i+ 1, i + 2, то считы- вание из адреса т — Ь—1 в промежутке от адреса i + 1 до i + т — Ь — 1 можно выполнить без обра- а Время цикла памяти Чтение Адрес 8 ------------------ Используется банк О Запись Адрес 6 .... ............ Используется банк 1 Чтение Адрес 1 —------------------ Используется банк 2 Запись Адрес 7 ------------------ Используется банкЗ Время | Разрешение доступа к банку О б Рис. 6.5. Конвейерный доступ с использованием чередования ад- ресов памяти. а — 4-кратное чередование адресов памяти; б — конвейерный доступ. щения к памяти, а лишь считыванием из фиксаторов данных. Поскольку время доступа к фиксатору го- раздо меньше времени доступа к памяти, то среднее время доступа также сокращается. На рис. 6.5 показан пример использования чере- дования адресов при конвейерной обработке запро-
Архитектуры памяти 241 сов доступа. При доступе, например, к векторным операндам в векторном процессоре происходит после- довательное обращение к адресам г, i + s, i + 2s, ..., отстоящим друг от друга с определенным интервалом s. Если обозначить наибольший общий делитель т и s через gcd(m, s), то в случае, когда m/gcd(m, s) доступов последовательно осуществляются к различ- ным банкам памяти и процесс выборки длится доста- точно долго, производительность увеличивается при- мерно в m/gcd(m, s) раз по сравнению со случаем доступа к одному банку. Если т и s являются вза- имно простыми, то производительность увеличивается в т раз. Если в качестве т выбрать простое число, то множество значений s взаимно простых с т увели- чится и повышение производительности для широкого набора значений s может приближаться к величине т. Память с m-кратным чередованием адресов (где т— простое число) называется первичной памятью [7]. Система с первичной памятью была использована в машине BSP (Burroughs Scientific Processor — про- цессор для научных расчетов фирмы Burroughs). Хотя для первичной памяти и нет проблемы, за- ключающейся в необходимости вычисления номера банка 6, определяемого формулой (1.6), и номера d внутри банка для каждого запроса доступа, тем не менее сделать это быстро довольно сложно. В системе памяти с конвейерным доступом, в ко- торой используется память с m-кратным чередова- нием адресов, доступ к памяти возможен в интервале \/т цикла памяти. Однако, если в течение т циклов, следующих непрерывно друг за другом, запраши- вается доступ к одному и тому же банку, то до окон- чания предыдущего доступа к этому банку запрос на следующий доступ ожидает обработки. Такая ситуа- ция называется конфликтом по доступу. При частом возникновении конфликтов по доступу данный метод повышения быстродействия становится неэффек- тивным. Если расположить 1-пг банков памяти в виде матрицы размерностью I (строк) (столбцов) та- ким образом, чтобы к каждой строке осуществлялся пакетный доступ с помощью m-кратного чередования, 16—1145
242 Глава 6 и сделать так, чтобы по отношению к / блокам па- мяти, состоящим из т слов с идущими подряд номе- рами, можно было применить конвейерный доступ с помощью /-кратного чередования, то можно построить систему памяти, позволяющую в каждом интервале длительностью 1/Z от цикла памяти осуществлять до- ступ к т словам с идущими подряд номерами. 6.2.3. КЭШ-ПАМЯТЬ [8—13] Кэш-память — это быстродействующая память, расположенная между ЦП и основной памятью (рис. 6.6). Вместе с основной памятью она образует иерархическую структуру, и ее действие эквивалентно быстрому доступу к основной памяти. В больших уни- 10“ 3 N-2 х 10-3Мслов, 10“1 Т~ 2 х10“1 Т нс Основная память N, Т Рис. 6.6. Кэш-память. Основная память N слов, Т нс версальных ЭВМ, основная память которых имеет емкость порядка 32—64 Мбайт, обычно используется кэш-память емкостью 64—256 Кбайт. То есть емкость кэш-памяти составляет порядка 1/1000—1/500 емко- сти основной памяти, а быстродействие в 5—10 раз выше быстродействия основной памяти. Кэш-память, состоящая из т слов, сохраняет ко- пии не менее чем т слов из всех слов основной па- мяти. Если копия, к адресу которой был выполнен доступ ЦП, существует в кэш-памяти, то считывание завершается уже при доступе к кэш-памяти. Для записи в кэш-память существует несколько методов замещения старой информации. Эти методы назы-
Архитектуры памяти 243 ваются стратегией обновления основной памяти. От- метим, что пг слов не должны быть разрозненными. В случае пространственной локальности основная память разбивается на блоки с фиксированным чис- лом слов и обмен данными между основной памятью и кэш-памятью осуществляется блоками. При доступе к некоторому адресу ЦП должен сначала определить, имеется ли копия блока, содержащего этот адрес, в кэш-памяти, и если имеется, то определить, с какого адреса кэш-памяти начинается этот блок. Эту инфор- мацию ЦП получает с помощью механизма преобра- зования адресов. На сложность этого механизма существенное влияние оказывает стратегия размеще- ния, определяющая, в какое место кэш-памяти сле- дует поместить каждый блок основной памяти. Еще один важный аспект связан с необходимостью решения, в какой момент в кэш-память следует поместить копию блока, содержащего слово, извле- каемое из памяти в результате доступа. Этой проб- лемой занимается стратегия выборки. Поскольку раз- мер кэш-памяти составляет 1/1000—1/500 размера основной памяти, то может оказаться, что, несмотря на выборку из основной памяти нужного блока, в кэш-памяти нет свободного места для его размеще- ния. В подобных случаях необходимо выбрать один из блоков, хранящихся в кэш-памяти, и заменить его на новый блок. Если результат замены в кэш-памяти не отражается на копии, хранящейся в основной па- мяти, то старый блок воспроизводится в старой копии основной памяти. Способ определения блока, удаляе- мого из кэш-памяти, называется стратегией заме- щения. На эффективность кэш-памяти большое влияние оказывают пространственная и временная локально- сти. Кроме того, программы и данные существенно отличаются по локальности. Иногда для каждого типа данных, которые имеют различную локальность, используют различные кэш-памяти. 1. Стратегия размещения и механизм преобра- зования адресов. Существуют 4 способа размеще- ния данных в кэш-памяти: прямое распределение, 16*
244 Глава 6 полностью ассоциативное распределение, частично ас- социативное распределение и распределение секторов. Полностью ассоциативное распределение является идеальным, однако из-за высокой стоимости оно практически неосуществимо. В последнее время боль- шое распространение получило частично ассоциатив- ное распределение. Ниже подробно описаны каждый способ размещения и его механизм преобразования адресов. Для того чтобы конкретизировать описание, положим, что емкость кэш-памяти составляет 2Кслов, размер блока—16 слов, а емкость основной памя- ти— 256К слов. Следовательно, кэш-память может содержать 128 блоков, а основная память— 16384 блока. Для адресации основной памяти используется 18 бит. Из них старшие 14 бит показывают номер блока, содержащего этот адрес, а младшие 4 бит — адрес слова внутри этого блока. Номер блока назы- вается адресом блока. 128 блоков кэш-памяти ука- зываются 7-разрядными адресами. (/) Прямое распределение. Для того чтобы поме- стить в кэш-память из основной памяти блок с адре- сом Ьп, область внутри кэш-памяти с адресом Ьс, равным 7 младшим битам адреса Ьп, выбирается в качестве места хранения блока (рис. 6.7). Напри- мер, блок с адресом 3673 помещается по адресу кэш- памяти, равному 89 (исходя из того, что 3673 = = 128X27 + 89). Преобразование из Ьп в Ьс сво- дится только к выборке младших 7 бит. В данном случае по адресу Ьс блока кэш-памяти может быть помещен любой из 128 блоков, имеющих адрес, 7 младших битов которого равны адресу Ьс. Для того чтобы определить, какой именно блок хранится в данное время в кэш-памяти, используется еще одна память емкостью 7 битХ 128 слов, в адрес Ьс кото- рой помещаются в качестве тега 7 старших битов адреса блока, хранящегося в данное время по адресу Ьс кэш-памяти. Эта специальная память называется теговой памятью. Память, в которой хранятся блоки, помещенные в кэш, называется памятью данных. При доступе к Z-му адресу младшие 7 бит адреса блока, где содержится этот адрес, используются в ка- честве адреса теговой памяти, из которого считывается
Архитектуры памяти 245 Тег Индекс / “ \ \ Адрес внутри Адрес блока блока Данные считывания/записи б Рис. 6.7. Кэш-память с прямым распределением. а — структура кэш-памяти; б — связь кэш-памяти с основной, памятью.
246 Глава 6 тег. Параллельно этому осуществляется доступ к памяти данных с помощью 11 младших битов адреса I. Если считанный тег и старшие 7 бит адреса i совпадают, то это означает, что блок, содер- жащий адрес /, существует в памяти данных и в сло- ве, к которому осуществляется доступ, должна хра- ниться копия Z-го адреса. Если тег отличается от старших 7 бит, то из основной памяти считывается блок, содержащий ад- рес /, а из кэш-памяти удаляется блок, определяемый 7 младшими битами адреса /, и на его место поме- щается блок, считанный из основной памяти. Осуще- ствляется также обновление соответствующего тега в теговой памяти. Способ прямого распределения реализовать до- вольно просто, однако из-за того, что место хранения блока в кэш-памяти однозначно определяется по ад- ресу блока, вероятность сосредоточения областей хра- нения блоков в некоторой части кэш-памяти высока, т. е. замена блоков будет происходить довольно часто. В такой ситуации эффективность кэш-памяти заметно снижается. (2) Полностью ассоциативное распределение. При полностью ассоциативном распределении допускается размещение каждого блока Ьп основной памяти на месте любого блока Ьс кэш-памяти. В этом случае механизм преобразования адресов должен быстро дать ответ, существует ли копия блока с произвольно указанным адресом в кэш-памяти, и если существует, то по какому адресу. Для этого необходима ассоциа- тивная память, входной информацией для которой является тег—14-разрядный адрес блока, а выход- ной— адрес блока внутри кэш-памяти (рис. 6.8). По этому способу при замене блоков кандидатами на удаление могут быть все блоки в кэш-памяти. (3) Частично ассоциативное распределение. При данном способе несколько соседних блоков (фикси- рованное число, не менее двух) из 128 блоков кэш- памяти образуют структуру, называемую группой. В приведенном ниже примере в одну группу входят
Архитектуры памяти 247 считывания/записи Адрес блока Тег в кэш памяти Адрес блока Память данных Основная память б Рис. 6.8. Кэш-память с полностью ассоциативным распределением. а — структура кэш памяти; б — связь кэш-памяти с основной памятью.
248 Глава 6 4 блока. Адрес блока внутри кэш-памяти, состоящий из 7 бит, разделим на адрес группы, состоящий из 5 бит, и адрес блока внутри группы, состоящий из двух бит. Обозначим адрес блока в основной памяти Ьп, а через tag(6m) и set(6m) обозначим соответствен- но старшие 9 бит адреса Ьт и следующие за ними 5 бит. Они называются соответственно теговой частью адреса Ьт и частью адреса группы. Для помещения в кэш-память копии адреса блока Ьт, хранимого в основной памяти, необходимо вы- брать группу с адресом set(6m). При этом не имеет значения, какой из четырех блоков в группе может быть выбран. Для выбора группы используют метод прямого распределения, а для выбора блока в груп- пе—метод полностью ассоциативного распределения [14, 15]. На рис. 6.9 показана структура кэш-памяти, осно- ванной на использовании частично ассоциативного распределения. Когда ЦП запрашивает доступ к /-му адресу, то осуществляется доступ к массиву тегов, в котором в качестве адреса используются 5 млад- ших битов адреса блока Ь, состоящего, в свою оче- редь, из 14 старших битов адреса /. Одновре- менно осуществляется доступ к массиву данных, адресом которого являются 9 бит, полученные до- бавлением к части set (b) четырех младших битов адреса i. Массив тегов состоит из четырех банков памяти, доступ к которым осуществляется параллельно оди- наковыми адресами. Каждый банк имеет длину сло- ва 9 бит для помещения значения тега, а число слов равно числу групп, т. е. 32. Адрес / в этом банке соответствует группе /, и по этому адресу в банке k хранится тег блока, копия которого в данный момент хранится по адресу блока k внутри группы /. При доступе к адресу set(6) четыре тега блока, копии ко- торых существуют в блоке группы с адресом set (6), одновременно считываются в блок сравнения тегов и сравниваются с адресом tag(b). Если сравнение показало совпадение для банка k, то это означает, что копия блока Ь существует по адресу блока k внутри группы с адресом set (6).
Архитектуры памяти 249 Тег Адрес группы Адрес блока Адрес внутри блока -------------------у Основная память б Рис. 6.9. Кэш-память с частично ассоциативным распределением, а —структура кэш памяти; б —распределение блоков в кэш-памяти и основ- ной памяти. Массив данных также состоит из четырех банков памяти, доступ к которым осуществляется параллель- но с помощью одинаковых адресов. Каждый банк имеет длину слова такую же, как и у основной па- мяти, а емкость его определяется числом слов в од- ном блоке, умноженным на число групп в кэш-па-
250 Глава 6 мяти. Например, его емкость может быть равна 32X16 = 512 слов. Если величины /, k, I лежат в пределах 0 j 32, 0 k 3, 0 I 15, то адрес j X 24 +1 банка k будет соответствовать одному сло- ву в кэш-памяти, а адрес группы, которой принадле- жит это слово, адрес блока внутри группы и адрес внутри блока будут равны соответственно значениям /, k и I. Как уже говорилось, если при запросе доступа ЦП по адресу i обнаружится совпадение тега, считанного из банка k массива тегов, с теговой частью адреса г, то результат считывания банка k массива данных, к которому был одновременно произведен доступ, не копируется по адресу i. При пересылке нового блока в кэш-память уда- ляемый из нее блок выбирается из четырех блоков соответствующего набора. (4) Распределение секторов. По данному методу основная память разбивается на секторы, состоящие из фиксированного числа блоков. Кэш-память также разбивается на секторы, состоящие из такого же числа блоков. Рассмотрим случай, когда длина блока равна 16 словам, а сектор состоит из 16 блоков. В адресе основной памяти старшие 10 бит показы- вают номер сектора, следующие 4 бит — номер блока внутри сектора, а младшие 4 бит — адрес в блоке (рис. 6.10). По данному методу распределение секторов в основной памяти и секторов в кэш-памяти осуществ- ляется полностью ассоциативно. Другими словами, каждый сектор в основной памяти может соответство- вать любому сектору в кэш-памяти. Распределение блоков в секторе одинаково для основной и кэш- памяти. Каждый сектор в кэш-памяти соответствует только одному сектору основной памяти. К каждому блоку, хранимому в кэш-памяти, добавляется один бит информации, называемый битом достоверности (действительности); он показывает, совпадает или нет содержимое этого блока с содержимым блока в основной памяти, который в данный момент анали- зируется на соответствии блоку кэш-памяти.
Архитектуры памяти 251 Адрес сектора в кэш-памяти Адрес сектора Адрес блока Адрес в секторе в блоке Адрес основной памяти считывания/записи Память данных Блок 0 1023 Блок 321 достоверности 16 32 ]Г Сектор/ / Блок 33 15 31 16383 15 Основная память 0 2 о Рис. 6.10. Кэш-память с распределением сегментов. а— структура кэш-памяти; б — связь между кэш-памятью и основной памятью. Если слова, запрашиваемого ЦП при доступе, не существует в кэш-памяти, то сначала ЦП проверяет, был ли сектор, содержащий это слово, ранее поме- щен в кэш-память. Если он отсутствует, то один из секторов кэш-памяти заменяется на этот сектор.
252 Глава 6 Если все сектора кэш-памяти используются, то выби- рается один какой-нибудь сектор, и при необходимо- сти только некоторые блоки из этого сектора возвра- щаются в основную память, а этот сектор можно использовать дальше. Когда осуществляется доступ к этому сектору в кэш-памяти и блок, содержащий нужное слово, пересылается из основной памяти, то бит достоверности устанавливается до пересылки блока. Все биты достоверности других блоков этого сектора сбрасываются. Если сектор, содержащий слово, доступ к кото- рому запрашивается, уже находится в кэш-памяти, то в том случае, когда бит достоверности блока, со- держащего это слово, равен 0, этот блок пересы- лается из основной памяти в данную область кэш- памяти и бит достоверности устанавливается. В том случае, когда бит достоверности уже равен 1, данное слово можно считать из кэш-памяти. 2. Стратегия обновления основной памяти и стра- тегия замещения [16]. Если результат обновления бло- ков кэш-памяти не возвращать в основную память, то содержимое основной памяти становится неадекват- ным вычислительному процессу. Чтобы избежать этого, предусмотрены методы обновления основной памяти, которые можно разделить на две большие группы: ме- тод сквозной записи и метод обратной записи. По методу сквозной записи обычно обновляется слово, хранящееся в основной памяти. Если в кэш- памяти существует копия этого слова, то она также обновляется. Если же в кэш-памяти отсутствует ко- пия этого слова, то либо из основной памяти в кэш- память пересылается блок, содержащий это слово (метод WTWA — сквозная запись с распределением), либо этого не делается (метод WTNWA — сквозная запись без распределения). Когда по методу сквозной записи область (блока) в кэш-памяти назначается для хранения другого блока, то в основную память мож- но не возвращать удаляемый блок. Однако в этом случае эффект от использования кэш-памяти от- сутствует.
Архитектуры памяти 253 По методу обратной записи, если адреса объектов, по которым есть запрос обновления, существуют в кэш-памяти, то обновляется только кэш-память, а основная память — нет. Если адреса объекта об- новления нет в кэш-памяти, то в нее из основной па- мяти пересылается блок, содержащий этот адрес, после чего обновляется только кэш-память. По мето- ду обратной записи в случае замены блоков удаляе- мый блок необходимо также пересылать в основную память. У этого метода существуют две разновид- ности: метод SWB (простая обратная запись), по ко- торому удаляемый блок возвращается в основную память, и метод FWB (флаговая обратная запись), по которому в основную память записывается только обновленный блок кэш-памяти. В последнем случае каждая область блока в кэш-памяти снабжается од- нобитовым флагом, который показывает, было или нет обновление блока, хранящегося в этой области. Метод FWB обладает достаточной эффектив- ностью, однако более эффективным считается метод FPWB (флаговая регистровая обратная запись), в котором благодаря размещению буфера между кэш- памятью и. основной памятью предотвращается кон- фликт между удалением и выборкой блока. Для за- мещения блоков кэш-памяти существует несколько методов, в частности метод замещения наиболее дав- него по использованию блока (LRU), метод FIFO (первым вошел — первым вышел) и метод произволь- ного замещения. В первом случае среди блоков, яв- ляющихся объектами замещения, выбирается блок, к которому наиболее -длительное время не было об- ращений. По методу FIFO среди всех блоков, являю- щихся объектами замещения выбирается тот, кото- рый самым первым был переслан в кэш-память. И наконец по последнему методу блок выбирается произвольно. Реализация этих методов упрощается в указанной последовательности, но наибольшей эф- фективностью обладает метод замещения наиболее давнего по использованию блока. Для реализации этого метода необходимо мани- пулировать блоками, которые являются объектами замещения, с помощью LRU-стека [17]. При каждой
254 Глава 6 загрузке в этот стек помещается блок, в результате чего при замене используется блок, хранящийся в наиболее глубокой позиции стека, и этот блок уда- Состояние а b с а b с — это номера блоков в множестве в кэш-рамяти. Допустим, что размер множества равен 3, а а, Ь, с = 0, 1,2 , Тогда состояние а b с показывает, что к блоку а доступ был последним, а к блоку с — наиболее давний Переход в другое состояние Удаление Если осуществляется достугг к блоку b в состоянии а b с, то состояние изменяется на b а с; Удаляется блок с: он выбирается как наиболее давний по использованию (метод LRU) Рис. 6.11. Диаграмма переходов состояний для стека типа LRU. ляется из стека. При доступе к блоку х этот блок удаляется из стека и заново загружается в него. Стек типа LRU устроен таким образом, что, чем дольше к блоку не было доступа, тем в более глубокой пози-
Архитектуры памяти 255 ции он располагается. Реализация стека типа LRU, позволяющего с высокой скоростью выполнять такую операцию, усложняется по мере увеличения числа блоков. По методу частично ассоциативного распределе- ния число блоков в каждом стеке LRU равно числу блоков в одной группе, и так как это число мало — порядка 2 ~ 4, то для каждой группы необходимо использовать свой стек. Если число групп сравни- тельно велико, то оснащение каждой из них стековым механизмом приводит к повышению стоимости. Если в группу входят 4 блока, то состояние стека можно представить комбинацией четырех элементов: 0, 1, 2, 3. Комбинация (0, 3, 1, 2) показывает, что к бло- ку 0 доступ был последним, за ним следует блок 3, а к блоку 2 доступ был наиболее давним. Такую ком- бинацию можно представить замещением четырех элементов, ml поскольку их суммарное число есть 4! = 24, то каждую комбинацию можно закодировать пятью битами данных. Спроектировав соответствую- щие комбинационные и последовательностные схемы, можно реализовать механизм, определяющий из за- кодированного состояния стека LRU его глубину и перемещающий любой элемент стека на его вершину. На рис. 6.11 показана диаграмма переходов состоя- ний стека LPU для случая, когда размер группы ра- вен 3. Данные закодированного состояния стека хра- нятся в кэш-памяти для каждой группы. 6.2.4. ДИСКОВАЯ КЭШ-ПАМЯТЬ Кэш-память располагают между ЦП и основной памятью, что эквивалентно увеличению быстродей- ствия основной памяти. Используя аналогичную по функциям память, расположенную между основной и вторичной памятью, можно сократить среднее время доступа к вторичной памяти в 2 ~ 10 раз. Такая кэш-память носит название дисковой кэш-памяти, и в качестве ее обычно используется полупроводнико- вое ЗУ емкостью от нескольких мегабайт до несколь- ких десятков мегабайт.
256 Глава 6 6.2.5. УВЕЛИЧЕНИЕ БЫСТРОДЕЙСТВИЯ КЭШ ПАМЯТИ К методам еще большего увеличения быстродей- ствия системы памяти, использующей кэш-память, от- носятся: 1) использование двухуровневой кэш-памяти; 2) разделение кэш-памяти на независимые кэш- память команд и кэш-память операндов; 3) использование обходного кэш-буфера и т. д. [18]. Первый метод заключается в использовании по крайней мере еще одного уровня памяти между кэш- и основной памятью. Эта вновь привлекаемая память называется системным кэшем. Для взаимодействия кэш-памяти с системным кэшем используется метод сквозной записи, а для взаимодействия системного кэша с основной памятью — метод обратной записи. Второй метод основан на использовании разницы в комбинациях доступа при выборке команд и вы- борке операндов, и поэтому для каждого из них ис- пользуется свой кэш. Третий метод заключается в использовании обход- ного пути через буфер, который в случае необходи- мости пересылки блока из основной памяти в кэш- память позволяет, не дожидаясь окончания пересыл- ки, осуществлять доступ к его начальному адресу одновременно с началом пересылки. 6.3. АРХИТЕКТУРА ВИРТУАЛЬНОЙ ПАМЯТИ Основная память как аппаратное средство пред- ставляет собой линейное пространство N адресов, ко- торое называется физическим пространством памяти. Когда программист непосредственно обращается с этим пространством, то возникают следующие про- блемы. 1) Проблема ограниченности области: при выпол- нении программ размером свыше N слов в ней необ- ходимо указывать обмен подпрограммами или про- межуточными результатами между основной памятью и вторичной, что при мультипрограммировании реали- зовать невозможно.
Архитектуры памяти 257 2) Проблема линейности пространства: когда про- грамма по частям загружается в память и по оконча- а / Программа 4 Разместить нельзя /Программа V %%% ^Программа 2/ ////////. —ГТУ 7 7 7 7> /Программа dZ-Z-2/...Z Z Z Рис. 6.13. Виртуальное пространство и реальное пространство. нии выполнения извлекается оттуда, то в результате подобного использования памяти возникает состояние, называемое фрагментацией памяти (рис. 6.12). 17—1145
258 Глава 6 В этом состоянии в память нельзя даже загрузить программу, размер которой меньше суммарного раз- мера неиспользуемых областей. Для решения этих проблем был предложен метод, по которому программисту кажется, будто сущест- вует достаточно большое пространство памяти, при- чем необязательно линейное. Общее название этого метода — виртуальная память [3]. Пространство виртуальной памяти, видимое (доступное) програм- мисту, называется виртуальным пространством. В от- личие от него пространство физической памяти назы- вается реальным пространством. Адреса виртуального пространства называются виртуальными адресами, а адреса физического пространства — физическими ад- ресами. Виртуальный адрес обычно отличается от фи- зического, и поскольку программист составляет про- грамму с использованием виртуальных адресов, то тре- буется преобразование виртуальных адресов в физиче- ские (рис. 6.13) 1}. 6.3.1. ОДИНАРНАЯ ВИРТУАЛЬНАЯ ПАМЯТЬ Эта система виртуальной памяти имеет целью: 1) предоставить программисту достаточно боль- шое пространство памяти, 2) предоставить програм- мисту область памяти, физически не используемую из-за фрагментации, в виде логически непрерывного пространства. В этой системе программа разбивается на части равной величины, называемые страницами. Все стра- ницы, составляющие программу, хранятся во вторич- ной памяти, и в некоторый момент времени некото- рые из них помещаются в основную память. Поэтому основная память разбивается на блоки такой же ве- личины, что и страницы. В этом случае виртуальное пространство является линейным, разбитым на стра- ницы, причем страница из виртуального простран- ства может соответствовать любой странице из фи- зического пространства. Размер страницы обычно выбирают в пределах 2^4 кбайт. п Это преобразование носит название трансляции адресов.— Прим, перев.
Архитектуры памяти 259 В случае запроса доступа к странице, несущест- вующей в основной памяти, необходимо загрузить эту страницу из вторичной памяти в основную. По- пытка доступа к несуществующей в основной памяти странице называется страничным сбоем. Если в ос- новной памяти нет свободных блоков, которые можно было бы использовать для загрузки новых страниц, то необходимо освободить блок путем удаления одной из существующих в памяти страниц. Удаляемая стра- ница определяется алгоритмом замещения страниц. Для определения того, когда именно следует загру- зить страницу в основную память, используются главным образом два метода: выборка по запросу — когда загрузка выполняется после страничного сбоя, и предвыборка — когда загрузка выполняется заранее по предположению о возникновении страничного сбоя. Для преобразования виртуального адреса в ре- альный существуют два метода: с использованием таблицы прямого преобразования и с использованием ассоциативного преобразования. В первом случае используется аппаратно-реализо- ванная таблица преобразования номера страницы в номер блока (рис. 6.14). Она носит название стра- ничной таблицы и представляет собой ЗУ, объем ко- торой равен числу страниц виртуального простран- ства. В ьм адресе этой памяти хранятся: бит F, по- казывающий, существует или нет f-я страница; бит обновления С, показывающий, было или нет обновле- ние страницы в основной памяти, и используемый для предотвращения ненужной записи во вторичную па- мять в случае удаления страницы; код RWX, показы- вающий, какая форма доступа (считывание/запись или и то и другое) разрешена к i-й странице; бит М, показывающий, находится ли /-я страница в основ- ной памяти, и наконец, номер блока PFA (page fra- me address), соответствующий i-й странице. Если F= I, М= I, то это означает, что i-я страница хра- нится в основной памяти и номер соответствующего блока представляет собой значение PFA. Следова- тельно, реальный адрес можно получить, добавив к старшей части адреса внутри страницы, входящей в состав виртуального адреса, номер блока, долучен- 17*
260 Глава 6 Виртуальный адрес Адрес4 Номер внутри страницы страницы Реальный адрес Рис. 6.14. Одинарная виртуальная память. а — преобразование адресов с помощью таблицы прямого преобразова- ния; б — виртуальное и реальное пространства памяти. F — бит досто- верности; С—бит обновления; RWX — режим доступа (чтение/запнсь/вы- полнение); М — бит «память/диск»; PFA — адрес кадра страницы. ный из страничной таблицы. Если F = 1, а М = 0, то в PFA хранится адрес страницы из вторичной па- мяти. Таблица преобразования может также хранить- ся в основной памяти.
Архитектуры памяти 261 Эффективность метода, основанного на использо- вании таблицы прямого преобразования, низка вслед- ствие того, что при каждом доступе к памяти необхо- димо как минимум два обращения: к таблице страниц и к основной памяти. Поэтому в целях увеличения эффективности был предложен другой метод, ко- торый Цзывается методом ассоциативного преобра- зования, Согласно этому методу, вместо страничной Виртуальное пространство Адрес операнда b в команде ADD указывается с помощью смещения относительно начального адреса области хранения программы Рис. 6.15. Применение регистра настройки. таблицы используется сравнительно небольшая — на 8~ 128 входов — быстродействующая ассоциативная память, в которой хранится информация о преобразо- вании наиболее часто используемых страниц. Только в тех случаях, когда первая попытка использования ассоциативной памяти окончилась неуспехом, преоб- разование выполняется с помощью страничной таб- лицы. Замена информации в ассоциативной памяти обычно осуществляется по алгоритму LRU для того, чтобы в ней накапливалась информация о наиболее часто используемых страницах. Если преобразование выполняется с использованием таблицы страниц, то полученная информация снова регистрируется в ас- социативной памяти. Ассоциативную память назы- вают буфером предыстории трансляции.
262 Глава 6 Благодаря внедрению одинарной виртуальной па- мяти можно не освобождать непрерывные области памяти размером с программу. Таким образом, ре- шаются проблемы ограниченности и фрагментации реальной памяти. В одинарной виртуальной памяти в одно линей- ное пространство загружается множество программ (процессов). Начальный адрес загрузки процесса из- меняется в соответствии с текущей стиуацией ис- пользования виртуального пространства. Поэтому в каждом процессе необходимо использовать настраи- ваемые программы, а для преобразования адресов необходим регистр настройки. В этот регистр поме- щается начальный виртуальный адрес программы. Виртуальные адреса операндов в программе начи- наются с нулевого. Таким образом, фактический вир- туальный адрес операнда получают путем добавления к адресу операнда внутри программы содержимого регистра настройки. 6.3.2. МУЛЬТИПЛЕКСНАЯ ВИРТУАЛЬНАЯ ПАМЯТЬ В одиночной виртуальной памяти одно и то же линейное виртуальное пространство используется множеством процессов, поэтому данная система не дает радикального решения проблемы защиты про- цесса и проблемы настраиваемости (relocation). Эти проблемы решаются с помощью мультиплексной вир- туальной памяти, в которой каждому процессу отво- дится свое линейное виртуальное пространство. Прин- ципиально она почти не отличается от одинарной виртуальной памяти, и главное отличие состоит в том, что для каждого процесса предусмотрена своя стра- ничная таблица. В ЦП имеется регистр-указатель процесса (PPR), который показывает страничную таблицу текущего исполняемого процесса. Каждый раз при передаче управления из одного процесса дру- гому операционная система обновляет содержимое этого регистра. Так как в мультиплексной виртуальной памяти используются независимые виртуальные простран- ства со своими для каждого процесса страничными
Архитектуры памяти 263 таблицами, то ошибочное разрушение программ и данных некоторого процесса другим процессом невоз- можно. Кроме того, поскольку программа каждого процесса загружается в независимое виртуальное про- странство, начиная с нулевого адреса, необходимость в настройке отпадает. Наличие независимых виртуальных пространств в мультиплексной виртуальной памяти исключает возможность совместного использования несколькими процессами одной и той же программы. Такую воз- можность обеспечивает описываемое ниже двумерное пространство памяти. 6.3.3. ДВУХМЕРНОЕ ПРОСТРАНСТВО ПАМЯТИ Систему с двумерным пространством называют еще системой сегментированной памяти. Такую си- стему удобно использовать, когда требуется, чтобы некоторую программу совместно использовали в ка- честве подпрограммы несколько процессов. Эту про- блему можно решить, если единицей загрузки в ос- новную память будет не процесс, а программа, на- пример основная, или подпрограмма, составляющие процесс. Каждая (под) программа фактически состоит из кодовой части, которая представляет собой после- довательность команд, части данных и стековой части, используемой в качестве стековой области. Объектом совместного использования является толь- ко кодовая часть. Поэтому фактически единицей за- грузки является не подпрограмма, а кодовая, инфор- мационная или стековая часть- Подобные логические единицы программы называются сегментами. В системе с двухмерным пространством каждому процессу отводится двухмерное виртуальное простран- ство (рис. 6.16). Это пространство представляет со- бой совокупность линейных пространств переменной длины, в каждое из которых помещается сегмент под- программы, поэтому такое линейное пространство также называется сегментом. Виртуальный адрес определяется номером сегмента и адресом внутри сегмента. Для преобразования двухмерного пространства в линейное пространство используется сегментная таб-
264 Глава 6 Виртуальный адрес Виртуальное пространство сегмента i Рис. 6.16. Двухмерное виртуальное пространство памяти. Номер Адрес Регистр базы сегментной сегмента внутри сегмента таблицы (РБСТ) Рис. -6.17. Преобразование адресов с помощью сегментной таблицы. RWX: режим доступа (чтение/запись/выполнение); L — размер сегмента; F — бит достоверности.
Архитектуры памяти 265 лица (рис. 6.17). В адресе s сегментной таблицы хра- нится информация, относящаяся к сегменту S. В эту информацию входит поле RWX, указывающее, какой тип доступа разрешается к сегменту S (чтение/за- пись), флаг F, показывающий, содержится или нет сегмент S в основной памяти, размер L сегмента S Процесс] РБСТ1 Процесс 2 РБСТ2 Рис. 6.18. Совместное использование сегмента несколькими процессами. и начальный адрес сегмента. Если F — 1, то в поле начального адреса помещается адрес из основной памяти, а если F = 0, то в это поле помещается ад- рес диска. Выборка и замена сегментов выполняется аналогично выборке и замене страниц. Реальный ад- рес определяется путем добавления к начальному адресу, полученному из таблицы сегментов, адреса внутри сегмента. На рис. 6.18 показан пример совместного исполь- зования сегмента несколькими процессами. Номер сегмента может устанавливаться в каждом процессе независимо от других. Однако когда сегментированная память исполь- зуется для отображения двухмерного виртуального пространства на реальное пространство, возникает проблема фрагментации. Решением этой проблемы является использование сегментированной системы для
266 Глава 6 отображения двухмерного виртуального пространства на линейное (одномерное) виртуальное пространство, а затем использование мультиплексной системы вир- туальной памяти для отображения линейного прост- Виртуальный адрес Реальный адрес Рис. 6.19. Система со страничными сегментами, использующая буфер предыстории трансляции. ранства на реальное пространство. Подобная система называется системой памяти со страничными сегмен- тами. В этом случае для получения реального адреса необходимы доступы к сегментной таблице и странич- ной таблице, поэтому преобразование адреса требует много времени. Для сокращения времени преобразо- вания адресов предлагается использовать ассоциатив-
Архитектуры памяти 267 ную память, выполняющую роль буфера предыстории трансляции (TLB) (рис. 6.19) аналогично тому, как это было описано в разд. 6.3.1. 6.4. АРХИТЕКТУРА ОБЩЕЙ ПАМЯТИ Существуют два типа архитектур общей памяти: архитектура с совместно используемым физическим пространством, в котором независимые логические виртуальные пространства отображаются на одно физическое пространство памяти — типа описанных выше мультиплексной виртуальной памяти или двух- мерного пространства памяти, — и архитектура с со- вместно используемым логическим пространством, предназначенная для параллельной обработки, в ко- торой используется несколько ЦП для совместной обработки в пределах одного логического простран- ства. В этом разделе рассмотрены оба типа архи- тектуры. В свою очередь совместное использование логиче- ского пространства может включать случаи, когда все логическое пространство является общим, а так- же случай, когда лишь часть пространства является общей. Кроме того, к каждой совместно используемой области запись может быть разрешена как только для одного ЦП, так и для всех ЦП. ОЗУ, которое обычно используется в основной памяти, не предусматривает возможности одновремен- ного обращения по двум разным адресам. Память, у которой существует только один порт доступа, на- зывается однопортовой памятью. Все традиционные элементы памяти являются однопортовыми. Однако в последние годы в суперкомпьютерах стали частично использовать быстродействующие- элементы памяти, имеющие несколько портов считывания/записи. По- дробности, касающиеся структуры таких элементов, еще не опубликованы, отметим лишь, что обычная ячейка МОП-памяти, используемая для хранения 1 бита информации, имеет структуру, показанную на рис. 6.20. В отличие от использования одной словар- ной шины и одной шины данных (в КМОП-памяти — две шины данных) в многопортовой ячейке число
268 Глава 6 этих линий кратно числу портов, поэтому ее струк- тура гораздо сложнее. Подобный элемент памяти на- зывается элементом многопортовой памяти [21]. В настоящее время исследуется возможность увеличе- ния емкости памяти этих элементов. Построение совместно используемого логического пространства большого объема памяти на многопор- Рис. 6.20. Ячейка статической КМОП-памяти. товых элементах проблематично с точки зрения стои- мости. Поэтому предлагаются различные системотех- нические подходы к построению многопортовой па- мяти на основе однопортовых элементов. Среди этих подходов в данном разделе будут рассмотрены сеть связи «процессор — память», мультиплексная кэш- память и многопортовая страничная память. 6.4.1. СЕТЬ СВЯЗИ «ПРОЦЕССОР — ПАМЯТЬ» Наиболее простой способ соединения ЦП с моду- лями памяти основан на использовании общей шины (рис. 6.21). Этот способ имеет две разновидности: соединение по одной шине и соединение с помощью мультиплексированной шины, при котором исполь- зуется несколько шин. В частности, в последнем слу-
Архитектуры памяти 269 чае, если число шин равно числу ЦП, то каждый ЦП может владеть одной шиной. Такой способ соединения называется соединением с использованием индиви- дуальных шин. Тем не менее в любом случае одновре- менный доступ нескольких ЦП к нескольким модулям памяти невозможен. Если возникает конфликт по до- ступу, то разрешается выполнение только одного из а б Рис. 6.21. Соединение по шине. них, а все остальные ожидают своей очереди. Если индивидуальных шин нет, то одновременное исполь- зование двумя и более ЦП одной шины невозможно. Каждая шина снабжена арбитром шины, который принимает запросы на пользование шиной, переда- ваемые из ЦП, и упорядочивает их для предотвра- щения конфликтов из-за одновременного пользования шиной несколькими ЦП. Одним из средств, наиболее широко используемых для реализации связи «процессор — память», является многоуровневая сеть связи. Эта сеть связи имеет N входных и N выходных терминалов; между N входа- ми и N выходами существует многоуровневая струк- тура, причем каждый уровень состоит из группы коммутаторов. Управляя коммутаторами каждого уровня, можно соединять между собой нужные тер- миналы. Связь между входными и выходными
270 Глава 6 терминалами может быть как односторонняя, так и двухсторонняя. Если для соединения процессора с па- мятью используется односторонняя связь, то необхо- димы две сети: одна — для передачи данных записи и адреса, а другая — для приема данных считывания. Многоуровневые сети связи бывают трех типов: неблокирующие сети, неблокирующие сети с реконфи- гурацией и блокирующие сети. Блокировка возникает Рис. 6.22. Матричный коммутатор. при одновременном поступлении множества запросов передачи на один и тот же выходной терминал через один коммутатор. В неблокирующих сетях обычно возможна реализация соединения между любыми входными-выходными терминалами без изменения установки коммутатора, используемого для соедине- ния между другими терминалами. К сетям этого типа относятся матричная сеть, сеть Клоша и др. В неблокирующих сетях с реконфигурацией также возможна реализация соединения между произволь- ными входными-выходными терминалами, но для этого необходимо изменить установку коммутатора и маршрут связи между соединенными терминалами. Примерами таких сетей являются сеть Бенеша, бито- нальная сеть, сеть «Мемфис» и т. д. В блокирующих сетях можно реализовать только из всех возможных комбинаций связи числом АЛ между tV входными и N выходными терминалами. К блокирующим сетям относятся сеть «Омега», двоичная n-кубическая сеть, сеть Баньяна и др.
Архитектуры памяти 27! 1. Матричная сеть. В матричной сети с N входами и М выходами, как показано на рис. 6.22, исполь- зуется N2 коммутаторов и каждый вход можно со- единять с любым выходом. Время задержки распро- странения сигнала между терминалами определяется только задержкой в одном коммутаторе. Матричная сеть относится к неблокирующим сетям. 2. Сеть Клоша [23, 24]. Сеть Клоша имеет струк- туру, показанную на рис. 6.23. Прямоугольниками на Рис. 6.23. Сеть Клоша. этом рисунке обозначены матричные сети размер- ностью иХ^» гХг или тХп соответственно. С по- мощью такой структуры можно реализовать сеть связи с N входами и N выходами, где N = пХ г. Об- ратите внимание, что при т 2п—1 эта сеть стано- вится неблокирующей сетью. 3 3. Сеть Бенеша [25, 26]. Сеть Бенеша с N вхо- дами и W выходами имеет симметричную структуру (рис. 6.24), в каждой половине которой между N/2 входными и N/2 выходными коммутаторами распо- ложена такая же сеть Бенеша, но с N/2 входами и N/2 выходами. Коммутатор имеет два рабочих со- стояния, как показано на этом рисунке. Каждый вход- ной коммутатор имеет две выходные линии, а каждый выходной коммутатор — две входные линии, из этих линий одна соединяется с верхйей сетью Бенеша, а другая — с нижней сетью Бенеша. Число уровней
212 Глава 6 коммутаторов от входа до выхода равно 21og2Af—1, а общее число коммутаторов в сети равно Af(21og2W— -1)/2. Несмотря на то что эта сеть относится к типу не- блокирующих сетей с реконфигурацией, ее нельзя Входы Коммутаторы Коммутаторы Выходы Два состояния коммутатора Рис. 6.24. Сеть Бенеша. назвать полностью неблокирующей сетью. Кроме того, для установки коммутатора при последователь- ной обработке требуется время O(AUog?V), поэтому динамическое изменение соединения невозможно. Для параллельной обработки был предложен алгоритм установки коммутатора за время O((log?V)4), однако этот алгоритм практически нереализуем. Поэтому широкое распространение получил метод, по кото- рому заранее вычисляется и запоминается установка
Архитектуры памяти 273 коммутатора для наиболее часто используемых ком- бинаций связи, и при изменении связи из них выби- рается нужная комбинация сигналов установки ком* мутатора. 4. Сеть связи, использующая битональный сорти- ровщик. Эта сеть [27] была рассмотрена в разд. 2.3, и если осуществлять сортировку по информации об адресе, которой снабжаются передаваемые данные, то можно реализовать передачу данных между нуж- ными терминалами. Число (уровней) коммутаторов равно logW(logtf+1)/2, а общее число коммутато- ров равно AUogW(log?/-j- 1)/4. 5. Сеть «Мемфис». Как известно, если в сети Клоша (рис. 6.23) 2и — 1 > т и, то она будет представлять собой неблокирующую сеть с (динами- ческой) реконфигурацией [24]. Частный случай этой сети при т — п = г называется сетью «Мемфис». Сеть «Мемфис» была использована в системе GF-11, разработанной в Лаборатории Ватсона фирмы IBM. 6. Сеть «Омега» [29—31]. На рис. 6.25 показана 8-входовая 8-выходовая сеть «Омега». Сеть «Омега» обеспечивает перекрестное (shuffle) соединение с по- мощью группы коммутаторов log2?V уровней. Общее число коммутаторов — AUog2?V/2, а общее число со- единений, которые можно реализовать при помощи этой сети, равно 2(ЛГ iog2/v/2)/2. дт0 число гораздо мень- ше, чем ДИ, т. е. сеть «Омега» является блокирующей сетью. Рассмотрим установку коммутатора для соедине- ния входного и выходного терминалов, двоичное n-разрядное представление номеров которых есть со- ответственно (апап-\ ... ах) и (bnbn-\ ... Ь\) для случая, когда N = 2п. При первом переключении входной терминал соединяется с терминалом (ап-\ап-2 •.. CL\an). Если первым коммутатором управлять таким образом, чтобы при = 0 была прямая связь его входа с выходом, а при an®bn = 1 — перекрестная связь, то требуемый вход будет соединен с терминалом (ап-\ап-2 ... aibn). 18—1145
274 Глава 6 Повторив этот процесс n = log2^ раз, получим соеди- нение входного терминала (anan-i ... «1) с выходным терминалом (bnbn-\ ... Ь\) Коммутаторы Коммутаторы Коммутаторы Коммутаторы такого же типа, что и на рис. 6.24 Рис. 6.25. Сеть ’’Омега”. Коммутаторы Коммутаторы Коммутаторы Коммутаторы такого же типа, что и на рис. 6.24 Рис. 6.26. Косвенная л-кубическая сеть. 7. Косвенная двоичная л-кубическая сеть [32, 33]. На рис. 6.26 показана 8-входовая 8-выходовая кос- венная двоичная n-кубическая сеть. В этой сети, как о При этом последовательно перебираются биты bi от i = п до i = 1. — Прим. ред.
Архитектуры памяти 275 показано на рисунке, последовательно расположены группа коммутаторов и сеть связи типа «бабочка», а на самом последнем уровне используется сеть с об- ратным перекрестным соединением. Фактически эта сеть представляет собой обращенную сеть «Омега». В этом можно убедиться, если соответствующим обра- зом поменять местами коммутаторы в каждом уровне сети «Омега», за исключением первого и последнего. 8. Сеть Баньяна [34]. Если из косвенной двоичной n-кубической сети удалить сеть с обратным пере- крестным соединением, расположенную на последнем уровне, то получим сеть, которая носит название сети Баньяна. 9. Сеть с базовой линией. Структура этой сети показана на рис. 6.27, из которого видно, что она Коммутаторы Коммутаторы Коммутаторы Коммутаторы такого же типа, что и на рис. 6.24 Рис. 6.27. Сеть с базовой линией. совпадает с первыми log2W уровнями сети Бенеша, показанной на рис. 6.24. Если к последнему уровню этой сети добавить сеть с инверсной перестановкой бит, то получим так называемую /?-сеть. Сеть с ин- версной перестановкой битов имеет фиксированные связи входного терминала (апап~\ ... ai) с выходным терминалом (aia2 ... ал)—сеть фактически представ- ляет собой косвенную двоичную n-кубическую сеть. 18*
Глава 6 276 10. Конфликты и их предотвращение. При исполь- зовании многоуровневых сетей связи между процес- сорами и банками памяти возникают конфликты двух типов. Первый тип — это конфликты, возникающие при запросе доступа к одному и тому же банку памяти от двух и более процессоров. Каждый банк памяти яв- ляется однопортовым ЗУ, и одновременно он позво- ляет обрабатывать только один запрос на доступ. В неблокирующих сетях и неблокирующих сетях с реконфигурацией не бывает конфликтов при до- ступе к банкам памяти. Однако из-за того, что уста- новка коммутаторов в этих сетях связи сложна и требует много времени, они редко используются для соединения типа «процессор — память». В блокирую- щих сетях, несмотря на то что конфликты по доступу также отсутствуют, возможны случаи блокировки. То есть конфликт возникает в коммутаторе сети связи. То же самое имеет место и в других сетях связи. Для того чтобы предотвратить возникновение конфликтов в коммутаторах, каждый коммутатор снабжают небольшим буфером. При возникновении конфликта только один запрос передается на сле- дующий уровень, а остальные накапливаются в бу- фере в виде очереди, и если выход свободен, то ожи- дающие запросы последовательно пересылаются, на- чиная с головы очереди. Очередь.устанавливается для каждого выходного терминала. Таким образом, если в сети связи, использующей коммутаторы с буферами ограниченного размера, приходят запросы на доступ к одному банку памяти сразу из нескольких портов, то заполняется буфер коммутатора самого последнего уровня, который со- единен с этим банком, а также заполняется буфер коммутатора предыдущего уровня, который соединен с вышеупомянутым коммутатором. Затем заполняется буфер следующего в обратном порядке коммутирую- щего модуля и т. д., пока буферы всех предшествую- щих коммутаторов не окажутся заполненными. Таким образом, все запросы на доступ устанавливаются в состояние ожидания, причем не только запросы до- ступа к какому-то одному банку, но и любые запро- сы от всех портов подвергаются такому же воздей-
Архитектуры памяти 277 ствию и устанавливаются в состояние ожидания. Это явление называется коробкой (hot spot contention), оно впервые было открыто и проанализировано Пфи- стером и Нортоном в 1985 г. применительно к сетям связи с перекрестным соединением [35]. Одна из серьезных задач, которые предстоит решить в буду- щем, связана с тем, как избежать этого явления. 6.4.2. МНОЖЕСТВЕННАЯ КЭШ-ПАМЯТЬ Как уже было сказано в предыдущем разделе, для предотвращения конфликтов по доступу в систе- мах многопортовой памяти, в которых множество однопортовых банков соединены через сеть связи, не- обходима очередь запросов. Кроме того, когда за- просы на доступ к одному банку поступают сразу из Процессоры Локальные кэш-памяти Сеть связи Общие банки памяти Рис. 6.2. Мультиплексная кэш-память. нескольких портов, то не только они, но и запросы от всех портов упорядочиваются в очередь, т. е. возни- кает ситуация, когда состояние ожидания устанавли- вается для всех портов. Для решения этой проблемы предлагается уста- новить для каждого ЦП локальную кэш-память (рис. 6.28). Эта система называется архитектурой множественной кэш-памяти. В любой системе общей памяти: от системы соединения множества банков памяти через многоуровневую сеть связи до соеди- нения отдельных банков памяти по одной общей
278 Глава 6 шине можно использовать метод множественной кэш-памяти. Главной задачей каждой локальной кэш-памяти является снижение частоты доступа к общей памяти за счет сохранения копии данных, к которым однаж- ды было обращение, в кэш-памяти. При использова- нии множественной кэш-памяти копия содержимого некоторого адреса основной памяти сохраняется во многих кэш-памятях, и когда один из ЦП автономно обновляет это содержимое, одинаковость копий (со- гласованность) не обеспечивается [36, 37]. Используя метод обновления основной памяти, изложенный в разд. 6.2.3, можно достичь одинаковости содержимых каждой кэш-памяти и основной памяти, но согласо- ванность между разными кэшами не обеспечивается. Одним из способов решения этой проблемы яв- ляется считывание в кэш-память только тех данных, которые нельзя обновить при обычном доступе к об- щей памяти. Этот способ позволяет понизить частоту доступа к основной памяти и частоту возникновения конфликтов только в отношении постоянных данных (только для чтения). Для того чтобы в кэш-памяти можно было хра- нить копии обновляемых данных, необходим динами- ческий контроль согласованности. Один из методов такого контроля описан ниже. В случае обновления некоторым процессором Р в кэш-памяти копии дан- ных адреса х общей памяти он сначала сообщает всем остальным процессорам, что копия из адреса х является неправильной, записывает в общую память значение после обновления, ожидает прихода от дру- гих процессоров сигнала подтверждения, после чего переходит к следующей обработке. Этот метод неэф- фективен'с точки зрения использования метода сквоз- ной записи и с точки зрения необходимости сообще- ния всем процессорам об обновлении копии. Для решения этих проблем предлагается метод передачи обновленного значения в другие кэш-памяти, которые имеют копии обновленных адресов, а также метод, по которому к каждой копии в кэш-памяти добавляется теговая информация, которая показывает, существуют или нет другие кэш-памяти, содержащие эту копию,
Архитектуры памяти 279 и в случае обновления — необходимо или нет сооб- щать об этом другим кэш-памятям. Для сравнения возможностей этих способов не- обходимы количественные данные относительно ком- бинаций доступа к общему пространству памяти для чтения и записи и соответствующая аналитическая модель, но в настоящее время эта проблема слабо изучается. 6.4.3. МНОГОПОРТОВАЯ СТРАНИЧНАЯ ПАМЯТЬ В системе, имеющей множественную кэш-память, доступ к общей памяти осуществляется поблочно. Когда доступ к памяти выполняется не словами, а блокамй, можно построить многопортовую память, в которой не используются лишние копии, нет конф- ликтов и нет необходимости в механизме ожидания. Такая система памяти была предложена Танакой в 1984 г. [38]. На рис. 6.29 показан пример способа построения многопортовой страничной памяти. Эта система со- стоит из трех структурных составляющих: множества банков памяти, многоуровневой сети связи и контрол- лера сети связи. В качестве многоуровневой сети можно использовать различные типы сетей, но в дан- ном случае показан пример с использованием ком- мутатора с одним входом и двумя выходами. Этот коммутатор соединяет линии на основании управляю- щих сигналов «О» и «1», как показано на рисунке. Из контроллера сети связи выходит по одной линии одноразрядного управляющего сигнала на каждый уровень, т. е. все коммутаторы одного уровня соеди- няют линии по управляющему сигналу для этого уровня. Число портов равно степенд 2 (2Л). Из конт- роллера сети связи периодически посылаются двоич- ные n-разрядные управляющие сигналы от 0 до 2п—1, где самому старшему разряду соответствует управляющий сигнал самого верхнего уровня. Следо- вательно, порт i может быть последовательно соеди- нен с каждым из банков /, 1*4-1, ...» 2Л—1, 0, ... ..., i—1. При этом конфликтов по доступу к бан- кам не возникает.
280 Глава 6 Рис. 6.29. Многопортовая страничная память. Действие коммутатора Размер блока выбирается равным или кратным 2Л, а адреса памяти распределяются таким образом, чтобы было чередование банков, как показано на рисунке. Допустим, что, когда управляющий сигнал сети связи равен двоичному n-разрядному числу jt из порта i запрашивается доступ к блоку Ь. При этом порт i соединяется с банком, имеющим номер (г +/) (mod 2Л) в котором хранятся данные адреса (i-j-/) (mod2n) из блока Ь и к которому возможен доступ. После этого можно последовательно выполнять доступ к данным адресов (/+ / + I) (mod2"), (/+□ ° /((mod/) (k,l — целые) означает любое число, которое дает при делении на / тот же остаток, что и при делении k на /. — Прим. ред.
Архитектуры памяти 281 + / + 2) (mod2n), (i + / + 2n—l)(mod2n) без конфликта с другими портами. По окончании выпол- нения шагов, число которых равно числу слов в бло- ке, доступ ко всем адресам в этом блоке завершается. Эта обработка выполняется независимо от других портов, поэтому конфликтные ситуации и очереди полностью отсутствуют. Помимо того что многопортовую страничную па- мять можно использовать в качестве общей памяти системы с множественной кэш-памятью, ее можно ис- пользовать и в качестве многопортовой дисковой кэш-памяти. 6.5. АРХИТЕКТУРА ИНТЕЛЛЕКТУАЛЬНОЙ ПАМЯТИ По мере расширения области применения компью- теров— от выполнения операций над числами до об- работки и использования интеллектуальной инфор- мации и знаний — становилось ясно, что одними лишь мерами по увеличению быстродействия и расширения функциональных возможностей устройств обработки, а также увеличением быстродействия памяти уже не обойтись. Поэтому стали нарастать темпы и объем исследований по интеллектуализации памяти и рас- ширению ее возможностей. В данном разделе рас- смотрены три разновидности архитектур интеллек- туальной памяти: ассоциативная память, память се- мантических структур и память продукций. 6.5.1. АССОЦИАТИВНАЯ ПАМЯТЬ [39—41] Структурная схема ассоциативной памяти пока- зана на рис. 6.30. Блок памяти разбит на слова, т. е. память хранит информацию в виде множества слов. Регистр данных, регистр маски и выходной регистр имеют размер одного слова. В регистре обратной связи и рабочем регистре каждому слову блока па- мяти соответствует однобитовая ячейка. Ассоциатив- ная память выполняет функции поиска, считывания и записи данных. В регистр данных и регистр маски можно только записывать данные, а из выходного ре- гистра— только считывать данные.
282 Глава 6 Если указывается режим поиска информации, то используются заранее установленные значения в ре- гистрах данных и маски. А именно, среди всех дан- ных, хранящихся в блоке памяти, выбираются слова, которым соответствуют биты регистра обратной связи, равные 1, и для этих слов сравнивается, равны или нет значения всех разрядов, указанных регист- ром маски, значениям тех же разрядов регистра Регистр данных Регистр маски Выходной регистр Рис. 6.30. Ассоциативная память. данных, и единица в регистре обратной связи, соот- ветствующая слову, не совпавшему с содержимым регистра данных, сбрасывается в нуль. В итоге поиск выполняется во множестве слов, указанных регистром обратной связи, и в нем остаются биты только тех слов, которые удовлетворяют условию. Если указывается режим считывания, то сбрасы- вается самая старшая единица регистра обратной связи, а слово внутри блока памяти, соответствую- щее этому разряду, считывается в выходной регистр. Повторяя эту операцию, можно последовательно счи- тать все слова, указанные регистром обратной связи. Если указывается режим записи, то из всех раз- рядов всех слов, указанных регистром обратной свя-
Архитектуры памяти 283 зи, значения, указанные регистром маски, записы- ваются во все разряды регистра данных. Помимо этих режимов (функции) используется также функция установки 1 во все ячейки регистра обратной связи и т. д. Сравнение слов памяти с содержимым регистра данных может выполняться как параллельно, так и последовательно. В полностью параллельной ассоциа- тивной памяти все сравнения выполняются одновре- менно. В системе с параллельным сравнением разря- дов (последовательным сравнением слов) сравнение выполняется по одному слову. В отличие от этого в системе с параллельным сравнением слов (последо- вательным сравнением разрядов) сравнение выпол- няется последовательно по одному разряду, но для всех слов одновременно. Ассоциативная память с па- раллельнььм сравнением слов или разрядов не яв- ляется полностью ассоциативной памятью, поэтому ее называют квазиассоциативной памятью или ассо- циативным процессором. Процессор STARAN фирмы Good Year — матрич- ный ОКМД-процессор, способный выполнять ассоциа- тивный поиск с параллельным сравнением разрядов (последовательным сравнением слов) и наоборот, т. е. с параллельным сравнением слов и последовательным сравнением разрядов [42—44]. Общая память систе- мы STARAN состоит из 256 банков, каждый разме- ром 1 бит X 256 слов, и соединяется с 256 процессора- ми при помощи сети связи, называемой флип-сетью. Бит В слова с адресом W хранится в ячейке В банка памяти С, который определяется следующим обра- зом: С = BQW. Исходя из этого, W удовлетворяет условию W = BQ)C. Все значения — С, В и W— яв- ляются 8-разрядными. Допустим, что правило адре- сации, с помощью которого определяется В, есть B = G®(MC), где G и М — также 8-разрядные сиг- налы. МС — это логическое произведение каждой пары битов М и С. Сигналы G и М называются со- ответственно сигналами глобального адреса и сиг- налами режима доступа. Из W = BQ)C и B = G© ф(Л4С) получим W=G(Q(МС). Здесь М означает ин- версию бита М. Флип-сеть соединяет каждый банк
284 Глава 6 памяти С с процессором Р, где P = G®C. Отсюда получаем, что C=G®(A1C), а из этого равенства и из равенства W = Оф(Л1С), B = G®(A4C) получим 1T = (MG)®(MP), В = (ЛШ)ф(Л4Р). Если М = 11111111, то W= G, В = Р, т. е. к 256раз- рядам слова с адресом G выполняется параллельный доступ из 256 процессоров. Если М = 00000000, то W = Р, В — G и к 256-му разряду 256 слов выпол- няется параллельный доступ из 256 процессоров. Кроме этих значений могут быть другие значения М, в этих случаях также будет выполняться параллель- ный доступ. 6.5.2. ПАМЯТЬ СЕМАНТИЧЕСКОЙ СТРУКТУРЫ Одним из средств представления знаний в систе- мах обработки знаний является семантическая сеть [45]. Это граф, который, как показано на рис. 6.31, имеет семантическую структуру. Если поместить по- добную семантическую структуру в память для об- работки одним процессором, то на ассоциативный поиск вершины, соответствующей определенному по- нятию, и поиск всех вершин, которые имеют с ней определенную семантическую связь, требуется много времени. Однако если каждую вершину сети снабдить процессором и реализовать связь между ними с по- мощью межпроцессорной сети связи, то управление
Архитектуры памяти 285 подобной семантической сетью и ассоциативный по- иск в ней можно будет выполнять параллельно ап- паратным путем, что позволит значительно повысить скорость обработки. Такая система была впервые предложена Фалма- ном в 1979 г. [46]. Планировалось, что в машине, на- званной NETL, в каждом узле семантической сети будет расположен процессор и связь между процессо- рами будет осуществляться через сеть связи, называе- мую «жесткой сетью». После этого в 1981 г. Д. Хиллисом из МТИ была спроектирована «Машина соединений» (Connection Machine), выпуск которой налажен в настоящее вре- мя фирмой Thinking Machines [47,48]. Эта машина состоит из 65 536 ячеек, каждая из которых содержит память емкостью 4096 бит и одноразрядное АЛУ. На одном кристалле размещены* 16 таких ячеек, которые вместе с маршрутизатором образуют один узел двоичной 12-кубической сети. Двоичная п-кубическая сеть представляет собой сеть связи, состоящую из 2п узлов; каждая вершина n-мерного гиперкуба яв- ляется узлом этой сети, а каждое ребро — двухсто- ронней линией связи. Главная ЭВМ и Машина соединений соединяются друг с другом при помощи двух шин: шины памяти, используемой для связи каждой ячейки с памятью, и глобальной шины, по которой в главную ЭВМ пе- редаются результаты опроса состояния каждой ячейки. При работе совместно с Лисп-машиной целью Машины соединений является параллельное выпол- нение ассоциативной обработки списков. Для этого в качестве базовой структуры данных была исполь- зована структура Xector (Ксектор). Эта структура представляет собой совокупность элементов, состоя- щих из пар ((индекс)->(значение)), и описывается в виде {банан-> желтое яблококрасный}. Парал- лельные операции со структурой Xector определяются a-операцией и 0-операцией. а-Операция параллельно использует операции с каждым элементом одного ин- декса, например: (а+ '{А-+ХВ-+2} ’{А->ЗВ->4})=^{А->4В->6},
286 Глава 6 а с помощью p-операции получают одно значение, используя операции со всеми значениями структуры Xector, например: (Р+ В—>2 С-^3})=>6. В Машине соединений ассоциативный поиск при вы- полнении этих операций и само применение операций выполняются параллельно. 6.5.3. ПАМЯТЬ ПРОДУКЦИЙ В тех случаях, когда нельзя достаточно проанали- зировать структуру и характер проблемы и нельзя ал- горитмическим путем решить проблему, необходимо использовать способы решения проблем применитель- но к конкретным случаям. Для описания подобной обработки широко используются продукции (правила логического вывода). Программа при этом описы- вается в виде совокупности продукций. Каждая про- дукция имеет условную и заключительную части. При выполнении программы используется рабочая память, содержимое которой изменяется в процессе обработ- ки. При каждом шаге сравниваются условные части всех продукций с содержимым рабочей памяти и вы- бирается та продукция, условие которой удовлетво- ряет содержимому памяти. Если оказалось, что таких продукций две и более, то по заранее определенной стратегии выбирается одна из них, выполняется за- ключительная часть этой продукции и обновляется содержимое рабочей памяти. Например, правило «Если завтра в некотором городе штата Нью-Йорк не будет дождя, то в этот город завтра можно будет совершить экскурсию» выглядит следующим образом: (р сделать-возможный-экскурсия) (город | имя <х> штат Нью-Йорк) -(погода-прогноз f место <х> дата завтра f пого- да дождливая) -^(сделать-возможный-экскурсия | вместо <х> f дата завтра). Смысл этого правила заключается в том, что если в рабочей памяти зарегистрирован элемент (город|
Архитектуры памяти 287 имя <х> f штат Нью-Йорк) и для того же значения х в памяти отсутствует элемент (погода-прогноз f место <х> дата завтра | погода дождливая), то в нее будет записан элемент (сделать-возможный-экскур- сия f место <х> | дата завтра. Для того чтобы ускорить выполнение подобной об- работки, необходимо с высокой скоростью выполнять сопоставление всех элементов в рабочей памяти со всеми продукциями. Алгоритм сопоставления RETE предполагает упорядочение в виде сети всех проме- жуточных результатов повторно выполняемого сопо- ставления и их накапливание. При необходимости со- поставления обработка ограничивается только теми частями, которые были обновлены при обработке пре- дыдущих заключительных частей продукции. Таким образом, этот метод позволяет сократить объем вы- числений [49]. Для еще большего увеличения скорости необхо- димо использовать методы параллельного сопостав- ления или ассоциативного сопоставления. Этой цели отвечают системы САР — матричный, секционно-раз- рядный ОКМД-процессор американской фирмы ITT, и DADO Колумбийского университета, в каждом узле двоичного дерева которой расположен процессор. В основном используются методы, аналогичные тем методам, которые используются в ассоциативной па- мяти, ассоциативных процессорах, машинах баз дан- ных и т. д.
Глава 7 ЯЗЫКИ ИСКУССТВЕННОГО ИНТЕЛЛЕКТА И МАШИНЫ ИСКУССТВЕННОГО ИНТЕЛЛЕКТА Существенное отличие сферы искусственного ин- теллекта (ИИ) от других приложений вычислитель- ной техники заключается в том, что при попытке ре- шить некоторую задачу возникают довольно сложные проблемы, связанные с проектированием и составле- нием необходимых для этого программ, что неиз- бежно приводит к значительным изменениям как в программах, так и в используемых в них структурах данных. Это обусловлено тем, что в сфере ЙИ объ- ектами являются почти неформализуемые задачи, структуры и атрибуты которых невозможно с самого начала четко проанализировать. Главной целью ис- следований в сфере ИИ является рассмотрение в ка- честве задач объектов с подобными нечеткими струк- турами и атрибутами, с тем чтобы сделать их чет- кими. Кроме того, задачи, решаемые в сфере ИИ, не предусматривают обработки данных с фиксирован- ной структурой, например отдельных численных зна- чений или матриц численных значений. В этой сфе- ре чрезвычайно важное значение имеет обработка отношений между данными. При этом нужно отме- тить, что эти отношения претерпевают существенные изменения в ходе выполнения программы. Языки искусственного интеллекта призваны обес- печить простоту подобных модификаций программы и данных и, в частности, сделать более простым опи- сание операции модификации структуры данных. Од- нако помимо языка, обеспечивающего простоту со- ставления программы в задачах искусственного ин- теллекта, необходима система (называемая средой программирования) поддержки составления и разра- ботки программного обеспечения, в функции которой входили бы написание программы, проверка правиль- ности ее выполнения, быстрое исправление тех мест
Языки ИИ и машины ИИ 289 программы, где имеют место ошибки, и ее повторное выполнение. В данной главе рассматриваются типичные языки искусственного интеллекта — Лисп и Пролог, их осо- бенности, а также описываются структуры машин, позволяющие с большей эффективностью использо- вать эти языки. 7.1. ЯЗЫК ЛИСП И ЛИСП-МАШИНА Все данные, которые способны обрабатывать вы- числительные машины, можно разделить на две категории: числовые данные и нечисловые данные. В научно-технических расчетах и коммерческой дея- тельности объектами обработки являются главным образом числовые данные — целые и вещественные числа, матрицы и т. п. Однако при решении задач искусственного интеллекта в отличие от численных расчетов необходимы накопление в ЭВМ и обработ- ка в виде символов всевозможных понятий, которыми мы оперируем, окружающих нас предметов, а также отношений между предметами. Эти предметы и от- ношения между ними мы обычно выражаем словами, поэтому и в машине они представлены не как числен- ные значения, а как нечисловые данные, другими сло- вами, символьные данные. Обработка символьных данных отличается от обработки простых данных типа отдельных числовых значений или фиксирован- ных матричных структур этих значений. Это отличие заключается в том, что обрабатываемые данные имеют сложную структуру, динамически изменяемую в ходе обработки. Нечисловые, символьные данные, имеющие подобную структуру, называются списко- выми данными, а обработка списковых данных назы- вается символьной обработкой или обработкой спи- ска. Разумеется, и при символьной обработке также необходимы бывают численные расчеты. Однако в отличие от числовой обработки, объектами которой являются только числа и главная цель которой за- ключается в быстром выполнении численных расче- тов, главными целями символьной обработки являют- ся представление отношений между предметами и 19 1145
290 Глава 7 эффективная обработка этих отношений. Лисп, Про- лог, Смолток и др. являются типичными языками, имеющими функции обработки списков. Язык Лисп, как следует из его названия (List Processing — обработка списков), был спроектиро- ван для символьной обработки. Иначе говоря, целью в данном случае является построение математически строгой модели на основе описываемых ниже понятий рекурсии и функций, с помощью которых в унифици- рованной форме представляются структуры данных, являющихся объектами обработки на ЭВМ, и их об- работка и практическое использование этой модели. Механизм обработки языка Лисп можно рассмотреть на примере реализации на существующих ЭВМ си- стемы лямбда-исчисления, описанной в гл. 4. Язык Лисп был предложен примерно 25 лет на- зад Джоном Маккарти из МТИ (который ныне яв- ляется профессором Станфордского университета) [1]. Впоследствии были разработаны новые версии этого языка — Maclisp [2] (МТИ) и Interlisp [3] (фирма «Ксерокс»), а в настоящее время разработа- ны языки Zetalisp [4] для Лисп-машин и стандарт- ный язык Common Lisp на основе языков Maclisp и Zetalisp. Нужно отметить, что помимо указанных существует множество других разновидностей языка Лисп, и в данной главе будут изложены основные отличительные черты, присущие всем этим разновид- ностям языка Лисп. 7.1.1. ТИПЫ ДАННЫХ И СТРУКТУРЫ списков Данные, используемые в языке Лисп, имеют дре- вовидную структуру (см. рис. 7.1). Древовидная структура — это концептуальное представление струк- туры данных, хранимых в памяти компьютера. Обыч- но на самом верхнем уровне этого дерева располо- жен корень, под ним расположены узлы, связанные с корнем через ветви, а под узлами расположены другие узлы, также соединенные с верхними узлами через ветви. Таким образом, узлы имеют иерархиче- скую структуру, на самом нижнем уровне которой располагаются листья (это по сути является перевер-
Языки ИИ и машины ИИ 291 нутым представлением обычного дерева). Это наи- более распространенная структура данных. Древо- видная структура, в которой от каждого узла исходят (((а.6).(с.с/)).((а.с).(6.е))) (a.(6.(c.(d.(e.nil)))),) Ez (a b c d e ) nil e (((((nil.e).d).c).6).a) Рис. 7.1. Структура данных списка (древовидная структура). две ветви, называется бинарным деревом. Такое би- нарное дерево называется списочной структурой, а данные, имеющие структуру бинарного дерева, назы- ваются списочными данными. Все данные, показан- ные на рис. 7.1, относятся к данным с древовидной бинарной структурой. 19*
292 Глава 7 Показанные на рис. 7.1 древовидные структуры в тексте программы представляются с помощью ско- бок, например, следующим образом: (а.{Ь,(с.(d.(e. nil))))) (((((nil.e). d). c), b), a) Такое представление называется S-выражением (здесь S — аббревиатура от слова symbolic (символьный)). В языке Лисп все данные используются в виде спи- сковых данных и представляются с помощью S-Вы- ражения. Обращение с программой, написанной на Лиспе, такое же, как и со списковыми данными, по- этому программа представляется с помощью S-выра- жения. Связи между типами данных, используемых в язы- ке Лисп, показаны на рис. 7.2. S-выражение ”1-- Атом —i— Символы Числа-i— Целые числа — Списки I—Числа „ с плавающей точкой Рис. 7.2. Типы данных, используемых в Лиспе. Числа подразделяются на целые числа и десятич- ные дроби. Целые числа не содержат десятичной точки, например: 7, —245, 3, 345 и т. п. Десятичные дроби в отличие от целых чисел имеют представле- ние 3.0, — 216.0 и т. п. В языке Лисп так же, как и в других языках, ис- пользуются элементарные операции (типа четырех арифметических операций) для вычислений. Операции языка Лисп представлены в форме (<имя операции) данные данные...), т. е. с помощью S-выражения. (Рассмотренные в следующем разделе функции так- же представляются в подобной форме.) Под именем операции подразумевается символ (типа +, —, X, /, div, mod), означающий конкретную операцию. На- пример, (+^ ^) означает а + (/(+ я Ь) (— с d))
Языки ИИ и машины ИИ 293 означает (а-\-Ь)/(с— d). Рассмотрим простой при- мер. (А-+В означает: «результатом выполнения опе- рации А является В»). (+ 3 5)—>8 (+ (X 3 2)( / 8 2))->(+ 6 4)—>10 Как видно из рис. 7.2, числа относятся к атомам, однако помимо них атомами считаются и последо- вательности символов, например abc, lisp, foo, q 123, first и т. д., которые называются символьными ато- мами. В более строгом смысле списком можно на- звать данные, представление которых начинается со скобки и заканчивается скобкой, а между скобками расположены ненулевые атомы или списки. Напри- мер, все приведенные ниже выражения являются списками: nil (1) (а. {Ь, (с. nil))) (2) (а (1. (Ь. (ааа, (4. (5. nil)))))) (3) (а. ((а. ())). ((а. (Ь. (с. ()))()))) (4) ( ) (5) (abed) (6) (al Ь (а а а 4 5)) (7) (а (а) (а 6 с)( )) (8) ((а (Ь (с de)(aa))(bbb))d) (9) В самом первом примере nil скобки отсутствуют, он называется пустым списком, и иногда вместо nil можно записать ( ). Разумеется, (+a(Xcd) (/123.31 0.003) также является S-выражением и (Я люблю девушку (хорошенькую и привлекательную)) также является S-выражением. Как правило, последовательность двух списков также является списком. Например, последователь- ность двух списков а и b представляется как (а, Ь) (операция соединения двух списков называется cons, она является важной элементарной операцией в об- работке списков, см. следующий раздел). Если
294 Глава 7 подобная объединенная структура используется в ста- ром представлении, то она содержит большое число точек и скобок и становится трудночитаемой, поэтому возникла необходимость в сокращении числа точек и скобок. Правило сокращения для произвольных списков а и b определяется следующим образом: (a.nil)->(a) (я. (6. nil))-> (а Ь) Следуя этому правилу, список (а. (6. (с. (d. ( ))))) можно преобразовать к виду (a b с d), а ((а b с). (1 2 3 4)) можно преобразовать к виду ((a b с) 1 2 3 4). Представление, в котором используются точ- ки, называется точечным представлением, а пред- ставление, в котором точки не используются,— спи- сочным представлением. В точечном представлении более понятно соответствие древовидной структуре, поэтому его особенно удобно использовать в тех слу- чаях, когда внутренняя структура данных является сложной. Тем не менее из-за большого числа скобок оно становится трудночитаемым, поэтому часто ис- пользуют списочное представление, не содержащее точек. Разумеется, допускается использование и спи- сочных представлений, содержащих точки, например: (a b c.d) (((а b с). (1 2 3 4 5)). (q ау.(х у z))) 7.1.2. ФУНКЦИИ В языке Лисп все операции с данными выполня- ются при помощи функций, и все программы, напи- санные на Лиспе, носят название функций. К функ- циям относятся встроенные изначально в Лисп- систему функции, а также функции, определенные пользователем. Встроенные функции принято называть базовыми В частности, упомянутые выше операции над число- выми значениями являются базовыми функциями. К базовым функциям помимо этих операций относят- ся функции, используемые для операций над списко-
Языки ИИ и машины ИИ 295 выми данными (составление списка, разделение спи- ска, проверка выполнимости условий списка и др.). Базовые функции для операций со списками мож- но разделить на три класса: cons, саг и cdr. Комбини- руя между собой базовые функции этих трех видов, можно выполнять сколь угодно сложные операции со списковыми данными. 1. Функция cons, cons является функцией двух аргу- ментов. Запись (cons XY) означает создание нового списка путем соединения двух списков, X и У. Здесь X и У— переменные. Например, если Х = (аЬ), У = = (cd), то (cons X (с d)) (здесь знак равен- ства, например в Х = (аЬ), означает, что значение переменной X является списком (ab), а стрелка в А В означает, что результатом выполнения А яв- ляется В). Если X и Y представлены с помощью сле- дующих S-выражений: Х = LAMBDA, У = ((x)(cadr)), то с помощью функции cons составляется следующее S-выражение (программа): (consX У)-> (LAMBDA (x)(cadr х)) 2. Функция саг. саг является функцией одного аргу- мента, которым является список. Запись (сагХ) озна- чает выборку головного элемента списка X. Если X = (а b с), то (саг Х)-> а. 3. Функция cdr. cdr также является функцией одно- го аргумента, которым является список. Результатом выполнения функции (cdr X) являются элементы списка X, за исключением головного элемента. На- пример, если Х=(аЬ), то (cdrX)-^b. Если список содержит только один элемент, например Х=(а), то результатом (cdr X) является список X без этого элемента, другими словами, пустой список. Резуль- татом выполнения функций cdr и саг над пустым списком является ошибка, но, в данном случае для удобства результатом будем считать также пустой список. Другими словами, (саг nil)-+ nil и (cdr nil)-•> nil.
296 Глава 7 Поскольку саг означает извлечение головного эле- мента списка, a cdr — список без головного элемен- та, то (car (consX У))-^Х, a (cdr(consX У))-> У. Обратите внимание на этот факт. 4. Базовые предикатные функции. Для реализации сложной обработки необходима оценка условия. В табл. 7.1 приведены базовые функции, используе- мые для оценки истинности условий (эти функции на- зываются предикатными функциями). Если условие удовлетворяется, то результатом выполнения преди- катной функции является t (true — истина), а если не удовлетворяется, то — nil. Иначе говоря, t озна- чает истина, a nil — ложь. Таблица 7.1. Базовые функции для оценки условия Имя функции Число аргумен- тов Смысл atom 1 Истина, если аргумент — атом equal 2 Истина, если аргумент такое же S — вы- ражение null 1 Истина, если аргумент — nil или ( ) numberp 1 Истина, если аргумент — атом цифрового типа > 2 Истина, если выполняется неравенство = 2 Истина, если выполняется равенство 2 Истина, если выполняется неравенство rerop 1 Истина, если аргумент — 0 minusp 1 Истина, если аргумент — отрицательное число not 1 Истина, если аргумент — ложь (nil) and Любое Истина, если все аргументы — истина (не nil) or Истина, если хотя бы один аргумент — истина Примечание. В таблице показаны только основные функции, хотя на самом деле число этих функций значительно больше. 5. Оценка списка и кавычки. Поскольку список рассматривается как часть всей программы, являю- щейся S-выражением, то при выполнении Лисп-про- граммы объектом обработки является в некотором смысле все S-выражение (при выполнении З-выра-
Языки ИИ и машины ИИ 297 жения определяется его значение). Выполнение S-выражения и определение его значения называются оценкой S-выражения. При оценке S-выражения сна- чала оцениваются структурные элементы этого вы- ражения, а затем на основе полученного результата осуществляется оценка всего S-выражения. Напри- мер, при оценке (саг х) сначала оценивается х. При оценке х, рассматриваемой в качестве переменной, отбираются значения этой переменной и для них оп- ределяется функция саг. В случае (сагаб) ab также рассматривается как переменная и определяется ее значение. Итак, рассмотрим, что означает запись (саг(а& с)). Поскольку (abc) также считается S-выраже- нием, то выполним оценку (abc). В данном случае (а b с) интерпретируется как функция а с двумя ар- гументами: b и с. Однако если (а b с) являются толь- ко данными, то такой подход не годится. Для того чтобы показать, что (а b с) не функция, а данные, перед ними ставится кавычка (’), т. е. представление имеет вид '(abc). Таким образом, (саг "(а b с))-+ а. Кроме того, (car(cdr nil))—>- nil, a (car’(cdrnil))-^cdr. То есть необходимо обратить внимание на тот факт, что смысл записи с кавычками совершенно отличается от записи без кавычек. Если то, что значение является данным,— оче- видный факт, то необходимость в использовании ка- вычек отпадает. Например, в числовом атоме, а так- же значениям nil и t кавычки не нужны. 6. Атрибуты атомов и ассоциативная обработка. Как правило, предметы имеют свои атрибуты. Например, атрибутами человека являются имя, возраст, фами- лия, имя отца, матери и т. д. В случае если предме- том является яблоко, то его атрибутами являются старшие понятия (фрукт), цвет, вкус и младшее по- нятие (сорт) и т. д. В области *ИЙ необходимо за- поминать подобные атрибуты в качестве атомов, а затем, извлекая нужные атрибуты, выполнять ассо- циативную обработку. Для описания такой обработ- ки в языке Лисп предусмотрены свои базовые функ- ции. Это функции put и get.
298 Глава 7 Функция put имеет представление (put х’атрибут, значение). Это означает присвоение атому х атрибут ’attribute и значение ’value). Функция get представляется в виде (get х’attri- bute) . Это функция извлечения значения ’attribute атрибута, присвоенного атому х. Например, если атрибутами атома Таро являются следующие: возраст — 20 лет, фамилия — Танака, имя отца — Macao, имя матери — Ханако, то эти ат- рибуты можно задать при помощи функции put сле- дующим образом: (put * Таро * возраст * 20) (put * Таро * фамилия * Танака) (put * Таро ’ отец * Macao) (put * Таро * мать * Ханако) Кроме того, с помощью функции get можно извлечь эти атрибуты: (get ’ Таро ’ мать) -> Ханако (get ’ Таро ’ возраст) -> 20 7.1.3. ОПЕРАТОР ПРИСВАИВАНИЯ Для определения значения переменной осущест- вляется либо вызов выражения присваивания, ис- пользующего функцию присваивания setq, либо вы- зов функции, который будет рассмотрен ниже. Вы- ражение присваивания имеет представление (setq ХЕ). Здесь Е — это произвольное S-выражение, ре- зультат выполнения которого присваивается пере- менной X (значение переменной X, т. е. результат выполнения является значением выражения присваи- вания, однако в самом этом выражении его значение не используется). Например, запись (setq X (+ 3 5)) означает, что значение X равно 8. Кроме того, если записать (setq Y'(a(b с) d)) (setq X (car (cdr У))) (setq Z’ (car (cdr У))),
Языки ИИ и машины ИИ 299 то значение У будет равно (a(bc)d), а значение X — (be). С другой стороны, значение г есть (car(cdr У)). 7.1.4. УСЛОВНОЕ ВЫРАЖЕНИЕ Для составления программ, имеющих условный переход, используются условные выражения cond. (cond ((условие 1)(выполнение 11)(выполнение 12) ... (выполнение In)) ((условие т)(выполнение ml)(выполнение m2)... (выполнение mn))) Такая запись означает, что для самого первого значения условия, которое было истинным, выпол- няются операции Л ... in. Например, (cond (null Ху empty) (f non-empty) означает, что если значением X является nil, то зна- чением условного выражения является ’empty, в про- тивном случае — ’noa-empty. Если перед выполне- нием этого выражения выполняется (setqX’(ab с)), то, поскольку значение X есть (а b с), значение ус- ловного выражения есть ’non-empty. 7.1.5. ОПРЕДЕЛЕНИЕ ФУНКЦИИ В тех случаях, когда пользователь сам определяет функцию, ее основу составляют лямбда-выражение и функция Apply (применение). Их можно считать частными примерами реализации понятий лямбда- абстракции и применения функции в системе лямбда- исчисления, изложенной в гл. 4. Например, исполь- зуя лямбда-выражение, функцию, определяющую произведение суммы и разности двух чисел, можно описать следующим образом: (lambda (х у) (X (+ х у)(— х у)))
300 Глава 7 Для выполнения этого, используя функцию Apply, запишем (apply ’ (lambda (х у) (X (+ х у) (— х у))) (7 4)) Выполнив эту функцию, получим (X (+ 7 4)(— 7 4))->(Х 11 3)-^33 Возможно, этот пример не дает полного представ- ления о записи непосредственно исполняемых выра- жений, однако главная цель здесь — показать, что в основе понятия функции в языке функционального типа Лисп лежат лямбда-выражение и функция Ap- ply. Например, если упомянутое выше лямбда-выра- жение подставить в переменную wasa и выполнить функцию Apply, используя эту переменную, то можно легко найти произведение суммы и разности двух произвольных чисел: (setq wasa’(lambda (х у) (X (+ х у) (— х у)))) (apply wasa (5 3)) (apply wasa (8 4)) Для большего понимания определения и выполнения функции используют так называемую функцию defun. С помощью этой функции пользователь может легко определять нужную ему функцию следующим об- разом: (defun (имя функции) ((первый аргумент) (второй аргумент) ... (n-й аргумент)) (тело функции)) Здесь <имя функции), а также </-й аргумент) выра- жаются атомами, а <тело функции) — с помощью произвольного S-выражения. Кроме того, при выполнении определенной поль- зователем функции, так же, как и в случае с опера- цией, используется следующее представление: (<имя функции) (первый аргумент) ... <п-й ар- гумент)). Здесь <1-й аргумент) представлен S-выра- жением.
Языки ИИ и машины ИИ 301 Например, если приведенное выше вычисление представить в виде (defun wasa (х у) (X (+ * у) (— х у))) то можно определить функцию wasa, вычисляющую произведение суммы и разности чисел, задаваемых аргументами х и у. Выполнение функции выглядит следующим обра- зом: (wasa 6 3) -> (X (+ 6 3) (- 6 3» ->(Х 9 3)-> 27 (wasa (X 2 4) (+ 7 6))-> (wasa 8 13) ->(Х 21 - 5)->-105 Другим примером использования функции defun является определение функции third, извлекающей третий элемент списка, заданного аргументом х: (defun third (х) (car (cdr (cdr х)))) Таким образом, если определенную пользователем функцию описать с помощью S-выражения следую- щим образом, то можно сразу же выполнить эту функцию: (third’ (1 2 3 4 5))->3 (third’ (a b (s с) s d е b) -> (s с) 7.1.6. РЕКУРСИЯ И ЦИКЛИЧЕСКОЕ ВЫПОЛНЕНИЕ ПРОГРАММ Циклическую обработку на Лиспе или Прологе можно описать с помощью рекурсивной программы. Вопросы, касающиеся понятий и приемов, используе- мых в рекурсивных программах, являются чрезвычай- но важными. В циклической программе обычно мно- гократно выполняется часть программы, а в рекур- сивной программе несколько раз вызывается и выполняется одна и та же функция. Рассмотрим для примера вычисление степени п целого числа т. В основу рекурсивной программы положим метод индукции, ’используемый в высшей математике.
302 Глава 7 Например, функцию power (m,n), показывающую степень п целого числа т, определим следующим об- разом: power (m, п) = 1 если п = 0 = тХ power (mt п — 1) если п > 0 В данном примере для определения функции power в правой части также используется функция power. power (2,3) 2 ♦ power (2,2) 2 ♦ power (2,1) “♦ 2» power (2,0) I 8«---- 2*4<—2*2«—2*1<--------1 Рис. 7.3. Выполнение функции power (2, 3). Таким образом, использование самой функции для определения этой функции называется рекурсией, а определяемая функция называется рекурсивной функ- цией. При выполнении рекурсивной функции одна и та же функция вызывается несколько 'фаз и выполняет- ся. Для простоты рассмотрим случай, когда т = 2, а п = 3. Процесс выполнения этой функции показан на рис. 7.3. Представим функцию power в виде Лисп-про- граммы: (defun power (т п) (cond ((zerop n) 1) (t(X m (power m(— m 1))))))
Языки ИИ и машины ИИ 303 Аналогично рекурсивная функция, вычисляющая сум- му от 1 до п, может быть представлена в следующем виде: (defun sum (n) (cond ((zerop n)0) (f (+ n (sum m(— n 1)))))) 7.1.7. ПРИМЕРЫ ПРОГРАММ Рассмотрим несколько простых примеров про- грамм. Поскольку на языке Лисп все программы представлены в виде функций, то и все приведенные примеры программ также представляются в виде функций. Функция member. Функция member (s, /) опреде- ляет наличие S-выражения s в списке /. Идея здесь аналогична случаю с вычислением степени числа. (1) Если I — пустой список, то ответом является nil. (2) Если первый элемент списка I равен S-выра- жению s, то ответом является t. (3) Если первый элемент списка I не s, то сле- дует повторно использовать функцию member по отношению к результату применения функ- ции cdr к /. Если представить это в виде Лисп-программы, то получим (defun member (е 1) (cond ((null /) nil) ((equal (car /)) t) (t (member s (cdr 1))))) Здесь (equal x y)—это функция, значение которой равно /, если х и у представляют собой одно и то же S-выражение. Функция append. Это функция соединения двух списков х и у и создания одного списка. Другими словами, при вы- полнении этой функции к концу списка х присоеди- няется список у. Например, если х = (а&с), у = = (123), то append(х у)-+(а b с 1 2 3) (обратите внимание на тот факт, что действие этой функции
304 Глава 7 полностью отличается от функции cons. Так, в ре- зультате выполнения cons(x, у) получаем ((а Ь с), (12 3)), т. е. ((ab с) 123)). Смысл этой функции также можно легко понять, если рассматривать ее с точки зрения рекурсии. (1) Если х — пустой список, то результатом яв- ляется у. (2) Если х = (а 1 а2 ... ап), а у = (& 1 Ь2 ... Ьт), то append(х, у), т. е. (al а2 ... ап Ы Ь2 ... Ьт) (append (а 6) (12)) (append (b ) (1 2)) (append ( ) (1 2)) (a b 1 2)' (cons а (b 1 2)) (6 1 2) (cons b (1 2)) (1 2) Рис. 7.4. можно представить как присоединение к (а2 ... ... ап Ы Ь2 ... Ьт), полученному путем присоедине- ния (Ы Ь2 ... Ьт) к (а2 ... ап), головного элемента al (т. е. аналогично функции cons). Представим эту функцию в виде Лисп-программы: (defun append (х у) cond ((null х) у) (t (cons (car х) (append (cdr x) у)))). На рис. 7.4 показан пример выполнения для случая, когда х = (а Ь), а у = (1 2). Функция подсчета атомов в списке. В списке ((а Ь с) (а ef) (1 2 1 4)) содержится 3 + 3 + 4 = 10 атомов. Таким образом, для подсчета общего числа атомов в некотором списке нужно сосчитать число
Языки ИИ и машины ИИ 305 атомов в каждом подсписке, составляющем этот список, и сложить полученные значения. Например, если в приведенном выше списке принять х = (а b с), у = (а е f), z = (1 2 1 4), то, сосчитав число атомов в каждом списке х, у, г и сложив эти числа, полу- чим 3 + 3 + 4 = 10. Как правило, список может включать несколько списков, поэтому его удобно представить с помощью рекурсивной функции. Для этого обычно используют функцию count языка Лисп и программа описывается следующим образом: (defun count (s) (cond ((null s) 0) ((atom s) 1) (t (+ (count (car s)) (count (cdr s)))))) В данной программе показано, что если список s есть (si s2 ... sn) (где каждый si также является спи- ском), то число атомов в списке si плюс общее число атомов в списке (s2 ... sn) есть общее число атомов списка s. В зависимости от того, какое значение у si — atom или nil, выдается значение 1 или 0. В том случае, когда si является списком, он также разби- вается и проводятся аналогичные вычисления. Функция выполнения одной и той же операции с каждым элементом списка. Зачастую приходится несколько раз использовать функцию f для каждого элемента ai списка типа (al а2 ... ап), в результате чего получается также список типа (Ы Ь2 ... Ьп), элементами которого являются f(ai) = Ы. Классиче- ским примером является определение суммы двух списков (иначе говоря, суммы двух векторов). Для этого в языке Лисп предусмотрена функция mapcar, позволяющая выполнять операцию сразу со всеми элементами списка. Например, для определения попарных сумм эле- ментов двух списков х и у следует записать (шарсаг’ plus х у) Для значений х = (1 234), у = (56 7 8) получим (mapcar’ plus х г/)->(6 8 10 12) 20—1145
306 Глава 7 Для создания пар элементов из двух списков сле- дует записать (mapcar’ cons’ (a b с d)' (1 2 3 4)) при этом получим ((a 1)(Z\ 2) (с. 3)(de 4)). Действие функции mancan такое же, что и тар- саг, но в отличие от mapcar элементы, значение ко- торых равно nil, отбрасываются и собираются только те элементы, которые не равны nil. Например, значение (mapcar ’eq’ (a b с d е) ’ (а b е d с)) равно (//nil /nil), а значение (mapcan ’eq’ (a b с de)1 X Х(а b е d с)) равно (///). 7.1.8. ЛИСП-МАШИНА Вычислительная машина, в которой реализованы методы, позволяющие с высокой скоростью выпол- нять Лисп-программы, называется Лисп-машиной [7]. Систему обработки языка Лисп можно реализо- вать и на обычной универсальной ЭВМ. Для обра- ботки Лиспа на универсальной вычислительной ма- шине применяют систему компиляции, которая транс- лирует Лисп-программу в машинную программу уни- версальной ЭВМ. В последние годы с развитием методов компиляции стала возможной довольно вы- сокоскоростная обработка Лиспа на универсальных машинах. В то же время разрабатываются и специализи- рованные Лисп-машины, учитывающие особенности этого языка и позволяющие эффективно выполнять Лисп-программы. Независимо от того, будь то систе- ма компиляции или специализированная машина, для реализации высокоскоростной обработки языка Лисп необходимы (1) высокоскоростная обработка списковых данных и (2) высокоскоростное выполне- ние функциональных вычислений. Рассмотрим сначала аспекты, связанные с высо- коскоростной обработкой списковых данных. Соглас- но вышеизложенному, материалу, на языке Лисп символьные данные, имеющие сложную структуру, представлены в виде бинарного дерева. Кроме того, данные этого бинарного дерева довольно часто изме-
Языки ИИ и машины ИИ 307 няются в процессе обработки. Следовательно, для сохранения списочных данных в памяти вычисли- тельной машины уже не годится система предвари- тельного распределения по адресам памяти с после- довательными номерами, как это делалось для мат- ричных данных с регулярной (жесткой) структурой. Поэтому в данном случае атомам списка и узлам (называемым данными cons и элементами списка) назначаются ячейки памяти, которые организуются в виде структуры, снабженной указателями. Здесь большое значение имеет то, что пользователю сов- сем не обязательно знать, каким образом распреде- лены в памяти ЭВМ списочные данные, т. е. в какой именно ячейке памяти (или адресе) находится кон- кретный атом или элемент списка. Такое управление ячейками памяти выполняется целиком внутри ма- шины. Поскольку списочные данные имеют структуру со связями с помощью указателей, то при обработке списка большая доля операций приходится на поиск по указателю. Кроме того, из-за частного изменения структуры списочных данных в процессе обработки возникает большая проблема издержек при управле- нии памятью, например перераспределение ячеек памяти в процессе выполнения программы, измене- ние указателей, регенерация ненужных ячеек па- мяти и прочее. Главной отличительной чертой языка Лисп с точ- ки зрения механизма выполнения программ является то, что, как уже было отмечено выше, важную роль цграют рекурсивные вычисления, в основе которых лежат применение функции и оценка выражения. Следовательно, для высокоскоростного выполнения Лисп-программы наиболее важным моментом являет- ся реализация в какой-бы то ни было форме меха- низма, позволяющего с высокой эффективностью вы- полнять операцию применения функции. В современных коммерческих Лисп-машинах управление доступом к памяти и управление распре- делением памяти для обработки списковых структур реализованы в основном аппаратным путем с по- мощью специализированных средств, более того, за счет использования микропрограммных средств 20*
308 Глава 7 выполняется оптимизация обработки списков в рам- ках последовательной вычислительной машины ней- мановского типа. К архитектурным приемам повышения быстродей- ствия Лисп-машин относятся следующие. (1) Использование специальных команд обработ- ки списков, например команд поиска по указателю или управления памятью, непосредственного выпол- нения микропрограммными средствами. (2) Для поиска данных по двоичному дереву, при- менения функции и управления выполнением рекур- сивной функции часто приходится пользоваться сте- ковой памятью типа «последним вошел — первым вышел». Поэтому для реализации быстрого доступа к памяти стековую память следует реализовать на специализированных аппаратных средствах. (3) В целях сокращения накладных расходов, возникающих при доступе к списочным данным, же- лательно осуществлять доступ к памяти параллель- но с выполнением операций. Кроме того, для увели- чения скорости поиска по указателям желательно использовать специальные регистры для доступа к памяти, непосредственно управляемые программ- ными (или микропрограммными) средствами. (4) Увеличение скорости обработки можно обес- печить, добавив к каждому слову данных информа- цию (называемую тегом), показывающую тип данных. Путем обследования этой информации осуществляет- ся проверка динамически изменяемой структуры дан- ных (типа данных) и обработка в соответствии с ти- пом данных. Рассмотрим на конкретном примере, каким обра- зом используется стековая память при поиске дан- ных списка, имеющих структуру бинарного дерева, и при выполнении оценки выражения. На рис. 7.5 показан процесс оценки выражения (+3(Х52)). Би- нарная древовидная структура этого 3-выражения показана на этом же рисунке (кружочками показа- ны вершины списка, а прямоугольниками — атомы (в данном примере атомами являются численные зна- чения и символы операций + и X)- Обрабатываю- щая система использует стек, в который помещаются
Языки ИИ и машины ИИ 309 вершины списка (стек управления) для управления поиском в списке, и стек операций, в который по- мещаются операторы и данные для выполнения опе- раций. Поиск в бинарном дереве выполняется по Выполнение Лисп-программы (интерпретатор, операции со стеком) Программа имеет списковую структуру (написана в виде набора S-выражений) Пример численного выражения: 3 + 5x2 Представление в виде S -выражения: (+3 (х 5 2)) Адрес Данные д Часто используется стек Рис. 7.5. Процесс оценки выражения. маршруту от корня (1) к вершинам (2), (3), ..., (6). При достижении обрабатывающей системой атома состояния стека изменяется в последовательности (а), (6), (с), (d), (е), (f), (g). Затем в момент за- вершения обработки бинарного дерева обрабаты- вающая система вновь возвращается к корневой
310 Глава 7 вершине (1) (адресный стек возвращается в первона- чальное состояние), результат оценки помещается в стек данных. Базовые операции со списковыми данными ( 1 ) cons Генерация новых данных Z=cons(x, у) Рабочие регистры Память (2) саг х=саг(х) (3 ) cdr y=cdr(z) Рис. 7.6. Управление списковыми данными. На рис. 7.6 показан процесс управления данными списка. Вначале все ячейки памяти соединяются с одним списком, представляющим собой список сво- бодных элементов. Новые элементы списка создают- ся в процессе выполнения программы с помощью операции cons, причем при выполнении операции cons элементы извлекаются по одному из списка сво-
Языки ИИ и машины ИИ 311 бодных элементов и создается ячейка cons. Рассмот- рим этот процесс для конкретного примера z = = cons(x, у). Перед выполнением операции cons соответствующие указатели имеют состояние, пока- занное на рисунке цифрой (1), а после ее выполне- ния они изменяются, как показано цифрой (2) (зна- чения переменных х и у сохраняются соответственно в регистрах MGR О и MGR 1, а результат выполнения операции cons сохраняется в регистре MGR 2. Спи- сок свободных элементов хранится в регистре Free). Операции саг и cdr используются только для извле- чения данных из части саг (левое поле) ячейки па- мяти и части cdr (правое поле) соответственно. Таким образом, обработка данных выполняется с помощью довольно простых операций, и, комбини- руя эти операции, можно организовать обработку сложных символьных данных. Коммерческая Лисп-машина мало чем отличается по структуре от универсальной вычислительной ма- шины. На рис. 7.7, а показана принципиальная струк- тура универсальной машины, а на рис. 7.7, б — прин- ципиальная структура Лисп-машины. Различия между этими структурами заключаются в сле- дующем. 1) Для увеличения быстродействия памяти меха- низм доступа к памяти оснащен специализирован- ными средствами. 2) Используется быстродействующая стековая па- мять большой емкости. Для реализации стековой памяти используется специальный регистр, показы- вающий начало стека и называемый указателем стека. С помощью указателя стека выполняется бы- стрый доступ к стековой памяти. 3) В качестве команд с развитыми функциями введены специально команды обработки списков, ко- торые выполняются с высокой скоростью. Эти коман- ды реализуются микропрограммными средствами. Для хранения микрокоманд предусмотрена управ- ляющая память большой емкости. Имеются и другие различия. К разработанным к настоящему времени Лисп- машинам относятся машина CADR (МТИ) [8],
Универсальный компьютер Устройство памяти Цикл выполнения команды 1 .Считывание команды 2. Декодирование команды 3. Считывание операндов 4.Выполнение команды Пам (ПС) ->Ргк Ргк->БУ Пам(АП)—ДП-*Р БУ, АЛУ, Р Лисп-машина 0П{: Пам (РОНр —► ПС ... Выполнение WCS1 (микропрограмма) ОП2 : Пам (РОН2) —►ПС ... Выполнение WCS2 (микропрограмма) (ОПр ОП2 — это порядка 5—10 команд универсальной машины, выполняемых микропрограммой ) Рис. 7.7. Базовая структура Лисп-машины. а — базовая структура универсального компьютера; б — базовая струк- тура Лисп-машины.
Языки ИИ и машины ИИ 313 Symbolics 360 фирмы Symbolics [9], Лямбда-машина фирмы LMI [10], DORADO фирмы «Ксерокс» [11], Explore фирмы TI [12], машина Университета г. Кобэ (Япония) [13], FACOMa фирмы «Фудзицу» [14], ELIS корпорации NTT [15] и т. д. 7.2. ЯЗЫК ПРОЛОГ И ПРОЛОГ-МАШИНЫ Язык Пролог, так же как Лисп, имеет чрезвы- чайно важное значение как язык искусственного ин- теллекта. Если на языке Лисп программа пишется на основе таких понятий, как списочные данные и функции, то на Прологе программа пишется на осно- ве такого понятия, как вывод (трехступенчатая ар- гументация). В языке Пролог также используются списковые данные. Понятие логического вывода, яв- ляющееся основой языка Пролог, и механизм полу- чения вывода дают классический пример рассмотре- ния того, каким образом представляются знания, яв- ляющиеся центральным объектом в сфере ИИ, а так- же то, как с помощью этого механизма получаются выводы. В данном разделе сначала описывается язык Про- лог с точки зрения отношения между логическим представлением знаний и выводом, а затем рассмат- ривается архитектура машин, позволяющих с высокой эффективностью выполнять Пролог-программы. 7.2.1. ПРЕДСТАВЛЕНИЕ ЗНАНИЙ И ЯЗЫК ПРОЛОГ [16] Знаниями можно называть то, что обычно выра- жаем словами (напротив, в искусственном интеллек- те то, что можно представить словами, используют в качестве знаний). Можно привести бесчисленное количество примеров знаний, представляемых сло- вами, как то: «Сократ — это человек», «люди совер- шают ошибки», «Ханако — мать Таро», «Кадзуо — отец Хидео», «Отец — это родитель», «мать — это ро- дитель», «отец родителя — это дедушка», «мать ро- дителя— это бабушка» и т. д. Эти знания с точки зрения логического вывода можно разделить на две большие категории. К первой категории относятся
314 Глава 7 знания, отображающие свойства, отношения и т. п. предметов (объектов), выражаемых именами соб- ственными. Эти знания называются фактами. На- пример, «Сократ — это человек», «Ханако — это мать Таро», «Кадзуо — это отец Хидео» — являются фактами. Ко второй категории относятся знания, ото- бражающие свойства и причинно-следственные отно- шения между обычными предметами, выражаемыми именами нарицательными. Эти знания называются правилами и используются в качестве правил логиче- ского вывода. Из приведенных выше примеров к ним относятся: «Люди совершают ошибки», «отец — это родитель», «мать — это родитель», «отец родителя — это дедушка», «мать родителя — это бабушка», «факториал п\ — это произведение чисел от 1 до п», «произведение чисел от 1 до п получается путем умножения на п, произведения чисел от 1 до (п—1)». Представление знаний на естественном языке должно соответствовать определенному формализму для воз- можности непосредственной обработки на компью- тере. Этот формализм называется логическим выра- жением (непосредственная обработка представления на естественном языке на компьютере — довольно сложная задача. В частности, очень трудно разделить приведенные выше простые знания на факты и пра- вила. Более того, для обработки знаний, представ- ленных на обычном, естественном языке, например английском или японском, необходимо понимание смысла этого представления. Этим занимается само- стоятельное направление исследований в сфере ИИ, называемое пониманием и обработкой естественного языка. Понимание естественного языка — это не что иное, как преобразование представления на есте- ственном языке в логическое выражение). Детальное обсуждение понятия «логическое выражение» будет проведено ниже, а для начала покажем представле- ние приведенных выше примеров в виде логических выражений. „Сократ — это человек" „Люди совершают ошибки" „Ханако — это мать Таро" человек (Сократ), совершить ошибку (х) <- <-люди (х). мать (Ханако, Таро).
Языки ИИ и машины ИИ 315 „Кадзуо — это отец Хидео“ : „отец — это родитель" „мать — это родитель" : „отец родителя — это дедушка" : „мать родителя — это бабушка" : „факториал X — это произве- : дение чисел от 1 до N" „произведение чисел от 1 до W : получается путем умножения на произведения чисел от 1 до (АГ — 1)" отец (Кадзуо, Хидео) родитель (X, Y) <- отец (X, У) родитель (X, Y) <- мать (X, Y) дедушка (X, Z) <- отец (X, Y) родитель (У, Z) бабушка (X, Х)<-мать (X, У) родитель (X, Z) факториал (Af, Z) <- <-произведение (1, Af, Z) произведение (Af, Af, Z) <- +-L = N-1 произведение (М, L, X), Z = х х. Если сравнить представление на естественном языке, показанное слева, и представление в виде ло- гического выражения, показанное справа, то во вто- ром случае, как видим, представление является бо- лее информативным. Например, логическое представ- ление «родитель(X, У)^-отец(Х, У).» означает, что «если для любых переменных X и У X является от- цом У, то X является родителем У» (X и У — это пе- ременные. Стрелка означает, что если выполняется условие в правой части выражения, то выполняется условие и в левой части выражения). Кроме того, логическое выражение, показывающее факториал, на- пример «факториал (Л/, Z)^-произведение (l,Af, Z).», означает, что «если для любых N и Z произведение чисел от 1 до N является Z, то факториал N — это Z», а «произведение (MtNtZ)+-L = N—1, произве- дение (Л1, L, X), Z = WX X.» означает, что «если для любых L, Mf N, X, Z L равно N— 1, а также произ- ведение чисел от М до L равно X, а X X N равно Z, то произведение чисел от М до tV равно Z.» Из этих примеров очевидно, что факты не содержат перемен- ных, а правила содержат переменные и имеют вид В2, ..., Вп. Такое представление в виде логического выраже- ния в сущности и является Пролог-программой. Внутри ЭВМ логические выражения хранятся в виде данных (это называется базой данных). Например, используя эти знания, вычислительная машина может отвечать на следующие вопросы: «Сократ способен совершить ошибку?», «Кто отец Хидео?», «Сколько будет факториал 5?».v Эти вопросы также представ-
316 Глава 7 ляются в виде логических выражений, показанных ниже. Такое представление тоже является Пролог- программой. (1) „Способен Сократ совершить ошибку?" : ?-совершить ошибку (Сократ). (2) „Кто отец Хидео?" : ?-отец (X, Хидео) (3) „Сколько будет 5! ?“ : ?-факториал (5, Z). Результатом выполнения первой программы будет ответ «Да», результатом выполнения второй про- граммы— «Да, X = Кадзуо», результатом выполне- ния третьей программы — «Да, = 120». Рассмотрим более подробно особенности языка Пролог. 7.2.2. ПРЕДЛОЖЕНИЯ, ПРЕДИКАТЫ, ТИПЫ ДАННЫХ Пролог-программа представляет собой ряд логи- ческих выражений, форма которых показана ниже. В терминологии языка Пролог эти выражения назы- ваются «хорновскими предложениями» A«-Bb В2, .. <, Вп. Как было указано в разд. 7.2.1, смысл этого пред- ложения заключается в том, что «если выполняются условия Bi, В2, Вп, то А» (или для того, чтобы вы- полнялось условие А, необходимо, чтобы сначала вы- полнялось условие Bi, затем В2 и т. д. до Вп). А и каждое Bi называется атомом или атомарной формулой (т. е. элементарным логическим выраже- нием) (обратите внимание на тот факт, что «атом» на языке Пролог совершенно отличается от понятия «атом» на языке Лисп). Более подробно об атомар- ной формуле будет сказано ниже, а пока дадим пол- ное определение хорновскому предложению. «Хор- новское предложение представляется в виде (левая п См. книгу «Представление и использование знаний>/Под ред. X. Уэно, М. Исидзука. — М.: Мир, 1989. — Прим. ред.
Языки ИИ и машины ИИ 317 частьправая часть), причем в правой части содер- жится хотя бы одна связка «И» атомов, а в левой части содержится только один атом». В отдельных случаях хорновское предложение интерпретируется следующим образом. (1) Случай, когда отсутствует правая часть (п = 0): А-*-. Это означает безусловное выполнение А, т. е. А является фактом. В данном случае пред- ставление имеет вид А. Это соответствует понятию «факт», изложенному в разд. 7.2.3. Если п =/= 0, то данное выражение называется правилом. (2) Случай, когда отсутствует левая часть: ч-Bi, В2, ..., Вп. Это выражение означает, что предпосыл- кой является выполнение условия в левой части, следовательно, если выполняются условия Bi, В2, ... ..., Вп, то результатом будет «Да», а если они не выполняются, то результатом будет «Нет». Другими словами, это выражение означает вопрос, выполняют- ся или нет Bi, В2, ..., Вп? На языка Пролог такое предложение имеет следующий вид: ?—Вь В2, ... Вп. Итак, на языке Лисп и данные, и программы пред- ставляются в виде списковых данных, называемых S-выражениями. На языке Пролог данные и про- граммы также имеют одинаковое представление — в виде символьных данных, называемых термами. Атомы также иногда употребляют в качестве термов. ----Константы Термы Переменные Сложные термы -Числа -Последовательность символов Обычные переменные Безымянные переменные Элементарное логическое выражение (атом) --- Функция ----Другие
318 Глава 7 Константами являются цифры или последователь- ность символов. Последовательность символов со- стоит из алфавитно-цифровых символов и начинается со строчной буквы. В переменных также исполь- зуются алфавитно-цифровые символы, и эта последо- вательность начинается с прописной буквы. Трудно- сти здесь связаны только с переменными, но если нет необходимости различать тип переменной, то в ка- честве безымянной переменной используется «_». (Так уже сложилось в процессе разработки языка Пролог, что для машины DEC-10 [17] в качестве кон- стант использовалась последовательность алфавитно- цифровых символов, которая начинается со строчной буквы, а в качестве переменной — последователь- ность алфавитно-цифровых символов, которая начи- нается с прописной буквы. Здесь могут быть некото- рые различия, в зависимости от способа построения системы обработки языка. Поскольку эти различия являются несущественными, на них не следует обра- щать внимания.) Атомы, такие, как отец (X, Y), человек (Сократ), цвет (оранжевый, X) и т. д., обычно представляются в следующей форме: предикат (термь терм2, ...» термп) Последовательность символов, расположенная в на- чале атома, например «отец», «человек» и т. д., на- зывается предикатом. X, Y, Сократ — это термы. Кро- ме того, в случае, когда используются два терма, до- пускается и такая форма представления: терм 1 пре- дикат терм 2. Например, L = N — 1 равнозначно = (L, N—1). Используя переменные, можно создать сложный терм. Понятие функции такое же, как и для языка Лисп, однако представление функции несколь- ко отличается от представления на Лиспе: имя функ- ции (терми терм2, ...» термп), либо терм имя функ- ции терм 2. При выполнении функции выдается соответствую- щее значение. Например, если plus (3, 5)->8
Языки ИИ и машины ИИ 319 то plus — это имя функции, а если plus (3, 5, 8)-> истина (да), то plus — это предикат. Поскольку атом также может быть термом, то ана- логично языку Лисп программа может иметь рекур- сивную структуру. Рассмотрим теперь процесс выполнения Пролог- программы. 7.2.3. ОПЕРАЦИЯ УНИФИКАЦИИ И ВЫПОЛНЕНИЕ ПРОГРАММЫ Главной особенностью механизма выполнения Пролог-программы является то, что запуск програм- мы производится с помощью операции сопоставления образцов одного типа, называемой операцией унифи- кации. Для примера покажем, как происходит обра- ботка вопроса «кто дедушка Тосио?» при условиях хранения в памяти ЭВМ знаний «отец родителя — это дедушка», «отец — это родитель», «Кадзуо — это отец Хидео», «Хидео — это отец Тосио» (считается, что эти знания хранятся в базе знаний или базе дан- ных). На языке Пролог эти знания представлены в фор- ме Отец (Кадзуо, Хидео)0 (1) Отец (Хидео, Тосио) (2) Дедушка (Х,У)«-родитель (Z, У), отец (Xt Z) (3) Родитель (X, У)«-отец (X, У) (4) и хранятся в базе данных. Выполняется обработка вопроса ? -Дедушка (%, Тосио) (5) т. е. выполнение Пролог-программы. Сначала в базе данных ищется хорновское предложение для сопо- Строго говоря, слова, начинающиеся с прописных букв, являются переменными языка Пролог. Объекты с известными или постоянными значениями должны начинаться со строчных букв, если они не являются числами (хотя существуют исключе- ния из этого правила). — Прим, перев.
320 Глава 7 ставления с образцом «дедушка (X, Тосио)». В слу- чае сопоставления образцы должны полностью со- впадать. Переменной X при сопоставлении следует задать надлежащее значение. В данном случае обна- руживается совпадение с левой частью выражения (3), поэтому переменным X и X, Y соответствует зна- чение «Тосио». Другими словами, когда в перемен- ную X или X, У подставляется значение «Тосио» (что выражается в виде Хч-Х, Уч-Тосио), то левые час- ти выражений (5) и (3) полностью совпадают с вы- ражением «дедушка (X, Тосио)». Таким образом, операция сопоставления, при которой переменной внутри атома (у которой в данный момент не было значения) присваивается соответствующее значение, в результате чего оба атома становятся одинаковы- ми, называется операцией унификации [18]. Далее, если применить правило (3), используя унификацию, к вопросу «? — дедушка (X, Тосио)», то можно получить новый вопрос: ? -Родитель (Z, Тосио), отец (X, Z). Аналогично с помощью операции унификации полу- чаем совпадение атома «родитель (Z, Тосио)» с ле- вой частью выражения (4) и, подставив Хч-Z, У ч—Тосио, получим новый вопрос «? —отец (Z, То- сио)». Затем, выполнив унификацию с (2), получим «гч-Хидео». Таким образом, ответом на самую пер- вую часть вопроса (6), т. е. «родитель (Z, Тосио)» будет «Да» (истина), а теперь попытаемся ответить на вторую часть вопроса «отец (X, Z)». Если обра- тить внимание на то, что уже выяснено Z = Хидео, то унификация будет успешной между этим вопросом и выражением (1), поэтому получим Хч—Кадзуо. В данном случае ответом на вопрос (6) является ис- тина, ответом на первоначальный вопрос (5) являет- ся «Да», поэтому ответом будет X = Кадзуо. Процесс выполнения этой программы показан на рис. 7.8. Операция унификации обычно выполняется для двух атомов. При проверке на совпадение двух ато- мов делается попытка унификации каждой пары тер- мов и если унификация завершилась успехом для всех термов, то считается, что операция унификации
Языки ИИ и машины ИИ 321 завершилась успехом. Данный пример прост с точки зрения того, что термом является либо переменная, либо константа, однако обычно это бывают сложный терм, либо списковые данные, поэтому процесс уни- фикации усложняется. Унификация двух атомов выполняется в соответ- ствии со следующими правилами. (1) Константа и константа: унификация завер- шается успехом, если оба терма совершенно одина- ковы. — Дедушка (X, Тосио) ^Унификация Дед ушка (X, ^Родитель (Z, У),Отец (X, Y) Y -^-Тосио ~ ’ т-? - - - 7 — Родитель (Z,Тосио), Отец (X,Y)- ? —Отец (Z, Тосио)эОтец (XrZ) Z-*-Xnfleo Отец (Хидео, Тосио) ? - Отец (X, Хидео) iX--Kafl3yo^*^°TeU (Кадзуо, Хидео) | (Успех) Рис. 7.8. Механизм исполнения Пролог-программы. (2) Константа и переменная: унификация завер- шается успехом, если переменная пока не заменена на другую константу. В переменную подставляется константа. Если переменная уже заменена на неко- торую константу, то аналогично (1). (3) Переменная и переменная: если обе перемен- ные не заменены на константы, то одна из них за- меняется на другую переменную. Это делается с той целью, чтобы обе переменные имели одно и то же значение. (4) Структурная унификация: операция унифика- ции выполняется не только для верхнего уровня, но 21 — 1145
322 Глава 7 и по отношению к данным, имеющим гнездовую (вложенную) структуру. Например, операцию уни- фикации можно выполнить для каждого из приведен- ных ниже термов структурированного образца (дан- ных) типа читать (Таро, книга (Искусственный интеллект, автор (Нанаси Харахёэ, ASCII))) (D читать (Личность, книга (Книга, человек)) Личность-*-Таро, Книга Искусственный интеллект, Человек-(-автор (Нанаси Харахёи, ASCII) (2) читать (Личность, Объект) Личность -«—Таро, Объект книга (Искусственный интеллект, автор (Нанаси Харахёи, ASCII)) О) читать (Личность, книга (Книга, автор (Имя, Транскрипция))) Личность Таро, Книга Искусственный интеллект, Имя-«-Нанаси Харахёэ, Транскрипция-*-ASCII (3) читать (_, книга (Книга,-)) Книга Искусственный интеллект На языке Пролог, так же как и на Лиспе, можно обрабатывать списковые данные. Благодаря эффек- тивному использованию операции сопоставления об- разцов на языке Пролог можно более просто, чем на Лиспе, объединять или разделять списковые данные. Структура списка представляется в виде «эле- мент!, элемент2, ..., элемент^» [17]. Здесь элементом i может быть константа, переменная, терм, списоч- ная структура. В частности, если п = 0, то структу- ра записывается в виде [ ] и называется пустым списком. Все приведенные ниже примеры являются (относятся) к списковым структурам [ ] [а] И] [-] [а, &] [а, В] [элемент (а, А), В, С] [[X, а], [У, Ь], [Z, с], [Q, «]] [пара (X, а), пара (У, Ь), пара (Z, [список, дан- ные] пара (Z, список (значение)) Объединение двух списков данных а и b представ- ляются как [а|Ь]. Смысл этой операции такой же, как и операции cons (а -Ь) на языке Лисп.
Языки ИИ и машины ИИ 323 Сопоставление образцов по отношению к спискам также выполняется в соответствии с правилом уни- фикации. Например, сопоставление образцов списка [Я| Т] с приведенными ниже списками выполняется следую- щим образом: [Н\Т] = [а]^Н = а9 Г = [], [Н\Т] = [а, Ь]->Н = а9 Т = [6], [Н\Т] = [а9 Ь9 с\-+Н = а9 Т = [Ь9 с] Цели [Н|Т] = [ ], то сопоставление не производит- ся и операция считается завершившейся неуспехом. Кроме того, [Л, В, С] = [а, Ь9 с] —► А = а, В = Ь9 С = с9 [[Х9 У, Z]|T] = [[a, b9 с], [р9 q9 г], [s, t9 u]] ~+Х = а9 Y = b9 Z = c9 T = [[p9 q9 r], [s, t9 а]] Из вышеизложенного понятно, что в основе выпол- нения Пролог-программы лежит поиск в базе Дан- лее. тигр. 7-лев. —► да корова. 7-корова. —> да животное(лев). 7-собака. —► нет животное(тигр). 7-животное(лев). —► да живот ное(корова). 7-животное(тигр). —> нет ест (лев, мясо). 7-животное(кот). —► нет 7-лев. 7-корова. 7-собака. 7-животное(лев). —► да —> да нет да ест(тигр9мясо). (б) ест(корова ,трава). (а) Рис. 7.9. Процесс выполнения программы посредством унификации и поиска в базе данных. а — факты в базе данных; б — вопросы (справа от стрелки — ответ из компьютера). ных с помощью операции унификации. Для более яс- ного понимания этого рассмотрим в качестве приме- ра программу, показанную на рис. 7.9. Если в базе данных хранятся факты (см. рис. 7.9,а), то в ответ на вопросы посредством операции унификации будут получены ответы «да» или «нет», как показано на рис. 7.9, б.
324 Глава 7 Когда по отношению к базе данных возникает во- прос «?—животное (X)», то с помощью операции уни- фикации в X подставляется значение. В данном при- мере осуществляются три сопоставления: животное (лев), животное (тигр), животное (корова). Если факты в базе данных хранятся в последовательности, показанной на рис. 7.9, а, то на языке Пролог сна- чала осуществляется сопоставление с образцом жи- вотное (лев) и выдается ответ X = лев. Система вы- дает решение «да, X = лее». Если другого решения не требуется, то вводом символа перевода строки поиск решения текущего вопроса прекращается и принимается следующий вопрос. Если желательно получить другое решение, то нужно сразу после это- го ввести символ «;», после чего осуществляется со- поставление с образцом животное (тигр) и выдается решение «да, X = тигр*. При следующем вводе «;» будет выдано решение «да, X = корова*. Если еще раз ввести «;», то система выдаст ответ «нет», который означает, что решения нет. Итак, посмотрим, как выдается решение вопроса, состоящего из множества атомов ?-атомь атом2, ...» атомд. Система сначала выдает решение, при котором условие атома! является истиной (эта процедура на- зывается решением атомаь Далее аналогично). За- тем, используя это решение (т. е. используя значе- ния переменных в атомеь которые были найдены), отыскивается решение атомаг. При этом (1) если решение не находится, то считается, что ре- шения атомаг при найденном решении атома1 не су- ществует (этот ответ называется неуспехом). В дан- ном случае осуществляется возврат и отыскивается другое решение атомаь Если найдено другое реше- ние, то оно используется для повторного поиска ре- шений атома2. (2) если решение атомаг найдено, то на основании этого решения осуществляется список решения ато- ма3. (3) далее аналогично, если эту операцию можно про- должить до атомал, то все значения от атома! до ато-
Языки ИИ и машины ИИ 325 мал становятся истинными и полученное решение яв- ляется решением данного вопроса. Примечание. Требование другого решения Путем ввода символа «;» означает не что иное, как прину- дительное установление неудачного исхода, возврат и поиск другого решения. Следовательно, на языке Пролог посредством ввода «;» и принудительного ус- тановления неудачного исхода можно посредством вертикального поиска определить все решения, удов- летворяющие вопросу. Пример. ? -животное(X), есть (X, мясо). 7.2.4. РЕКУРСИЯ, ПЕРЕБОР С ВОЗВРАТАМИ, УДАЛЕНИЕ В Прологе так же, как и в Лиспе, для цикличе- ской обработки используется понятие рекурсии. На примере предиката member, используемого в Лиспе, рассмотрим процесс рекурсивной обработки на Про- логе. Сначала дадим определение продикату member: member (X, Z): если в списке Z содержится элемент X, то истина, в против- ном случае — ложь Если Z есть [Х| У], то member(X, Z), т. е. memberX [Х|У] является истиной. В противном случае, т. е. Z = [IF| У], X =/= IF, следует проверить истинность member (X, У). Это можно представить в виде Про- лог-программы: member (X, JX | У]). (7) member (X, [IF | У] )<-Х Ф IF, member (X, У) (8) Предложение (7) является безусловно истинным, по- скольку очевидно, что X содержится в списке [Х|У]. Таким образом, в языке Пролог имеется возможность представления фактов с помощью переменных. Что касается выражения (8), то если X и 1F—разные, то следует проверить, содержится или нет X в списке У без первого элемента IF. При выполнении Пролог- программы в первую очередь обязательно выполняет- ся ранее записанное предложение (следовательно,
326 Глава 7 предложение (7) будет выполняться раньше, чем (8)), поэтому, если выполняется условие предложения (7), то это означает, что X не равно W. Следовательно, предложение (8) можно записать следующим об- разом: member (X, [W | У] )+- member (X, У). (8') Итак, если выполнить программу, задав вопрос ?-member (a, [s, w, а, е, г, Л]). то сначала будет попытка сопоставления с предло- жением (7). Первый член этого списка Х = а, одна- ко второй член [Х| У] = [а| У] Ф [s, w9 а9 е9 г9 Л], т. е. сопоставление завершается успехом. Затем про- водится сопоставление с предложением (8) и полу- чается, что X, W9 У равны соответственно X = а9 W = s, У = [w, а, е9 r9 h], т. е. сопоставление завер- шается успехом. В итоге выполняется правая часть предложения (8)'. То есть первоначальный вопрос заменяется на member (X, У) или member (а, [а>, а, е9 r9 h]). В этом случае также аналогично предыдущему со- поставление с (7) завершается неуспехом, а при со- поставлении с (8) получаем X = a, W = w9 У = [а, е, г, ft], и вопросом является member (а, [а, е9 г9 А]). На этот раз сопоставление с (7) завершается успе- хом. Поэтому получаем ответ «Да» на самый первый вопрос. Процесс выполнения этой программы пока- зан на рис. 7.10. Давайте посмотрим, что будет, если в этом со- стоянии ввести символ «;», означающий требование поиска другого решения. Как уже было изложено ранее, при вводе «;» выданное решение признается неудовлетворительным, т. е. считается, что сопостав- ление завершилось неуспехом, поэтому система де- лает попытку поиска другого решения. То есть в слу- чае member (a, [s, w9 а9 е9 r9 А]), несмотря на то что сопоставление прошло успешно и был получен ответ «Да», считается, что сопоставление с (7) при выпол- нении member (а, [а, е9 г, h]) завершилось неуспехом, и делается попытка сопоставления с предложением
Языки ИИ и машины ИИ 327 (8). В результате проводится исследование member (а, [е, г, Л]). На этот раз сопоставление завершается неуспехом, поэтому выдается ответ «Нет». Если при обработке, последующей после успешного заверше- ния выполнения member (X, У), происходит возврат по причине возникновения неуспеха, то для member (X, У) отыскивается другое решение, не имеющее смысла. Например, если X является элементом спис- member(а,w,a, е, тг AJ) Рис. 7.10. Выполнение программы методом перебора с возвра- тами. При вводе принудительно осуществляется возврат и с места, отмеченного стрелкой <= начинается поиск другого решения. ка У, в следующей программе, целью которой являет- ся определение того, является ли X элементом списка У, а также элементом списка Z ?-member (X, У), member (X, Z). (9) положим, что X является элементом списка У, но не является элементом списка Z. В таком случае вы- полнение member (X, У) завершится успехом, после чего будет предпринята попытка выполнения member (X, Z), однако, так как она завершается неуспехом, то осуществляется возврат и снова выполняется mem- ber (X, У). Однако это повторное выполнение лишено всякого смысла. Собственно говоря, когда выполне- ние member (X, Z) завершается неуспехом, то ответом на вопрос (9) должно быть «Нет». В таких случаях необходимо предотвратить повторное выполнение member(X, У). Одним из способов предотвращения
328 Глава 7 лишней попытки повторного выполнения программы в случае возврата при неуспехе является использова- ние операции удаления (cut). Операция удаления вводится путем вставки символа удаления «I» в Про- лог-программу. При обнаружении символа «I» си- стема полностью отбрасывает всю предысторию вы- полненных до сих пор вычислений (т. е. состояние вычисления). В предыдущем примере выполнения программы member предыстория выполнения, пока- занная на рис. 7.10 стрелкой, и текущее состояние запоминаются и каждый раз при возврате восстанав- ливается это состояние и продолжается обработка для определения другого решения. Если, используя операцию удаления, записать программу в следую- щем виде: member (X, [Х|У]):-!. (7)' member (X, [IF |У))-member (X, У). (8)' то, когда выполнение (7)' завершается успехом, бу- дет выполняться операция «I». Поскольку при выпол- нении этой операции вся предыстория выполнения от- брасывается, то состояние, показанное на рис. 7.10, в памяти не сохраняется. Поэтому, если даже после выполнения( 7)' возникает возврат, левая часть пре- диката (стоящая слева от знака «1»)не выполняется. Другими словами, выполнение оператора I, находя- щегося справа от предиката (7)', означает, что пред- ложение (8)' не выполняется. Поэтому если выпол- нение (7)' один раз уже завершилось успехом, то после этого (8)' не выполняется и выполнение mem- ber завершается неуспехом. С помощью приведенного ниже примера програм- мы, определяющей наличие элемента в списке, раз- ница между использованием и неиспользованием операции удаления становится очевидной. ?-member (животное (X), [животное (лев), животное (тигр), птица (орел), животное (лошадь)]), print (X), fail.
Языки ИИ и машины ИИ 329 В данной программе при выполнении первого пре- диката member определяются значения X, удовлетво- ряющие предикату «животное (X)», и осуществляется печать этих значений. Затем выполняется предикат «неуспех» и обязательно осуществляется возврат. При возврате определяется следующее значение X. Затем эта операция повторяется снова и определяется сле- дующее решение. Этот процесс будет повторяться до достижения fail (неуспех). Следовательно, так же, как и в случае (7), если операция удаления отсут- ствует, то Пролог-программа циклически выполняет- ся и определяются все решения X = лев, X — тигр, X = лошадь. В случае же наличия операции удаления ответ будет только один: X = лев. Таким образом, операция удаления эффективна в тех случаях, когда достаточно лишь одного решения. Рис. 7.11. Функция append объединения двух списков, рас- смотренная выше как функция Лиспа, в Прологе также записывается с помощью понятия рекурсив- ной обработки. Оговоримся сначала, что список [X| У] будем считать объединением двух списков X и У (на языке Лисп это эквивалентно списку, созданному с помощью функции cons (X, У)). Обозначим соединяе- мые списки через L1 и L2, а результат соединения — L3. Если L1 = [Х|У], a L3 = [U7|Z], то можно
330 Глава 7 сделать вывод, что выполняется отношение: W — X, a Z получено присоединением к списку Y списка L2 (см. рис. 7.11). Кроме того, если список L1 является пустым списком, т. е. L1 = [ ], L2 = L3. Если это от- ношение представить в виде Пролог-программы, то получим следующее: append ([X | У], z, [X | W] : append (У, Z, W). append ([ ], X, X). 7J.J. ПРЕДИКАТЫ ВЫСШЕГО ПОРЯДКА До сих пор изложение касалось обработки преди- катов, используемых для описания отношений между объектами и свойств объектов, а также определения их истинности. Однако для того чтобы сделать об- работку более универсальной и повысить производи- тельность, необходимо использовать такие операции, как not (не) — отрицание истинности (или ложно- сти) некоторого предиката, операции удаления су- ществующих фактов и правил и введения (дополне- ния) новых фактов и правил, операцию поиска всех решений и т. д. Поскольку объектами во всех этих операциях являются предикаты, то их уровень отли- чается от уровня операций, рассмотренных в преды- дущем разделе. Предикаты, описанные в предыдущем разделе, которые не являются непосредственно объ- ектами обработки, называют предикатами первого порядка. В отличие от них те предикаты, которые яв- ляются объектами операций not, добавления и уда- ления фактов и правил, а также поиска всех решений принято называть предикатами высшего порядка. Остановимся на них подробнее: Операция not. Если на языке Пролог записать сле- дующее: fact (а). то это будет означать, что факт (а) является исти- ной. Что следует предпринять, чтобы этот факт был ложью? Одним из способов будет следующая запись: fact (a):-fail. (10)
Языки ИИ и машины ИИ 331 При вводе вопроса ?-fact (а). fact (а) сопоставляется с левой частью выражения (10). Однако так как выполнение его тела «fail» обя- зательно завершится неуспехом, то факт (а) являет- ся ложью. Если наличие предиката Р в базе данных не оче- видно, т. е. в результате поиска в базе данных Р не удалось обнаружить, то Р считается ложью. Этот подход называется гипотезой замкнутого мира. Ги- потеза замкнутого мира гласит: «то, что мне неиз- вестно (или не помню), истиной никогда не являет- ся (т. е. является ложью)». Иначе говоря приме- нительно к нашему случаю, если в базе дацнцх не хранится факт (а), то при выполнении программы «? — fact (с).» сопоставление завершается неуспехом, поэтому ответом является «нет», т. е. ложь. В то же время на вопрос «? — not (fact (с)).» мы можем по- лучить ответ «да». Тем не менее способ, предложен- ный выражением (10), не позволяет принять пра- вильное решение в подобных случаях. Обычно для того, чтобы показать, что отрицание not(P) некоторого предиката (атома) Р является ис- тиной, нужно показать, что предиката, совпадающе- го с Р, не обнаружено. Другими словами, когда пре- диката, совпадающего с Р, не обнаружено и сопостав- ление завершается неуспехом, следует сделать так, утобы можно было истину-ложь поменять местами. То есть операцию not(P) следует записать так, что- бы в случае выполнения Р был неуспех, а противном случае — успех. На языке Пролог это нужно запи- сать следующим образом: not (Р):-Р,!, fail. (11) not (Р). (12) Таким образом, при вопросе «?-not(fact(c)).» сначала производится сопоставление с левой частью выраже- ния (11) и получается «p-fact(c)». Затем выполняется правая часть (11). Сначала выполняется первый терм «Р(-fact(с))» справа. Поскольку поиск «fact(с)»
332 Глава 7 завершается неуспехом, то далее предпринимается по- пытка выполнения (12). Правая часть выражения (12), безусловно, завершается успехом, поэтому окончательным результатом является успешное за- вершение и ответом является «да». Посмотрим те- перь, что будет при вопросе «? — not (fact (а))». На этот раз «P-fact(a)», поэтому выполнение правой час- ти (11) завершается успехом для Р. Затем выпол- няется операция удаления, а в заключение выпол- няется предикат fail и выполнение (11) завершается неуспехом. Однако благодаря операции удаления путь к повторному выполнению программы отрезан даже в случае неуспеха и возврата, поэтому (12) не выполняется. В итоге получается, что выполнение программы завершается неуспехом и ответом будет «нет». Таким образом, оба ответа, «да» и «нет», яв- ляются удовлетворительными. Приведенные примеры касались вопросов отно- сительно истинности или ложности различных фак- тов, хотя эту операцию можно использовать и для принятия решения относительно истинности и лож- ности фактов и правил. Допустим, к примеру, что в базе данных хранятся только следующие записи: мужчина (джон). мужчина (джек)., женщина (мэри). женщина (маргарет). Тогда, согласно гипотезе замкнутого мира, предика- ты мужчина (мэри), мужчина (маргарет) являются ложью. Кроме того, можно убедиться, что предика- ты not (мужчина (мэри)) и not (мужчина (маргарет)) являются истиной по определению not(P), данному выражениями (11) и (12). В их истинности или лож- ности легко можно убедиться. Итак, проблема заклю- чается в том, можно ли получить ответ на вопрос: «Каким должно быть X, чтобы выполнялось условие мужчина (X)?». Этот вопрос на языке Пролог пред- ставляется следующим образом: ?-not (мужчина (X)).
Языки И|4 и машины ИИ 333 Методом сопоставления с not(P) в правой части вы- ражения (11) получаем Р = мужчина (X) и, оценив цель мужчина (X), получим X = джон Однако при выполнении fail следует возврат, а по- скольку выполнение (12) предотвращается операцией удаления, то результатом not (Р) будет неуспех и все последующие действия становятся невозможными. В итоге мы не получаем никаких знаний, кроме того, что not (мужчина (X)) завершилась неудачей. Други- ми словами, при использовании операции отрицания not прежде нужно задать значение переменной пре- диката, поскольку определить значение неизвестной переменной невозможно. Операции assert, retract. Для пополнения базы данных новыми правилами и фактами и удаления из нее старых правил и фактов используются встроенные предикаты, операции assert и retract и т. п. Существуют следующие три типа предикатов для записи правил и фактов в базу данных: (1) assert (X), (2) asserta (X), (3) assertz (X) Первый тип предиката assert (X) используется для помещения значения, которое имеет переменная X, в любое место базы данных (в какое именно место, определяется системой). В отличие от него предикат asserta (X) вводит значение X в начало базы данных, а предикат assertz (X)—в конец базы данных. Для удаления данных из базы данных использует- ся встроенный предикат retract (X) С помощью этого предиката из базы данных уда- ляется первый факт, который совпал с X. Если предикаты assert (X), asserta (X), assertz (X) были уже выполнены один раз, то, начиная со второ- го раза, их выполнение завершается неуспехом. Дру- гими словами, успешное выполнение этих предикатов
334 Глава 7 бывает только один раз. Следовательно, если запи- сать, например, ?-assert (f (a)), fail. то при первом выполнении assert(f(а)) в базу дан- ных сначала запишется f(a). Затем выполнение fail завершится неуспехом и последует возврат к assert (f(a)), однако поскольку выполнение этого предиката возможно только один раз, то запись в базу данных i(a) еще раз не производится. В то же время выпол- нение retract (X) может неоднократно завершаться успехом. Например, если в базе данных записаны факты f(ai), f(a2), •••, f(an), то при выполнении ?-retract (f(X)), fail. после выборки очередного f(at) предикат retract (f (X)) производит его удаление. Затем при выполнении fail производится возврат, снова выполняется преди- кат retract (X) и на этот раз извлекается и удаляется факт f(Oi+i). Таким образом из базы данных уда- ляются все факты f(at) (1 i ^п). Операция all. При записи all (Object, Goal, List) предикат all определяет все объекты, удовлетворяю- щие цели (goal), и выдает их в виде списка (list). Так как значения предиката Object ч определяются при выполнении предиката Goal, то в описании Goal должны содержаться объекты. Например, если в ба- зе данных хранятся следующие отношения. отношение (а, Ь) отношение (a, f) отношение (а, с) отношение (b, g) отношение (Ь, с) отношение (b, d) отношение (a, g) отношение (d, а) отношение (с, Ь) отношение (bt f) отношение (а, е) отношение (е, с) отношение (a, d) отношение (Ь, а) отношение (g, с) то как организовать сбор X, удовлетворяющих от- ношению (а, X). Это, очевидно, следует сделать сле- дующим образом: ?- all (X, отношение (а, X), Z).
Языки ИИ и машины ИИ 335 Выполнив эту операцию, получим ответ Z = (&, d, f, С, g, е]. Пример реализации предиката all приведен ниже. all (X, Goal, У)asserta (found (mark)), Goal, asserta (found (X)), fail. all (X, Goal, Solution)collect ([ ], Solution). Пример выполнения предиката all показан на рис. 7.12. Сначала в базу данных записывается метка found (mark) found(а) found (mark) found (6) found (ц) found (mark) Рис. 7.12. Процесс выполнения операции all с использованием базы данных как стека (с изменением содержимого базы данных). с названием found (mark) и оценивается цель Goal. При оценке цели получаем значение переменной X в этом предикате, которое записываем в базу данных в виде found (X). При выполнении предиката asserta база данных, как видно из рисунка, используется как стек. Фактиче- ски found (mark)—это метка, которая показывает дно стека (запись в стек found (X) делается для пред- отвращения определения двух и более раз значения X). После выполнения предиката asserta (found (X)) выполняется предикат fail, осуществляется возврат к предикату asserta (found (X)), однако поскольку повторное выполнение этого предиката завершается неудачей, то снова выполняется предикат Goal. За- тем определяется новое значение X и для этого ново- го значения выполняется предикат asserta (found (X)). Этот процесс повторяется многократно до тех пор, пока выполнение Goal не завершится неуспехом. После этого предикат второй строки all вызывает
336 Глава 7 предикат collect. Предикат collect задается следую- щим образом: collect (Д S): - get.next (X), collect ([X | Л], S). collect (S, S). get_next (X)retract (found (X)), ! X #= mark. Этот предикат обнаруживает значение X, совпа- дающее с found (X) (сопоставление начинается с вер- шины стека), и удаляет его из базы данных (база данных используется как стек, т. е. предикат asserta выполняет операцию помещения в стек, а предикат retract — извлечение из стека). Если X не является меткой, то операция get_next(X) завершается успе- хом, поэтому обнаруженное значение X включается в список. (Это отображается как [Х|Л]). Если же X — это метка, то, как показано на рис. 7.12, преди- кат all извлекает found (метку), записанную перво- начально при помощи asserta. Однако поскольку Х#= метка завершается неуспехом, делается попытка воз- врата, которая пересекается операцией удаления, по- этому операция get_next(X) завершается неуспехом. В этом случае оценивается collect (S, S) во второй строке и обработка завершается. Если возникает множество одинаковых значений X, удовлетворяющих цели Goal, то в списке Solution (Решения) также содержится множество одинаковых значений и нет смысла использовать стек. Для пре- дотвращения «этого первую строку операции all сле- дует изменить, как показано ниже: all (X, Goal, У)asserta (found (mark), Goal, already_stored (X), fail. already-stored (X)found (X), !. already_stored (X)asserta (found (X)) 7.2.6. ПРОЛОГ-МАШИНЫ Специализированная вычислительная.. машина, предназначенная для быстрого выполнения Пролог- программ, называется Пролог-машиной. Собственно говоря, выполнение Пролог-программы — это есть
Языки ИИ и машины ИИ получение логического вывода, поэтому Пролог-ма- шину называют еще машиной логического вывода. Из вышеизложенного очевидно, что в Прологе, так же как и в Лиспе, большая доля операций приходит- ся на функции символьной обработки. Однако кроме этого требуются функции управления выполнением программы для получения вывода. Рис. 7.13. Процесс выполнения Пролог-программы. На рис. 7.13 показан процесс выполнения следую- щей Пролог-программы: бабушка (X, Z):- мать (%, У), родитель (У, Z). родитель (X, У):- отец (%, У). родитель (X, У);- мать(Х, У) На рисунке показан процесс выполнения мать(Х, Митико), родитель (Митико, Z), ~. При выполнении атома родитель (Митико, Z) этот атом вызывает про- цедуру, хорновское предложение, в левой части ко- торого имеется предикат родитель, интерпретируется как определение процедуры и процедура родитель вызывается (call) посредством сопоставления образ- цов. При сопоставлении образцов сначала вызывает- ся предложение родитель (X, Y): — отец (X, У) 22—1145
338 Глава 7 (здесь X = Митико, Y = Z) и осуществляется пере- ход к выполнению его левой части отец (Митико, Z). Далее если сопоставить его с фактом отец (Митико, таро), то получим в качестве значения Z = таро. Од- нако если предикат отец (Митико, *) (где * — лю- бая константа) не определен, то выполнение этой про- цедуры завершается неуспехом, осуществляется воз- врат и выполняется следующая процедура родитель (X, У):-мать (X, Y) (перебор с возвратами). Если выполнение процедуры родитель (X, $):-отец (X, Y) завершилось успехом и было выдано значение, но по- следующая обработка завершилась неудачей и по- следовал возврат, то эта процедура вызывается по- вторно. Для увеличения скорости выполнения подобной обработки в Пролог-машине необходимо увеличить скорость выполнения следующих функций: (1) функция символьной обработки, (2) функция сопоставления образцов, (унифика- ции) для обработки предикатов, (3) функция обработки неопределенностей и пе- ребора с возвратами. Что касается первой функции, то это требование является очевидным, поскольку в основе получения логического вывода лежит обработка предикатов, представленных алфавитно-цифровыми символами. Что касается второй функции, то, поскольку выпол- нение . Пролог-программы базируется на операции унификации посредством сопоставления образа пре- диката с хорновским предложением, ускорение опе- рации сопоставления образцов за счет использования специальных аппаратных средств является важным моментом в проектировании архитектуры. Что ка- сается третьей функции, то, поскольку в Пролог-ма- шине не применяется метод проб и ошибок для вы- полнения программы, необходимо ускорить управле- ние перебором с возвратами. В архитектуре Пролог-машин первоначально рас- сматривались методы реализации требований (2) и (3) на основе микропрограммных средств машин символьной обработки, т. е. Лисп-машин. Кроме того,
Языки ИИ и машины ИИ 339 планировалось реализовать эти требования (2) и (3) в рамках обычных фон-неймановских машин после- довательной обработки за счет использования спе- циальных аппаратных или микропрограммных средств. На рис. 7.14 показан процесс реализации машины логического вывода. Например, в машине Описание вывода (программа) Прямое выполнение Компиляция •Поиск правила •Сопоставление •Изменение базы данных • Метод проб и оши- бок (автоматическое управление) Операции с символами •Арифметические операции Изменение базы данных Метод проб и оши- бок (автоматичес- кое управление) Арифметические операции Операции с симво лами Неймановский тип Рис. 7.14. Процесс обработки с получением логического вывода. логического вывода PSI [19], разработанной в рам- ках проекта ЭВМ пятого поколения, были использо- ваны специальная стековая память для управления операцией перебора с возвратами и специальные средства для сопоставления образцов (операции уни- фикации). Всего было использовано 4 типа стековой памяти: (1) управляющий стек (для управления последо- довательностью выполнения программы), (2) локальный стек для управления областью ячеек с переменными, (3) стек для того, чтобы сделать недействитель- ными значения переменных, 22*
340 Глава 7 (4) глобальный стек для генерации структурных данных. К Пролог-машинам помимо этой модели относятся машина CHI [20], представляющая собой быстро- действующий вариант PSI, машина РЕК [21] Уни- Рис. 7.15. Структура Пролог-машины. (1) Большая часть времени выполнения уходит на доступ к памяти увеличена скорость выполнения операций чтения/записи в память; (2) При выполнении Пролог-программы часто используются операции со стеком -► применение быстродействующей стековой памяти (в отличие от Лисп-машин здесь требуется стек для управления при выполнении про- граммы методом проб и ошибок); (3) Специальные команды обработки Пролог-программ (высокофункциональные команды — сопоставление образ- цов логических выражений) применение микропрограммных средств (между Пролог-машиной и Лисп-машиной разница в аппаратных стредст- вах несущественная). верситета г. Кобэ (Япония), PLM [22] Калифорний- ского университета и др. Общие отличительные особенности, свойственные этим машинам, показаны на рис. 7.15. Из этого ри- сунка видно, что конфигурация аппаратных средств этих машин мало чем отличается от Лисп-машин (а следовательно, и от универсальных вычислительных машин).
Глава 8 МАШИНЫ БАЗ ДАННЫХ Машины баз данных — это специализированные машины, занимающие свое место в архитектуре ЭВМ. Исследования и разработки этих машин особенно оживленно происходили начиная со второй половины 70-х годов по 80-е годы. Исследования, начало кото- рым положила идея параллельного поиска во вторич- ной памяти, в ходе широких изменений в элементной базе: расцвете и упадке ПЗС, ЗУ на ЦМД, достиже- нии эры СБИС, прогрессе микропроцессорной техники, удешевления и увеличения емкости полупроводнико- вых ЗУ — имели целью в более широких пределах по- высить скорость обработки данных и развивались со- провождаемые нахождением новых компромиссных решений. В данной главе этот процесс будет изложен еще раз, а также будут рассмотрены технические приемы и обсуждены перспективы на будущее. 8.1. ФУНКЦИОНИРОВАНИЕ БАЗЫ ДАННЫХ И МАШИНЫ БАЗ ДАННЫХ 8.1.1. ЧТО ТАКОЕ МАШИНА БАЗЫ ДАННЫХ Начало исследований в области машин баз дан- ных (БД) связано с предложением в начале 70-х гг. Э. Коддом реляционной модели данных. После этого начались бурные исследования в этой области [1—5]. Причинами такого развития событий послужили сле- дующие две. Во-первых, интенсивные исследования и практическое применение реляционных моделей для баз данных привели к пониманию необходимости по- вышения эффективности обработки с помощью БД и к выявлению новых требований. Во-вторых, посколь- ку основными операциями для такой модели были операции с множествами, то они являлись пригодны- ми для конвейерной и параллельной обработки и
342 Глава 7 вызвали определенный интерес исследователей в об- ласти параллельных архитектур. Кроме этих двух причин существовала еще и третья причина, которая заключалась в постепенном понимании того, что, хотя существующие универсальные компьютеры и подхо- дят для высокоскоростных вычислений, они непригод- ны для выполнения с высокой скоростью операций сравнения и сортировки больших объемов записей, хранящихся во вторичной памяти. В начале 80-х гг. западногерманская фирма Soft- ware AG разработала машину ADABAS, американ- ская фирма Britton-Lee — машину IDM500 [9], а другая американская фирма Intel — полупроводни- ковый диск FAST-3805 и процессор базы данных DBAP. ADABAS — это система управления базой данных (СУБД) реляционного типа, использующая переместимые файлы. В системе ADABAS была ис- пользована IBM-совместимая машина, и связь между машиной ADABAS и главным IBM-совместимым компьютером стала возможной благодаря использо- ванию нового, разработанного данной фирмой ка- нала. IDM500 — это машина БД для реляционной модели, и кроме 16-разрядного микропроцессора ее можно дополнить акселератором базы данных, выпол- ненным на элементах Шотки-ТТЛ, для конвейерного поиска записей. Производительность системы с аксе- лератором равна приблизительно 10 миллионам опе- раций в секунду. В этой машине был использован спецпроцессор БД, в который передаются из главной машины все операции с БД, и тем самым уменьшается нагрузка на главную машину. Полупроводниковый диск — это полупроводнико- вое ЗУ, выполненное на МОП-элементах памяти и совместимое по разъемам с дисковой памятью IBM- компьютера. Использование полупроводникового дис- ка— это один из методов увеличения быстродействия вторичной памяти. Другим средством увеличения быстродействия вторичной памяти является разрабо- танный английской фирмой ICL контроллер диска CAFS (12), имеющий функцию ассоциативного поиска записей. Главными целями, поставленными перед раз- работчиками этого контроллера, были передача
Машины баз данных 343 функции поиска записей из ЦП во вторичную память и повышение эффективности использования основной памяти за счет пересылок из вторичной памяти в ос- новную только необходимых в конкретный момент записей. Кроме задач коммерческого характера большой объем исследовательских работ был направлен на увеличение скорости выполнения операций, требую- щих большой затраты времени (например, типа опи- сываемой ниже операции соединения и т. п.), а также на управление и обработку в крупномасштабной БД. Затем по мере понимания того обстоятельства, что при уменьшении пропускной способности канала пе- редачи данных между вторичной памятью и обраба- тывающей системой и увеличении быстродействия только обрабатывающей системы за счет параллель- ной обработки станет невозможным обеспечение достаточно высокого быстродействия вторичной памя- ти, с которой система обработки обменивается нуж- ными данными. В результате была предложена ма- шина БД с основной памятью, предполагающей, что вся база данных виртуально хранится в основной па- мяти. Кроме того, были предложены метод разбие- ния файлов для сокращения частоты доступов ко вто- ричной памяти и многопортовая дисковая кэш-па- мять, целью которой является не только снижение частоты доступов ко вторичной памяти, но и резкое увеличение ширины канала передачи данных в обра- батывающую систему. Кроме того, проект разработки ЭВМ пятого поко- ления, утвержденный Министерством торговли и про- мышленности Японии, предусматривает создание ма- шин баз знаний, которые на основе централизован- ного управления множествами правил, процедур и других знаний способны делать выводы и осуществ- лять поиск информации. 8.1.2. ФУНКЦИОНИРОВАНИЕ БАЗЫ ДАННЫХ В реляционной модели базы данных различная информация представлена в виде множества таблиц (см. рис. 8.1). Эти таблицы называются отношениями.
344 Глава 8 Каждый столбец таблицы называется атрибутом, а каждая строка — кортежем. Например, кортеж (Сап- поро, Хоккайдо) отношения, имеющего атрибуты «го- род» и «префектура», показывают, что в префектуре с названием «Хоккайдо» существует город с названием «Саппоро». Два отношения, имеющие одинаковые множества атрибутов, называются типом Место рожд. Фамилия студента Место рождения Танака Накамура Ямада Судзуки Киото Саппоро Кобэ Саппоро Место- нахож- дение Город Префектура Киото Киото Кобэ Хёго Саппоро Хоккайдо Рис. 8.1. Пример базы данных, состоящей из двух отношений. Поскольку отношение можно рассматривать как множество, элементами которого являются кортежи, то между двумя отношениями одного типа возможны операции над множествами, такие, как объединение множеств, пересечение множеств, вычитание мно- жеств. Кроме того, для двух произвольных отноше- ний можно определить их общее множество. Это мно- жество соответствует отношению, имеющему множе- ство атрибутов, в которое входят множества атрибу- тов первых двух отношений. Помимо этих операций существует еще несколько операций, которые называются реляционными опера- циями (или операциями реляционной алгебры). Ос- новными из них являются операции выбора, ограни- чения, проекции и соединения (см. рис. 8.2). Операция выбора заключается в том, что из всех кортежей отношения 7?, указанных как R[A=B], выбираются только те кортежи, значение атрибута А в которых равно В. Операция ограничения похожа на операцию выбора и заключается в том, что из всех кортежей отношении 7?, указываемых как 7? (А =
Машины баз данных 345 — В], выбираются только те кортежи, у которых зна- чения атрибутов А и В равны. Операция проекции указывается следующим образом: R [X]. Здесь X яв- ляется подмножеством множества атрибутов R. С по- мощью этой операции из таблицы отношения R уда- ляются все столбцы, соответствующие атрибутам, не входящим в X, а из полученной таблицы удаляются кортежи с одинаковыми значениями. Операция со- единения является операцией между двумя отноше- ниями и записывается как R[A = B]S. Здесь R и 5 являются отношениями, а Л и В — атрибутами отно- шений R и 5 соответственно. Эта операция заклю- чается в том, что из всех комбинаций кортежей в от- ношениях R и S выбираются только те комбинации, в которых значения атрибута А кортежа из отноше- ния R равны значениям атрибута В кортежа из отно- шения S, и в паре выбранных кортежей кортеж от- ношения S присоединяется к кортежу отношения R, создается новый кортеж, в который входят все ат- рибуты отношений R и S, и данный кортеж выво- дится. Эта операция эквивалентна вычислению
346 Глава 8 (У? X S) [А — В] с помощью прямого произведения и ограничения. При этом предполагается, что R и 3 не имеют общих атрибутов. Проекция соединения R [А — = B]S на множество атрибутов R называется полу- объединением и обозначается как R(A = В]3. Условия равенств А — v', А = В, определяющие различные реляционные операции, можно заменить па условия неравенств. В частности, операция для случая, когда условие задается равенством, назы- вается эквивалентностью. 8.2. ИСТОРИЧЕСКИЙ ОБЗОР И КЛАССИФИКАЦИЯ МАШИН БАЗ ДАННЫХ О. Г. Брэй и др. предложили классифицировать машины БД по числу процессоров, входящих в ее со- став, и способу поиска информации во вторичной па- мяти следующим образом [1]: (1) SP1S : одиночный процессор, косвенный поиск; (2) SPDS : одиночный процессор, прямой поиск; (3) MPDS : множество процессоров, прямой поиск; (4) MPIS : множество процессоров, косвенный поиск; (5) MPCS : множество процессоров, комбиниро- ванный поиск. Машины БД SPIS-типа можно считать машина- ми, которые основываются (базируются) на нереля- ционной модели данных, а машины других типов в основном базируются на реляционной модели. 8.2.1. СПЕЦИАЛИЗИРОВАННЫЕ МАШИНЫ БД SPIS-ТИПА В машинах SPIS-типа универсальный процессор обычно используется в качестве машины БД главной ЭВМ и выполняет функции управления и обработки БД. К машинам этого типа относятся XDMS [6], INFOPLEX фирмы Bell Labs, DATA COMPUTER [7] фирмы CCA, GDS [8] и IQC [38] фирмы NEC и другие. В их число входят также машины, используе- мые для обработки БД с помощью микропрограмм- ного обеспечения. К коммерческим машинам такого
Машины баз данных 347 типа относятся машины ADABAS фирмы Software AG и IDM500 [9] фирмы Britton Lee. Эти машины были разработаны с середины 70-х гг. по начало 80-х гг. Все они не имели специализированного аппаратного ме- ханизма. Машины SPIS-типа иногда называют еще специализированными программными машинами БД (Software backend). 8.2.2. ФИЛЬТРУЮЩИЙ ПРОЦЕССОР, SPDS-ТИП На протяжении всех 70-х гг. велись разработки ма- шин SPDS-типа, в которых планировалось эффектив- Запрос на поиск: ВЫБРАТЬ ПОСТАВЩИКА, ЦЕНУ ПРИ УСПОВИЯХ (ПОСТАВЩИК = "ТЕХАС" или ДЕТАЛЬ ~ "РЕЗИСТОР") и ЦЕНА>ЗФ. Блок ассоциативного Блок поиска В главную ЭВМ части записи Рис. 8.3. Базовая архитектура системы CAFS. ное использование основной памяти за счет выполне- ния в контроллере дисковода независимо от главной ЭВМ таких операций с кортежами, как выбор и ограничение, и пересылки с дискового накопителя в главную ЭВМ только тех данных, которые удовлет- воряют условиям поиска. Машина CPDC-типа из всего
348 Глава 8 потока данных, которые пересылаются с дисковой памяти в главную ЭВМ, не пропускает данные, не удовлетворяющие условию поиска, поэтому она по- лучила название фильтрующего процессора. Приме- рами машин этого типа являются CAFS [10], CAFS3 [12] фирмы ICL, Search Processor [11] Техническо- го университета г. Брауншвейга и др. Быстродействие машины CAFS / составляет 4 Мбайт/с, и она способна осуществлять одновремен- ный поиск по нескольким дорожкам. Контроллер НМД этой машины способен управлять несколькими обычными НМД, но для организации ассоциативного доступа он был оснащен блоком ассоциативного по- иска и блоком выборки записи (см. рис. 8.3), что по- зволяло осуществлять поиск записи по ключевому слову без задержки пересылки данных с диска. Функция обновления отсутствует. Разработанная впо- следствии машина CAFS3 была способна выполнять операцию полуобъединения с помощью битовой матри- цы с хешированием без задержки пересылки данных. 8.2.3. ВНЕДРЕНИЕ ПАРАЛЛЕЛЬНОЙ ОБРАБОТКИ — MPDS-МАШИНЫ Машина с параллельной обработкой при ассо- циативном поиске во вторичной памяти, используе- мом в машине SPDS-типа, является машиной MPDS- типа. MPDS-машина — это машина БД, которая снабжена специальным дисковым накопителем, име- ющим для каждой дорожки головку считывания/за- писи, электронным диском, запоминающими элемен- тами которого являются ПЗС или ЦМД, и процессо- ром для каждой дорожки, который называется процес- сорным элементом (ПЭ) или ячейкой. Всевозможные машины этого типа разрабатывались на протяжении всех 70-х гг. RAP1 [14] Университета г. Торонто является клас- сическим примером MPDS-машины, ее структура по- казана на рис. 8.4. На каждой дорожке специального диска последовательно записаны кортежи одного от- ношения. Операции выбора и ограничения выполняют- ся с помощью блока сравнения при прохождении

350 Глава 8 кортежами обводного устройства, организованного в виде буфера. Если все отношение целиком запи- сано на специальном диске, то эти операции выпол- няются за один оборот диска. На дорожке имеется множество маркировочных битов (для каждого кор- тежами по результату сравнения кортежу можно при- своить метку. Используя команду CROSS MARK, можно выпол- нить операцию полуобъединения, например R(A = = В) (S [С = v']). При этом сначала в ячейке, в кото- рой хранится отношение S, кортежу, удовлетворяю- щему С = 'v'9 присваивается метка. Затем исполь- зуются ячейка; в которой хранится отношение S, и ячейка, в которой хранится отношение /?, и значе- ния атрибута В кортежа, помеченного в отношении S, по k (штук) пересылаются в ячейку отношения R k — это число схем сравнения в ячейке. В отношении R помечается тот кортеж, который в качестве значе- чения атрибута А имеет значение, равное какому-ли- бо из этих k значений. Операция присвоения метки в некотором отношении на основании метки, присвоен- ной в другом отношении, называется операцией cross mark. Каждый кортеж имеет флаг уничтожения, и для сборки мусора, образующегося в результате уничто- жения, в одном месте используется функция пересыл- ки данных в головку записи из буфера. В машине RAP1 для каждой дорожки диска ис- пользуется один процессорный элемент и на одной дорожке хранится отношение одного типа. Для смяг- чения этого ограничения можно рассматривать все- возможные архитектуры, в которых допускается хра- нение атрибутов отношения в других ячейках, однако в основном функции и возможности этих атрибутов мало чем отличаются. Первая машина MPDS-типа была предложена Слотником в 1970 г. Его идеи были развиты впослед- ствии Паркером [40] и Минским [41] и нашли свое воплощение в разработанных следом машинах БД MPDS-типа, таких, как CASSS [42] Университета шт. Флорида (США) (1972 г.), CASSM [13] (1973 г.), RAP [14] (1975 г.) Университета г. Торонто (Кана-
Машины баз данных 351 да), RARES [15] (1976 г.) Университета шт. Юта (США) и т. д. В конце 70-х гг. благодаря разработ- кам ПЗС-элементов и ЦМД-элементов, привлекших к себе внимание в качестве элементов памяти, запол- няющих промежуток между существующей в то вре- мя МОП-памятью и магнитными дисками, активизи- ровались исследования в сфере MPDS-машин [16, 17], однако, по мере того как исследования этих эле- ментов как новых элементов памяти пошли на убыль, интерес к исследованиям MPDS-машин стал также ослабевать. Аналогично тому как в машине RAP каждая ячейка снабжена буфером, так и в MPDS-машине для каждой дорожки имеется обходной буфер, и пока данные проходят через этот обходной путь, осу- ществляется различная обработка без снижения ско- рости пропускания данных. Такой способ обработки называется непрерывной обработкой (on-the-fly-pro- cessing). 8.2.4. СНИЖЕНИЕ СТОИМОСТИ МОП-ПАМЯТИ ~ РАННИЙ ЭТАП MPDS-МАШИН С конца 70-х гг. по начало 80-х гг. главные надеж- ды возлагались на практическое использование памя- ти большой емкости на базе ПЗС и ЦМД. Однако уде- шевление МОП-памяти явилось главной причиной, опровергнувшей эти надежды. В результате было предложено использование МОП ЗУ с произвольной выборкой в качестве рабочего буфера в каждом про- цессорном элементе MPDS-машины. Примером тому являются машины MICRONET [18] Университета шт. Флорида, RAP3 [24] Технологического универ- ситета Middle-Eazt и Университета шт. Аризона и другие. Эти машины называют ранними MPDS-ма- шинами. В связи с применением МОП-памяти непре- рывная обработка потеряла смысл. 8.2.5. ОБЩАЯ АРХИТЕКТУРА — MPCS-МАШИНЫ Во второй половине 70-х гг. появились первые об- разцы MPCS-машин, представляющих собой комби- нацию MPDS и MPIS-машин. Примером тому
352 Глава 8 является машина DBS [30—32]’ (1976 г.), разрабо- танная в Университете шт. Огайо (США). Машины MPCS-типа предполагают кластеризацию (группиро- вание) файлов по значению ключевого атрибута и ат- рибуту доступа и разбиение файлов на сегменты. Про- цесс обработки заключается в поиске номера сегмента, ------ Шина -----Линия данных управления Рис. 8.5. Архитектура машины DBC, DBCCP: процессор для де- кодирования команд и управления; KXU — блок преобразования ключевых слоев; SM—блок структурной памяти; SMIP—процес- сор для обработки структурированной информации; IXU — блок преобразования индекса; SFP — процессор с ограничением до- ступа для обеспечения целостности данных; ММ — память боль- шого объема. являющегося объектом обработки, в каталоге сег- ментов и обработке содержимого каждого сегмента, имеющего номер, который совпал с обнаруженным в каталоге. Поиск в каталоге сегментов осуществляет- ся MPIS-архитектурой, а обработка содержимого сегмента — MPDS-архитектурой. Архитектура машины DBC показана на рис. 8.5. Вся база данных (порядка 1010 байт) хранится в мас- совой памяти, встроенной в систему циркуляции дан- ных, а каталоги (порядка 107—109 байт)—в струк- турированной памяти с циклической структурой, кото-
Архитектуры памяти 353 рые функционируют независимо. DBC — это машина с функциональным распределением, при котором по- иск в каталоге, обработка каталогов, поиск в массо- вой памяти и другие операции выполняются незави- симыми функциональными модулями по принципу последовательной конвейерной обработки. В маши- не DBC не предусмотрено выполнение операций со- единения и полуобъединения. Ее уязвимым местом являются издержки, связанные с тем, что один про- цессор DBCCP управляет всей машиной. 8.2.6. НЕОБХОДИМОСТЬ СКОРОСТНОЙ ОБРАБОТКИ ДЛЯ ВЫПОЛНЕНИЯ ОПЕРАЦИИ СОЕДИНЕНИЯ И НЕОБХОДИМОСТЬ СЕТИ СВЯЗИ — MPIS-МАШИНЫ Реляционная модель, предложенная в начале 70-х гг., вызвала бурную дискуссию относительно двух традиционных моделей данных: иерархической и се- тевой. Спор между приверженцами каждой модели, продолжавшийся до середины 70-х гг., постепенно пе- рерос в настоящую войну идей, причем один из глав- ных спорных вопросов был связан с применением операции соединения. Защитники традиционных мо- делей ставили под сомнение необходимость динамиче- ского определения логических связей двух отношений при обработке запросов на поиск, а также выражали неудовлетворение величиной времени обработки, тре- буемой для этого. Сторонники реляционной модели, в свою очередь, главное внимание уделяли расшире- нию функций поиска, которое влечет за собой опера- ция соединения, разделению логической и физической структур и увеличению на основе этого разделения гибкости системы. Эти идеи постепенно стали распро- страняться начиная со второй половины 70-х гг. Под влиянием этих идей интерес исследователей стал кон- центрироваться вокруг скоростного выполнения опе- рации соединения. Кроме того, в конце 70-х гг. стал расти интерес к логическому программированию, и по мере этого начали проводиться исследования в области дедуктивных баз данных, поиск в которых осуществлялся на основе дедуктивных выводов. В де- дуктивной БД операция соединения является базовой 23—1145
354 Глава 8 операцией, эквивалентной логическому произведению, поэтому исследования, направленные на увеличение скорости выполнения операции соединения, приобре- ли более интенсивный характер. При выполнении операции соединения необходимо обращение к двум отношениям. В описанных выше машинах MPDS-типа и ранних машинах MPIS-типа различные отношения обрабатывались различными процессорными элементами. Поэтому в случае необ- ходимости проведения обработки при одновременной ссылке к двум и более отношениям требовалось вы- полнять перекрестную ссылку между процессорными элементами, ведающими этими отношениями. Пере- крестная ссылка требует пересылки большого объема данных между различными процессорными элемента- ми. Таким образом, MPDS-машины и ранние MPIS- машины не подходят для увеличения скорости выпол- нения операции соединения. Точно так же можно по- казать, что этой цели не удовлетворяют и машины SPDS-типа. Решение этой проблемы было предложено Девит- том и др. Они предложили использовать сеть связи, соединяющую группу процессорных элементов и груп- пу дорожек электронного диска, к которым осущест- вляют доступ эти процессоры (см. рис. 8.6) [21—23]. Сеть связи можно также расположить между груп- пой дорожек электронного диска и группой дисковых накопителей с перемещаемыми головками. В такой сети связи был использован перекрестный коммута- тор. Первая машина с подобной сетью связи называ- лась DIRECT, и поскольку в ней в качестве буфера перемещения (staging) использовался электронный диск, данная машина была отнесена к типу MPIS- машин. С другой стороны, DIRECT — это параллель- ная машина МКМД-типа. В качестве контроллера БД используется ЭВМ PDP 11/40, которая управляет группой процессоров и памятью. Соединение процес- соров с главной ЭВМ осуществляется по способу ПДП. В процессоре запросов используется ЭВМ PDP 11/03, которая осуществляет операции реляцион- ной алгебры со страницами, распределенными конт- роллером.
Рис. 8.6. Архитектура системы DIRECT.
356 Глава 8 Модуль памяти представляет собой ЗУ на ПЗС емкостью 16К байт, которое используется в качестве буфера для пересылаемых с диска файлов. Линии, соединяемые перекрестным коммутатором, имеют ши- рину 1 бит. Предполагается, что кортежи представ- лены в виде фиксированных таблиц, а операции с отношениями выполняются путем разбиения этих таблиц на страницы. Обработка выполняется постра- нично, и в процессоре динамически распределяются страницы, подлежащие обработке. Промежуточные результаты сохраняются в модуле памяти как отно- шения. Управление страницами, например доступ к странице, распределение и обработка страниц, пол- ностью выполняется контроллером БД, поэтому име- ется проблема его перегрузки. Машина DIRECT способна не только с высокой эффективностью выполнять перекрестные ссылки благодаря использованию сети связи «процессор — память», но и выполнять обработку посредством раз- биения отношений на страницы и постраничного по- иска информации. Однако в ней недостаточно были продуманы вопросы увеличения скорости выполнения операции соединения при постраничной обработке, сокращения времени доступа к странице и сокраще- ния суммарного числа операций, если операцию со страницей считать отдельной операцией. 8.2.7. ПРОГРЕСС В ТЕХНОЛОГИИ СБИС И ФУНКЦИОНИРОВАНИЕ БД В конце 70-х гг. в США наступил период станов- ления и упорядочивания среды проектирования и опытного изготовления заказных СБИС. В это время Кунгом были предложены систелические матрицы и начались интенсивные исследования, связанные с по- иском алгоритмов, реализуемых аппаратно на спе- циализированных СБИС. Что касается сферы баз данных, то здесь также в целях ускорения операций соединения при постраничной обработке и сортиров- ке активизировались исследования аппаратно реали- зуемых алгоритмов. Передовыми достижениями в
Машины баз данных 357 этой области считаются двунаправленный сортиров- щик методом слияния [43], предложенный Тоддом (1978 г.), систелическая матрица для выполнения опе- рации соединения [36], предложенная Кунгом (1980 г.), механизм поиска и механизм сортировки [27], предложенные Танакой из Университета Хок- кайдо (1980 г.), и другие. Перечисленные средства позволяли выполнять обработку, которая прежде при использовании одного процессора требовала времени О (и log и) для данных объема п, за время О (и) по- средством использования конвейерного способа по от- ношению к потоку последовательно пересылаемых данных. Поскольку обработка осуществляется, пока протекает поток данных, то Танака называл этот тип обработки потоковой обработкой (data-stream proces- sing). Совмещение двух функций — накопления и обработки в одном модуле — ухудшает реализуемость с точки зрения стоимости системы, требующей на- копления больших объемов данных, например базы данных. Поэтому обработка обязательно сопровож- дается пересылкой данных. В базе данных в боль- шинстве случаев объектом обработки является мно- жество данных. Поэтому для такой обработки не- обходима пересылка множеств данных. Однако одно- временная пересылка всех элементов множества невозможна из-за ограничений, накладываемых на ши- рину канала передачи, поэтому ничего не остается как пересылать данные последовательно. В результате объектом обработки становится поток данных, а сле- довательно, необходим аппаратно реализуемый алго- ритм, который позволял бы с высокой эффективностью обрабатывать поток данных. Подробности, касающие- ся подобных алгоритмов, уже были изложены в разд. 2.3. Технология заказных СБИС ускорила исследова- ния в области архитектур машин БД, исполь- зующих ассоциативный процессор, выполненный на СБИС. Примерами тому являются машины RELACS [34] (1980 г.), Simple Relation Module [35] (1981 г.) и другие. Можно сказать, что свое происхождение архитектура этого типа берет от исследований Мол- дера [44] и Берра [33], касающихся практического
558 Глава 8 применения ассоциативного процессора STARAN в си- стеме БД. Более подробно об этом сказано в разд. 6.5. 8.2.8. ПАРАЛЛЕЛЬНОЕ ВЫПОЛНЕНИЕ ОПЕРАЦИЙ СОЕДИНЕНИЯ И ДИНАМИЧЕСКАЯ КЛАСТЕРИЗАЦИЯ Внедрение сети связи «процессор — память» сде- лало возможным перекрестную ссылку, однако не ре- шило проблемы параллельного выполнения операции соединения. Для параллельного выполнения У про- цессорами (многоэлементной обработки) операции соединения необходимо разбить отношения R и S, яв- ляющиеся объектами обработки, на N сегментов рав- ной величины Ri, /?2, . .., Rn и Si, S2, ..., SN. В слу- чае когда разбиение на сегменты выполняется без учета того, каким образом распределены кортежи в каждом сегменте, необходимо выполнить операцию соединения Ri и S/ для всех комбинаций i и /. Всего требуется выполнить W2 операций соединения. Одна- ко если при выполнении операции соединения /?[Л = В]5 можно разбить R и S таким образом, чтобы для различных i и / = B]Sj было пустым, то суммарное число операций соединения для сег- ментов можно сократить до М Поскольку такое раз- биение зависит от того, для каких атрибутов выпол- няется операция соединения, то заранее выполнить это разбиение невозможно. Рассмотрим функцию расстановки h (или хэш- функцию), отображающую множество V значений атрибута А отношения R в множестве {1, ..., N}. Множество V разбивается с помощью хэш-функции h на классы эквивалентности Vi, V2, ..., Удг. Здесь Vi — это множество, состоящее из элементов v мно- жества V, таковых, что h(v) = i. Ri — это множество, в состав которого из всех кортежей отношения R входят только те, значения атрибута А которых вхо- дят в Vi. Данное разбиение обозначается как R/h(A). Если, используя одно и то же значение Л, разбить отношения R и S на R/h(A) и S/h(B), то для разных i и / Ri[A = B]Si является пустым. Если ис- пользуется N процессоров и в r-м процессоре вычис-
Машины баз данных 359 ляется /?ДЛ=В]5б то операцию соединения 7? [A =B]S можно получить в виде суммы этих про- межуточных ьх результатов. Таким образом, благо- даря использованию хэш-функции h каждое отноше- ние R и S можно разбить абсолютно одинаково. Разбиение отношения R на R/h(A) в ходе выпол- нения программы называется динамической класте- ризацией. Динамическая кластеризация впервые бы- ла использована в сети DP [45], предложенной Одой из NTT. Сеть DP — это многоуровневая сеть связи, соединяющая N дорожек одного цилиндра диска, до- ступ к которым возможен параллельно, с N процессо- рами. Каждое отношение хранится в одном цилиндре и N параллельно считанных кортежей направляются на z-й процессор в соответствии с хэш-значением i каждого значения атрибута А. В многоуровневой сети это распределение проводится конвейерным способом, не задерживает вращение диска и завершается за один оборот диска. Самым проблематичным моментом в динамиче- ской кластеризации является выбор хэш-функции, позволяющей осуществлять равномерное разбиение, т. е. самое сложное — это равномерно распределить нагрузки процессоров. Есикава из Токийского уни- верситета разрешил эту проблему в машине GRACE [46]. В этой машине между группой дисковых нако- пителей и буферами ОЗУ, а также между буферами ОЗУ и процессорами расположены сети связи [28, 46]. Динамическая кластеризация выполняется в слу- чае параллельного считывания отношений из диско- вых накопителей в буферы ОЗУ. Однако число раз- биений N можно задать независимо ни от числа банков буфера ОЗУ, ни от числа процессоров. То есть в отличие от сети DP, где отношение Ri закреп- лялось за f-м модулем, в машине GRACE каждое от- ношение Ri распределяется в пространстве памяти в виде полос, пересекающих буферные модули (см. рис. 8.7). Если в машине GRACE в каждом процес- соре использовать улучшенный вариант двунаправ- ленного сортировщика слиянием Тодда [43], то для выполнения операции соединения 7?/[Л=В]5/ сег- ментов Ri и Si эти сегменты можно будет последова-
360 Глава 8 тельно считывать из группы буферов в любой про- цессор, находящийся в состоянии ожидания работы. Это можно реализовать посредством соответствующе- го переключения соединения между процессором и группой банков памяти. Благодаря этому можно обес- печить параллельное выполнение операций соедине- Процессоры Сеть Буферы Сеть Диски К *2 Hl Рис. 8.7. Динамическая кластеризация в системе GRACE. ния пар сегментов, число которых равно числу про- цессоров. В проекте DSDBC [29] Танака из Уни- верситета Хоккайдо предложил сеть связи SD, спо- собную выполнять оба вида работ: динамическую кластеризацию и сортировку всех сгруппированных в результате кластеризации сегментов. 8.3. АНАЛИТИЧЕСКИЙ ОБЗОР И ПЕРСПЕКТИВНЫЕ НАПРАВЛЕНИЯ 8.3.1. ИЕРАРХИЯ ПАМЯТИ В предыдущем разделе был дан краткий истори- ческий обзор машин БД, разработанных до 1982 г. Графически это представлено на рис. 8.8 [47]. Ис- следования в области машин БД, проводившиеся в 70-х гг., и одновременно с этим развитие микропро- цессорной техники оказали существенное влияние на
SPIS SPDS MPDS MPIS MPCS Ассоциативный процессор СБИС 1972- 1973- 1974- 1975- 1976- 1977- 1978- 1979- 1981- 1982- XDMS [6J Data Computer[7] / (фирма ССА) / СО5[8](фирма Ниппон дэнки")! ADABAS-машина (фирма Software AG IDM 500(9] (фирма Britton Lee) CAFS.1 [Ю] ^фирма ICL Search Processor[11] (Университет г. Брауншвейга) CAFS.3 [12] (фирма ICL) ) CASSMI13] (Университет шт. Флорида) rap.khX (Университет г. Торонто) RARES[15^ (Университет шт. Юта) НМД [16] DBM(IBM) EDC [17] \ MICRONETU8] \ (Университет ' шт. Флорида— RAP.2 [20] DBCProcessor [19] DIRECT [21-23] (Университет (Университет (Университет г. Торонто) шт. Огайо) шт. Висконсин) вдрЪ Г241 Data Flow D| RECT[25] DFDBCl^J (Технический (Университет (Университет университет* шт- Висконсин) Хоккайдо) Meadle East) .s' GRACE [28] (Токийский университет} OSDBC(29] (Университет Хоккайдо) DBC[30-32] (Университет шт. Огайо) (STARAN) [33] (ЕСАМ) RE LACS [34] (Университет г. Сиракузы) SRM[35] (Принстонский университет) Systolic array [36] (Университет Карнеги-Меллона) SEE [27] SOE/ (Университет Хоккайдо) Рис. 8.8. Машины БД до периода их анализа (1982—1983 гг.).
362 Глава 8 увеличение емкости и снижение стоимости БИС ОЗУ, и основной поток исследовательских работ постепен- но стал отклоняться в сторону MPIS-машин. В то время специальные диски, имеющие для каждой до- рожки головку считывания/записи, даже не были за- пущены в производство (исключая использование в Рис. 8.9. Изменения, происшедшие в иерархии памяти машин БД. одной коммерческой ЭВМ), а пришедшие им на сме- ну электронные диски на основе ПЗС и ЦМД не смогли противостоять снижению стоимости и увели- чению объема МОП ЗУ и уступили им свое место как элементы памяти. В результате в сфере машин БД распространилось понимание того, что без ис- пользования НМД с перемещаемыми головками в си- стеме вторичной памяти не обойтись. Рис. 8.9 иллю- стрирует, какие изменения произошли в иерархии памяти машин БД [47]. Память обработки — это та- кая память, доступ к которой осуществляется непо-
Машины баз данных 363 средственно устройством обработки, и она исполь- зуется как рабочая память в процессе обработки. Бу- ферная память используется в качестве промежуточ- ной для вторичной памяти, она позволяет сократить время доступа ко вторичной памяти и вместе со вто- ричной памятью предоставляет большое пространство виртуальной памяти. 8.3.2. ОЦЕНКА ВОЗМОЖНОСТЕЙ Обозначим число кортежей в отношении через п (в случае когда рассматриваются два отношения — п и /и), число процессоров — через Р, число схем сравнения в одном процессоре — С, размер сегмен- та — S, суммарный объем буферной памяти — В. В зависимости от используемых методов обработки, которые были предложены до 1982 г., время, требуе- мое на выполнение только одной операции реляцион- ной алгебры, изменяется, как показано на рис. 8.10 [47]. Сравнительный анализ возможностей различных машин БД с частичным учетом времени доступа к диску и издержек был проведен Хавторном и др. в 1982 г. [48]. Для сравнения они использовали харак- теристики ассоциативного диска машин CAFS3, CASSM, RAP, DBC, DIRECT, а также усовершен- ствованную с точки зрения производительности мо- дель машины INGRES в качестве типичного пред- ставителя СУБД на основе программного обеспече- ния. Ассоциативный диск — это дисковый накопитель, головки которого (для каждой дорожки одного ци- линдра) снабжены логическими ячейками, выпол- няющими функцию сравнения, усовершенствованный таким образом, что он способен вести параллельный поиск. При выполнении операции выбора для одно- го отношения лучшие результаты показали ассоциа- тивный диск, CAFS3, DBC, производительность ко- торых в 1,2—1,3 раза превысила производительность INGRES. Напротив, что касается RAP и DIRECT, то в самом худшем случае для них потребовалось вре- мя в 1,5 раза больше, чем для обработки на INGRES. Это объясняется тем, что из-за отсутствия буфера
Операции выбора/ограничения Операция полуобъединения Операция соединения Потоковая обра- О (п) ботка Перекрестная метка Перекрестная метка SIMD-машина Битовая матрица О (п + т) с хэшированием Сортировка в странице Применение пере- п В \ местимых файлов и q ‘ р ) Сортировщик О (п) Динамическая кластеризация Рис. 8.10. Методы обработки в машинах БД и время обработки, п, т — число кортежей в отношении, Р — число процессоров; С — число блоков сравнения в одном процессоре; 3 — размер сегмента; В— суммарная емкость бу- феров памяти.
Архитектуры памяти 365 для хранения отношения — объекта обработки все страницы этого отношения приходилось считывать из вторичной памяти. В машине INGRES, имеющей пе- реместимые файлы, из вторичной памяти считывают- ся только те страницы, которые содержат кортежи, удовлетворяющие условию поиска. При выполнении операции соединения двух отно- шений все машины показали результаты, лучшие, чем у INGRES, причем самый лучший результат по- казала машина DIRECT, производительность кото- рой в 10 раз превысила производительность INGRES. Второе и третье места разделили ассоциативный диск и DBC, которые немногим уступили DIRECT. Далее места распределились в таком порядке: RAP, CAFS, CASSM. Отметим, что ассоциативный диск работал с поддержкой со стороны главной ЭВМ. Операция, при которой по значению некоторого атрибута производится разбиение отношения на группы, определяется сумма значений численных ат- рибутов, имеющихся в каждой группе, и определяет- ся отношение, состоящее из пар значений, первое из которых — это указанное выше суммарное значение, а второе — значение атрибута, используемое для раз- биения на группы, называется операцией агрегациц (или составной операции). Скорость выполнения этой операции в значительной мере зависит от того, имеет ли обрабатывающий модуль арифметические функции или нет. Лучшие результаты здесь показала машина БД, обрабатывающий модуль которой вы- полнен на базе универсального процессора, например, как в машине DIRECT. По результатам анализа, проведенного Хавтор- ном, видно, что при выполнении простых реляцион- ных операций ни одна машина БД не способна по- казать производительность, заметно превосходящую производительность по сравнению с обработкой про- граммным путем. Также следует отметить, что при выполнении операции соединения весьма заметен эффект от использования сети связи «процессор — память». В 1983 г. были опубликованы результаты сравни- тельного анализа характеристик действующих машин
366 Глава 8 БД и программного обеспечения БД на основе эта- лонных тестов, который был проведен в Универси- тете шт. Висконсин (США) [49]. Для сравнения были взяты пять машин: DIRECT, разработанная в этом же университете, IDM500 фирмы Britton Lee, универ- ситетский и коммерческий вариант машины INGRES и ORACLE, причем последние три — это программные СУБД. Согласно опубликованным результатам, при вы- полнении простых реляционных операций DIRECT показывала производительность, худшую, чем у обеих машин INGRES. Такое поведение объясняет- ся двумя причинами. Первая, как уже было показа- но при анализе Хавторна, заключалась в невозмож- ности эффективного использования переместимых файлов. Однако даже в том случае, когда перемести- мых файлов не было, производительность DIRECT была хуже производительности коммерческой маши- ны INGRES. Это можно объяснить издержками при передаче сообщений между процессором БД и про- цессором запросов. Что касается машины IDM500, то в анализе ее возможностей принимали участие две модели: с акселератором и без акселератора, однако эффект от использования акселератора был незна- чителен. Эта публикация содержала и результаты анали- за, касающегося сложного поиска, включающего опе- рацию соединения. При этом в отличие от резуль- татов, полученных Хавторном, машина DIRECT показала производительность, составляющую всего лишь 1/2—1/4 производительности коммерческой INGRES. В основу этих оценок производительности, опуб- ликованных в 1982—1983 гг., была положена так на- зываемая «силовая» обработка, т. е. параллельная обработка со сравнением всех кортежей в отношении, что ускорило повторные исследования архитектур су- ществующих машин БД. Постепенно получила при- знание идея о необходимости внедрения архитектур машин БД, в которые можно было бы легко встраи- вать различные методы, используемые в програм- мных СУБД, например такие, которые бы позволили
Машины баз данных 367 эффективно использовать индексную информацию типа переместимых файлов и сократить всевозмож- ные издержки. 8.3.3. ДИСКОВЫЙ ПАРАДОКС Исследования, относящиеся к оценке производи- тельности, проведенные в 1982—1983 гг., ускорили рассмотрение вопросов, связанных с методами обра- ботки, используемыми в разработанных до этого вре- мени машинах БД. Однако Боралом и Девиттом бы- ла обнаружена более существенная проблема, ка- сающаяся исследований в области машин БД [50]. Они провели описанные ниже исследования и пока- зали, что без кардинального изменения вторичной памяти, основу которой составляет магнитный диск, не имеет смысла создавать высокопараллельную ма- шину. Как уже было изложено в п. 8.3.1 и 8.3.2, в ма- шинах БД, объектами которых являются крупно- масштабные БД, неизбежно использование НМД с перемещаемыми головками в качестве вторичной па- мяти. При построении машин БД, имеющих простран- ство вторичной памяти постоянного объема, число tV используемых дисков обратно пропорционально емко- сти V одного диска. Способность подачи данных из системы вторичной памяти в обрабатывающий блок не должна превышать произведения числа используемых дисков N на скорость пересылки данных р в/из исполь- зуемого НМД. Это произведение называется макси- мальной подающей способностью системы вторичной памяти. Поскольку W обратно пропорционально V, то максимальная подающая способность прямо пропор- циональна р/К К сожалению, тенденция развития и разработки дисков большой емкости проводилась в направлении сокращения отношения p/V. Например, если проана- лизировать системы IBM 3330, 3350, 3380, выпущен- ные в период с 1970 по 1980 г., то можно заметить, что емкость НМД увеличивалась: 100М, 317М, 630М байт соответственно, скорость пересылки данных также увеличивалась: 0,8Мбайт/с, 1,2Мбайт/с, 3,0Мбайт/с. Однако если максимальную подающую способность
368 Глава 8 системы IBM 3330 принять за условную 1, то для си- стемы 3350 она составила 0,473, а для 3380—0,595. Это объясняется тем, что увеличение емкости НМД было достигнуто больше за счет увеличения числа дорожек, чем за счет увеличения емкости каждой до- рожки. Скорость пересылки данных 3 Мбайт/с в си- стеме 3380 является очень высоким значением и для машины, которая осуществляет обмен данными, и пока этот рекорд не побит. Однако поскольку в свою оче- редь существенно возросла и емкость НМД, то по про- гнозу максимальная подающая способность системы вторичной памяти будет продолжать снижаться. С развитием техники параллельной обработки обраба- тывающий блок можно будет спроектировать так, что его быстродействие станет еще более высоким, однако поскольку при этом максимальная подающая способ- ность из системы вторичной памяти в обрабатываю- щий блок еще больше упадет, то использование тех- ники высокоскоростной обработки в процессоре ока- зывается лишенным смысла. 8.3.4. ЗАДАЧЙ НОВОЙ ТЕХНОЛОГИИ Как уже было отмечено выше, период с 1982 по 1983 г. можно назвать периодом анализа исследова- ний, проводившихся до сих пор в области машин БД. Этот анализ позволил высветить три необходимости: (1) обработку с высокой эффективностью мно- жества простых транзакций, (2) эффективное использование программных ме- тодов обработки в БД, (3) повышение подающей способности системы вторичной памяти. Первая необходимость обусловлена такими тех- ническими задачами, как эффективное использова- ние индексов, параллельное управление исполнением программ, соответствующее параллельной обработке, разбиение файлов и проч. Вторая необходимость обусловлена применением в обрабатывающем модуле универсального процессора и структуры данных типа бинарного дерева. Посредством структурирования дан-
Машины' баз данных 369 ных и отказа от «силовой» обработки всех отноше- ний доступ к памяти обработки и к буферной памя- ти можно сделать произвольным. Чтобы сделать воз- можным одновременный доступ к индексам от двух и более обрабатывающих модулей, желательно, чтобы эти модули имели общую память. Создание многопортовой памяти. Для реализации третьего условия предлагаются такие методы, как использование многопортовой дисковой памяти, ис- пользование многопортовой страничной памяти боль- шого объема в качестве буферной памяти, разбиение файлов, позволяющее сократить число страниц, ко- торые необходимо считывать с диска при поиске ин- формации, и другие. В современных дисковых нако- пителях используется способ доступа с помощью исполнительного механизма (активатора), который позволяет разбить общее число дисков на две неза- висимо функционирующие половины. Благодаря та- кому усовершенствованию получается, что в одном НМД существует два независимых дисковых накопи- теля половинной емкости. Таким образом, можно сде- лать многопортовую дисковую память и удвоить ее подавляющую способность. Эффективным является также использование в ка- честве буферной памяти многопортовой памяти боль- шого объема со страничной организацией, описанной в разд. 6.4.3. Если общее число портов равно NP + + Nd, из которых порты 'Nd используются для под- ключения к группе дисковых накопителей, то буфер- ная память и диски образуют древовидную иерархи- ческую память, число портов которой равно ND. Если емкость буферной памяти взять достаточно большой, то скорость пересылки данных такой иерархической памяти будет равна скорости пересылки через один порт многопортовой страничной памяти. Поскольку даже при большом числе портов NP скорость пере- сылки данных через один порт не изменяется, то ско- рость подачи данных из системы вторичной памяти можно заметно увеличить. Данный метод был ис- пользован в системе MPDC [52, 53] Университета Хоккайдо, о которой будет сказано ниже. 24—1145
370 Глава 8 Разбиение файлов. Для увеличения способности подачи данных вторичной памяти необходимо также сократить число страниц, подлежащих считыванию при поиске информации, и сократить частоту досту- п с к диску. Если атрибут, который фигурирует в ус- ло^ли поиска, однозначно определен в каждом отно- шении и если каждое отношение разбить на стра- ницы, размер которых зависит от значения этого атрибута, то независимо от различий в запросах при любом поиске кортеж, удовлетворяющий условию по- иска, будет находиться либо в той же, либо в со- седней странице. Кластеризация файлов в данном случае называется статической кластеризацией, а по- скольку такая кластеризация осуществляется относи- тельно значения некоторого одного атрибута, то она называется одноатрибутной статической кластериза- цией. Кроме того, статическая кластеризация подраз- деляется на два класса: адаптивную и неадаптивную. Адаптивная кластеризация предполагает динамиче- ское составление каталога страниц в соответствии с распределением значений атрибутов кластеризации объектного файла, причем при обновлении автомати- чески принимаются меры против переполнения или нехватки страниц, проводится разбиение или слияние страниц для обновления самого каталога страниц. Обновление можно выполнить с помощью локальных операций, т. е. пересмотра всего разбиения файлов не требуется. Напротив, при неадаптивной кластери- зации предварительно делается предположение отно- сительно распределения значений атрибутов класте- ризации объектных файлов, на основании которого сначала составляется каталог. Переполнение катало- га страниц при обновлении предотвращается путем увеличения объема хранения и соединения пустых страниц с помощью указателей. Нехватка страниц игнорируется. В любом случае каталог не обновляет- ся. Если в результате многочисленных обновлений переполнения локализуются, то цепочка страниц, со- единенных с помощью указателя, удлиняется и эф- фект от кластеризации снижается. В таких случаях необходимо снова с самого начала произвести раз-
Машины баз данных 371 биение файлов. Эта операция называется реконфигу- рацией файлов. При обработке данных базы данных более всего подходит адаптивная статическая кластеризация. Если в каждом отношении существует по одному ат- рибуту кластеризации, то можно использовать такие методы, как В+-дерево [54], динамическое хеширо- вание [55], виртуальное хеширование [56] и т. д. Методы, перечисленные после динамического хеши- рования, были задуманы для практического приме- нения в базах данных. Публикации, посвященные им, стали появляться одна за другой во второй половине 70-х гг., и каталог в виде В+-дерева был представлен не с помощью древовидной структуры, а с помощью хеш-функции, что позволило увеличить скорость по- иска в каталоге. Среди перечисленных методов дина- мическое хеширование и расширяемое хеширование позволяют использовать функцию сохранения порядка в хеш-функции, т. е. имеется возможность выполнять кластеризацию в нескольких диапазонах значений с сохранением порядка следования значений атрибу- тов. В системе DSDBC Университета Хоккайдо для кластеризации было использовано расширяемое хеши- рование, причем для управления и обработки его был предложен функциональный модуль, названный меха- низмом Trie [29]. В случае когда атрибут кластеризации один, то несмотря на то, что указываются значения других ат- рибутов, для считывания всех кортежей, удовлетво- ряющих этому атрибуту, из вторичной памяти необхо- димо считать все страницы, поэтому при таком по- иске эффект от кластеризации отсутствует. Когда атрибутов много и указывается любое значение атри- бута, то следует использовать способ разбиения фай- лов, при котором с хорошим балансом уменьшается число страниц, содержащих кортежи, удовлетворяю- щие этому значению. Этот способ называется много- атрибутным разбиением файлов. Для получения хо- рошего баланса планируется минимизация среднего и максимального значений числа страниц, к которым запрашивается доступ. 24*
372 Глава 8 К адаптивным многоатрибутным способам раз- биения файлов относятся метод расширенного k — d- дерева Чанга [59], метод k — а-дерева Оренштейна [60], метод цветного двоичного дерева Танаки [61], метод К — D — В-дерева Робинсона [62] и др. Аб- бревиатура k.— d и К — D, фигурирующая в этих на- званиях, означает ^-мерное или К-мерное (от (k) /(-dimensional). Если в случае кластеризации с и атрибутами распределения значений этих атрибутов одинаковы, то среднее значение частоты обращений к странице, требуемое, когда указывается значение f-го атрибута из п атрибутов при условии, что общее число страниц равно Af, составляет порядка О(Л^л-‘>/л). Если i равно 1, то при п, большем 4, эф- фект от кластеризации уменьшается, и в подобных случаях кластеризация лишена практического смысла. Поэтому одной из задач будущего является проведе- ние исследований многоатрибутных методов разбие- ния файлов, подходящих для использования в маши- нах баз данных. Управление макропотоков данных. Среди спосо- бов параллельной обработки, используемых при рабо- те с БД, можно выделить следующие два: параллель- ная обработка, содержащаяся в каждой операции при каждом запросе на поиск, и параллельная обра- ботка при одновременном поступлении запросов на поиск от множества пользователей. До середины 80-х гг. внимание уделялось в основном первой раз- новидности параллельной обработки, в частности, ис- следователей интересовала возможность ускорения выполнения сложных операций типа операции соеди- нения за счет параллельной обработки. В то же вре- мя возможность ускорения за счет использования па- раллельности обработки запросов на поиск остава- лась недостаточно изученной. В системах управления базами данных програм- мным путем скорость обработки была повышена за счет параллельной обработки множества запросов на поиск информации. Термин «одновременное обслу- живание» не отрицает необходимости управления с помощью планировщика для правильного обслужи- вания запросов на поиск. Допустим, что запрос на пе-
Машины баз данных 373 ревод 100 тыс. иен на счет г-на А поступил одновре- менно от двух вкладчиков. Обработка запросов в по- добных случаях заключается в том, что считывается остаток вклада b на счету г-на А и на его счет за- писывается b + 100. Если эти два запроса обслужи- ваются последовательно, то остаток вклада на счету г-на А увеличивается на 200 тыс. иен. Однако, если в то время, как обслуживается один из запросов и ос- таток вклада увеличивается на 100 тыс. иен, выпол- няется обслуживание другого запроса, то остаток вклада г-на А увеличивается только на 100 тыс. иен. Последовательность операций, выполняемых при об- работке денежных вкладов, на которые не влияют результаты других операций, называется транзакцией. При параллельной обработке множества транзакций или просто параллельной обработке необходимо пла- нировать каждую операцию и весь порядок действий таким образом, чтобы результаты поиска, получен- ные при этом, и изменения в базе данных были рав- ны результатам, полученным при последовательном выполнении транзакций в любом порядке. Такое уп- равление называется управлением параллельным выполнением транзакций. Для реализации такого уп- равления были предложены различные алгоритмы (методы), например метод с использованием блоки- ровки, метод с использованием отметок времени и другие. В машинах баз данных параллельная обработка транзакций также необходима для увеличения их быстродействия, поэтому желательно направить уси- лия исследователей на изучение систем управления па- раллельным выполнением транзакций, пригодных для любой архитектуры машин БД, а также на изучение архитектур, подходящих для реализации систем управ- ления параллельным выполнением транзакций, обес- печивающих высокопараллельную обработку. Машина MPDC, разработанная коллективом, воз- главляемым Танакой из Университета Хоккайдо, имеет структуру, показанную на рис. 8.11. Многопортовая страничная память машины соединена с группой про- цессоров, каждый из которых имеет локальную па- мять, а также с группой контроллеров дисковых
Y777777777777777777 Управляющая подсистема Подсистема данных '77777777777777777777777777777777777777/7/Z/77Z777ZZ//Z7 СвТЬ КОМЗНд/сОСТОЯНИЙ ДЛЯ СТраНИЧНЫХ Таймер страничных операций Командер страничных операций Интерфейсный /супервизорный модуль Менеджер буфера страниц Процессор запросов Блок поиска в каталоге Контроллер макропарал- лельных потоков данных Таймер пересылки сегментов /^операций Общий буфер страниц Дисковые подсистемы Командер пересылки сегментов ( Ц Процессоры сегментов 2 77777777777 Ъ '77777777777777 Ъ '77/'7777/< /77777777777777777777777777777777777777777727777777777777777777777777777777/Z Шина команд для пересылки сегментов Шина состояний для пересылки сегментов Рис. 8.11. Структура машины MPDC.
Машины баз данных 375 накопителей. Управляющая подсистема выполняет анализ запросов на поиск, осуществляет поиск в ка- талоге, анализирует операции со страницами в каж- дой операции в транзакции и планирует операции со страницами [52]. Каждая страничная операция вы- полняется свободным процессором из группы процес- соров. В системе MPDC был использован адаптивный многоатрибутный метод разбиения файлов с использо- ванием цветного двоичного дерева [61], поэтому опе- рации над отношениями разбиваются на операции со страницами, составляющими это отношение. Операции над множеством страниц, полученных в результате разбиения одного отношения, можно выполнять од- новременно и независимо друг от друга. Две странич- ные операции, полученные в результате разбиения различных операций в одной транзакции, имеют за- висимость от потока данных, существующего между исходными операциями. Управление порядком выпол- нения двух страничных операций, полученных в ре- зультате разбиения операций в различных транзак- циях, осуществляется по алгоритму управления парал- лельным выполнением, при котором обработка вы- полняется последовательно, а не одновременно. В машине MPDC страничная операция принята за единицу управления параллельной обработкой или единицу управления одновременным выполнением, т. е. управление выполнением осуществляется на ос- нове потоковой архитектуры, описанной в гл. 5 [53]. Поскольку операция в данном случае является макро- операцией, операндом в которой является страница, то управление потоком данных в этом случае назы- вается макроуправлением потоком' данных. При мак- роуправлении время обработки запускаемой опера- ции больше времени, требуемого на управление ее запуском, поэтому издержками, вызванными управ- лением запуском, которые являются серьезной про- блемой при обычном управлении потоком данных, можно пренебречь. В системе MPDC работа управляющей подсисте- мы основана на управлении потоком данных, при ко- тором последовательно запускаются команды странич- ных операций. Если запускаемая команда является
376 Глава 8 командой пересылки страниц между диском и много- портовой страничной памятью, то она посылается в контроллер диска, в котором указывается адрес страницы, и там выполняется. Об окончании выполне- ния команды извещается управляющая подсистема и соответствующая фишка перемещается к началу на графе потока данных. Если запускаемая команда пред- назначена для выполнения операции в странице, хра- нящейся в многопортовой страничной памяти, и ре- зультат этой операции должен быть помещен в другую страницу этой же памяти, то управляющая подсистема пересылает данную команду в процессорный блок. Эта команда принимается и обрабатывается любым про- цессором, который в данный момент не занят обра- боткой. Процессор считывает исходную страницу из многопортовой страничной памяти в свою локальную память, выполняет автономно нужную обработку и пе- ресылает результаты, помещенные в его память, в страницу назначения. После окончания всех этих дей- ствий он передает сигнал окончания в управляющую подсистему. При приеме этого сигнала управляющая подсистема перемещает соответствующую фишку в на- чало на графе потока данных. Другие направления в развитии техники. Чрезвы- чайно важным моментом является наделение конт- троллера НМД интеллектуальными возможностями, позволяющими только с его помощью выполнять раз- личного рода обработку. Благодаря этому появится возможность не только снизить нагрузку на процес- сорный блок, но и уменьшить объем передаваемой информации между НМД и процессорами. Для эффективного использования программных методов обработки в базе данных следует не только рассматривать использование специализированных механизмов, осуществляющих обработку потоков дан- ных, но также тщательно изучить возможность их совместного использования вместе с универсальными процессорами. Такой подход был реализован в ма- шине IDP фирмы «Хитати», где большая универсаль- ная ЭВМ имела встроенный матричный процессор для обработки потоков данных. Благодаря этому операции с потоками данных, например операция
Машины баз данных 377 соединения, выполняются с высокой скоростью с по- мощью встроенного матричного процессора, а для простой обработки транзакций, например обработки с использованием традиционных программных при- емов с перемещением файлов и др., используются вычислительные возможности универсальной ЭВМ [63]. Танака из Университета Хоккайдо для обоюд- ного использования параллельной обработки и про- граммных методов серьезное внимание уделяет ис- пользованию многопортовой памяти, поэтому вслед за публикациями, посвященными многопортовой стра- ничной памяти, появились публикации, в которых описывается структура многопортового ОЗУ [64]. Интерес к созданию многопортовых ОЗУ на элемент- ном уровне проявляли и другие исследователи, одна- ко отличительная особенность работ Танаки заклю- чается в том, что он пошел по пути комбинирования однопортовых БИС ОЗУ или БИС ОЗУ с малым чис- лом портов и создания на их основе многопортового ОЗУ. Что касается параллельной обработки в базе данных, то и в прошлом предлагались методы парал- лельной обработки массивов данных, конвейерной об- работки и др., однако для эффективного использо- вания программных подходов необходимо обращение со структурами данных, например со списковой струк- турой, снабженной указателями, или древовидной структурой, поэтому для параллельной обработки в данной ситуации возникает проблема совместимости этих структур. Эту проблему может разрешить много- портовое ОЗУ. Если сделать возможной параллельную обработку различных структур данных, то будет сде- лан еще один шаг на пути развития баз данных и, очевидно, появится возможность разработки машин баз знаний, способных выполнять параллельную об- работку в базе знаний. Наибольший интерес с точки зрения перспектив развития архитектур высокоскоростной обработки баз данных представляют оптические средства хра- нения и обработки информации. Поэтому с полной уверенностью можно .ожидать появления архитектур, в которых будут удачно использованы свойства опти- ческих и магнитооптических дисков.
СПИСОК ЛИТЕРАТУРЫ Глава 1 (1) Goldstein, Н. Н.: The Computer from Pascal to von Neumann, Princeton University Press, Princeton, N.J. (1972) (2) Smith, D.E.: A Source Book in Mathematics, McGraw-Hill, New York (1929) ( 3) Morrison, P., and Morrison, E. (eds.) : Charles Babbage and His Calculating Engines, Dover, New York (1961) (4) Randell, B. (ed.) : The Origins of Digital Computers: Selected Papers, Springer-Verlag, Berlin <1973) ( 5) Burks, A. W., Goldstine, H. H., and von Neumann, J.: “Preliminary Discus- sion of the Logical Design of an Electronic Computing Instrument” (1946) (# #Ш6), (7)om (8)13M») ( 6) Bell, C. G. and Newell, A.: Computer Structures: Readings and Examples, McGraw-Hill, New York (1971) ( 7) von Neumann, J.: Collected Works (ed. A. H. Taub), 6 vols., Pergamon, New York (1963) ; vol. 5: Design of Computers, Theory of Automata and Numeri- cal Analysis. (8) Swartzlander, E. E. (ed.) : Computer Design Development: Principal Papers, Hayden, New York (1976) ( 9) Samet, J. E.: Programming Languages: History and Fundamentals, Prentice Hall, Englewood Cliffs, N. J. (1989) (10) Wilkes, M. V.: “The Best Way to Design an Automatic Calculating Machine,” Rept. of the Manchester University Computer Inaugural Conf., Manchester University, Electrical Engineering Dept., pp. 16-18 (1951) (##£ilR(8)£Mt) (11) Husson, S. S.: Microprogramming: Principles and Practices, Prentice-Hall, Englewood Cliffs, N. J. (1970) (12) Chu, Y.: Computer Organization and Microprogramming, Prentice-Hall, Englewood Cliffs, N. J. (1972) (13) Chu, Y.: High-Level Language Computer Architecture, Academic Press (1975) (14) Flynn, M. J.: “Very High-Speed Computing Systems,” Proc. IEEE, vol. 54, pp. 1901-1909 (1966) (15) Swan, R. J., Fuller, S. H., and Siewiorek, D. P.: “The Structure and architec- ture of Cm*: A Modular, Multi-Microprocessor,” in Computer Science Research Review, Carnegie-Mellon Univ. Dept, of Computer Science (1976) (16) Seitz, C. L.: “The Cosmic Cube,” CACM vol. 28, no. 1, pp. 3-44 (1983) (17) > b • FPS-T У 9 - X- (1986) (18) ЖЯте*: Occam t ЛЙЖШ(1986)
Список литературы 379 (19) Fuller, S. Н., Swan, R., and Wulf, W. A.: “The Instrumentation of C. mmp: A Multi-miniprocessor," IEEE Compcon (1973) (20) Lawrence Livermore Laboratory: “The S-l Project: Annual Reports,” vol. 1 Architecture, vol. 2 Hardware, and vol. 3 Software, UCID-18619, Univ, of Calif., Livermore (1979) (21) Tandem Computers, Inc.: Tandem/16 System Description (1976) (22) Kowalik, J. S. (ed.) : Parallel MIMD Computation: HEP Supercomputer and Its Applications, The MIT Press, Cambridge, MA (1985) (23) Bouknight, W. J. et. al.: “The ILLIACIV Systems,” Proceedings of IEEE, vol. 60, no. 4, pp. 369-388 (1972) (24) ш, дшютв) (25) Hord, R. M.The ILLIAC IV, Computer Science Press (1982) (26) Jensen, C.: “Taking Another Approach to Super Computing,” Datamation, Feb., 1978, pp. 159-172 (27) Kuck, D. J. and Stokes, R. A.: “The Burroughs Scientific Processor (BSP),” IEEE Trans, on Comp., C-31, no. 5, pp. 363-376 (1982) (28) Lawrie, D. H. and Vora, C. R.: “The Prime Memory System for Array Access,” IEEE Trans, on Comp., C-31, no. 5, pp. 435-442 (1982) (29) Unger, S. H.: “A Computer Oriented -toward Spatial Problems,” WJCC, 13 (1958) (30) Slotnick, D.L., Borck, W.C.and McReynolds, R.C.: “The Solomon Com- puter,” FJCC, 22, pp. 97-107 (1962) (31) Gregory, J. and McReynolds, R.: “The Solomon Computer,” IEEE Trans, on Electronic Comp., EC-12, no. 6, pp. 774-781 (1963) (32) Beetem, J., Denneau, M. and Weingarten, D.: “The GF-11 Super Computer,” Proc, of the 1985 Int’l Conf, on Parallel Processing, pp. 108-115 (1985) (33) ЙШ, га, Ж»: РАХ-128”,J67-D g, 8^, рр. 853-860 (1984) (34) Ж» Л»: PAX Aft(1985) (35) Batcher, К. Е.: “Design of a Massively Parallel Processor,” IEEE Trans. C- 29, no. 9, pp. 836-840 (1980) (36) Batcher, К. E.: “Bit Serial Parallel Processing Systems,” IEEE Trans. C-31, no. 5, pp. 377-384 (1982) (37) Potter, J. L. (ed.) : The Massively Parallel Processor,” MIT Press (1985) (38) Duff, M. J. B.: “A User’s Look at Parallel Processing,” Proc, of 4 th Int’l Conf, on Pattern Recognition, pp. 1072-1075 (1978) (39) Hockney, R. W. and Jesshope, C. R.: Parallel Computers: Architecture, Pro- gramming and Algorithms, Adam Hilger Ltd., Bristol, England (1981) (40) Kondo, T. et. al.: “An LSI Adaptive Array Processor, ” IEEE Trans. SC-18, no. 2, pp. 147-156 (1983)
380 Список литературы (41) Barr, R. G. et. al.: “A Research-Oriented Dynamic Microprocessor,” IEEE Trans. C-22, no. 11, pp. 976-985 (1973) (42) Hagiwara, H. et. al.: “A Dynamically Microprogrammable Computer with Low Level Parallelism,” IEEE Trans. C-29, no. 7, pp. 577-595 (1980) (43) Tomita, S. et. al.: “A Computer with Low-Level Parallelism QA-2: Its Appli- cations to 3-D Graphics and Prolog/Lisp Machines,” Proc, of 13 th Int’l Sympo. on Computer Architecture, pp. 280-289 (1986) (44) НЖ flfc: MC-1”, + CA58-5 (1985) (45) Ramamoorthy, С. V. and Li, H. F.: “Pipeline Architecture,” ACM Computing Surveys, vol. 9, no. 1, pp. 61-102 (1977) (46) MacDougall, M. H.: “Instruction-Level Program and Processor Modelling,” IEEE Computer, vol. 17, no. 7, pp. 14-24 (1984) (47) Lee, J. K. F. and Smith, A. J.: “Branch Prediction Strategies and Branch Target Buffer Design,” IEEE Computer, vol. 17, no. 1, pp. 6-22 (1984) (48) McFarling, S. and Hennessy J.: “Reducing the Cost of Branches,” 13 th Int’l Sympo. on Computer Architecture, pp. 396-403 (1986) (49) Hwang, K.: Computer Arithmetic: Principles, Architecture and Design, Wiley, New York (1979) (50) Kogge, R. M.: The Architecture of Pipelined Computers, McGraw-Hill (1981) (51) Riganati, J. P. and Schneck J. P.: “Super Computing,” IEEE Computer, vol. 17, no. 10, pp. 97-113 (1984) (52) Floating Point System, Inc.: АР-120 В Processor Handbook, Portland (1976) (53) IBM Corp.: “IBM 3838 Array Processor Functional Characteristics,” no. 6 A24-3639-0, file no.S370-08, Endicott, N.Y. (1976) (54) Datawest Corp.: “Real Time Series of Microprogrammable Array Transform Processors,” Prod. Bulletin Series В (1979) (55) b 24^2^, pp. 191-199 (1983) (56) Riganati, J. P. and Schneck, P. B.: “Super Computing,” IEEE Computer, vol. 17, no. 10, pp. 97-113 (1984) (57) 2^3^, pp. 2-26 (1985) (58) 4ЧИ, Л#(1985) (59) тШ(1985) (60) Control Data Corp.: Control Data STAR-100 Features Manual, St. Paul, Minn., pub. no. 60425500 (1973) (61) Texas Instruments Inc.: Description of the ASC System: Part 1 to 5, Manual Nos. 934662 to 934666 (1971) (62) Russel, R. M.: “The CRAY-1 Computer System,” CACM vol. 21, no. 1, pp. 63- 72 (1978)
Список литературы 381 (63) Lubeck, О., Moore, J., and Mendez, R.: “A Benchmark Comparison of Three Super Computers: Fujitsu VP-200, Hitachi S810/20 and CRAY X-MP/2,” IEEE Computer, vol. 18, no. 12, pp. 10-23 (1985) (64) W, вала, «*, ШП: FACOM VP”, Bgxu; bn-^x, no.314, pp. 131-155 (1983) (65) Myers, G. J.: Advances in Computer Architecture, John Wiley & Sons, N. Y. (1978) (66) Iliffe, J. K.: Basic Machine Principles, 2nd ed., Macdonald, London (1972) (67) Feustel, E. A.: “On the Advantages of Tagged Architecture,” IEEE Trans. Comput., vol. C-12, pp. 644-656 (1973) (68) Creech, B. A.: “Architecture of the Burroughs B-6500,” in J.Tou (ed.), Software Engineering, pp. 29-43, Academic, N. Y. (1970) (69) £*, МЖЖ(1981) (70) /К J.f&W, • WA”, ? t M±(1986) (71) Katzman, J. A.: “System Architecture for Non Stop Computing,” Compcon, pp. 77-80, (1977) (72) Jones, A. K.: “The Object Model: A Conceptual Tool for Structuring Soft- ware,” in Operating System, Lecture Notes in Computer Science Series, Springer-Verlag (1978) (73) Fabry, R. S.: “Capability-Based Addressing,” CACM, vol. 17, no. 7, pp. 403- 412 (1974) (74) Dennis, J. B. and Van Hom, E. C.: “Programming Semantics for Multiprog- rammed Computations, ” CACM, vol. 9, no. 3, pp. 143-155 (1966) (75) Houdek, M. E., Soltis, F. G., and Hoffman, R. L.: “IBM System/38 Support for Capability-Based addressing, ” Proc. 8 th Sympo. on Computer Architec- ture, pp. 341-348 (1981) (76) Rattner, J. and Cox, G.: “Object-Based Computer Architecture,” SIGARCH, vol. 8, no. 6, pp. 4-11 (1980) (77) Rumste, M. V.: “The iAPX 432, a Next Generation Microprocessor,” Micro- processing and Microprogramming, vol. 11, pp. 69-106 (1983) (78) Backus, J. W.: “Can Programming be Liberated from the von Neumann Style ? A Functional Style and Its Algebra of Programs,” CACM, vol. 21, pp. 613-641 (1978) (79) Kung, H. T. and Leiserson, С. E.: “Systolic Arrays (for VLSI),” Proc. 1978 Sympo. on Sparse Matrix Computations and their Applications, I. S. Duff and G. W. Stewart (eds.), pp. 48-53 (1978) (80) Kung, H. T.: “Why Systolic Architectures,” IEEE Computer, vol. 15, pp. 37-46 (1982) (81) Mead, C. and Conway, L.: Introduction to VLSI Systems, Addison-wesley,
382 Список литературы Mass. (I960) (82) Markoff, J.: RISC CHIPS, Byte, Nov. (1984) (83) Guteri, F.; “Chip Architecture; A Revolution Brewing,” IEEE Spectrum, July, pp. 30-37 (1963) (84) Colwell, R. P. et, al.: "Peering Through the RISC/CISC Fog; An Outline of Research,” Computer Architecture Note, vol. 11, no. 1, pp. 44-50 (1963) (85) Patterson, D. A. and Sequin, С. H,: "RISC I: A Reduced Instruction Set VLSI Computer,” IEEE Computer Architecture Conf., pp. 443-457 (1961) (86) Radin, G.: "The 801 minicomputer,” IBM J. Research and Development, vol. 27, no. 3 (1963) (87) Gross, T. R.: "Code Optimization Techniques for Pipelined Architectures,'* COMPCON Spring, pp. 278-285 (1983) (88) Gastan, M. and Organics, E. I.: “д 3 L : An HLL RISC Processor for Parallel Execution of FP-Language Programs,” IEEE Computer Architecture Conf., pp. 239-247 (1982) (89) Basart, E, and Folger, D.: "RIDGE 32 Architecture-A RISC Variation,” IEEE Computer Architecture Conf., pp. 443-457 (1983) (90) Kelley, R. R. and Clark, R.: “Applying RISC Theory to a Large Computer/’ Computer Design (1983) (91) May, D, and Shepherd, R.: “The Transputer Implementation of Occam, Proc. IntT Conf, on Fifth Generation Computer Systems 84, pp. 533-541 (1984) (92) Reddaway, S. F.: “DAP-A Distributed Array Processor,” 1 st Annual Sympo. on Comput. Architecture, IEEE (1973) (93) Hillis, W. D.: The Connection Machine, The MIT Press (1985> Глава 2 (1) Hwang, K.: Computer Arithmetic, John Wiley & Sons (1979) (2) MacSorley, O. L.: “High-Speed Arithmetic in Binary Computers,” Proc. IRE, vol. 49, no. 1, pp. 67-91 (1961) ( 3) Wallace, C. S.: “A Suggestion for a Fast Multiplier,” IEEE Trans. Elec. Comp., vol. EC-13, February, pp. 14-17 (1964) ( 4) Goldschmidt, R. Z.: “Applications of Division by Convergence,” M. S. Thesis, M. I. T. Cambridge, Mass., June (1964) ( 5 ) Kung, H. T. and Leiserson, С. E.: “Systolic Arrays (for VLSI),” Proc. 1978 Sympo. on Sparse Matrix Computations and their Applications, pp. 48-53 (1978) ( 6) Kung, H. T.: “Why Systolic Architectures,” IEEE Computer, vol. 15, pp. 37-46 (1982) (7) Moore, W.,_McCabe, A., and Urquhart, R. (eds.): Systolic Arrays, Adam Hilger, Bristol (1987)
Список литературы 383 (8) Ward, С. and Davie, Е.: “The Application and Development of Wavefront Array Processors for Advanced Front-End Signal Processing Systems,” in (7), pp.295-301 (9) ШФ Ш: ^/V-b ./4-F? хТОКЙ”, bn-7X, 1983^8 Л 10^, pp. 141-178 (10) Шф М:“7-7, fitWIW, voL 23, no. 8, pp. 742-747 (1982) (11) Akl, S. G.: Parallel Sorting Algorithms, Academic Press (1985) (12) Tanaka, Y., Nozaka, Y. and Masuyama, A.: “Pipeline Searching and Sorting Modules as Components of a Data Flow Database Computer,” IFIP Congress 80, pp. 427-432 (I960) (13) Tanaka, Y.: "Bit-Sliced VLSI Algorithms for Search and Sort,” Proc. 10 th VLDB, pp. 225-235(1984) (14) Todd, S.: “Algorithms and Hardware for a Merge Sort Using Multiple Processors,” IBM J. of Research & Development, vol. 22, no. 5, (1978) (15) Tanaka, Y.: “A VLSI Algorithm for Sorting Variable-Length Character Strings,” New Generation Computing, vol. 3, no. 3, pp. 307-328 (1985) (16) Batcher, К. E.: “Sorting Networks and Their Applications,” Proc. SJCC, pp. 307-314 (1968) (17) Stone, H. S.“Parallel Processing with the Perfect Shuffle,” IEEE Trans, on Comput., vol. C-20, no, 2, pp. 153-161 (1971) Глава 3 (1) McCarthy, J.: “Recursive Functions of Symbolic Expressions and. Their Computation by Machine,” CACM, vol. 3, pp. 184-195 (1960) (2) Landin, P. J.: “The Next 700 Programming Languages,” CACM, vol. 9, pp. 157-166 (1966) (3) Turner, D. A.: “A New Implementation Technique for Applicative Lan- guages,” Software Pract. Exper., vol. 8, pp. 31-49 (1979) (4) Backus, J.: “Can Programming be Liberated from the von Neumann Style ?”, CACM, vol. 21, pp. 613-641 (1978) ( 5) Arvind: “Semantics of Loops in ID,” Note 11, March 1977, Univ, of California, Irvine. (6) Ackerman, W. B. and Dennis, J. B.: VAL-A Value-Oriented Algorithmic Lan- guage: Preliminary Reference Manual, MIT Lab. for Computer Science Tech. Rep. 218, June (1979) (7) Wadge, W. W. and Ashcroft, E. A.: Lucid, the Dataflow Programming Lan- guage, Academic Press, N. Y. (1985) (8) Henderson, P.: Functional Programming Application and Implementation, Prentice-Hall (1980) (9) Hewitt, C. et. al.: “A Universal Modular Actor Formalism for Artificial
384 Список литературы Intelligence/’ Proc. Int’l Joint Conf, on Artificial Intelligence, pp. 235-245 (1973) (10) Hewitt, C.: “Viewing Control Structures as Patterns of Passing Messages,” J. of Artificial Intelligence, vol. 8 (1977) (11) Geshke, С. M., Morris, Jr., J. H., and Satterthwaite, E. H.: “Early Experience with Mesa,” CACM, vol. 20, no. 8, pp. 540-553 (1977) (12) Liskov, В. H., Snyder, A., Atkinson, R., and Schaffert, C.: “Abstraction Mechanism in CLU,” CACM, vol. 20, no. 8, pp. 564-576 (1977) (13) Ingalls, D. H. H.: “Design Principles behind Smalltalk,” BYTE, pp. 286-298, Aug. (1981) (14) Goldberg, A. and Robson, D.: Smalltalk-80, The Language and its Implemen-. tation, Addison-Wesley (.1983) (15) Bobrow, D. G., and Stefik, M.: The LOOPS Manual—A Data and Object Oriented Programming System for Interlisp-Preliminary Version, Xerox Knowledge-Based VLSI Design Group, Memo KB-VLSI-81-13 (1982) (16) Kowalski, R. A.: Logic for Problem Solving, North Holland (1979) (17) Clocksin, W. F. and Mellish, C. S.: Programming in Prolog, Spririger-Verlag (1981) (18) Clark, K. L. and Gregory, S.. “PARLOG: Parallel Programming in Logic,” PR DOC 84/4, Imperial College (1984) (19) Shapiro, E.: “A Subset of Concurrent Prolog and Its Interpreter,” ICOT TR- 003, Jan. (1983) (20) Ueda, K.: “Guarded Hom Clauses,” ICOT TR-103 (1985) (21) Treleaven, P. C. *. “Parallel Models of Computation,” in Parallel Processing Systems (D. J. Evans ed.), Cambridge Univ. Press, pp. 275-282 (1982) Г л а в a. 4 (1) Barendregt,H.P.: The Lambda Calculus-Its Syntax and Semantics, 2 nd Edi- tion, North-Holland, 1984. ( 2 ) StoyJ.E.: Denotational Semantics, MIT Press, 1981. (3) Curry,H.B. and Feys,R.: Combinatory Logic, Vol.l, North-Holland, 1958. (4) Wadsworth,C.P.: Semantics and Pragmatics of the Lambda Calculus, Chap- ter 4, PhD Thesis, Oxford, 1971. ( 5 ) Abelson.H. and Sussman,GJ.: Structure and Implementation of Computer Programs, MIT Press, 1985. (6 ) Henderson,P.: Functional Programming-Application* and Implementation» Prentice-Hall, 1980. (7) Peyton Jones,S.L.: The implementation of Functional Programming Lart* guages, Prentice-Hall, 1987. (8) Gordon,M.J.,Milner,A.J. and Wadsworth,C.P.: Edinburgh LCF, Lecture Notes on Computer Science, No.78, Springer Verlag, 1979. (9) Burstall, R. M., MacQueen, D. B. and Sanella, D.T.: Pope: An Expert-
Список литературы 385 mental Applicative Language, CSRt62-80, University of Edinburgh, 1980. (10) Turner,D.A.: The SASL Language Manual, University of Kent, 1963. (11) Turner,D.A.: Recursion Equations as a Programming Language, in Func- tional Programming and Its Applications, Dralington et al (Ed), pp.1-28,1962. (12) Augustsson,L.: A Compiler for LAzy ML, Proc. ACM Symposium on Lisp and Functional Programming, pp.218-227, 1984. (13) Turner,D.A.: Miranda-A Non-strict Functional Language with Polymorphic Types, in Conference on Functional Programming Languages and Computer Architecture, LNCS 201, Springer Verlag, pp.1-16, 1985. (14) Turner,D.A.: A New Implementation Technique for Applicative languages, Software-Practice and Exprerience, Vol. 9, pp.31-49, 1979. (15) Kieburtz, R. B.: The G Machine; A Fast, Graph-Reduction Evaluator, LNCS 201, Springer Verlag, pp.400-413, 1985. (16) Darlington J. and Reeve,M.: ALICE-A Multiprocessor Reduction Machine for the Parallel Evaluation of Applicative Languages, Proc. ACM Symposium on Functional Languages and Computer Architecture, pp.65-76, 1981. Глава 5 (1) Backus,J.: Can Programming be Liberated from the Von Neumann Style? A Functional Style and its Algebra of Programs, Comm.ACM, Vol.21, No.8, pp. 613-641(1878). (2 ) Darlington,J.,Henderson,P. and Tumer,D.A.(eds.): Functional Programming and its Application, Cambridge Univ. Press(1982). (3) DeiinisJ.B.: First Version of a Data Flow Procedure Language, Lecture Notes in Computer Science, Vol. 19, Springer, pp.362-376 (1974). (4) mg : Т-77П —7-4r7^’r£?V>'C, 7 b7x7, Vol. 1, No.l, pp.42-63(1984). (5) ЦШ, Vol.26, No. 7, pp.765-779(1985). (6) mg, :MBS!gmValid^X^^mW^X7-A0^ Vol. 26, No.5, pp.506-520 (1985). (7) ‘ Ackerman,W.B. and Dennis,J.B.: VAL-A Value Oriented Algorithmic Lan- guage, Preliminary Reference Manual, Tech. Rep. TR-218, LCS MIT (1979). (8) McGraw,J.R.: The VAL Language Description and Analysis, ACM Trans, on. Programming Languages and Systems, Vol.4, No.l, pp.44-82(1982). (9) SISAL: Streams and Iteration in a Single Assignment Language, Language Reference Manual Version 1.2, M 146, Report of Cooperation of the Colorado State University, DEC, Lawrence.Livermore National Laboratory, and Uni- versity of Manchester(1984). (10) Arvind, Gostelow.K.P, and Plouffe,W.: An Asynchrqnous Programming Lan- guage and Computing Machine, Tech. Report 114 a, Dep. Inf. and Computer Science, Univ. California Irvine (1978). 25—1145
386 Список литературы (11) /Ь», 7 n-v-y Vol. 33, No.6, NTT, pp.1167-1181 (1984). (12) Shimada,T., Hiraki.K. and Nishida,K.: An Architecture of a Data Flow Machine and Its Evaluation, Digest of Papers, COMPCON Spring 84, pp.486~ 490(1984). (13) Takahashi.N. and Amamiya,M.; A Data Flow Processor Array System- Design and Analysis, Proc. 10 th Ann. Int. Synp. on Computer Arch., pp.243- 250 (1983). (14) Arvind and Gostelow,K.P.: The U-Interpreter, IEEE Computer, pp.42- 49(1982). (15) GurdJ. and WatsonД.: Data Driven System for High Speed Parallel Comput- ing Part 1 and Part 2, Computer Design, Vol.19, No.6,7, pp.91-100, pp.97- 106(1980). (16) Ito.N., Masuda.Y. and Shimizu,H.: Parallel Prolog Machine Based on the Data Flow Model, ICOT Technical Report TR-035(1983). (17) Amamiya, M., Hasegawa, R., Nakamura, O. and Mikami, H.: A List- Processing-Oriented Data Flow Machine Architecture, Proc, of National Computer Conference, AFIPS, pp.143-151 (1982). (18) Amamiya,M., Hasegawa,R. and Mikami,H.: List Processing with A Data Flow Machine, Lecture Notes in Computer Science, No.147, pp.165-190. Springer (1983). (19) Amamiya,M., Takesue,M., Hasegawa,R. and Mikami,H.: Implementation and Evaluation of A List-Processing-Oriented Data Flow Machine, Proc. 13 th Ann. Int. Symp. on Computer Architecture, pp.10-19 (1986). (20) McCarthy,}., et.al.: Lisp 1.5 Programmers Manual,MIT Press(1962). (21) MSHU, H±, 9 а ь№ЖЙ8Г-77п—+ VolJ 67-D.No.9, pp.957-964(1984). (22) Yamaguchi,Y., Toda,K. and Yuba,T.: A Performance Evaluation of L1SP- Based Data Driven Machine (EM-3), 10 th Ann. Int. Symp. on Computer Architecture, pp.363-369 (1983). (23) Kahn,G.: The Semantics of a Simple Language for Parallel Programming, Information Processing * 74, Proc, of the IFIP Congress, pp.471-476(1974). (24) Dennis,J.'B. 'and Weng,K.: An Abstract Implementation for Concurrent Com- putation with Streams, Proc, of the 1979 International Conference on Parallel Processing, pp.34-45 (1979). (25) Amamiya,M. and Hasegawa,R.: Data Flow Computing and Eager and Lazy Evaluation, New Generation Computing Vol.2, No.2, pp.106-129 (1984). (26) Arvind and Thomas,R.E.: I-Structures: An Efficient Data Type for Func- tional Languages, Rep. LCS/TM-178, Laboratory for Computer Science, MIT (1980). (27) Dennis,J.B. and Misunas,D.P.: A Preliminary Architecture for a Basic Data-
Список литературы 387 Flow Processor, Proc. 2nd Ann. Symp. Computer Architecture, pp.126- 132 (1975). (28) GurdJ., Kirkham,C.C. and Watson,!.: The Manchester Prototype Dataflow Computer, Comm.ACM, Vol.28, No.l, pp.34-52 (1985). (29) Dennis,J.B.: Data Flow Supercomputers, IEEE Computer, Vol.13, No.ll, pp. 46-54(1980). (30) н±: 13-3(1980). (31) Hiraki,K., Shimada,T. and Nishida,K.: Hardware Design of the SIGMA-1 A Data Flow Computer for Scientific Computations, Int. Conf, on Parallel Processing, pp.524-531 (1984). (32) WES, ЙЯ, ФК, Vol.33, No.6, pp.1183-1196 (1980). (33) RIM : 7 п-Гат/иШ LT---, Ж?Й^Ж? EC 80-24 (1980). (34) Ackerman,W.B.: A Structure Memory for Data Flow Computers, LCS/TR- 186, MIT (1977). (35) Keller,R.M.: A Loosely Coupled Applicative Multi-Processing System, Proc. National Computer Conference, AFIPS, pp.861-870 (1978). (36) Keller,R.M. and Lin,F.C.: Simulated Performance of a Reduction-Based Multiprocessor, IEEE Computer, Vol.17, No.7, pp.70-82(1984). (37) Jagannathan,R. and Ashcroft,E.A.: Eazyflow Engine Architecture, Proc. Phoenix Conference on Computers and Communications IEEE (1985). (38) Treleaven,P.C. etal.: Combining Data Flow and Control Flow Computing, The Computer Journal, Vol.25, No.2, pp.207-217(1982). (39) Ж Vol.J 67-D, No.5, pp.579-584 (1984). (40) RIM ’ Data Flow, Control Flow and Reduction, H & У У b 7 x 7£Н£згЖ 1 0 pp. 187-196(1984). (41) Iwashita,M. et. al.: Modular Dataflow Image Processor, Proc. COMPCON Fall’83, pp.464-467(1983). (42) Kung,S.Y.: On Supercomputing with Systolic/Wavefront Array Processors, Proc. IEEE, Vol.72, No.47, pp.867-884 (1984). (43) Hewitt,C.: Viewing Control Structure as Patterns of Passing Messages, A.I. Journal, Vol.8, No.3, pp.323-364 (1977). (44) iSW, ЙЖ, (tM7d-;№ ^/W7n—0, 08Ш1 ^«Ж^S 14-6(1986). (45) Dennis,J.B., Stoy J. and Guharoy,B.: VIM: An Experimental Multi-User System Supporting Functional Programming, Proc. Int. Workshop on High Level Computer Architecture 84, pp.l. 1-1.9(1984). 25*
388 Список литературы (46) Watson,!., Private Communication. > Глава 8 (1) Denning, P. Jk: “The Working Set Model for Program Behavior,” CACM, vol. 11, no. 5 (1968) (2) Denning, P. J.: “Working Sets Past and Present,” IEEE Trans on Soft. Eng., SE-6, no.l (1980) (3) Denning, P. J.; “Virtual Memory.” ACM Computing Surveys, 2, Sept. pp. 153~ 189 (1970) (4 ) Peterson, W. W,: Error Correcting Codes, MIT Press, Cambridge, Mass. (1961) (5 ) Hellerman, Нл Digital Computer System Principles, McGraw - НШ, N. Y. (1967) (6) Burnett, G. J. and Coffman, E. G.: “A Study of Interleaved Memory Systems,” AFIPS Conf. Proc., vol. 36, pp. 467-474 (1970) ( 7) Lawrie, D. H. .and Vora, C. R.: "The Prime Memory System for Array Access,” IEEE Trans. On Comp., C-31, no. 5, pp. 435-442 (1982) (8 > Pohm, A. V. and Agrawal, О. P.; High-Speed Memory Systems, Reston. Publishing Comp., Virginia (1983) ( 9) Hwang, K. and Briggs, F, A.; Computer Architecture and Parallel Processing, McGraw-Hill (1984) (10) Conti, C. J.: “Concepts for Buffer Storage,” Computer Group News, 2, Mar., pp. 9-13 (1969) (11) Bell, J., Casasent, D., and Bell, C. G.: “An Investigation of Alternative Cache Organizations,” IEEE Trans, on Comp. C-23, Apr., pp. 346-351 (1974) (12) Kaplan, K. R. and Winder, R. V,; “Cache-Based Computer Systems,” Com- puter, 6, Mar., pp. 30-36 (1973) * (13) Smith, A. J.: “Cache Memories,” ACM Computing Surveys, vol. 14, no. 3, pp. 473-530 (1982) (14) Smith, A.J.: “Comparative Study of Set-Associative Memory Mapping Algorithms and Their Use for Cache and Main Memory,” IEEE Trans. Soft. Eng., vol. SE-4, March, pp. 121-130 (1978) (15) Meade, R. M.: "Design Approaches for Cache Memory Control,” Computer Design, Jan., pp. 87-92 (1971) (16) Pohm, A. V., Agrawal, О. P., and Monroe, R. N.: "The Cost and Performance Tradeoffs of Buffered Memories,” Proc. IEEE, vol. 63, Aug., pp. 1J 20-1135 (1975) (17) Yeh, P. C.: "Shared Cache Organization for Multiple-Stream Computer Sys- tems,” Coordinated Science Lab., Univ, of 111., Tech. Rep. R-904, Jan. (1981) (1«) "2 + ACOS 1500”, 0gxu ? b u -? X, no.373, pp.233-279 (1985)
Список литературы • 389 (19) Sherr, A. L.: “The Design of IBM 0S/VS2 release 2,” Proc, of NCC, pp. 387- 394 (1973) (20) Dennis, J. B.: “Segmentation and the Design of Multiprogrammed Computer Systems,” J ACM, vol. 12, no. 4, pp. 589-602 (1965) (21) . ICWT, Л У^7х-Х, no. 123, pp. 180- 240 (1987) (22) Wu, C. and Feng, T.: Interconnection Networks for Parallel and Distributed Processing, IEEE (1984), (23) Clos, C.: "A Study of Non-Blocking Switching Networks,” Bell Sys. Tech. J., 1953 March, pp. 406-424 (24) Benes, V. E.: Mathematical Theory of Connecting Networks and Telephone Traffic, Academic Press (1965) (25) Nassimi, D. et. al.: “A Self-Routing Benes Network and Parallel Permutation Algorithms,” IEEE Trans. C-30, no. 5, pp. 332-340 (1981) (26) Lenfant, J.: “Parallel Permutations of Data: A Benes Network Control Algorithms for Frequently Used Permutations,” IEEE Trans. C-27, no. 7, pp. 637-647 (1978) (27) Batcher, К. E.: “Sorting Networks and Their Applications,” Proc. SJCC, pp. 307-314 (1968) (28) Beetem, J., Denneau, M. and Weingarten, D.: “The GF-11 Super Computer,” Proc., of the 1985 Int’l Conf, on Parallel Processing, pp. 108-115 (1985) , (29) Stone, H. S.: “Parallel Processing with the Perfect Shuffle,” IEEE Trans. C- 20, no. 2, pp. 153-161 (1971) (30) Lawrie, D. H.: “Access and Alignment of Data in an Array Processor,” IEEE Trans. C-24, no. 12, pp. 1145-1155 (1975) (31) Chen, P. et. al.: “Interconnection Networks Using Shuffles,” IEEE Computer, vol. 14, no. 12, pp. 55-64 (1981) (32) Pease III, M. C.: “The Indirect Binary ц-Cube Microprocessor Array.” IEEE Trans. C-26, no. 5, pp. 458-473 (1977) (33) Siegel, H.J. et. al.: “The Multistage Cube: A Versatile Interconnection Network,” IEEE Computer, vol. 14, no. 12, pp. 65-76 (1981) (34) Lipovski, G. L. et. al.: “Banyan Networks for Partitioning Multiprocessor Systems,” Proc, of 1st Int’l Sympo. on Computer Architecture, pp. 21-28 (1973) (35) Pfister, G. F. and Norton, V. A.: “‘Hot Spot’ Contention and Combining in Multistage Interconnection Networks,” IEEE Trans, on Computers, vol. C-34, no. 10, pp. 943-948 (1985) (36) Dubois, M. and Briggs, F. A.: “Effects of Cache Coherency in Multiproces- sors,” IEEE Trans, on Comp., C-31, no. 11 (1982) (37) Censier, L. M. and Feautrier, P.: “A New Solution to Coherence Problems in Multicache Systems,” IEEE Trans, on Comp., C-27, Dec., pp. 1112-1118 (1978)
390 Список литературы (38) Tanaka,Y.: “A Multiport Page-Memory Architecture and A Multiport Disk- Cache System,” New Generation Computing, vol. 2, no. 3, pp. 241-260 (1984) (39) Yan, S. S. and Fung, H. S.: “Associative Processor Architecture - A Survey,” ACM Computing Surveys, vol. 9, no. 1, pp. 3-28 (1977) (40) Thui ber, K. J.: Large Scale Computer Architecture - Parallel and Associative Processors, Hayden Book Co., N.J. (1976) (41) Foster, С. C.: Content-Addressable Parallel Processors, Van Nostrand Rein- hold Co.,N. Y.,(1976> (42) Batcher, К. E.: “STARAN Parallel Processor System Hardware,” NCC, pp. 405-410 (1974) (43) Batcher, К. E.: “The Multidimensional Access Memory in STARAN,” IE£E Trans. C-26, no. 2, pp. 174-177 (1977) (44) Batcher, К. E.: “The Flip Network in STARAN,” Proc, of ’76 Int’l Conf, on Parallel Processing, pp. 65-71 (1976) (45) Woods, W. A.: “What’s in a Link ? Foundations for Semantic Networks,” in Representation and Understanding: Studies in Cognitive Science, D. G. Bo- brow and A. M. Collins (eds.), Academic Press, pp. 35-82 (1975) (46) Fahlman, S. E.: NETL: A System for Representing and Using Real-World Knowledge, MIT Press (1979) (47) Hillis, W. D.: “The Connection Machine,” MIT Artificial Intelligence Lab. Memo 646 (1981) (48) Hillis, W. D.: The Connection Machine, MIT Press (1985) (49) Gupta, A.: “Parallelism in Production Systems: The Sources and Expected Speed-up,” CMU-CS-84-169 (1984) (50) Brooks, R. and Lum, R.: “Yes an SIMD Machine Can be Used for Al,” Proc, of IJCAI, pp. 73-79 (1985) (51) Stolfo, S. J.: “Five Parallel Algorithm for Production System Execution on the DADO Machine,” Proc, of AAAI ’84, pp. 300-306 (1984) Глава 7 (1) McCarthy,}.: Recursive Functions of Symbolic Expressions and Their Com- putation by Machine, Comm.ACM, 7, pp. 184-195, 1960. (2 ) Moon,D.: MACLISP Reference Manual, Project MAC, MIT, 1974. ( 3) Teitelman,W.: INTERLISP Reference Manual, Xerox Palo Alto Research Center, Palo Alto, California, or Bolt, Beranek, and Newman. Cambridge, Massachusetts, 1974. (4 ) Moon,D., Stallman,R. and Weinreb,D.: LISP Machine Manual, Fifth Edition, МГГ Artificial Intelligence Laboratory, 1983. ( 5 ) Steel Jr.,G.; Common Lisp: The Language, Digital Press, 1984. (6) Ж», : Common Lisp АП, 1986. (7) Greenblatt,R.: The LISP Machine, MIT Al Memo, No.79, 1974. (8 ) Steel Jr.,G. and Moon,D.: CADR, MIT Al Memo, DRAFT, 1979.
Список литературы 391 (9) Symbolics 3600 Technical Summary, Symbolics Inc. 1984. (10) The LMI Lambda, Technical Summary, LMI, 1984. (11) Lampson, B.W. and Pier,K. A.: A Processor for a High-Performance Personal Computer, Proc. 7 th Symposium on Computer Architecture, pp.146-160, 1980. (12) Hidon, HJ.: Silicon Software Tackles Al Problems, Computer Design, March 15, p.42, 1985. (13) ж liZP : Lispv>>0&fr—+ LISPMOftfc, Vol.20, No.6, pp.481-486, 1979. (14) Hayashi,H. et al.: ALPHA: A High-Performance LISP Machine Equipped with a New Stack Structure and Garbage Collection System, Proc. 10 th Symposium on Computer Architecture, pp.342-348, 1983. (is) нл», к*: lisp v >> ELis ©жж»», Ж 12-15, 1980. (16) Kowalski,R.: Logic for Problem Solving, North-Holland, 1979. (17) Warren,D.H.D.: Implementing PROLOG, Res. Rep. 39, 40, Dept, of A.I., Univ, of Edinburgh, 1977. (18) Chang,C.L. and Lee,R.C.: Symbolic Logic and Mathematical Theorem Prov- ing, Academic Press, 1973. (19) Yokota,M., .Yamamoto,A., Taki,K., Nishikawa,H. and Uchida,S.: The Design and Implementation of a Personal Sequential Inference Machine: PSI, New Generation Computing 1, 2, 1983.4 (20) Nakazaki,R. Konagaya,A., Habata,S„ Shimazu,H., Umemura,M„ Yamamoto, M., Yokota,M. and Chikayama,T.: Design of a High-speed Prolog Machine (HPM), Proc. 12 th Annual Symposium on Computer Architecture, 1985. (21) Kaneda, Y., Tamura, N., Wada, K. and Matsuda, H.: Sequential Prolog Machine РЕК Architecture and Software System, Proc. International Work- shop on High-I evel Computer Architecture ' 84, 1984. (22) Dobly,T.P., Despain,A.M. and Patt,Y.N.: Performance Studies of a Prolog Machine Architecture. Proc. 12 th Annual Symposium on Computer Architec- ture, 1985. Глава 8 (1) Bray, О. H. and Freeman, H. A.: Data Base Computers, Lexington Books (1979) ( 2) IEEE Computer, vol. 12, no. 3 (1979) ( 3) Hsiao, D. K.: “Data Base Computers,” in Advances in Computers, vol. 19 (1980) (4) MK, ШШШ¥£(1980) (5) ШФ: bit, Vol. 14, No. 4, pp. 38-50 (1982) (6) Canady, R. H. et al.: “A Back-end Computer for Data Base Management,”
392 Список литературы CACM, vol. 17, no. 10, pp. 575-582 (1974) (7) Maril, T. et al.: “The Data Computer-A Network Data Utility,” Proc. AFIPS, vol. 44, pp. 389-395 (1975) (8. ) Hakozaki, K. et al.: "A Conceptual Design of a Generalized Database Subsys- tem,” Proc. 3rd VLDB, pp. 246-253 (1977) (9) Epstein, R. et al.: “The IDM 500 - Communication Issues with Backend Processors,” COMPCON, pp. 112-114 (1981) (10) Coulouris, G. F. et al.: “Towards Content-Addressing in Databases,” Com- puter Journal, vol. 15, no. 2, pp. 95-98 (1972) (11) Leilich, H. O. et al.: “A Search Processor for Data Base Management,” 4 th VLDB, pp. 280-287 (1978) (12) Babb, E.: “Implementing a Relational Database by Means of Specialized Hardware,” ACM TODS, vol. 4, no. 1, pp. 1-29 (1979) (13) Copeland, G. P. et al.: “The Architecture of CASSM : a Cellular System for Nonnumeric Processing,” Proc. 1 st Annu. Symp. Computer Architecture, pp. 121-128 (1973) (14) Ozkarahan, E.A. et al.: “RAP-An Associative Processor for Data Base Management,” Proc. AFIPS, vol. 44, pp. 379-387 (1975) (15) Lin, C. S. et al.: “The Design of a Rotating Associative Memory for Relational Data base Applications,” ACM TODS, vol. 1, no. 1, pp. 53-65 (1976) (16) Chang; H.: “On Bubble Memories and Relational Data Base,” 4 th VLDB, pp. 207-229 (1978) (17) Uemura, S. et al.: “The Design and Implementation of a Magnetic-Bubble Database Machine,” IFIP 80, pp. 433-438 (1980) (18) Su, S. et al.: “MICRONET: A microcomputer network system for managing distributed relational data bases,” 4 th VLDB, pp. 288-298 (1978) (19) Hsiao, D. K. et al.: “The Post Processing Functions of a Database Com- puters,” Tech. Report, OSU-CISRC-TR-79-6, Ohio State Univ. (1979) (20) Schuster, S. A. et al.: “RAP. 2 - An Associative Processor for Databases and Its Applications,” IEEE Trans. Comput., vol. C-28, no. 6, pp. 446-458 (1979) (21) Dewitt, D. J.: “DIRECT-A Multiprocessor Organization for Supporting Relational Database Management Systems,” IEEE Trans. Comput., vol. C-28, no.6, pp.395-406 (1979) '' (22) Dewitt, D. J.: “Query Execution in DIRECT,” ACM SIGMOD, pp. 13-22 (1979) (23) Boral, H. B. et al.: “Processor Allocation Strategies for Multiprocessor Database Machines,” ACM TODS, vol. 6, no. 2, pp. 227-254 (1981) (24) Oflazer, K. et al.: “RAP. 3 - A Multi-Microprocessor Cell Architecture for the RAP Database Machine,” Proc. Int’l Workshop on High Level Language Computer Architecture, pp. 108-119 (1980) (25) Boral, H. et al.: “Design Consideration for Data Flow Database Machines,” ACM SIGMOD, pp. 94-104 (1980)
Список литературы 393 (26) Wah, В. W. et al.: “DIALOG - A Distributed Processor Organization for Data Base Machine,” NCC, pp. 243-253 (1980) (27) Tanaka, Y. et al.: “Pipeline Searching and Sorting Modules as Components of a Data Flow Data Base Computer,” IFIP 80, pp. 427-432 (1980) (28) Ж&/Ц ffe: “Hash L Sort EC81-35 (1981) (29) Tanaka, Y.: "A Data Stream Database Machine with Large Capacity,”. Proc. Int’l Workshop on Database Machines (1982) (30) Baum, R. I. et al.: “Database Computers - A Step toward Data Utilities,” IEEE Trans. Comput., vol. C-25, pp. 1254-1259 (1976) (31) Banerjee, J. et al.: “Concepts and Capabilities of a Database Computer,” ACM TODS, vol. 3, pp. 347-384 (1978) (32) Banerjee, J. et al.: “DBC - A Database Computer for Very Large Databases,” IEEE Trans. Comput., vol. C-28, no. 6, pp. 414-429 (1979) (33) Berra, P. B.: “Some Problems in Associative Processing Applications to Data Base Management,” AFIPS, vol. 43, pp. 1-5 (1974) (34) Oliver, E. J. et al.: "RELACS: A Relational Associative Computer System,” Proc. 5 th Workshop on Computer Architecture for Non-Numeric Processing, pp. 108-114 (1980) (35) Arden, B. et al.: "A Single Relation Module for a Data Base Machine,” COMPCON, pp. 227-237 (1981) (36) Kung, H. T. et al.: “Systolic (VLSI) Arrays for Relational Database Opera- tions,” ACM SIGMOD, pp. 105-116 (1980) (37) Madnick, S. E.: "INFOPLEX - Hierarchical Decomposition of a Large Infor- mation Management System Using a Microprocessor Complex,” AFIPS, vol. 44, pp. 581-586 (1975) (38) Sekino, A. et al.: “Design Considerations for an Information Query Com- puter,” Advanced Database Machine Architecture (D. K. Hsiao ed.), Prentice- Hall, pp. 130-167 (1983) (39) Slotnick, D. L.: “Logic per Track Devices,” Advances in Computers, Aca- demic Press, pp. 291-296 (1970) (40) Parker, J. L.: “A Logic per Track Retrieval System,” Proc. IFIP Congress ’71, pp. (TA-4-146)-(TA-4-150), (1971) (41) Minsky, N.: “Rotating Storage Devices as Partially Associative Memories,” AFIPS, vol. 41, pp. 587-596 (1972) (42) Healy, L. D. et al.: "The Architecture of a Cbntent Addressed Segment Sequential Storage,” AFIPS Conf. Proc., vol. 41, pp. 691-701 (1972) (43) Todd, S.: "Algorithms and Hardware for a Merge Sort Using Multiple Processors,” IBM J. R & D, vol. 22, no. 5 (1978) (44) Moulder, R.: "An Implementation of a Data Management System on an Associative Processor,” AFIPS, vol. 42, pp. 171-176 (1973) (45) /J'ffl ftfc: (В
394 Список литературы ¥&£ ЕС 80-72 (1980) (46) Kitsuregawa, М., Tanaka, Н. and Moto-oka, Т.: “Application of Hash to Data Base Machine and Its Architecture,” New Generation Computing, vol. 1, pp. 63-74 (1983) (47) ШФ 23g, 10^, pp.939-947 (1982) (48) Hawthorn, P. B., et al.: "Performance Analysis of Alternative Database Machine Architectures,” IEEE Trans, on Software Engineering, no. 1, pp. 61- 76 (1982) (49) Bitton, D„ DeWitt, D. J. and Turbyfill, C.: “Benchmarking Database Systems, A Systematic Approach,” Proc, of 9 th VLDB, Florence (1983) (50) Boral, H. and DeWitt, D. J.: “Database Machines: An Idea Whose Time has Passed?”, Database Machines, Springer-Verlag, pp. 166-187 (1983) (51) Tanaka, Y.: “A Multiport Page-Memory Architecture and A Multiport Disk-Cache System,” New Generation Computing, vol. 2, no. 3, pp. 241-260 (1984) (52) Tanaka, Y.: “MPDC: Massive Parallel Architecture for Very Large Databases,” Proc. Int’l Conf, on Fifth Generation Computer Systems 1984, pp. 113-137 (1984) (53) Tanaka, Y.: "Massive Parallel Database Computer MPDC and Its Control Schemes for Massively Parallel Processing,” NATO ASI Series, vol. F 24, Database Machines (A. K. Sood and A. H. Qureshi eds.), Springer-Verlag, pp. 127-158 (1986) (54) Bayer, R. and McCreight, E.: “Organization and Maintenance of Large Unordered Indices,” Acta Informatica, vol. 1, fasc. 3, pp. 173-189 (1972) (55) Larson, P.: “Dynamic Hashing,” BIT, vol. 18, pp. 184-201 (1978) (56) Litwin, W.. “Virtual Hashing: A Dynamically Changing Hashing,” Proc. 4 th VLDB, pp. 517-523 (1978) (57) Litwin, W.: "Linear Hashing: A New Tool for File and Table Addressing,” Proc. 6 th VLDB (1980) (58) Fagin, R., Nievergelt, J., Pippenger, N., and Strong, H R.: “Extendible Hashing - a Fast Access Method for Dynamic Files,” ACM TODS, vol. 4, no. 3, pp.315-344 (1979) (59) Chang, J. and Fu, K.: "Extended k-d Tree Database Organization: A Dynamic Multiattribute Clustering Method,” IEEE Trans. Software Engineer- ing vol. 7, no. 3, pp. 284-290 (1981) (60) Orenstein, J. A. : "Multidimensional Tries Used for Associative Searching,” Info. Proc. Lett., vol. 14, no. 4, pp. 150-157 (1982)
Список литературы 395 (61) Tanaka. Y.: '‘Adaptive Segmentation Schemes for Large Relational Database. Machines,” Database Machines, Springer-Verlag, pp. 293-318 (1983) (62) Robinson, J. T.: “The K-D-B-Tree : A Search Structure for Large Multidimen- sional Dynamic Indexes,” S1GM0D 1981, pp. 10-18 (1981) (63) Kojima, K., Torii, S. and Yoshizumi, S.: "1DP - A Main Storage Based Vector Database Processor,” Proc, of 5 th Int’l Workshop on Database Machines, pp. 60-73 (1987) (64) ЕНФ 18: + Ж350Ш1В&Ж¥£±а I ), pp. 157-158 (1987)
ОГЛАВЛЕНИЕ Глава 1. Исторический обзор архитектур ЭВМ и их класси- фикация . ...............................................7 1.1. Основные положения, касающиеся архитектур ЭВМ.............................................7 1.2. История развития вычислительной техники от механических машин до электронных . . 10 1.3. Становление и упрочнение позиций архитекту- ры фон Неймана.................................13 1.4. История и классификация параллельных ЭВМ неймановского типа.............................38 1.5. Пересмотр принципов неймановской архитекту- ры и оживление в сфере ненеймановских архитек- тур ...........................................66 1.6. Архитектуры для обработки знаний..........79 Глава 2. Высокоскоростная обработка и архитектура СБИС 83 2.1. Повышение скорости выполнения четырех ариф- метических действий . . .......................83 2.2. Повышение скорости выполнения макроопера- ций ...........................................91 2.3. Ускорение поиска и сортировка.............97 Глава 3. Вычислительные модели и методы оценки . . . .114 3.1. Вычислительные модели....................114 3.2. Модели вычислительных механизмов .... 128 Глава 4. Редукционные машины......................... 134 4.1. Синтаксис лямбда-исчисления..............134 4.2. Семантика лямбда-исчисления..............138 4.3. Порядок редукции.........................146 4.4. Рекурсивные функции......................149 4.5. Редукция графов..........................151 4.6. Комбинаторы..............................160 4.7. Параллельная редукция....................162 4.8. Редукционные машины......................167 Глава 5. Потоковые машины 176 5.1. Поводы для разработки потоковых машин . . 177 5.2. Параллельная обработка и функциональный язык........................................ 179
Оглавление 397 5.3. Обрабатывающие модели потокового типа . .184 5.4. Понятия запуска функции и сверхмультиобра- ботки . . ................................194 5.5. Биографическая зависимость и обработка структурированных данных 200 5.6. Аппаратные средства потоковых машин . . . 208 5.7. Задачи и перспективы на будущее..........222 Глава 6. Архитектуры памяти.......................... 227 6.1. Архитектуры памяти.......................227 6.2. Архитектура быстродействующей памяти . . . 236 / 6.3. Архитектура виртуальной памяти.............256 6.4. Архитектура общей памяти . ....... 267 6.5. Архитектура интеллектуальной памяти . . .281 Глава 7, Языки искусственного интеллекта и машины ис- кусственного интеллекта ...........................288 7.1. Язык Лисп и Лисп-Машина..................289 7.2. Язык Пролог и Пролог-машины..............313 Глава 8. Машины баз данных ...........................341 8.1. Функционирование базы данных и машины баз данных . 341 8.2. Исторический обзор и классификация машин баз данных....................................346 8.3. Аналитический обзор и перспективные направ- ления ........................................360
УВАЖАЕМЫЙ ЧИТАТЕЛЬ! Ваши замечания о содержании книги, ее оформ- лении, качестве перевода и другие просим присылать по адресу: 129820, Москва, И-ПО, ГСП, 1-й Риж- ский пер., д. 2, издательство «Мир».
Учебное издание Макото Амамия, Юдзуру Танака АРХИТЕКТУРА ЭВМ И ИСКУССТВЕННЫЙ ИНТЕЛЛЕКТ Зав. редакцией Э.Н. Вадиков Ведущий редактор С.В. Богдасаров Редакторы М.Ю. Григоренко, И.К. Короткова Художник В.С. Стуликов Художественные редакторы Н.М. Иванов, О.Н. Адаскина Технический редактор Е.В. Алехина Корректор В.И. Киселева ИБ № 7507 Сдано в набор 23.08.90. Подписано к печати 14.03.91. Формат 60x84/16. Бумага книжно-журнальная. Печать офсетная. Гарнитура литературная. Объем 6,25 бум. л. Усл. печ. л. 23,25. Усл. кр.-отт. 23,48. Уч.-изд. л. 21,70. Изд. № 6/7672. Тираж 5000 экз. Зак. 1145. С165. Издательство «Мир» Министерства печати и информации Российской Федерации 129820, ГСП, Москва, 1-й Рижский пер., 2. Отпечатано в Московской типографии №11 113105, Москва, Нагатинская ул., д. 1.