Каким должен быть язык программирования? Анализ и критика Описание языка Компилятор
Отечественные разработки Cтатьи на компьютерные темы Компьютерный юмор Новости и прочее

О неулучшаемой архитектуре процессоров

Читая интервью Бориса Бабаяна, обратил внимание на его фразу о «неулучшаемой архитектуре процессора». Можно ли сделать такую? Чтобы после её изобретения наступил теоретический тупик? Да, занятная задача.

Цитирую одного из «отцов» Эльбруса:

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

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

Многие года гонка процессоров шла только в одном направлении — кто быстрее. Достичь большей производительности стремились любой ценой. Ради этого можно было пойти на всё: и на огромную потребляемую мощность, и на жидкостное охлаждение, и на цены с шестью нулями.

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

Есть так же архитектуры, которые выбрали «золотую середину», они борются за хорошую производительность при хорошей энергоэффективности.

К первому направлению (с известными допусками и условностями) можно отнести архитектуру x86, ко второму — ARM, к третьему — MIPS. В этой статье пойдёт речь о первом направлении развития — скорости исполнения.

Во времена учёбы в альма-матер у нас была курсовая работа, посвящённая проектированию отдельных узлов процессора, выполняющих какие-либо команды. Мне в задании досталась команда левого логического сдвига. Мои однокурсники с разной степенью успеха начали рисовать схемы: триггеры, регистры, счётчики… А мне было лень.

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

У команды — два операнда. Некоторый набор входных данных даёт на выходе некий набор результатов. Два регистра с 264 вариантами значений дают на выходе 232 варианта результата. А для 232 вариантов результата нужно просто иметь в схеме такое же количество дешифраторов. Каждый из них должен опознать свою комбинацию битов на входе, чтобы выдать свою выходную последовательность битов.

Поскольку логических вентилей в этой схеме было более, чем много, то нарисовать всё это не хватило бы никакой бумаги. Лень и тут подсказала выход. Ведь пишут же математики «X1, X2, ... Xn». Вот и я нарисовал первый дешифратор, второй, многоточия и последний дешифратор. Плюс к этому дорисовал подачу сигнала, что результат готов. Вот и всё, курсовое работа выполнена.

Представляя свою работу, отметил достоинство такой схемы: результат вычисляется за один такт! Борис Яковлевич Никитин, мой преподаватель, сперва удивился, потом похвалил за нестандартный подход и сделал вывод, что тема понята глубоко. Отметил, что такой принцип работы применяется в некоторых спецвычислителях. Так я повторно открыл кем-то уже открытую Америку.

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

Однако легко получить встречный резонный вопрос: а возможно ли воплотить на кристалле процессор с такой «дешифраторной» архитектурой? Такая схема потребует миллиарды миллиардов логических вентилей и нереализуема при современном состоянии электронной промышлености. Однако теоретический тупик вполне научно обозрим. Так же внимательный читатель может заметить, что изложенные выше рассуждения исходят из наивного предположения, что на выход логического вентиля можно посадить миллиарды входов дешифраторов. Естественно, это невозможно. Нужны всякие повторители-усилители сигнала.

Если порассуждать о пользе и практическом применении такой архитектуры, то её элементы вполне применимы. На «ускорение» напрашиваются самые «дорогостоящие» машинные операции — умножение и особенно деление. Можно разбить операнды на куски, допустим, по 8 бит. Это значительно облегчит схему, сделает реализуемой по современным технологиям.

P.S. Лет 15 спустя после упомянутой курсовой работы встретил Бориса Яковлевича. А он жалуется, что его предмет «Теоретические основы вычислительной техники» больше не преподают. Он возмущался: «Как можно изучать вычислительную технику, не зная её основ?!» Что ж, «обучение навыкам» вместо обретения «бесполезных знаний» начали задолго до Грефа. Но это — тема совсем другой истории.

Опубликовано: 2020.12.29, последняя правка: 2023.05.07    16:35

ОценитеОценки посетителей
   ████████████████████ 6 (46.1%)
   ███████ 2 (15.3%)
   ██████████ 3 (23.0%)
   ███████ 2 (15.3%)

Отзывы

✅  2021/01/06 09:59, MihalNik          #0 

Процессор вообще не достаточно точное понятие в смысле неопределённости решаемых задач. Так что неулучшаемое точно им не будет в том, смысле, в каком это слово понимается 99,99% людьми, хоть как-то понимающих архитектуру.

✅  2021/01/06 15:34, Автор сайта          #1 

Наверное, можно создать неулучшаемую архитектуру для определённой системы команд. Но это будет теоретическая модель, в которую реальная жизнь внесёт свои поправки. Было бы интересно подумать о неулучшаемой системе команд и о создании на её базе неулучшаемой архитектуры :)

неопределенности решаемых задач

Для узкого круга задач иногда создаются специализированные процессоры. В статье есть ссылка на спецвычислитель 5Э53. Он выигрывал у универсальных процессоров, которые ориентированы на очень широкий круг задач.

