Может ли FPGA out выполнять многоядерный ПК?

20

Я не понимаю, как можно использовать ПЛИС для ускорения алгоритма. В настоящее время я использую трудоемкий алгоритм реального времени на четырехъядерном ноутбуке, так что четыре вычисления могут выполняться параллельно.

Недавно меня предупредили, что FPGA может дать еще лучшую производительность. Я не понимаю, как это работает. Может кто-нибудь объяснить, как FPGA ускоряет алгоритм и стоит ли переходить на решение Xilinx или Altera FPGA или продолжать выполнять вычисления на моем четырехъядерном ноутбуке.

Дополнительные детали: алгоритм запускает 20 искусственных нейронных сетей, используя входы, передаваемые через вейвлет-пакетное преобразование

Спасибо всем за отличные ответы.

Карлос - Мангуст - Опасность
источник
1
Рассматривали ли вы запуск алгоритма на настольном (или серверном) процессоре? Они обычно быстрее, чем процессоры для ноутбуков. (По постоянному коэффициенту, но все же быстрее.)
ntoskrnl
1
Подумайте об использовании графического процессора для обработки нейронных сетей. Графические процессоры имеют много единиц, которые могут умножать числа с плавающей запятой параллельно.
Камил
@ntoskrnl Я предполагаю, что у него процессор i5 или лучше (4 ядра), поэтому производительность на настольном компьютере или сервере будет пропорционально тактовой частоте. Может быть, на Xeon он может получить небольшую (20%?) Производительность благодаря огромному кешу и лучшей пропускной способности памяти, но это не так много.
Камил
Какой у вас процессор?
Камил
Интересное время вопросов, мы получили аналогичный вопрос на networkengineering.SE
Майк Пеннингтон

Ответы:

23

Мой коллега протестировал это и пришел к выводу , что ПВМ будет опережать компьютер , когда вы были более чем около 100 независимых , целочисленных задач , которые будут вписываться в FPGA. Для задач с плавающей запятой GPGPU превосходит FPGA. Для узкой многопоточности или работы с SIMD процессоры чрезвычайно оптимизированы и работают с более высокой тактовой частотой, чем обычно достигают FPGA.

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

Если вам нужно сохранить рабочую нагрузку в DRAM, то это будет узкое место, а не процессор.

pjc50
источник
3
Чтобы решить, является ли DRAM пределом, вы также должны знать, что FPGA имеют много небольших распределенных ОЗУ (например, 500 независимых блоков ОЗУ по 9 кбит), которые могут выполнять чтение / запись в течение одного и того же тактового цикла.
maxy
19

ПЛИС работает совершенно иначе, чем процессор.

Для процессора вы пишете программное обеспечение, которое сообщает аппаратному обеспечению, что делать. На FPGA вы описываете «как должно выглядеть оборудование» внутри. Это как если бы вы делали чип специально для вашего алгоритма.

Это ускоряет многие вещи и может снизить энергопотребление. Но у него есть свои недостатки: разработка занимает гораздо больше времени и намного сложнее. Вы должны думать совершенно иначе и не можете использовать алгоритмы, которые работают в программном обеспечении прямо вперед.

Для искусственных нейронных сетей ПЛИС - отличный выбор. В этой области ведется множество исследований.

Botnic
источник
На самом деле, разработка FPGA часто выполняется с использованием таких языков, как Verilog или VHDL, которые описывают поведение, а не реализацию - факт, который иногда полезен, но иногда может значительно усложнить проектирование асинхронной последовательной логики. Если бы кто-то указывал реализации, задержки распространения были бы несколько непротиворечивыми, но в поведенческих языках они даже не гарантировались бы положительными . Ключевым моментом в дизайне FPGA является то, что языки очень легко позволяют многим (потенциально сотням или тысячам) различным частям чипа одновременно выполнять простое поведение.
Суперкат
13

Это сильно зависит от алгоритма, но этот принцип можно объяснить довольно просто.

Предположим, что ваш алгоритм должен суммировать много 8-битных чисел. Вашему ЦП по-прежнему нужно будет извлекать каждую инструкцию, получать операнды из ОЗУ или кеш-памяти, выполнять сумму, сохранять результат в кеше и переходить к следующей операции. Конвейер помогает, но вы можете выполнять только столько одновременных операций, сколько у вас есть ядер.

Если вы используете FPGA, вы можете реализовать большое количество простых сумматоров, которые работают параллельно, и, возможно, вырубаются параллельно тысячи сумм. Хотя одна операция может занять больше времени, у вас есть огромная степень параллелизма.

Вы также можете использовать GPGPU для выполнения аналогичных задач, поскольку они также состоят из множества более простых ядер.

