Алгоритмы FPGA доминируют на процессорах - PullRequest
25 голосов
/ 26 мая 2010

Большую часть своей жизни я программировал процессоры; и хотя для большинства алгоритмов время работы с большим значением Oh остается неизменным для процессоров / FPGA, константы весьма различны (например, большое количество ресурсов процессора тратится впустую на перемешивание данных, тогда как для FPGA это часто связано с вычислениями). *

Я хотел бы узнать больше об этом - кто-нибудь знает хорошие книги / справочные документы / учебные пособия, которые занимаются вопросами:

над какими задачами FPGA доминируют над процессорами (с точки зрения чистой скорости) над какими задачами FPGA доминируют над процессорами (с точки зрения работы за июль)

Примечание: отмеченная вики сообщества

Ответы [ 4 ]

34 голосов
/ 26 мая 2010

[нет ссылок, только мои размышления]

ПЛИС по сути интерпретаторы для аппаратного обеспечения! Архитектура похожа на специализированные ASIC, но для быстрого развития, и вы платите в 10 раз по частоте и [не знаете, по крайней мере, 10?] В эффективности энергопотребления.

Так что возьмите любую задачу, где выделенное HW может массово превзойти процессоры, разделив на факторы FPGA 10 / [?], И у вас, вероятно, все еще будет победитель. Типичные качества таких задач:

  • Огромные возможности для мелкозернистого параллелизма .
    (Выполнение 4 операций одновременно не считается; 128 делает это.)
  • Возможность для глубокой конвейеризации .
    Это тоже своего рода параллелизм, но его трудно применить к отдельная задача, поэтому полезно, если вы можете получить много отдельных задач работать параллельно.
  • (в основном) Фиксированный поток данных путей.
    Некоторые муксы в порядке, но массивный случайный доступ плох, потому что вы не могу распараллелить их. Но см. Ниже о воспоминаниях.
  • Высокая общая пропускная способность до много маленьких воспоминаний .
    FPGA имеют сотни маленьких (O (1 КБ)) внутренних блоков памяти. (BlockRAMs на языке Xilinx), так что если вы можете разделить вас использование памяти во многих независимых буферах, вы можете наслаждаться данными пропускная способность, о которой никогда не мечтали процессоры.
  • Малая внешняя пропускная способность (по сравнению с внутренней работой). Идеальная задача FPGA имеет небольшие входы и выходы, но требует много внутренней работы. Таким образом, ваша FPGA не будет голодать в ожидании I / O. (Процессоры уже страдают от голода, и они облегчают его с очень сложными (и большими ) кэшами, не имеющими аналогов в ПЛИС.) Совершенно возможно подключить огромную пропускную способность ввода / вывода к FPGA (~ 1000 контактов в настоящее время, некоторые с высокоскоростными SERDES) - но для этого требуется специальная доска, созданная для такого пропускная способность; в большинстве случаев ваш внешний ввод / вывод будет узкое место.
  • Достаточно просто для HW (также хорошо SW / HW разбиение ).
    Многие задачи состоят из 90% нерегулярной клейкой логики и только 10% тяжелая работа («ядро» в смысле DSP). Если вы положите все это на FPGA, вы будете тратить драгоценную область на логику, которая не работать большую часть времени. В идеале ты хочешь всю гадость быть обработанным в SW и полностью использовать HW для ядра. ( «мягких» процессоров внутри ПЛИС - популярный способ упаковки большого количества медленная нерегулярная логика на среднюю область, если вы не можете разгрузить ее на настоящий процессор.)
  • Странные битовые манипуляции - плюс.
    Вещи, которые плохо отображаются на традиционные наборы команд процессора, такие как не выровненный доступ к упакованным битам, хэш-функции, кодирование и сжатие ... Однако не стоит переоценивать фактор, который это дает вы - большинство форматов данных и алгоритмы, которые вы встретите, уже есть был разработан для облегчения работы с наборами команд ЦП, а ЦП сохраняют добавление специализированных инструкций для мультимедиа.
    Много с плавающей точкой определенно является минусом, потому что оба Процессоры и графические процессоры работают на чрезвычайно оптимизированном выделенном кремнии. (Так называемые "DSP" ПЛИС также имеют много выделенных модулей расширения / расширения, но AFAIK это только целые числа?)
  • Низкие требования к времени ожидания / в реальном времени - плюс.
    Аппаратные средства могут действительно сиять при таких требованиях.

РЕДАКТИРОВАТЬ: Некоторые из этих условий - особенно. фиксированные потоки данных и множество отдельных задач для работы - также позволяют среза бит на процессорах, что несколько выравнивает поле.

9 голосов
/ 16 июля 2010

Что ж, новейшее поколение деталей Xilinx только что объявило о похвале 4.7TMACS и логике общего назначения на частоте 600 МГц. (В основном это Virtex 6s, созданный для меньшего процесса.)

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