✅  2021/03/26 16:48, Виталий Монастырский          #2 

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

✅  2023/05/05 20:49, Лис          #3 

Архитектура процессоров очевидным образом улучшается (наращивается). Сначала это была машина Поста (или другая, но мне именно эта больше всего подходит для примера). Затем в машины добавился регистр команд, стек, временные регистры (это была архитектура Фон Неймана), затем добавились аппаратные блоки умножения/деления, затем аппаратные синусы имени Уткина, обработка комплексных чисел (в советских станциях слежения за космосом). И очевидно, что это уже прошлое, глядя на систолические структуры, видеоускорители, и нейропроцессоры. Прямо учебники выпускают "конструирование нейропроцессоров".

Да и с теоретической стороны всё давно описали — если есть языки разного уровня сложности, то есть и соответствующие им машины, которые могли бы эти языки эффективно реализовать аппаратно. И эти машины тоже имеют разную сложность.

Если познания вселенной расширяются, значит и язык будет развиваться и расширяться. За ним будут следовать (всё более сложные) машинные языки и всё более крутые архитектуры процессоров. И это ещё без всякой фантастики типа квантовых процессоров, световых, низкотемпературных и т.п..

✅  2023/05/06 20:57, Клихальт          #4 

Архитектура процессоров очевидным образом улучшается (наращивается).

Так "улучшается", или "наращивается"? Это ведь существенно разные процессы. ;)

✅  2023/05/06 21:39, Лис          #5 

Ну наращивается же не просто так, а потому что это лучше соответствует новым целям и даёт новые возможности. Если бы это было не так, пользовались бы старыми процессорами и архитектурами. Но нет. Я ещё забыл написать, что добавилась аппаратура кеширования шин команд и памяти, а так же что добавилось устройство синхронизации кеша между ядрами. Ну и управления межпроцессорными и прочими прерываниями. Они вполне себе аппаратные устройства, и их надо так же добавлять логическими элементами.

В приведённом примере преподаватель того студента совершил педагогическую ошибку. Он не дал студенту разглядеть важный аспект стоимости устройств. Кому больше даётся в плане понимания, с того должно и больше спрашиваться. Надо было попросить составить расчёты стоимости изготовления десяти миллиардов устройств. Каким образом было бы дешевле? Либо если у студента желания такого не было, то ставить четвёрку. По студенту же видно, что у него синдром дефицита внимания и гиперактивности (считал всех других одноклассников менее способными). Вот надо было дать ему внимания и занять делом.

✅  2023/05/07 17:16, Автор сайта          #6 

По студенту же видно, что у него синдром дефицита внимания и гиперактивности

Ключевое слово, раскрывающее мотивы студента, это «лень». Оно прямо противоположно понятию гиперактивности. Он избегал внимания, поэтому в голове преобладали мысли: «Вы хотели от меня курсовую? Ну возьмите и отвалите».

считал всех других одноклассников менее способными

Нет, считал однокурсников более трудолюбивыми. И правильно считал. Они в итоге выполнили большую работу.

то ставить четвёрку

Так она в итоге и была поставлена. Было лень оформить работу как положено.

✅  2023/05/10 04:32, void          #7 

Вот и я нарисовал первый дешифратор, второй, многоточия и последний дешифратор. Плюс к этому дорисовал подачу сигнала, что результат готов. Вот и всё, курсовое работа выполнена.

Представляя свою работу, отметил достоинство такой схемы: результат вычисляется за один такт!

Однако легко получить встречный резонный вопрос: а возможно ли воплотить на кристалле процессор с такой «дешифраторной» архитектурой? Такая схема потребует миллиарды миллиардов логических вентилей и нереализуема при современном состоянии электронной промышлености. Однако теоретический тупик вполне научно обозрим. Так же внимательный читатель может заметить, что изложенные выше рассуждения исходят из наивного предположения, что на выход логического вентиля можно посадить миллиарды входов дешифраторов. Естественно, это невозможно. Нужны всякие повторители-усилители сигнала.

Любопытно — только сейчас наткнулся на эту статью на сайте. Автор сайта, а что Вы лично думаете об автоматах Л. Ф. Мараховского: автоматах третьего рода, автоматной памяти? Там у него в статьях кажется, что-то вроде RS-триггеров как раз было, на уровне элементарных составных блоков. Немного информации по его работам и публикациям есть здесь:
http://www.trinitas.ru/rus/doc/avtr/01/0939-00.htm

Опять же, машина Поста о которой говорит Лис. Это прообраз продукционной системы, движка правил. Поля зрения и поля программ Рефала. Суперкомпиляция — это сворачивание дерева конфигураций программы поднадзорным контролируемым вычислением, сшивая исходные для прогонки входные данные, но также обрабатывая и выходные и заменяя сложный по времени алгоритм простым табулированным поиском по прогонке. Вроде той же мемоизации.

В эту тему тоже стоит подумать, наверное.

✅  2023/05/11 00:18, Автор сайта          #8 

что Вы лично думаете об...

