Читаем Перелом (часть 3) полностью

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





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

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

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

Перейти на страницу:

Все книги серии До и после Победы

Похожие книги