Правильная ссылка на эту страницу
http://az-design.ru/Support/HardWare/Xerox/D19880609Elc036.shtml

Личные Лисп-компьютеры повышают производительность труда программистов в сфере искусственного интеллекта

Бо Шейл (Beau Shell)
Отделение специальных информационных систем фирмы Xerox (Пало-Альто, шт.Калифорния)

Beau Shell. Family of personal Lisp machines speeds AI program development, 1983, No.22, pp.153—156.

Приведено общее описание аппаратных средств и программного обеспечения трёх компьютеров, предназначенных для работы с универсальной системой программирования Interlisp-D, основой которой служит язык Лисп. Эти машины представляют собой личные рабочие станции для программирования задач искусственного интеллекта.

У программистов, занимающихся прикладными проблемами искусственного интеллекта, нередко возникает ощущение, будто они вторгаются в область неизведанного. Это связано с тем, что в сфере моделирования процессов человеческого мышления пока ещё существует множество «белых пятен». Семейство 1100 рабочих станций программиста, разработанное специалистами фирмы Xerox, предназначено для повышения производительности труда тех программистов, которые заняты решением именно этих сложных задач. Машины 1100 оптимальны с точки зрения специфических требований программирования в таких прикладных областях, как экспертные системы, системы с базами знаний и диалоговые интерфейсы «человек — машина», ориентированные на обработку графической информации.

Характер приложений этого типа в корне отличается от обычных применений вычислительной техники, поскольку составляемые здесь проектные задания подвержены весьма значительным изменениям, и если в ходе реализации появляются новые технические решения, то может возникнуть необходимость в соответствующей переработке проекта. Таким образом, программист в данной ситуации обязан действовать в рамках так называемой эвристической (exploratory) разработки, т.е. прибегать к проектированию с одновременным практическим воплощением промежуточных результатов, что достигается последовательным внесением уточнений на обоих этих уровнях.

Для подобной процедуры программирования требуются программные инструменты особого рода. В случае семейства ЭВМ 1100, например, используется система Interlisp-D — комплексный универсальный набор средств разработки программ, основу которого составляет язык Лисп. Многие установки, использующие систему Interlisp-D вначале создавались на основе больших универсальных машин. Необходимость оснащения таким программным обеспечением гораздо менее крупных ЭВМ серии 1100 ставила перед проектировщиками весьма непростые, но вместе с тем интересные задачи.

Семейство 1100 — это удивительное сочетание сходных черт и контрастов. Цены и производительность младшей и старшей моделей данной серии (в неё входят три машины — 1108, 1100 и 1132) различаются чуть ли не на порядок, поэтому очевидно, что и архитектурные принципы, лежащие в их основе, также весьма различны. С другой стороны, все они могут работать в одной и той же программной среде1{Программной средой называется комплекс программных средств, которым оснащается та или иная система, а также условия и режимы их работы.— Прим. перев.}, причём их совместимость достигает такого уровня, что программу, выполняемую на машине одной модели, можно в любой момент прервать, загрузить в другую модель семейства и вновь продолжить именно с того места, где она была остановлена, сохранив при этом неизменными все элементы слова состояния программы.

Данная степень совместимости предусматривает, что любая из трёх машин обязана находить эффективные пути решения для одной и той же группы задач, выполняемых в рамках программной системы Interlisp и требующих определённого уровня производительности. Характер подобных решений зависит от ряда ключевых элементов, общих для архитектур всех трёх машин, а эти элементы в свою очередь сыграли решающую роль в формировании структуры указанной программной системы.

Каждая из ЭВМ семейства 1100 построена таким образом, что она может служить в качестве личной рабочей станции программиста, работающего индивидуально. Компьютер 1108 — младшая из моделей семейства 1100, представляет собой базовый комплект аппаратно-программных средств для обслуживания такого пользователя. В миниатюрной стойке, примыкающей к столу оператора, размещаются блок процессора, память и встроенные НМД. Крупноформатный дисплей с поэлементным отображением позволяет воспроизводить не только текст с разнообразными типами шрифта, но и исчерпывающий набор графических изображений, включая прямые и ломаные линии, криволинейные фигуры, а также дискретизированные и полутоновые иллюстрации. Машины 1100 и 1132 оснащены цветными и черно-белыми дисплеями с поэлементным отображением, которые обеспечивают ещё более широкий выбор режимов визуального представления информации.

