Как стать автором
Обновить

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

Время на прочтение3 мин
Количество просмотров2.2K
image

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

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

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


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

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

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


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


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

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


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


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


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

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

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

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

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

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

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

While X>0 DO X-1:
image

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

image

image

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


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


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

Процессор, наиболее соответствующей этой концепции — японский Oki Denki DDDP.
Теги:
Хабы:
Всего голосов 57: ↑53 и ↓4+49
Комментарии23

Публикации

Ближайшие события