-Но зачем такой мощный компьютер так быстро?
-Эй, мы накануне войны, так надо. Приступаем к работе прямо сегодня, не теряем и минуты, заканчивайте свои дела, и принимайте руководство новенькими. И ребята, это будет наш первый компьютер размером с небольшую комнату, ясно? Он будет стоить миллионы долларов и станет особо важен для США, постарайтесь на славу.
Мы ушли с аудитории, и несколько консультантов по дешифровке задал мне вопрос.
-Зачем столь мощный процессор и такая большая оперативная память? Я полагал, что для дешифровки потребуется малый компьютер. Нам нужно расшифровать Энигму как можно быстрее, нам не нужна такая супермашина, было бы достаточно варианта мини, что вы делаете за пару недель.
-Создать процессор здесь будет не так сложно, это неделя работы. Но вы заблуждаетесь, количество операций, что потребуется для дешифровки Энигмы очень велико, и оперативной памяти будет остро не хватать. Вы неверно оцениваете требуемое количество операций и памяти для дешифровки, на самом деле 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 байт, вполне может сначала параллельно выполнить два умножения на разных микрочипах, а потом сложить. В длинных уравнениях влияние этого фактора становится ещё важнее. Другое дело, что такой вариант задачи чуть сложнее, и люди идут по простому пути, заставляя компьютер считать всё последовательно в однозадачном режиме, я стараюсь бороться с такими отклонениями.
-Ну, вы великий разработчик компьютеров, предтеча, логично, что простые люди не способны понять глубоко ваш труд. Вы много времени работали над ним, и придумали эти механизмы сами. А, как известно, придумать и разработать самому гораздо проще, чем понять чужой сложный математический бред.
-Да, со сложной математикой это действительно так. Но, тем не менее, факт остаётся фактом, архитектура обмена данными внутри компьютера сильнейшим образом влияет на его производительность, и, увы, часто поиск информации занимает больше половины самих расчётов компьютера, и бороться с этим сложно. Что и накладывает пределы для компьютеров разных модификаций, в том числе по объёму видимой памяти. Однако, очевидно одно, при одинаковой скорости работы процессора, производительность может различаться во много раз, и не только за счёт расширения базовых функций работы процессора, но и за счёт архитектуры построения данных. Впрочем, система построения данных в работе компьютера это одна из наиболее сложных для понимания составляющих.
-Спасибо, я малое понял, но мне интересно было вас послушать год, только вот я думал, что количество бит процессора это наоборот количество ячеек оперативной памяти, что тот видит.
-Тут как бы и количество, и объём ячеек. Я так и сказал. Ведь вы можете взять блок оперативной памяти на 64 килобайта и разбить его на максимально дозволенное количество кластеров, а может взять 128, будет всё тоже самое, но ячейка вырастит вдвое. Увеличение битности процессора и увеличение размера ячейки позволяет видеть процессору больше оперативной памяти. Но оба параметра снижают производительность, для её повышения необходимо понижать и биты процессора, и размер ячейки, для чего нужно увеличить число ступеней кластеров, разбивать не всю систему на одинаковые кластеры. А делать ступенчато, внутри большого кластера маленькие, это не так трудно для понимания. А так вообще, процессор должен быть заранее настроен на размер кластера оперативной памяти, иначе он просто не сможет работать. Как вариант решения проблемы высокой битности процессора и более быстрого поиска данных в заглавии процессора может являться создание многоядерных процессоров, где у каждого ядра каждого процессора собственный список для работы с оперативной памятью. При этом, возможно два варианта многоядерности, первый когда каждое ядро процессора работает с собственным куском оперативной памяти, и второй когда списков четыре, но оба касаются всего объёма оперативной памяти.
-То есть многоядерный процессор, это когда несколько процессоров? Которые способны решать задачи параллельно?
-Нет, не совсем, количество задач, которое одновременно способен решать процессор обеспечивается количеством микрочипов и оно может быть любым. В принципе количество микрочипов в одноядерном процессоре может быть даже большим, чем, например в 4х ядерном. Хотя по логике развития отрасли, многоядерные процессоры, конечно, должны иметь больше микрочипов на четыре ядра, чем одноядерные, но это необязательно. По факту, количество одновременно выполняемых процессором операций обусловлено лишь количеством микрочипов, если захотеть, даже одноядерный процессор можно сделать из куда большего количества микрочипов, чем 4х ядерный. Например, если вы сделаете один одноядерный процессор из 2048 микрочипов, а другой четырёхядерный 64х4 микрочипа, то есть 256, логично, что в данной ситуации одноядерный сможет выполнять гораздо большее число задач одновременно. Количество одновременно выполняемых процессором операций обусловлено его кэш памятью первого уровня и числом микрочипов в ядре, а не количеством ядер. Поэтому в принципе, с точки зрения нагрузки, при идентичной скорости ядер, чисто гипотетически, одноядерный процессор, может выполнять во много раз больше операций, чем даже 128 ядерный, если только количество микрочипов в одноядерном будет больше, чем в 128 ядрах в сумме. Однако, увеличение количества ядер процессора может быть продиктовано попыткой повысить производительность работы процессора с большим объёмом оперативной памяти, ускорить поиск ячеек, в случае если тех станет слишком много и электронная отрасль упрётся в тупик. Поскольку, дальнейшее повышение бит в процессоре выше 64х тоже начинает вызывать проблемы. Правда в принципе, достаточно мощный и быстрый процессор супер далёкого будущего чисто гипотетически может поддерживать и 4096 бит, просто при этом, 95% его вычислений будет теряться на поиск ячеек, но такое понадобилось бы, если бы кто-то решил создать суперкомпьютер на миллиарды гигабайт оперативной памяти. А столь мощный компьютер может потребоваться для симуляции чего-либо очень сложного. Но повышение битности процессора выше 64х это глупость и тупик. Я бы сделал всё иначе, гораздо более верный шаг, повышение производительности кластерной системы, создание второго уровня кластеров или даже третьего, а не многоядерность процессора, и я бы не стал повышать количество бит процессора выше 16ти. И всё же многоядерность процессора, это тоже, какой никакой вариант, способ повышения производительности работы с потоками данных, правда, я думаю на него можно пойти лишь от глупости и бессилия.