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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Опубликовано: 2020.12.29, последняя правка: 2021.01.07    14:01

ОценитеОценки посетителей
   ██████████████████████████████████████████ 1 (100%)
   ▌ 0
   ▌ 0
   ▌ 0

Отзывы

     2021/01/06 09:59, MihalNik          # 

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

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

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

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

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

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

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

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

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

Авторизация

Регистрация

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

Карта сайта


Содержание

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

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

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

Компилятор

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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




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

2021/09/11 16:46 ••• Gudleifr
Изобретение очередного велосипеда?

2021/09/01 23:42 ••• Gudleifr
Философия языка

2021/08/31 22:04 ••• Gudleifr
Должна ли программа быть удобочитаемой?

2021/08/30 00:42 ••• Gudleifr
Все языки эквивалентны. Но некоторые из них эквивалентнее других

2021/08/19 20:52 ••• Gudleifr
В защиту PL/1

2021/08/19 20:34 ••• Gudleifr
Каким должен быть язык программирования?

2021/08/11 11:24 ••• Gudleifr
Почему обречён язык Форт

2021/08/07 13:43 ••• Anatoly
Компилятор

2021/08/07 13:30 ••• Anatoly
Многоязыковое программирование

2021/06/16 13:10 ••• Александр Коновалов aka Маздайщик
Не поминайте всуе PL/1

2021/05/19 23:15 ••• Денис Будяк
Энтузиасты-разработчики компиляторов и их проекты

2021/04/25 08:41 ••• kt
Некошерный «goto»

2021/04/19 17:01 ••• Клихальт
О наименовании проекта и языка программирования

2021/04/04 18:29 ••• kt
Переключатель

2021/04/02 19:32 ••• Александр Коновалов aka Маздайщик
Циклы