Сергей Суханов - Перелом. Часть 3 [СИ]

Тут можно читать онлайн Сергей Суханов - Перелом. Часть 3 [СИ] - бесплатно полную версию книги (целиком) без сокращений. Жанр: Альтернативная история, год 18. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.

Сергей Суханов - Перелом. Часть 3 [СИ] краткое содержание

Перелом. Часть 3 [СИ] - описание и краткое содержание, автор Сергей Суханов, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru
Большинство нормальных попаданцев, оказавшись в сорок первом, стараются попасть к Сталину и помочь переломить ход войны. Вот только как к нему попасть? И надо ли вообще это делать…?

Перелом. Часть 3 [СИ] - читать онлайн бесплатно полную версию (весь текст целиком)

Перелом. Часть 3 [СИ] - читать книгу онлайн бесплатно, автор Сергей Суханов
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

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

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

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

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

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

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

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

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Сергей Суханов читать все книги автора по порядку

Сергей Суханов - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Перелом. Часть 3 [СИ] отзывы


Отзывы читателей о книге Перелом. Часть 3 [СИ], автор: Сергей Суханов. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x