На ArsTechnica вышла статья про забытый ныне комп AN/FSQ–7 который был мозгом распределённой сети противовоздушной обороны SAGE в США (англ.): https://arstechnica.com/science/2022/01/the–most–important–computer–youve–never–heard–of/ Однако быстро находится и статья на хабре с общим описанием интересностей: https://habr.com/ru/post/174845/ Из неё я процитирую самые понравившиеся части: Вот такой вот циклопический монстр пожиравший до трёх мегаватт существовал. Я же не мог пройти мимо архитектуры этой эпической машины и она тоже нашла чем удивить. Теорию программирования на нём можно почитать тут (англ.): http://www.bitsavers.org/pdf/ibm/sage/3–112–0_Theory_Of_Programming_Apr59.pdf Видно, что некоторые особенности дизайна IBM потащит в следующие свои серии компьютеров — в частности инструкцию Clear and Add. Память машины могла состоять из двух банков по 65536 32–битных слова (плюс незримый бит контроля чётности). Архитектура классическая на то время — аккумулятор–память. Кодирование инструкций делило 32–битное слово на две части: 15 бит на код операции и 17 бит на выбор слова с которым работает аккумулятор. По сути 17–ый бит и выбирал один из двух банков памяти. В большинстве инструкций адрес памяти мог быть индексирован одним из четырёх индексных регистров или правой половинкой аккумулятора. Но вот 32–битные слова как данные тоже делились на две независимых части: 16 бит в каждой. Бит знака + 15 бит числа. Эти половинки назывались левой и правой соответственно. И они были реально независимые: и аккумулятор тоже состоял из двух половинок и в такой операции как сложение ADD они складывались параллельно. Таким образом этот дизайн в какой то степени предвосхищает самый настоящий SIMD! Чтобы загрузить в аккумулятор ячейку памяти используется инструкция Clear and Add (CAD) — и она действительно честно зануляла аккумулятор и потом выполняла сложение его с ячейкой памяти — это подчёркивается в документации. Сейчас такое известно как MOVE, но IBM еще использует тот же принцип в других своих машинах которые я обозревал тут ранее. Есть пара Clear and Sub (CSU) — по сути загрузка с инверсией знака. Фактически это частные случаи обычных ADD и SUB, но надо помнить что тут идёт параллельная обработка двух данных сразу (и шкафов с арифметическим устройством было реально два вроде). Инструкция Full Store (FST) сохраняла аккумулятор в память — опять таки обе половинки откуда и Full в названии. Однако для скалярных операций были инструкции Left Store и Right Store (LST и RST) которые сохраняли в память только левую или правую часть аккумулятора не затрагивая другую. Еще интереснее были арифметические инструкции Twin and Add и Twin and Sub (TAD и TSU) — они складывали или вычитали обе половинки аккумулятора только с левой частью слова в памяти. Условные переходы в связи с этим всем были тоже богаче на варианты — BLM означало не black lives matter, а branch (if) left is minus и переходило по адресу если левая половинка аккумулятора была меньше нуля. Была пара — BRM где проверялась уже правая половинка аккумулятора. Были так же BFM (branch on full minus) и BFZ (branch on full zero) которые совершали переход если обе половинки аккумулятора были меньше нуля или равны нулю. Конечно же есть инструкция для модификации адресной части инструкции: Add One Right (AOR). Она инкрементирует адресную часть слова в памяти подразумевая, что это инструкция (оно 17–битное, т.е. затрагивается один бит в левой части) и сохраняет обратно. И хотя в машине уже были индексные регистры, но вот любили инженеры технику самомодификации и долго еще её тащили и в последующие машины IBM. Еще в базовых инструкциях есть загрузка индексных регистров (XIN) и декремент индексного регистра с переходом по выбранному адресу, если он еще положителен (BPX). Ну и есть еще куча инструкций типа более изощрённых операций с индексами или умножение/деление, но общие принципы уже вырисованы. SIMD в 1955 году!