Pull to refresh

Концепция управляемого данными процессора

Reading time 3 min
Views 1.9K
image

Здравствуй, Хабр!

Все имеющие процессор устройства, которые мы используем, построены по принципам фон Неймановской машины, или ее модификациях. Простой пример: всеми нами используемый x86 — это гибрид фон Неймановской и Гарвардской архитектур.

Но знает ли хабрасообщество про существование (хотя бы в концепции, планах, чертежах, работающих образцах) НЕ фон Неймановских машин?


Я хочу рассказать про одно концептуальное направление в процессоростроении, ныне заброшенное (хотя и тихо возрождающееся), но тем самым ничуть не умаляющее свою значимость и оригинальность — об управляемой данными процессорной архитектуре.

Эту концепцию в 70е годы разработали монстры из MIT, а потом подхватили другие процессоростроители по всему миру.

Итак, поехали!


Не по фон Нейману — а это как? о_0


Вкрадце (кто забыл), ключевые тезисы архитектуры фон Неймана:

  • Команды выполняются по порядку
  • Неотличимость команд от данных
  • Адресуемость памяти


А что будет, если от этого всего отойти? А будет вот что:
  • Команды выполняются по мере готовности операндов
  • А оно вообще надо? Можно отказаться как от команд, так и от данных в привычном нам понимании.
  • Указатели — страшный сон, который надо забыть… как и влияние фазы Луны.


Управляемый данными подход


Итак, мы отказались от модели фон Неймана. Но что мы предложим взамен?

Ответ прост — пакетирование. Да, да, почти как пакеты в сети, только в меньшем масштабе и намного быстрее.

В пакете находятся: код операции (>,<,+,-, и.т.д.), операнды (либо ссылки на другие пакеты, дающие эти операнды), и отметка готовности по каждому операнду. Нет разделения на данные и команды как таковые, процессор оперирует готовыми «суповыми» наборами всего необходимого.

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

Операнды из одного пакета обрабатываются, результат отправляется в другие пакеты и активизирует их. То есть, фактически, программа собирает сама себя, в зависимости от начальных условий и ветвлений.

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

(X+Y)*(X-Y):
image

While X>0 DO X-1:
image

А решение квадратного уравнения будет выглядеть так:

image

image

Преимущества
  • Высокая эффективность в вычислениях, требующих распараллеливания. Забудьте про потоки, задача раскидывается по всем возможным процессорам и ядрам автоматически, за счет дробления задачи на блоки.
  • Равномерное распределение нагрузки между ядрами/процессорами вне зависимости от алгоритма.
  • Никаких проблем с синхронизацией, т.к. нет потоков.
  • Если некоторые данные не нужны для выполнения, они и не вычисляются — выигрыш в производительности.


Недостатки
  • Принципиальная однозадачность. Симуляция многозадачности возможна, но только за счет тегирования пакетов в памяти.
  • Следствием пункта 1 является исключительная редкость таких процессоров.
  • Насколько я знаю, не было построено ни одного коммерчески выгодного образца.
  • Более сложная реализация по сравнению с фон Неймановскими машинами.


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

Процессор, наиболее соответствующей этой концепции — японский Oki Denki DDDP.
Tags:
Hubs:
+49
Comments 23
Comments Comments 23

Articles