В распоряжении пользователя имеется широкополосный канал связи с компьютером в виде манипулятора «мышь», т.е. устройства-указателя, которое воспринимает перемещение руки пользователя в горизонтальной плоскости и тем самым позволяет осуществлять непосредственное описание объектов, воспроизводимых на экране дисплея. В комплект входит также блок адаптера локальной сети, дающий возможность пользователю машины серии 1100 обращаться к различным ресурсам коллективного пользования, например к файловым системам большой ёмкости, электронным принтерам и службам коммутации сообщений с промежуточным запоминанием.

Возможности этого оборудования открывают множество путей для повышения производительности труда программиста. В частности, в распоряжение пользователей предоставляются более эффективные версии таких традиционных программных инструментов, как редакторы и отладчики составленных программ, а также генераторы документов, администраторы локальных и удалённых файлов, электронная почта. Подобные средства, которые рассчитаны на специалистов, не имеющих подготовки в области программирования, могут в значительной мере облегчить труд не только этих специалистов, но и профессиональных программистов.

Между тем перечисленные инструменты ныне уже стали непременными атрибутами любой профессиональной рабочей станции или отвечающей современным требованиям среды разработки программ на основе стандартных языков программирования. Наиболее удивительной чертой машин семейства 1100 является их способность в широких пределах оказывать содействие программисту в его работе с программными системами для эвристической разработки, которые в корне отличаются от традиционного программного обеспечения. Эта особенность обретает наибольшую ценность именно в тех приложениях, где возникает необходимость её использования.

Нетрадиционное программирование

Проведение широкомасштабных исследований в области больших систем становится возможным только при условии, если процессы проектирования и практической реализации выполняются одновременно (см. «Проектирование методом последовательных приближений»). Отсутствие такого тесного переплетения этих процессов приводит к тому, что эмпирические результаты исследований появляются с опозданием, когда они уже не могут оказать сколько-нибудь существенного воздействия на ход проектирования. К сожалению, в основе общепринятых методик программирования лежит принцип последовательной логической детализации исходного неизменного проектного задания.

Эти методики, пригодные для подобной детализации, нельзя считать просто неэффективными для тех случаев, когда в ходе осуществления проекта в него вносят многочисленные изменения — они в принципе могут привести к полному срыву как процесса проектирования, так и практического воплощения его результатов. Например, традиционный подход к разработке программ состоит в задании избыточных технических условий, содержащих множество характеристик,— такие технические условия призваны содействовать выявлению противоречий в проектном задании. Если подобная методика продуктивна при строго определённом плане проектирования, то её применение в условиях меняющегося проектного задания даёт совершенно противоположные результаты, поскольку каждая из большого числа модификаций, которые приходится вносить в проект, требует соответствующих изменений многих компонентов программного кода.

В связи с этим для таких приложений, как системы искусственного интеллекта, где непостоянство основного проектного решения является нормой, созданы комплексы средств разработки программ, упрощающие и ускоряющие процесс составления крупномасштабных программ именно в условиях изменчивости плана проекта. Подобные комплексы эвристической разработки предоставляют в распоряжение специалистов как язык, пригодный для эвристического программирования (типа языка Лисп), так и набор программных инструментов, обеспечивающих координацию отдельных процессов составления соответствующих программ.

Наиболее совершенные образцы среды разработки программ оснащены комплексными инструментами программирования. Например, в системе Interlisp регистрируются любые изменения той или иной процедуры, вносимые при редактировании или переработке описаний. После этого анализатор программ уничтожает все результаты предшествующего анализа, чтобы наличие устаревшей информации не приводило к появлению неправильных решений. Затем те же компоненты системы Interlisp уведомляют подсистему координации составления программ (а в конечном счёте они уведомляют и оператора — по завершении текущего сеанса диалога «человек—машина») о необходимости обновления содержимого соответствующего программного файла. Кроме того, система Interlisp запоминает предыдущее состояние процесса, что даёт программисту возможность в любой последующий момент времени аннулировать внесённое изменение и возвратиться к этому состоянию, отменяя также все сопутствующие изменения и предписания. Такой уровень взаимодействия между компонентами системы предоставляет программисту чрезвычайно широкие возможности, поскольку исключается огромное число второстепенных деталей, которыми пришлось бы заниматься при пользовании любой другой системой.

Что должен уметь язык программирования