Да ничего не думаю. Для меня «железо» — предмет праздного любопытства. Около того. А чтобы взять и что-то изучить всерьёз в этой области — на это меня не хватит. А вот языки программирования — совсем другое дело.

P.S. Обнаружил патент на имя Бориса Яковлевича Никитина, упомянутого в этой статье: https://rusneb.ru/catalog/000224_000128_0001008733_19830330_A1_SU/

Добавить свой отзыв

Написать автору можно на электронную почту
mail(аt)compiler.su

Авторизация

Регистрация

Выслать пароль

Карта сайта


Содержание

Каким должен быть язык программирования?

Анализ и критика

Описание языка

Компилятор

Отечественные разработки

Cтатьи на компьютерные темы

●  О превращении кибернетики в шаманство

●  Про лебедей, раков и щук

●  О замысле и воплощении

●  О русском ассемблере

●  Арифметика синтаксиса-3

●  Концепция владения в Rust на примерах

●●  Концепция владения в Rust на примерах, часть 2

●●  Концепция владения в Rust на примерах, часть 3

●  Суть побочных эффектов в чисто функциональных языках

●  О неулучшаемой архитектуре процессоров

●  Двадцать тысяч строк кода, которые потрясут мир?

●  Почему владение/заимствование в Rust такое сложное?

●  Масштабируемые архитектуры программ

●  О создании языков

●●  Джоэл Спольски о функциональном программировании

●  Почему Хаскелл так мало используется в отрасли?

●  Программирование исчезнет. Будет дрессировка нейронных сетей

●  О глупости «программирования на естественном языке»

●  Десятка худших фич C#

●  Бесплатный софт в мышеловке

●  Исповедь правового нигилиста

●  ЕС ЭВМ — это измена, трусость и обман?

●  Русской операционной системой должна стать ReactOS

●  Почему обречён язык Форт

●  Программирование без программистов — это медицина без врачей

●  Электроника без электронщиков

●  Программисты-профессионалы и программирующие инженеры

●  Статьи Дмитрия Караваева

●●  Идеальный транслятор

●●  В защиту PL/1

●●  К вопросу о совершенствовании языка программирования

●●  Опыт самостоятельного развития средства программирования в РКК «Энергия»

●●  О реализации метода оптимизации при компиляции

●●  О реализации метода распределения регистров при компиляции

●●  О распределении памяти при выполнении теста Кнута

●●  Опыты со стеком или «чемпионат по выполнению теста Кнута»

●●  О размещении переменных в стеке

●●  Сколько проходов должно быть у транслятора?

●●  Чтение лексем

●●  Экстракоды при синтезе программ

●●  Об исключенных командах или за что «списали» инструкцию INTO?

●●  Типы в инженерных задачах

●●  Непрерывное компилирование

●●  Об одной реализации специализированных операторов ввода-вывода

●●  Особенности реализации структурной обработки исключений в Win64

●●  О русском языке в программировании

●●  Формула расчета точности для умножения

●●  Права доступа к переменным

●●  Заметки о выходе из функции без значения и зеркальности get и put

●●  Модификация исполняемого кода как способ реализации массивов с изменяемыми границами

●●  Ошибка при отсутствии выполняемых действий

●●  О PL/1 и почему в нём не зарезервированы ключевые слова

●●  Не поминайте всуе PL/1

●●  Скорость в попугаях

●●  Крах операции «Инкогнито»

●●  Предопределённый результат

●●  Поддержка профилирования кода программы на низком уровне

●●  К вопросу о парадигмах

●  Следующие 7000 языков программирования

●●  Что нового с 1966 года?

●●  Наблюдаемая эволюция языка программирования

●●  Ряд важных языков в 2017 году

●●  Слоны в комнате

●●  Следующие 7000 языков программирования: заключение

Компьютерный юмор

Новости и прочее




Последние отзывы

2024/12/07 20:54 ••• Клихальт
Переключатель

2024/12/06 18:44 ••• Анкнав
Русский язык и программирование

2024/12/01 00:00 ••• alextretyak
Продолжение цикла и выход из него

2024/11/29 23:08 ••• Вежливый Лис
О русском ассемблере

2024/11/26 23:53 ••• Бурановский дедушка
ЕС ЭВМ — это измена, трусость и обман?

2024/11/25 18:31 ••• Деньги на WWWетер
Ресурсы, посвящённые созданию языков программирования и компиляторов

2024/11/12 20:24 ••• Вежливый Лис
Правила языка: строки, комментарии

2024/11/12 13:10 ••• Вежливый Лис
Новости и прочее

2024/11/12 00:32 ••• Автор сайта
Оценка надёжности функции с несколькими реализациями

2024/11/06 02:50 ••• Иван
Энтузиасты-разработчики компиляторов и их проекты

2024/11/05 23:51 ••• Борис К.
Изменение приоритетов операций

2024/11/05 23:38 ••• Борис К.
Шестнадцатиричные и двоичные константы

2024/11/01 12:11 ••• ИванАс
Русской операционной системой должна стать ReactOS