Я не понимаю, как можно использовать ПЛИС для ускорения алгоритма. В настоящее время я использую трудоемкий алгоритм реального времени на четырехъядерном ноутбуке, так что четыре вычисления могут выполняться параллельно.
Недавно меня предупредили, что FPGA может дать еще лучшую производительность. Я не понимаю, как это работает. Может кто-нибудь объяснить, как FPGA ускоряет алгоритм и стоит ли переходить на решение Xilinx или Altera FPGA или продолжать выполнять вычисления на моем четырехъядерном ноутбуке.
Дополнительные детали: алгоритм запускает 20 искусственных нейронных сетей, используя входы, передаваемые через вейвлет-пакетное преобразование
Спасибо всем за отличные ответы.
Ответы:
Мой коллега протестировал это и пришел к выводу , что ПВМ будет опережать компьютер , когда вы были более чем около 100 независимых , целочисленных задач , которые будут вписываться в FPGA. Для задач с плавающей запятой GPGPU превосходит FPGA. Для узкой многопоточности или работы с SIMD процессоры чрезвычайно оптимизированы и работают с более высокой тактовой частотой, чем обычно достигают FPGA.
Другие предостережения: задачи должны быть независимыми. Если между задачами существуют зависимости данных, это ограничивает критический путь вычислений. FPGA хороши для булевой оценки и целочисленной математики, а также для аппаратных интерфейсов с малой задержкой, но не для зависящих от памяти рабочих нагрузок или с плавающей запятой.
Если вам нужно сохранить рабочую нагрузку в DRAM, то это будет узкое место, а не процессор.
источник
ПЛИС работает совершенно иначе, чем процессор.
Для процессора вы пишете программное обеспечение, которое сообщает аппаратному обеспечению, что делать. На FPGA вы описываете «как должно выглядеть оборудование» внутри. Это как если бы вы делали чип специально для вашего алгоритма.
Это ускоряет многие вещи и может снизить энергопотребление. Но у него есть свои недостатки: разработка занимает гораздо больше времени и намного сложнее. Вы должны думать совершенно иначе и не можете использовать алгоритмы, которые работают в программном обеспечении прямо вперед.
Для искусственных нейронных сетей ПЛИС - отличный выбор. В этой области ведется множество исследований.
источник
Это сильно зависит от алгоритма, но этот принцип можно объяснить довольно просто.
Предположим, что ваш алгоритм должен суммировать много 8-битных чисел. Вашему ЦП по-прежнему нужно будет извлекать каждую инструкцию, получать операнды из ОЗУ или кеш-памяти, выполнять сумму, сохранять результат в кеше и переходить к следующей операции. Конвейер помогает, но вы можете выполнять только столько одновременных операций, сколько у вас есть ядер.
Если вы используете FPGA, вы можете реализовать большое количество простых сумматоров, которые работают параллельно, и, возможно, вырубаются параллельно тысячи сумм. Хотя одна операция может занять больше времени, у вас есть огромная степень параллелизма.
Вы также можете использовать GPGPU для выполнения аналогичных задач, поскольку они также состоят из множества более простых ядер.
источник
Существует примерно 3 уровня специализации вычислительной техники:
Процессор (как в вашем ноутбуке) является самым общим из всех. Он может делать все, но эта универсальность достигается ценой низкой скорости и высокого энергопотребления. Процессор запрограммирован на ходу, инструкции приходят из ОЗУ. Программы для процессора быстрые, дешевые, простые в написании и очень легко меняемые.
FPGA (что означает полевой программируемый вентильный массив) - это средний уровень. Как следует из названия, его можно запрограммировать «на месте», то есть за пределами завода. FPGA обычно программируется один раз, этот процесс можно описать как настройку его внутренней структуры. После этого он ведет себя как крошечный компьютер, специализирующийся на одной задаче, которую вы выбрали для него. Вот почему он может работать лучше, чем обычный процессор. Программирование FPGA очень сложно и дорого, и отладка их очень сложна.
ASIC (что означает специализированная интегральная микросхема) - это главный специалист. Это чип, разработанный и произведенный для одной и только одной задачи - задачи, которую он выполняет очень быстро и эффективно. Нет возможности перепрограммировать ASIC, он оставляет фабрику полностью определенной и бесполезной, когда его работа больше не нужна. Проектирование ASIC - это то, что могут позволить себе только крупные корпорации, и отладка их - это почти невозможно.
Если вы думаете о «ядрах», то посмотрите на это так: процессоры имеют 4, 6, может быть, 8 больших ядер, которые могут делать все. У ASICS часто есть тысячи ядер, но очень крошечных, способных только на одно.
Вы можете посмотреть на сообщество майнинга биткойнов. Они делают хэши SHA256.
Конечно, эти дети ASIC стоят почти 2000 долларов при массовом производстве, но это дает вам представление о том, как мастер на все руки может обходиться без специалиста.
Единственный вопрос: может ли FPGA принести вам больше сбережений, чем стоило бы проектирование? Конечно, вместо запуска на одном ноутбуке, вы можете попробовать запустить его на 20 компьютерах.
источник
Да, FPGA может превзойти современные процессоры (например, Intel i7) в некоторых специфических задачах, но существуют более простые и дешевые методы повышения производительности нейронной сети.
Под более дешевой - я имею в виду общие усилия, не стоимость микросхемы ПЛИС, а также очень быструю память для ПЛИС (она понадобится для нейронной сети) и весь процесс разработки.
Используйте SSE - я видел довольно простые реализации нейронных сетей с в 2-3 раза большей производительностью. Это может быть хорошей идеей, если на вашем ноутбуке нет выделенного графического процессора.
Улучшение скорости нейронных сетей на процессорах Винсентом Ванхоуком и Эндрю Старшим
Используйте GPGPU (вычисления общего назначения на графических процессорах) - я думаю, вы можете добиться увеличения производительности в 100-200 раз на GPU для ноутбуков среднего класса, таких как GeForce 730M.
Вот реализация нейронной сети (и бесплатный код). Используется Nvidia CUDA.
Подход GPGPU очень масштабируем, если в какой-то момент вы понимаете, что вам нужно больше вычислительной мощности - вы можете просто использовать настольный компьютер с более мощным графическим процессором или даже Nvidia Tesla K80 с 4992 ядрами (это дорого).
источник