клабаккио
источник
GPGPU - отличный вход для использования нейронных сетей!
Ботник
Есть также нейронные сети ASIC. Корпорация Intel создавала тот, который в 80-х годах реализовал 16 нейронов.
Лиор Билия
@LiorBilia ну я ничего о них не знаю :). Я никогда не работал с нейронными сетями, и очень мало с FPGA
clabacchio
@clabacchio Software нейронная сеть - это программа, которая в основном выполняет операции умножения и сравнения чисел с плавающей запятой. В основном я имею в виду ... 95% или больше.
Камил
Обычный процессор может неплохо сложить множество 8-битных чисел; на быстром компьютере время выполнения будет зависеть от стоимости извлечения данных из памяти (99% выборок кода будет приходиться на catch). Более интересным примером будет работа с данными, закодированными с использованием схемы, которая требует довольно «необычных» схем или перестановок битов. Например, если фрагмент данных выборки видео возвращает чередующиеся биты для красного, зеленого и синего, FPGA может легко переставить биты; обычный процессор будет иметь гораздо больше проблем.
суперкат
6

Существует примерно 3 уровня специализации вычислительной техники:

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

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

ASIC (что означает специализированная интегральная микросхема) - это главный специалист. Это чип, разработанный и произведенный для одной и только одной задачи - задачи, которую он выполняет очень быстро и эффективно. Нет возможности перепрограммировать ASIC, он оставляет фабрику полностью определенной и бесполезной, когда его работа больше не нужна. Проектирование ASIC - это то, что могут позволить себе только крупные корпорации, и отладка их - это почти невозможно.

Если вы думаете о «ядрах», то посмотрите на это так: процессоры имеют 4, 6, может быть, 8 больших ядер, которые могут делать все. У ASICS часто есть тысячи ядер, но очень крошечных, способных только на одно.

Вы можете посмотреть на сообщество майнинга биткойнов. Они делают хэши SHA256.

  • Процессор Core i7: 0,8-1,5 Меш / с
  • FPGA: 5-300M хэш / с
  • ASIC: 12000M хэш / с на один крошечный чип, 2000000M (да, тот 2T) хэш / с для одного 160-чипового устройства

Конечно, эти дети ASIC стоят почти 2000 долларов при массовом производстве, но это дает вам представление о том, как мастер на все руки может обходиться без специалиста.

Единственный вопрос: может ли FPGA принести вам больше сбережений, чем стоило бы проектирование? Конечно, вместо запуска на одном ноутбуке, вы можете попробовать запустить его на 20 компьютерах.

Agent_L
источник
Хэш это очень особый случай , хотя; обратите внимание, что монеты на основе скрипта (преднамеренно) не очень ускоряются специализированным оборудованием.
pjc50
1
Отладка & ASIC обычно выполняется в симуляции перед отправкой в ​​производство. Таким образом, обычно от 6 до 6 месяцев от спецификации до изготовления. Диагностика ошибок после изготовления дорогая, но не невозможная.
pjc50
И хотя это сложно, на самом деле это может быть очень очень сложно, есть такие вещи, как сканирование границ, JTAG-тест и прямые методы с использованием FIB и т. Д. Поэтому их отладка отнюдь не невозможна, вам просто нужно знать, что вы делаете , В наши дни ASIC больше относится к процессу проектирования (HDL, Synthesis, P & R), который на самом деле относится к фактическому устройству, поскольку большинство устройств являются ASIC, включая такие вещи, как процессоры ARM.
заполнитель
@ pjc50 Да, это была моя точка зрения - в особых случаях разница в скорости огромна. Но scrypt asics все еще pwn CPU и GPU. Не в миллион раз (как в случае с ша), но все же более чем в 100 раз.
Agent_L
@placeholder да, но даже если вы обнаружите ошибку, она не очень полезна для всех тех чипов, которые уже произведены. Я имел в виду «отладку», как «удаление ошибки», а не просто «вот оно».
Agent_L
5

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

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

  1. Используйте SSE - я видел довольно простые реализации нейронных сетей с в 2-3 раза большей производительностью. Это может быть хорошей идеей, если на вашем ноутбуке нет выделенного графического процессора.

    Улучшение скорости нейронных сетей на процессорах Винсентом Ванхоуком и Эндрю Старшим

  2. Используйте GPGPU (вычисления общего назначения на графических процессорах) - я думаю, вы можете добиться увеличения производительности в 100-200 раз на GPU для ноутбуков среднего класса, таких как GeForce 730M.

    Вот реализация нейронной сети (и бесплатный код). Используется Nvidia CUDA.

    Подход GPGPU очень масштабируем, если в какой-то момент вы понимаете, что вам нужно больше вычислительной мощности - вы можете просто использовать настольный компьютер с более мощным графическим процессором или даже Nvidia Tesla K80 с 4992 ядрами (это дорого).

Камиль
источник
1
Проблема здесь состоит в том, чтобы определить производительность. Если мы имеем в виду быстрее, то да, fpga может быть быстрее, чем обычный процессор. Тем не менее, fpga не так гибки, как процессор, они предназначены для эффективного выполнения только предопределенной задачи. Выполнение другой задачи будет означать изменение его внутренней проводки, фактически осуществляя другую fpga
Джанлука Геттини