Страница произведения
Войти
Зарегистрироваться
Страница произведения

До и после Победы. Книга 3. Перелом. Часть 3


Статус:
Закончен
Опубликован:
18.05.2018 — 21.11.2018
Читателей:
2
Аннотация:
Вынесено начиная с главы 51 - бои в Киеве и далее. 15.11.2018 - половина текста вынесена в Часть 4. 13.11.2018 - добавлено 0,5 главы 56 += 12к 11.11.2018 - добавлено 0,5 главы 55 += 11к 08.11.2018 - добавлено 0,5 главы 55 += 11к 05.11.2018 - добавлено 0,5 главы 54 += 11к 02.11.2018 - добавлено 0,5 главы 54 += 13к 30.10.2018 - добавлено 0,5 главы 53 += 12к 27.10.2018 - добавлено 0,5 главы 53 += 11к 24.10.2018 - добавлено 0,5 главы 52 += 11к ...
Предыдущая глава  
↓ Содержание ↓
  Следующая глава
 
 

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

Вот под эти работы я и выделил еще одну ЭВМ, уже для лаборатории высоких давлений. По моим расчетам, ее должно было хватить на обслуживание пары десятков устройств — если на них выполнялись однотипные эксперименты, то программа — одна на всех, а параметров-то и надо десяток-другой — так что должно было хватить 256 байт, что были на ней установлены — еще на дискретных конденсаторах. Потом подумали и добавили еще один такой блок. Работа закипела, разве что я в самом начале подкорректировал связку с устройствами, а то экспериментаторы начали было вести к каждому устройству и датчику отдельные пучки проводов. Они и сами уже начинали понимать что "что-то тут не то", так что моя идея шины легла на благодатную почву. Ну а потом я еще раз их подправил, когда предложил использовать не параллельную, а последовательную шину, и не на потенциальных сигналах, а на токовой петле — по своему времени я помнил, что на такие сигналы в моем времени переводилось все что только можно — тут и помехоустойчивость, и скорость работы. Так что к началу мая на компьютере крутился бесконечный цикл, который опрашивал устройства, точнее — регистры их датчиков, отсылал нужные значения в регистры и на исполнительные устройства, и переходил на ту ветку команд, которая требовалась для конкретного устройства в зависимости от его текущего состояния и значений датчиков — тут главное было следить, чтобы время выполнения веток не мешало вовремя опрашивать последующие устройства, чтобы опрос до них добирался не позднее некоторой величины — эдакая реал-тайм псевдо-операционка, построенная на большом цикле.

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

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

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

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

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

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

То есть по сути для выполнения одной команды требовалось выполнить две — ну, за исключением команд перехода — там счетчик команд складывался со смещением и результат помещался в счетчик команд. Работа шла почти в два раза медленнее. Вот это узкое место и расшили добавлением отдельного сумматора — теперь выполнение операций в АЛУ и вычисление адреса следующей команды шло параллельно — обработка команд АЛУ и загрузка-выгрузка регистров ускорились в два раза, а выполнение программ — минимум в полтора — все-таки некоторое количество команд было переходами. Загрузка-выгрузка также ускорились потому что теперь для инкремента счетчика команд не требовалась шина РОН-АЛУ, тогда как ранее сначала по ней шли данные в или из регистров, и только затем — вычисление адреса следующей команды. Причем этот сумматор использовался из той же схемы, что и новый блок умножения-деления — его и делали-то на сдвиговом регистре и на том самом сумматоре — если в очередном разряде множителя стоит единица — множимое и сдвинутый множитель суммируются, а если ноль — множитель просто сдвигается — мы такие схемки, помнится, рисовали в институте на третьем курсе. Работало почти так же, как и в программной реализации умножения, выигрыш был в отсутствии затрат времени на дешифрацию команд сдвига, проверки бита на ноль, суммирования с переполнением, проверки на ноль всего множителя и перехода в начало цикла, если он не ноль — все это делалось теперь аппаратно и скорость умножения многократно возросла даже при отсутствии матричного умножения. Да и деление стало работать тоже быстрее. Вот на этом сумматоре и сделали программный счетчик — при этом если выполнялась операция умножения или деления, то выигрыша от такого переноса не было, но сами эти операции были медленными, так что не страшно. А вот для остальных операций вычисление адреса и выполнялось параллельно с самой операцией.

И резервы для ускорения работы были — так, даже после введения программного счетчика операции обычно занимали четыре такта из-за общей шины регистров — сначала по ней передавался первый операнд, с следующем такте — второй, в третьем (и порой четвертом, пятом — если суммирование было без схемы быстрого переноса) шло выполнение самой операции, в четвертом (или еще большем) результат передавался по шине в один из регистров. В новых-то процессорах поступление данных из РОН на АЛУ выполнялось одновременно, так как было две шины и два набора дешифраторов адреса регистра, ну а запись обратно в регистры — на следующем такте по одной из шин — мы по мере поступления все большего количества микросхем понемногу расшивали такие узкие места. Причем эти места проистекали и из структуры команд. Так, мы применяли команды с двумя регистрами — результат всегда помещался в первый регистр-источник, то есть перезаписывал один из операндов. Если бы мы применили трехоперандную схему — с отдельным указанием регистра, в который помещать результат, то в принципе можно было бы сделать отдельную шину для записи результата. Но это, во-первых, заставило бы перейти на более длинные команды (а это потребует больше памяти) или уменьшить количество регистров (а это уменьшит возможности по оптимизации программ), а во-вторых, в дальнейшем все это можно будет развести по промежуточным регистрам, что все-равно потребуется делать с прицелом на конвейеризацию. Разрулим. В крайнем случае — сделаем как Интел — внешние команды перетранслируются во внутренние, а уж их можно делать какими угодно.

