Двери представительского этажа глухо закрылись за спиной. Морозов переложил портфель в другую руку, сбрасывая напряжение после тяжелого бюрократического торга с Савельевым. Воздух рабочих уровней Научного центра приятно отличался от мертвой тишины верхних коридоров: здесь пружинил потертый линолеум, пахло разогретым текстолитом, озоном и старой бумагой.
Громов шагал следом, хмуро разминая шею. Протокол, сохраняющий за ними права на гражданскую машину, лежал в портфеле, но теперь бумажную победу предстояло подкрепить инженерией.
Роман Кац толкнул дверь своей рабочей комнаты. Вместо полированного паркета начальственных кабинетов — два кульмана, гул терминалов за стеной и сдвинутые столы, заваленные синьками. Рядом с Гальпериным уже стоял Юрий Беспалов, разглядывая распечатку, с которой владимирцы час назад триумфально выступили на техсовете.
— Ну что, подписали? — спросил Гальперин, отодвигая чашку с недопитым чаем.
— Подписали, — Морозов опустил тяжелый портфель на стул. — Зеленоград получает инструмент, мы сохраняем ядро открытым. По режиму Савельев закрутил гайки: сами производственные топологии за порог НЦ не выходят. Во Владимир мы увозим только свои исходники, форматы координатных пакетов и чистые бланки под таблицы правил.
— Логично. Железо у вас, а режимные данные у нас, — Кац кивнул, приглашая гостей к столу. — А теперь давайте снимем пиджаки и перейдем к технической сути. То, что вы показали наверху — это высший пилотаж. Но мы все здесь инженеры и понимаем: один выверенный фрагмент — это еще не вся матрица. Как именно вы собираетесь прожевать полный слой кристалла на вашем К580?
Беспалов, до этого молча изучавший соседний фрагмент бумажной ленты, подался вперед и оперся ладонями о столешницу. Он перекинул несколько плотных полос бумаги с бледно-фиолетовыми символами кода.
— Тот самый BDS Си, — Беспалов удовлетворенно кивнул, глядя на Морозова и узнав фигурные скобки синтаксиса. — Я же передал вам дискету с компилятором совсем недавно, почти в виде эксперимента. Быстро вы пустили его в дело.
— Хороший инструмент не должен лежать на полке, — отозвался Алексей.
Кац подошел следом и тоже заглянул в код.
— Они очень грамотно разделили уровни, Юра, — пояснил Кац своему сотруднику. — Компилятор дает неизбежные накладные расходы на стеке, но владимирцы это обошли. На восьмиразрядной архитектуре без аппаратного умножения любой лишний вызов подпрограммы — это потерянные микросекунды. А при проверке ста тысяч полигонов эти микросекунды складываются в часы простоя.
Громов одобрительно хмыкнул. Ему понравилось, что местные системщики понимают цену процессорного такта.
Беспалов, до этого молча изучавший соседний фрагмент бумажной ленты, подался вперед и оперся ладонями о столешницу.
— Транслятор не волшебный, — веско добавил Юрий. — Вызов каждой функции на Си, сохранение адресов возврата, выделение памяти под временные переменные — все это нещадно съедает циклы процессора. У малой машины нет независимых каналов обмена памятью, цена каждой команды предельно высока.
Громов кивнул. Как создатель низовых программных процедур, он знал цену каждому байту и отвечал с абсолютной уверенностью:
— Поэтому компилятор туда не спускается. Все критичные участки написаны на чистом ассемблере. Чтение сектора с накопителя, перенос буфера в рабочую область, подсчет контрольных сумм пакета, посимвольный вывод. Эти операции выверены до такта, транслятор в них не вмешивается и ничего от себя не добавляет.
Морозов шагнул ближе и концом карандаша обвел крупный блок на распечатке.
— А здесь вступает Си. Геометрия и изменяемые технологические правила. Эту логику нужно постоянно читать, обсуждать с технологами и переписывать. Если завтра появится новое ограничение для контактных окон или изменится минимальный зазор между проводниками на конкретном слое, перекраивать под него монолитное ассемблерное полотно будет слишком рискованно. Ошибешься в одном переходе — сломаешь чтение с диска.
Он перебросил еще одну страницу бумаги через край стола.
— Нормы меняются, требования растут. Си здесь дает нужную гибкость. Программа просто берет координаты, подготовленные быстрыми процедурами, сверяет геометрию и выдает результат. Если нужно внедрить новое правило, мы правим только логику проверки. Ассемблерное ядро остается целым.
Гальперин перестал чертить на полях формата.
— То есть технологические допуски в код не зашиты?
— Зашивать нормы намертво — значит обречь себя на переделку системы при каждой смене техпроцесса, — подтвердил Морозов.
Он придвинул к себе чистый лист и достал ручку. Быстрыми движениями набросал структуру таблицы.
— Возьмем тот же пример с боковым подтравливанием, который Ланская только что в кабинете считала.
Ручка провела несколько колонок, обозначая поля данных.
— Чтобы каждый раз не переписывать ядро под новые коэффициенты травления, мы вынесли технологический допуск в отдельный файл. У нас есть топология — голые координаты, есть ваши правила проверки, и есть сама программа. Си нам нужен именно для того, чтобы накладывать одно на другое на лету.
Морозов положил ручку на стол.
— Вы здесь, в Зеленограде, набиваете служебную таблицу правил для текущего слоя. Наша машина берет массивы координат, считывает вашу таблицу и выдает отчет по нарушениям. Для такой логики Си гораздо эффективнее ассемблера.
Кац несколько секунд молча смотрел на колонки набросанной таблицы. Затем перевел взгляд на бледно-фиолетовые строки кода, провел ладонью по сгибу бумажной гармошки.
— С логикой понятно, — Кац скрестил руки на груди, чуть откинувшись на спинку стула. — Но слабое место остается не в алгоритме, а в источнике данных. Ваш координатный массив сейчас появляется в самом конце цепи. Тополог неделями сидит над чертежами, режет пленку, выверяет зазоры. А потом оператор переводит эту графику в цифры для фотоповторителя. Возникает риск сторонних ошибок оцифровки. Получается, ваша система пока ловит не столько инженерный недочет разработчика, сколько ошибки конвертации геометрии. Это чисто вторичный контроль.
Морозов не стал спорить. Кац был абсолютно прав. Алексей тщательно подбирал слова: сейчас было легко сорваться в лекцию о будущем САПР и разрушить то рабочее доверие, которое появилось после удачного прогона.
Он щелкнул замком портфеля и достал общую тетрадь за тридцать шесть копеек — ту самую, в которую делал выписки по форматам обмена. Перелистал плотные страницы и пододвинул тетрадь к центру стола.
— Вторичный контроль — это только текущий этап, база, — сказал Морозов. — Смотрите. Вот утвержденная вами выписка по формату, переложенная на язык нашей программы: номер слоя, координата, контур, окно контакта, маркер конца записи. Если мы стандартизируем этот промежуточный слой обмена, мы перестанем зависеть от операторов оцифровки.
Гальперин подался вперед и прищурился на убористый почерк.
— То есть вы клоните к тому, чтобы вводить геометрию прямо с пульта оператора, минуя перфоленты для станка? — догадался он.
— Именно, — ответил Морозов, забирая тетрадь. — Мы не обещаем завтра заменить инженера с резаком. Но если малая ЭВМ уже способна принимать геометрию напрямую, понимать перекрытия окон и выдавать отчет по правилам, это фундамент. Дальше мы просто переносим контроль на более ранние этапы технологического маршрута. Сначала вводить и проверять сложные участки до того, как резать пленку. Потом учиться описывать схему в машинном виде целиком прямо на рабочем месте. Мы делаем не программу для ОТК. Мы закладываем первый модуль САПР.
Кац с сомнением покачал головой, разглядывая набросанную таблицу, оценивая масштаб задачи.
Гальперин отложил карандаш и потер переносицу.
— Звучит стройно, — произнес он. — И в перспективе, возможно, так оно и должно работать. Но вернемся к железу. Меня беспокоит время первого прогона.
Он постучал карандашом по распечатке.
— Двадцать четыре минуты на массив, — напомнил Гальперин. — И львиная доля ушла на чтение. Вы сами говорили, что ввод-вывод — узкое место.
Он шагнул к свободному кульману и быстро набросал на закрепленном листе ватмана три прямоугольника, соединив их четкими стрелками: исходный массив, подготовленная порция, отчет.
Морозов не стал спорить.
— Узкое, потому что мы брали сырые данные. Ваша ЕС ЭВМ все равно читает исходники, чтобы перенести их на магнитную ленту. Предлагаю готовить поток там, ближе к источнику. У вас стоят мощные стойки, у них гигабайты дискового пространства и гигантская вычислительная мощность. Пусть ваша машина возьмет на себя черновую работу.
Алексей поднялся, подошел к чертежу и обвел карандашом средний прямоугольник.
— Не нужно сбрасывать нам сплошную топологию. Пока данные лежат в памяти большой ЭВМ, отсортируйте объекты по слоям и нарежьте на перекрывающиеся координатные окна. Приложите код правил и контрольные суммы, а затем сбросьте готовые пакеты на восьмидюймовые дискеты. Наша «Сфера» получит уже упорядоченный пакет на носителе и не потратит ни такта на предварительную перекладку массивов в памяти.
Громов хмуро посмотрел на схему Гальперина.
— Только не превращайте входной пакет в бухгалтерскую ведомость, — проворчал Евгений. — Номер слоя, координаты, контрольная сумма — и всё. Каждый лишний служебный байт съедает рабочий буфер. Формат нужен короткий, без плавающих полей и вариантов. У нас памяти в обрез.
Кац задумчиво потер подбородок, разглядывая нарисованные квадраты.
— Выглядит уязвимо. — Кац постучал костяшкой пальца по столу. — Дополнительная подготовка массивов на ЕС ЭВМ дает еще одно место для ошибки. Кто проверит, что сформированный пакет верен и не потерял связь с исходной топологией? Программный сбой на большой машине обесценит всю проверку.
Алексей взял карандаш и обвел на ватмане один из нарисованных квадратов, помечая углы.
— Будем сверять по заголовкам. В шапку пакета идут абсолютные координаты, номер слоя, границы окна и контрольная сумма. Машина возвращает отчет ровно с этим же заголовком. Когда вы сводите результаты, все подготовленные порции сверяются заново. Если данные исказились до передачи на малую ЭВМ, сумма участка просто не сойдется.
Беспалов подался вперед, не вставая со стула.
— Допустим, окно вы загрузили, проверили, выгрузили дефекты. Как потом наш тополог состыкует ваш отчет со своим исходным чертежом? Координаты у вас локальные?
— В отчете остаются абсолютные, — мгновенно отозвался Евгений. — Точные привязки к листу, номер слоя, код нарушенного правила и тип ошибки.
Гальперин молча прикинул логику.
— Значит, дубли на границах уйдут при сведении отчета по точным координатам, — проговорил он, возвращаясь к столу и открывая свой блокнот. — Потребуется отдельная программа для нарезки окон и вклейки кодов.
Он сделал в протоколе короткую рабочую запись и подчеркнул ее двойной чертой.
Кац отошел от кульмана и прошелся по комнате.
— Допустим. Окна, перекрытия, предварительная сортировка на большой машине. Но давайте посчитаем календарное время.
Он остановился напротив Морозова.
— Даже если мы нарежем топологию на идеальные порции, полная проверка сложной БИС на одной машине займет сутки, а то и двое, — произнес Кац. — Вы сделаете удобный инструмент, но он намертво свяжет стенд. В реальном производстве ваша красивая схема просто встанет. Никто не остановит процесс на двое суток ради вторичного контроля.
Морозов придвинул к себе четыре чистые картонные перфокарты и выложил их на столе квадратом, имитируя расстановку оборудования на плане цеха.
— А мы не будем считать на одной машине. Когда у нас появится малая серия, поставим три ЭВМ параллельно, и они будут получать разные пакеты. Четвертая ведет контрольный журнал и выдает задания. Первая берет левый край, вторая — центр, третья — правый.
Беспалов нахмурился, разглядывая разложенные картонки.
— Вы хотите гонять массивы координат по линиям связи? — в его голосе прозвучало искреннее сомнение. — Линия мгновенно захлебнется. Даже если гнать на предельной скорости, вы половину машинного времени убьете на пересылку одной только геометрии.
— Нет. Передавать топологию по проводам — значит похоронить затею, — Морозов покачал головой. — Данные загружаются локально. С дискет, которые заранее нарезает и готовит ваша большая машина. По линии связи идут только короткие служебные сообщения диспетчеризации. Обычный коаксиальный кабель, оптронная развязка на концах, чтобы стойки не пожгли друг другу порты. Скорости в пятьдесят шесть килобит для передачи статуса хватит с избытком.
Морозов мысленно усмехнулся: декабрьская идея связать машины в локальную сеть оказалась как нельзя кстати. Саша Птицын во Владимире как раз дописывал для этого кольцевого интерфейса программу надежного обмена.
— Короткие статусы, — пояснил Алексей, указывая карандашом на нижнюю перфокарту. — Взяла сороковой пакет, начала расчет. Пакет готов, найдено две угрозы, жду следующую порцию.
Кац облокотился на стол, нависая над импровизированной схемой.
— Гладко на столе. А как вы отследите отказ? Зависнет процессор, сбои́т память по питанию, и машина замолчит. Вы получите дыру в итоговом отчете и пустите необработанный брак дальше по маршруту.
— Введем тайм-аут, — Морозов сдвинул четвертую перфокарту чуть в сторону, визуально отделяя диспетчера от рабочих машин. — Диспетчер знает, что порция данных должна считаться двадцать минут. Если через двадцать пять ответа нет, статус пакета сбрасывается, и он выдается повторно на резерв. А перед склейкой результата мы сверяем журнал: все ли пакеты, ушедшие из Зеленограда, получили отметку о проверке.
Кац несколько секунд молча разглядывал картонные прямоугольники.
— Схема нахальная, но техническая логика в ней есть. — Он повернулся к Гальперину. — Марк, подготовь для них расширенный учебный массив. И второй набор — что-то близкое к настоящему кристаллу. Нарезать окнами сможешь?
Гальперин кивнул, делая новую пометку.
— Смогу. Мне нужно точное описание формата пакета. Порядок отчета, контрольные суммы, признаки повторного прогона. И структура служебной таблицы правил. — Он посмотрел на Морозова. — Если мы захотим прогнать вашу программу на наших стендах, какие машинно-зависимые обращения придется менять?
— Чтение сектора, вывод на экран, опрос клавиатуры, — сразу ответил Громов. — Эти векторы мы заранее вынесли в отдельные процедуры. Я дам список адресов. Саму логику проверки переписывать не придется.
Беспалов достал свой блокнот.
— Я посмотрю ограничения нашего компилятора, чтобы при переносе кода не вылезли чудеса с библиотеками.
Морозов открыл рабочий журнал и в несколько строк набросал распределение задач: Зеленоград готовит данные и помогает с адаптацией процедур ввода-вывода, а Владимир ставит машину.
Кац забрал со стола схему форматов данных и аккуратно сложил ее пополам. Гальперин рядом начал выписывать список процедур чтения и печати, тихо переговариваясь с Беспаловым о системных вызовах.
Громов потер переносицу и чуть наклонился к Морозову.
— Многомашинный участок, значит, — пробормотал он так, чтобы не слышали зеленоградцы. — Одной программы проверки теперь мало. Придется писать обмен, обработку отказов, очередь. Это еще один слой.
— Придется, — так же тихо ответил Морозов. — И серии из пятнадцати машин нам теперь точно мало. Для такого опыта нужна абсолютно одинаковая комплектация, один порядок проверки и запас ЭВМ под столом. Иначе мы будем искать не ошибки в топологии, а отлавливать расхождения из-за разной элементной базы.
За окном лаборатории начинало темнеть. Морозов защелкнул второй замок портфеля и повернулся к столу, где Гальперин уже заканчивал составлять черновик протокола.