Важнейшими компонентами любого языка программирования эвристической разработки являются те его средства, которые позволяют программисту осуществлять выбор детальных решений на возможно более поздних этапах проекта. Язык Лисп, например, предусматривает четыре основных способа задержки выполнения соглашений, оказывающих существенное воздействие на практическую реализацию крупномасштабных программ.

Во-первых, язык Лисп обеспечивает динамическое распределение памяти с автоматическим возвращением использованных ресурсов в общий пул — программист может по своему усмотрению распределять вновь поступающую в его распоряжение память, а система следит за её использованием и возвращает в общий пул те или иные участки памяти, как только отпадает необходимость в обращении к ним. В итоге программисту больше не приходится контролировать все возможные маршруты доступа к каждому блоку памяти. Такой контроль был бы очень трудно осуществить, если бы структура программы подвергалась непредсказуемым изменениям.

Во-вторых, в Лиспе предусмотрено динамическое присвоение типов переменным. Это означает, что тип данных, присвоенный каждой переменной, не остаётся строго фиксированным после того, как завершено составление процедуры, содержащей такие переменные, а может меняться при каждом вызове процедуры или даже в процессе обслуживания одного вызова. Подобная возможность позволяет программисту экспериментировать с моделями процедур, которыми ему предстоит пользоваться. К примеру, структуры чрезвычайно общего характера, но вместе с тем неэффективные можно применять при создании первоначальных вариантов программы, а уже после того, как экспериментальным путём проведено уточнение характеристик этих структур, их эффективность может быть повышена.

В-третьих, Лисп обеспечивает процедурам свободный доступ к переменным: каждая процедура может пользоваться переменными, не заключёнными в какую-либо лексически замкнутую область описаний. Цепочку связи, к которой осуществляется обращение, можно установить, анализируя вначале связи с переменными вызывающей процедуры, затем последовательность вызова самой этой процедуры и т.д. Динамическая организация связей даёт возможность каждой процедуре обмениваться информацией с другими процедурами, вызовы которых расположены сколь угодно далеко в структуре стека вызовов. Таким путем можно, конечно, составить лишь абсолютно нерегулярный программный код. Тем не менее с точки зрения эвристического подхода программист получает здесь возможность по своему усмотрению прокладывать новые маршруты информационного обмена между различными процедурами, причём не возникает необходимость в переработке всех участков кода, которые могут иметь отношение к таким операциям.

Динамический вызов процедур

И наконец, в-четвертых, все вызовы процедур в Лиспе также динамические в том смысле, что адресация процедур здесь осуществляется косвенно, только по их именам, благодаря чему их действительными определениями можно варьировать. В простейшем варианте программист имеет возможность менять функции какого-либо компонента программного кода, модифицируя (даже во время его выполнения) определение той или иной процедуры, которую вызывает этот компонент. Среди более сложных случаев — возможность привязки значений данных к определениям процедур обработки таких данных (подобный приём часто называют объектно-ориентированным программированием), в результате чего каждый информационный компонент должен содержать как значения входящих в него элементов данных, так и описание того, что с ними будет происходить.

С точки зрения эвристического программирования значение всех этих четырёх особенностей языка Лисп трудно переоценить, однако за их реализацию нужно чем-то платить. Для автоматического управления ресурсами памяти безусловно необходимо, чтобы программные средства системы осуществляли постоянный контроль за использованием таких ресурсов. Динамическое присвоение типов требует по меньшей мере одного уровня преобразования логического адреса в физические для каждого обращения к переменной, поскольку значения, присваиваемые этой переменной в течение определённого интервала времени, могут занимать различный объем памяти. Для свободного доступа к переменным может оказаться необходимым большое число операций, так как объект доступа, возможно, находится в отдалённой части стека вызовов. Наконец, динамическая организация связей процедур требует не только дополнительных действий для выборки тела процедуры, но и значительно большего числа операций по проверке аргументов, полученных на основе спецификаций, которые содержатся в считываемой процедуре.

В связи с этим Лисп всегда считали неэкономичным языком в том смысле, что выполнение написанных на нем программ требует значительной вычислительной мощности. По этой причине оснащение системой Interlisp личных компьютеров, по своим масштабам сравнимых с миниатюрной ЭВМ 1108, неэквивалентно простому приложению традиционных методов практической реализации программных систем к машинам меньшего размера.