Вы можете плавать на них, но это приведет к снижению производительности. Блоки DSP содержат MACC 25x18 бит с суммой 48 бит. Если вы можете обойтись без странных форматов и обойти некоторую нормализацию с плавающей запятой, которая обычно происходит, вы все равно можете извлечь из этого нагрузку. (т. е. используйте 18-битный вход как прямую фиксированную точку или число с плавающей запятой с 17-битной мантиссией вместо обычных 24-битных.) Двойные числа с плавающей запятой съедят много ресурсов, поэтому, если вам это нужно, вам, вероятно, будет лучше на ПК.

Если ваши алгоритмы могут быть выражены в терминах операций сложения и вычитания, то логика общего назначения в них может использоваться для реализации сумматоров gazillion. Такие вещи, как алгоритмы линии / круга / Ядды / Ядды / Ядды у Брезенхэма, ОЧЕНЬ хорошо подходят для разработки ПЛИС.

Если вам нужно деление ... Э-э ... это больно и, вероятно, будет относительно медленным, если вы не сможете реализовать свои деления как умножения.

Если вам нужно много функций триггера с высоким разрешением, не так уж много ... Опять же, это МОЖЕТ быть сделано, но это не будет красиво или быстро. (Точно так же, как это можно сделать на 6502.) Если вы можете справиться только с помощью справочной таблицы на ограниченном диапазоне, тогда ваш золотой!

Говоря о 6502, демо-кодер 6502 может заставить одну из этих вещей петь. Любой, кто знаком со всеми старыми математическими приемами, которые программисты обычно использовали на старой школьной машине, будет применяться. Все хитрости, которые современный программист говорит вам: «пусть библиотека сделает за вас», - это то, что вам нужно знать, чтобы реализовать на них математику. Если вам удастся найти книгу, в которой рассказывается о том, как сделать 3d на Atari или Amiga на базе 68000, они обсудят множество способов реализации всего лишь целочисленного типа.

В действительности любые алгоритмы, которые могут быть реализованы с использованием справочных таблиц, ОЧЕНЬ хорошо подойдут для ПЛИС. Мало того, что у вас есть блокрамы, распределенные по всей детали, но и сами логические ячейки могут быть сконфигурированы как LUTS различного размера и мини-оперативки.

Вы можете рассматривать такие вещи, как фиксированные битовые манипуляции, БЕСПЛАТНО! Это просто справиться с маршрутизацией. Фиксированные сдвиги или изменения битов ничего не стоят. Динамические битовые операции, такие как сдвиг на переменную сумму, будут стоить минимального количества логики и могут выполняться до тех пор, пока коровы не вернутся домой!

Большая часть имеет 3960 множителей! И 142 200 срезов, КАЖДЫЙ из которых может быть 8-битным сумматором. (4 6-битных реза на срез или 8 5-битных реза на срез в зависимости от конфигурации.)

6 голосов
/ 02 августа 2010

Выберите грубый алгоритм SW. Наша компания занимается HW-ускорением алгоритмов SW для жизни.

Мы выполнили HW-реализации механизмов регулярных выражений, которые будут выполнять тысячи наборов правил параллельно со скоростью до 10 Гбит / с. Целевым рынком для этого являются маршрутизаторы, на которых антивирус и ips / ids могут работать в режиме реального времени во время потоковой передачи данных без замедления работы маршрутизатора.

Мы сделали кодирование HD-видео в HW. Раньше на конвертацию фильма в HD уходило несколько часов в секунду. Теперь мы можем сделать это практически в режиме реального времени ... требуется почти 2 секунды обработки для преобразования 1 секунды фильма. Netflix использовали наше HW почти исключительно для своего видео по запросу.

Мы даже сделали простые вещи, такие как шифрование и дешифрование RSA, 3DES и AES в HW. Мы сделали простой zip / unzip в HW. Целевой рынок для этого - для охранных видеокамер. У правительства имеется огромное количество видеокамер, генерирующих огромные потоки данных в реальном времени. Они передают его в реальном времени перед отправкой по сети, а затем распаковывают в реальном времени на другом конце.

Черт, другая компания, в которой я работал, использовала радиолокационные приемники с использованием ПЛИС. Они будут отбирать оцифрованные радиолокационные данные противника непосредственно по нескольким различным антеннам, а по времени прибытия будут определять направление и расстояние до передатчика противника. Черт возьми, мы могли бы даже проверить непреднамеренную модуляцию импульсов сигналов в ПЛИС, чтобы выяснить отпечатки пальцев конкретных передатчиков, поэтому мы могли бы знать, что этот сигнал исходит от конкретного российского сайта SAM, который раньше размещался на другой границе чтобы мы могли отслеживать движение и продажи оружия.

Попробуйте сделать это в программном обеспечении !! : -)

1 голос
/ 26 мая 2010

Для чистой скорости: - Парализуемые - DSP, например видео фильтры - Перемещение данных, например, DMA

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...