И, замечу, все эти улучшения были бы невозможны, возведи мы предельный уровень секретности по вычислительной технике. Нет, и сейчас все было строго — микросхемы получали только работники с нужным допуском, безопасники записывали типы и номера микросхем в журнал выдачи/возврата, а после установки в аппаратуру — в журнал установки микросхем. Сами шкафы с микросхемами опечатывались, а если работы шли на "открытом теле", как в данном случае — выполнялась ежедневная сверка микросхем с журналом, да и корпуса периодически инспектировались. Но "главными" в этом процессе были работники, а не безопасники — последние занимались только регистрацией и проверками, но не решали — кому что можно, а кому — нельзя — это решал только допуск, который также был поделен на несколько уровней — в зависимости от степени интеграции и вида микросхем — но тут мы наверное несколько перемудрили — пока ввели это на всякий случай и возможно позднее отменим. Или нет — посмотрим. У безопасников была мысль ввести безопасные комнаты, в которые работники могли входить только после переодевания, а выходить — только после сдачи одежды и внешнего осмотра. Но тут уже я воспротивился — выломать чип и сунуть под язык не так уж и сложно, а ковыряться пальцами во рту — тоже не поможет — в крайнем случае можно и проглотить. Так что такие строгости только обозлят работников, но ни от чего не уберегут.

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

Так что шина связи с установками развивалась — собственно, это была почти что сеть, только с мастер-хостом, который и управлял всей деятельностью сети — лабораторные установки могли выдать данные в сеть только после получения от хоста своего номера и команды "выдать данные". И это был не предел улучшений. Так, в августе начали мудрить с прерываниями от таймера, а то высчитывать время по количеству исполненных команд — это сложновато, приходилось и вставлять пустые циклы (а при этом надо учесть и количество тактов на выполнение команд для расчета длительности самого цикла !), и прерывать расчетные циклы (а при этом часть времени цикла приходилось тратить на проверку — а не пора ли его прервать, чтобы успеть опросить очередное устройство !). Так что с таймером была надежда, что как минимум от этих расчетов удастся избавиться — занес в регистры таймера адрес для перехода, количество тиков, запустил таймер — и спокойно считай что там надо или выводи на печать, а когда таймер дотикает — он сохранит текущий адрес операций и поместит в регистр команд сохраненный в таймере адрес — и начнется обработка прерывания по таймеру — тут еще требовался флаг с признаком, что находимся в обработчике прерывания, чтобы при возврате из него восстановить предыдущую последовательность — а это снова команды восстановления регистров и передачи управления. Да и с вложенными таймерами надо было что-то делать — но тут я полет мысли уже остановил — получалась сложная схема управления прерываниями, а над ней работал отдельный коллектив. Так что пока просто ограничим количество одновременно поддерживаемых установок — и все, для того, чтобы попробовать новые технологии этого вполне хватит. И так уже память нарастили до двух килобайт, заменив блоки памяти на дискретных конденсаторах блоками памяти уже на микросхемах по 64 бита каждая. И по расчетам, если ограничиться только операциями считывания с перфоленты, отправки данных в установки, считывания оттуда показателей, сравнение и отправку других показателей при необходимости, а также вывод на перфоленту или на цифровое печатающее устройство, то даже эта ЭВМ могла поддерживать более тридцати установок, пусть и без расчета графиков изменения значений — этим пока могут заниматься и аналоговые вычислители самих установок. Ну а если с расчетом графиков — то штук пять, не более. Но вот если поставить ЭВМ хотя бы следующего поколения, то она сможет рассчитывать графики уже для двадцати лабораторных установок. И, наверное, уже зимой исследователи получат новую машину.

123 ... 1516171819 ... 414243
Предыдущая глава  
↓ Содержание ↓
  Следующая глава



Иные расы и виды существ 11 списков
Ангелы (Произведений: 91)
Оборотни (Произведений: 181)
Орки, гоблины, гномы, назгулы, тролли (Произведений: 41)
Эльфы, эльфы-полукровки, дроу (Произведений: 230)
Привидения, призраки, полтергейсты, духи (Произведений: 74)
Боги, полубоги, божественные сущности (Произведений: 165)
Вампиры (Произведений: 241)
Демоны (Произведений: 265)
Драконы (Произведений: 164)
Особенная раса, вид (созданные автором) (Произведений: 122)
Редкие расы (но не авторские) (Произведений: 107)
Профессии, занятия, стили жизни 8 списков
Внутренний мир человека. Мысли и жизнь 4 списка
Миры фэнтези и фантастики: каноны, апокрифы, смешение жанров 7 списков
О взаимоотношениях 7 списков
Герои 13 списков
Земля 6 списков
Альтернативная история (Произведений: 213)
Аномальные зоны (Произведений: 73)
Городские истории (Произведений: 306)
Исторические фантазии (Произведений: 98)
Постапокалиптика (Произведений: 104)
Стилизации и этнические мотивы (Произведений: 130)
Попадалово 5 списков
Противостояние 9 списков
О чувствах 3 списка
Следующее поколение 4 списка
Детское фэнтези (Произведений: 39)
Для самых маленьких (Произведений: 34)
О животных (Произведений: 48)
Поучительные сказки, притчи (Произведений: 82)
Закрыть
Закрыть
Закрыть
↑ Вверх