Аппаратное обеспечение моделей ЭВМ серии 1100 различается как по техническим средствам, так и по архитектурным принципам. Старшая модель, 1132, построена главным образом на ЭСЛ-схемах серии 10000, характеризуется архитектурой с высокой степенью конвейеризации и оснащена кэш-буфером основной памяти, имеющим значительную ёмкость. Менее крупные машины — 1100 и 1108 — выполнены на основе Шотки/ТТЛ ИС, а конвейеризация их архитектуры имеет либо невысокий уровень, либо вообще не предусмотрена; кроме того, их аппаратные стеки характеризуются небольшой ёмкостью, а кэш-память отсутствует.

Как и машина 1132, модель 1100 обладает весьма гибкой архитектурой и внутренним интерфейсом с памятью, отличающимся относительно широкой полосой частот, поэтому ЭВМ 1100 способна обслуживать самые разнообразные устройства ввода-вывода. В свою очередь модель 1108 имеет повышенную по сравнению с моделью 1100 производительность; это достигнуто за счёт того, что она оснащена дополнительными специализированными аппаратными средствами (например, двухпортовой памятью кадров), обеспечивающими эффективное выполнение заданий, для которых производительность играет решающую роль, а её архитектура относится к распространённому типу и характеризуется меньшими возможностями.

Поскольку машины этой серии планируется применять в качестве личных станций разработки программ, непременной характеристикой таких машин должна быть их невысокая стоимость при поставках отдельными экземплярами. Эффективный конструкторский приём, который позволяет достичь данной цели, состоит в том, что один процессор используется и как блок исполнения инструкций, и как контроллер устройств ввода-вывода. Подобное двойное назначение процессора обеспечивает возможность работы с разнообразными недорогими подсистемами управления такими периферийными устройствами, как НМД и блоки связи с сетью Ethernet, которые в результате получают коллективный доступ к вычислительным ресурсам процессора.

Системы программирования задач эвристической разработки, в частности Interlisp-D, предъявляют очень высокие требования к ёмкости памяти. Причём эти требования относятся как к виртуальной памяти, предназначенной для обслуживания значительных объёмов программного кода, который необходим для обеспечения широких функциональных возможностей системы, так и к физической памяти для хранения крупных оперативных массивов информации, с которыми системе, как правило, приходится работать. Каждая из трёх машин серии 1100 оснащена мощным физическим ЗУ (1—4 Мбайт) и виртуальной памятью большого объёма (32 Мбайт), а также аппаратными средствами для перевода виртуальных адресов в физические.

Отличительной особенностью системы Interlisp-D является наличие в ней программного диалогового интерфейса с оператором, ориентированного на обработку графической информации, поэтому все три модели ЭВМ серии 1100 способны непосредственно обслуживать дисплеи растровой развёртки с поэлементным отображением. В каждой из этих машин программист может выделить какой-либо блок основной памяти прямого доступа и использовать его в качестве буфера кадров изображения, выводимого на дисплей. Поскольку буфер кадров размещается в основной памяти, изображением на экране дисплея можно манипулировать непосредственно с помощью основной программы, правда, при этом несколько возрастает интенсивность «состязаний» на шине памяти. Основной инструмент, посредством которого программы работают с картой битовых элементов изображения,— операция litblt. Она пересылает блоки данных в виде последовательностей двоичных разрядов и попутно модифицирует их, если в этом возникает необходимость. Несмотря на то что большинство указанных процедур взаимодействия с дисплеем реализованы в микропрограммном виде, предусмотрено также немалое число схем сдвига и маскирования, которые способствуют быстрому выполнению таких операций.

Большие программы для маленьких машин

В основе практической реализации системы Interlisp-D на машинах семейства 1100 лежит метод эмуляции посредством байтовых кодов. В соответствии с таким методом оттранслированные программы представляются потоком байтовых кодов, интерпретируемых как инструкции для некой виртуальной машины, логика которой практически полностью соответствует семантике исходного языка более высокого уровня. В случае системы Interlisp-D эти инструкции манипулируют содержимым стека, из которого извлекаются операнды и в который загружаются результаты.

