Нон-конформизм в процессорах

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

В современных процессорах "-0" выброшен из возможных значений числа (отрицательные числа сдвинуты на числовой оси в сторону нуля), а в современных СУБД равенство поля "null" кодируется отдельным битом в специальной системной колонке, т.е. за пределами собственно поля. Однако записи обрабатываются чаще, чем массивы, поэтому резонно вернуть "-0" и кодировать им "null". Кроме того, при серии сложений и вычитаний, чтобы не потерять точность результата, нужно выполнять операции с числами примерно одинакового модуля и, значит, предварительно их отсортировать, а при отсутствии сдвига отрицательных чисел по оси не нужно при обращения знака добавлять или вычитать единицу.

Умножение и деление не выполняются напрямую, т.к. занимают квадратичное количество времени - вместо них выполняются цепочки операций БПФ-сложение-оБПФ и БПФ-вычитание-оБПФ (оБПФ - обратное БПФ, время выполнения Быстрого Преобразования Фурье есть логарифм от длины операнда). Если одно число участвует в нескольких умножениях или делениях подряд, а операции отделены друг от друга сменой содержимого кэша команд или кэша данных, то оптимизатор процессора не может обнаружить лишнюю под-последовательность БПФ-оБПФ (обычно он не может ее обнаружить и без смены содержимого кэшей). Изъятие из процессоров команд умножения и деления и добавление явной команды БПФ позволит сократить набор команд и время выполнения программы, удалить из процессора участок оптимизатора и возложить его роль на компилятор ценой некоторого увеличения длины сегмента кода. Эта цена ляжет на винчестеры, которые и так уже стали безразмерными, а для кэша команд приведет не к потребности его увеличения, а к более быстрому движению команд в нем и более частому обращению за новой порцией к шине, которая простаивает в перерывах между циклами наполнения кэшей.

Возможны две конструкции сумматора. При первой он хранит результат вычислений, и одна команда может просуммировать целую последовательность чисел, находящуюся в ней - вариант упаковки см. в статье "Унификация протоколов в единый" (КВ №17'2010). Но конечная разрядность такого устройства делает невозможным суммирование чисел произвольного размера. При второй проточной конструкции быстрее вычисления, т.к. слагаемые поступают одновременно, а не последовательно; но нужно три кэша (два для аргументов и один для результата; или два, один из которых двухшинный; или один, но трехшинный), а при сложении двух векторов нужна синхронизация извлечения их элементов. Однако полученное часто проходит через БПФ, а в нем все биты результата зависят от всех битов аргумента, так что без локальной памяти не обойтись, а значит БПФ-преобразователь работает только с числами ограниченного размера - т.е. сомножители все равно произвольного размера не будут. Какую бы конструкцию выбрали вы?

ОСы допускают выполнение произвольного бинарного кода, полученного с другого компьютера, а схемотехники расставляют в процессоре всевозможные ловушки, чтобы обнаружить и остановить выполнение вредоносных байтов. Эти ловушки, а также прерывание трассировки, можно выбросить из процессора, если копировать с компьютера на компьютер исходный текст, а затем компилировать его при попытке выполнить (или заранее в свободное у процессора время, которое сейчас почему-то дарят транснациональным корпорациям через всемирную паутину для их обогащения). Бинарный код никоим образом не защищает коммерческого разработчика, т.к. использовать его научились уже и хакеры, и служащие. В то же время компиляция текста занимает тем меньше времени, чем более крупные массивы информации обрабатываются одним оператором языка - операторы вызывают предварительно скомпилированные и входящие в состав ОС процедуры; а компиляция на месте позволяет отказаться не только от защищенного режима, но и от регистров сегментов и суммирования сегментов и смещений.

 

Видеопамять должна исчезнуть, поскольку электронная бумага хранит изображение без питания. Вслед за ней следует отказаться от GPU и PPU и возложить их функции на непомерно разросшийся CPU, который уже сейчас представляет собой по сути массив процессов, или как принято говорить "ядер". Таким образом переходим к прямой передаче данных из чистокровного (!) CPU на электронную бумагу. Внесение в ней в каждый пиксел одного дополнительного бита позволит заполнять замкнутые контуры: пиксел с установленным битом сравнивается с соседними, и если у них бит не установлен и цвет отличен, то его цвет копируется в них. Это позволяет передавать с процессора не все точки фигуры, а только ее контур (что сводит двумерную задачу к одномерной) и одну точку внутри него, что экономит пропускную способность шины.

С той же целью для каждого отрезка или просто монотонного участка, составляющего контур, можно передавать координаты одного его конца, бит выбора оси OX или OY в качестве ведущей (по которой координаты соседних точек всегда отличаются на единицу), бит выбора направления вдоль этой оси и последовательность нулей и единиц, которые указывают, отличается ли на единицу или остается той же координата по другой оси. Эти последовательности генерируются, например, алгоритмом Брезенхема для рисования кривых и отрезков. Обратите внимание, по мере роста разрешающей способности бумаги размер координат в байтах увеличивается, а с ним растет и потребность в пропускной способности шины. И мы мало того, что обе координаты каждой точки контура заменяем на один бит, так еще и останавливаем упомянутый тренд.

Сборка компьютера как детского конструктора подразумевает не заводскую предопределенность разветвления шин, а произвольное соединение самим человеком-сборщиком. Для этого требуется расположение на самой шине непрограммируемого контроллера с циклическим приоритетом (дабы чипы не имели преимуществ друг перед другом - ведь не известно заранее, что будет соединено). Для каскадного соединения входы контроллера должны иметь веса, пропорциональные количеству устройств, подключенных к данному входу. Вес показывает, сколько пакетов должно пройти через данный вход, прежде чем произойдет поворот кольца приоритетов (т.е. каждый вход оборудован счетчиком пакетов). Веса должны выставляться шестеренками на самом контроллере - как кодовый замок на дипломате или в автоматической камере хранения - и изменяться по степенному закону, где под показателем степени находится количество входов контроллера: например, если входов 10, то возможными значениями веса являются 1, 10, 100 и т.д.

Если CPU в многопроцессорном компьютере, обращаясь даже к своей памяти, использует в машинной команде два адреса - номер процессора и смещение ячейки; если процессоры являются одновременно марштуризаторами с таблицами роутинга; то идентификатор процессора становится некоторым аналогом идентификатора сегмента данных, а команды в сегменте кода не зависят от того, расположены ли используемые ими данные в памяти того же процессора или другого. Это дает возможность изменять количество процессоров в компьютере без повторной компиляции как ОС, так и прикладных программ.

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

Дмитрий ТЮРИН,
dmitryturin.narod.ru

Версия для печатиВерсия для печати

Номер: 

03 за 2011 год

Рубрика: 

Размышлизмы
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!