-Но зачем такой мощный компьютер так быстро?
-Эй, мы накануне войны, так надо. Приступаем к работе прямо сегодня, не теряем и минуты, заканчивайте свои дела, и принимайте руководство новенькими. И ребята, это будет наш первый компьютер размером с небольшую комнату, ясно? Он будет стоить миллионы долларов и станет особо важен для США, постарайтесь на славу.
Мы ушли с аудитории, и несколько консультантов по дешифровке задал мне вопрос.
-Зачем столь мощный процессор и такая большая оперативная память? Я полагал, что для дешифровки потребуется малый компьютер. Нам нужно расшифровать Энигму как можно быстрее, нам не нужна такая супермашина, было бы достаточно варианта мини, что вы делаете за пару недель.
-Создать процессор здесь будет не так сложно, это неделя работы. Но вы заблуждаетесь, количество операций, что потребуется для дешифровки Энигмы очень велико, и оперативной памяти будет остро не хватать. Вы неверно оцениваете требуемое количество операций и памяти для дешифровки, на самом деле 256 килобайт будет очень мало. Из всех параметров, лишь скорость процессора является достаточной для данного вида работ. Менее мощный в плане памяти компьютер просто не сможет работать над задачей вовсе. Придётся выполнять множество операций в многозадачном режиме, и главное препятствие тут это нехватка оперативной памяти. Увы, до сих пор работы с особо малыми чипами ведутся почти вручную, с использованием крайне простой оснастки, так что всё не так радужно. А что касается сорока мегабайт постоянно памяти, то их может даже и не хватить. Но сделать восемь крупных устройств памяти не так сложно, самым большим препятствием является оперативная память. Одно могу сказать, я заложил в проект самый мощный компьютер из того, что мы сможем создать за три четыре месяца. К весне 1941ого года компьютер будет готов, и мне потребуется ещё около трёх месяцев на то, чтобы запрограммировать его и наладить систему взаимодействия данных, последнее не менее важно.
-Поясните?
-Калькуляторы прошлого не умеют находить нужную информацию кратким путём. Они обычно просто сканируют весь диск, пока не найдут то что надо, или вовсе считывают данные подряд с магнитной ленты. Работая с большими объёмами памяти в многозадачном режиме, нельзя пролистывать всю информацию целиком, требуется уметь находить нужную информацию, и в этой области я сильно продвинулся, но пока чисто теоретически.
-И как же вы решите этот вопрос?
-Я разбил каждый диск объёмом в 5 мегабайт на кластеры по 2 килобайта каждый. Итого на диске 2500 кластеров. А саму информацию я разбил на файлы, и разные файлы могут занимать разный объём, в том числе несколько кластеров. В заглавии диска находится контрольный кластер объёмом 8 килобайт, в нём имеется полный список файлов и кластеров. Программа не может в режиме онлайн отслеживать, где лежит каждый файл, но чётко может определить по номеру положение любого кластера. Это новая форма работы с массивом информации, без которой функционирование компьютера было бы невозможно. При этом, немного похожая система используется и для поиска информации в оперативной памяти, но там кластеры намного меньше, и объём одного кластера составляет восемь байт. В заглавии кэш памяти компьютера имеется 4х битный список всех ячеек оперативной памяти, и он настраивается заново при каждом включении компьютера. И этот процессор четырёхбитный. Недостатком данной системы является тот факт, что сколь бы не был мал размер операций, компьютер может работать только с ячейкой памяти не менее 8ми байт, обрабатывая её полностью, на что тратится лишняя оперативная память компьютера и операции. Это большой математический недостаток моей системы, избавиться от которого я не смог. Опираясь на этот список кластеров оперативной памяти, процессор ищет свободные ячейки, и знает где что происходит. При этом, заглавие оперативной памяти у процессора это очень сложное устройство и на работу с ним уходит от 5% до 75% мощности процессора, смотря какой тип операций выполняется. То есть четверть всей работы процессора это поиск где чего происходит, а не сама полезная работа, но без этого никак. При этом, данный конкретный процессор который я создам в принципе не способен увидеть более 256 килобайт оперативной памяти. В связи с чем, позже добавить оперативную память в этот компьютер будет нельзя, меньше 256 килобайт оперативной памяти можно, больше нельзя. Хотя если поменять размер ячейки оперативной памяти, увеличив её, например, до 16 байт и перенастроив процессор, тогда тот сможет увидеть 512 килобайт, но тогда придётся выбросить остальную оперативную память, что составляет 80% стоимости компьютера. При этом если бы процессор был сделан изначально как 8ми битный, он тратил бы больше системных ресурсов на поиск того же количества ячеек, из-за чего я постарался найти золотую середину между мощностью процессора, объёмом оперативной памяти, битами процессора и размером ячейки памяти. В будущем для обеспечения взаимозаменяемости компонентов надо будет стандартизировать размер ячейки оперативной памяти и структуру заглавия каждого процессора по поколениям, 4бит, 8бит и 16бит.
-А как можно повысить количество доступной оперативной памяти на будущих компьютерах?
-Для этого нужно увеличить минимальную ячейку с которой работает процессор с 8 байт до 16 байт, в этом случае количество доступной оперативной памяти вырастит вдвое, а увеличение битности процессора может увеличить видимую оперативную память до 4х или 8ми мегабайт, поскольку увеличение бит процессора позволит в 16 или в 64 раза увеличить список кластерного заглавия. Однако, если 8 битный процессор увидит больше оперативной памяти, то он будет тратить в два раза больше процессорной скорости на поиск ячеек, и его производительность в работе с маленькими файлами и короткими операциями сильно упадёт. В связи чем, надо стремиться к тому, чтобы битность процессора была минимальна, как и размер кластера оперативной памяти. Однако, в будущем, увеличивая объёмы оперативной памяти, нам неизбежно придётся увеличивать число бит процессора и объём минимально используемой ячейки. При этом процессор уровня 64х бит, сможет видеть порядка 8, 16, 64, 128 или даже 192 гигабайт оперативной памяти. В зависимости от структуры его кластерного заглавия и величины ячейки, при этом я бы не стал расширять кластерное заглавие оперативной памяти и размер ячейки до предела, поскольку это также снизит скорость работы, поскольку процессор будет перебирать слишком много вариантов ячеек в поиске нужной ему ячейки памяти. Ведь чем длиннее список кластеров памяти, тем дольше компьютер ищет там нужный ему кластер. А эти задержки на поиск длительностью в миллионные доли секунд, на каждый такт, часто неимоверно снижают производительность работы компьютера, особенно если речь идёт о работе с большим количеством мелких цифр. Я думаю, при превышении количества бит процессора выше 32х, или при работе более чем с 256 мегабайтами оперативной памяти, было бы разумно в будущем перейти к двухступенчатой или двухэтажной системе обработки данных ячеек оперативной памяти. Когда имеется заглавие списков кластеров, дальше осуществляется переход к отдельному списку кластеров, внутри которого ещё раз ищется нужный кластер. С тем чтобы не пришлось и дальше увеличивать минимальный объём ячейки оперативной памяти, организовать кластерную систему так, чтобы вся система была разбита на крупные кластеры, внутри каждого из которых будет собственное заглавие и список мелких кластеров. Однако, такая система удел далёкого будущего, и станет актуальна лишь после того как процессоры шагнут за 16 бит, а объём рабочей оперативной памяти превысит 64 мегабайта и тогда я изменю архитектуру работы с данными. Двухэтажная система хранения данных позволила бы 16 битному процессору видеть тысячи гигабайт оперативной памяти и работать с большими массивами данных, включая мелкие цифры в тысячи раз быстрее. Так можно радикально не меняя конструкцию компьютера и не увеличивая скорость микрочипов достичь стократного прироста производительности. Поскольку в неэффективной системе работы с большими массивами данных до 95% работы процессора может расходоваться на поиск нужной ячейки данных, а не на совершение операции. К тому же реализовать такую двухэтажную систему сложно, и для этого надо глубоко понимать, как и почему работает компьютер, как в нём осуществляется поток данных. На практике, я стал замечать, что многие мои сотрудники, понимая в целом устройство отдельных микрочипов, назначение видеокарты и оперативной памяти, тем не менее, не понимают достаточно глубоко, как осуществляются процессы в архитектуре данных. И это непонимание проявляется с самых разных сторон. Из-за чего в частности страдает многозадачный режим, поскольку многие потоки данных пускаются по очереди, когда можно сначала выполнить действия по отдельности, ну, например, складывая х*х+у*у, логично, что можно умножить иксы и игреки отдельно, а потом уже сложить, при этом умножение иксов и игреков будет выполняться разными микрочипами одного процессора одновременно. Имея в ядре процессора множество микрочипов, несложно раскладывать любые уравнения на составляющие операций, и выполнять их покусочно, а потом складывать, но так сложнее. Итого при правильной организации работы процессора, по времени получится две логических операции одно умножение и одно сложение. На деле криворукие люди, пытаясь программировать компьютер, часто делают три логических операции, два умножения последовательно, потом сложение. Хотя даже один процессор с кэш памятью на 256 байт, вполне может сначала параллельно выполнить два умножения на разных микрочипах, а потом сложить. В длинных уравнениях влияние этого фактора становится ещё важнее. Другое дело, что такой вариант задачи чуть сложнее, и люди идут по простому пути, заставляя компьютер считать всё последовательно в однозадачном режиме, я стараюсь бороться с такими отклонениями.