Данный подход характеризуется тремя явными преимуществами по сравнению с общепринятым методом машинно-ориентированного макрокодирования. Во-первых, он обеспечивает кодирование высокого уровня: отпадает необходимость в формировании машинного макрокода, а компилятор исходного языка более высокого уровня позволяет транслировать программы на объектный язык, который по своему характеру гораздо ближе к исходному языку, чем машинный код. Во-вторых, он даёт возможность получать экономные коды: каждой из большинства команд высокого уровня и любой кодовой серии, вероятность появления которой довольно велика, может быть поставлен в соответствие однобайтовый код, что ведёт к весьма значительному сокращению объёма оттранслированного программного кода. Наконец, такой подход обеспечивает высокую производительность процедур кодирования: преобразование часто используемых кодовых серий в однобайтовые коды осуществляется по существу под непосредственным микропрограммным управлением.

Аппаратные средства машин семейства 1100 обладают двумя особенностями, имеющими решающее значение для эмуляции путём байтового кодирования. Первая — это довольно значительный объем перезаписываемого ЗУ (4К*36 бит), что вполне достаточно для представления наборов весьма сложных инструкций целиком в микрокоде. Возможность перезаписи позволяет часто вносить изменения в микрокод, что делается по мере того, как уточняются технические характеристики системы.

Вторая особенность заключается в том, что аппаратные блоки, обеспечивающие выборку байтовых кодов, их анализ и выдачу операторов в процессор, существенно повышают производительность системы. Для всех моделей семейства сложность подобного аппаратного оснащения, как и следовало ожидать, различна — от высокопроизводительного конвейеризованного блока выборки инструкций ЭВМ 1132 до устройства выборки однобайтовых инструкций для модели 1108, характеризующегося более умеренными параметрами.

Значительный объем служебного микрокода, составляемого в соответствии с требованиями заказчиков, а также скрупулёзное отношение к проектированию программного обеспечения дали возможность воспользоваться несколькими новыми приёмами для достижения высокой производительности Лисп-системы. В число этих приёмов входят вызов функций, автоматическое управление ресурсами памяти и вызовы связанных списков.

При вызове функций может потребоваться значительное число операций, обусловленных обращениями к памяти, которые необходимы как для динамического контроля, так и для формирования специальной информации, хранимой в стеке. Такая информация обеспечивает выполнение с помощью системы Interlisp процедур типа возврата стека в некоторое заданное состояние. Средства Interlisp-D подготавливают и описания процедур, и кадры стека, в результате чего большая часть необходимых сведений может быть выбрана в кэш-память или аппаратный стек за одну операцию. Это даёт возможность очень быстро определить и реализовать наиболее общий режим обработки.

Автоматическое управление ресурсами памяти выполняется с помощью транзакционной системы счета обращений к памяти; такая система дополнительно оптимизирует параметры наиболее общего режима обработки — однократного обращения.

Основная структура данных — элементы связанных списков строится по принципу компактного кодирования, когда две 24-разрядные информационные величины кодируются одним 32-разрядным элементом. Это достигается путём представления тех частей одной величины, которые совпадают с соответствующими частями другой величины, в виде очень небольшого числа битов; остальные биты данного компактного кода задают признак особого прерывания, по которому можно при необходимости перейти к полным представлениям указанных величин, чтобы найти их несовпадающие части. Подобная экономия памяти важна потому, что она приводит к существенному сокращению объёма основной памяти, выделяемого для хранения рабочих наборов данных, которые участвуют в вычислительных операциях.

Такая методика, однако, имеет практическое значение исключительно благодаря тому, что указанные выше операции кодирования и декодирования могут выполняться микропрограммным способом попутно с другими операциями обращения к памяти. Реализация же системы на основе макрокода приводила бы к недопустимым потерям вычислительной мощности. Итак, высокая производительность относительно небольших машин семейства 1100 при выполнении Лисп-программ достигается за счёт использования эффективных программных архитектур, подобных описанным выше, а также возможности выполнять задания, требующие значительных затрат времени, микропрограммным путём.

Дочерние статьи:

Проектирование методом последовательных приближении

Выходные данные:

Журнал "Электроника" том 61, No.04 (786), 1988г - пер. с англ. М.: Мир, 1988, стр.51

Electronics Vol.61 No.04 February 18, 1988 A McGraw-Hill Publication

Beau Shell. Family of personal Lisp machines speeds AI program development, 1983, No.22, pp.153—156.

Раздел: МЕТОДЫ, СХЕМЫ, АППАРАТУРА

Тема:     Искусственный интеллект





Дата последнего изменения:
Thursday, 21-Aug-2014 09:10:44 MSK


Постоянный адрес статьи:
http://az-design.ru/Support/HardWare/Xerox/D19880609Elc036.shtml