Чи може FPGA виконувати багатоядерний ПК?


20

Я не розумію, як FPGA можна використовувати для прискорення алгоритму. В даний час я запускаю трудомісткий алгоритм у реальному часі на квадрокоптері, щоб паралельно можна було виконати чотири обчислення.

Нещодавно мене попередили, що FPGA може дати ще кращі показники. Я не розумію, як це працює. Чи можу хтось пояснити, як FPGA прискорює алгоритм, і якщо я повинен перейти на рішення Xilinx або Altera FPGA або продовжувати виконувати обчислення на моєму чотириколісному ноутбуці.

Додаткові відомості: Алгоритм працює 20 штучними нейронними мережами, використовуючи входи, що надходять через перетворення вейвлет-пакетів

Дякую всім за чудові відповіді.


1
Чи розглядали ви запуск алгоритму на настільному (або серверному) процесорі? Зазвичай вони швидші, ніж процесори ноутбуків. (За постійним фактором, але все ж швидше.)
ntoskrnl

1
Подумайте про використання GPU для обробки нейронної мережі. У графічних процесорах є багато одиниць, здатних паралельно множити числа з плаваючою комою.
Каміль

@ntoskrnl Я припускаю, що він має i5 або кращий процесор (4 ядра), тому продуктивність на робочому столі чи сервері буде просто пропорційною тактовій частоті. Можливо, на Xeon він може отримати невелику (20%?) Продуктивність завдяки величезному кешу та кращій пропускній здатності пам’яті, але це не дуже.
Каміль

Який у вас процесор?
Каміль

Цікавий термін запитань, ми отримали аналогічне запитання в networkengineering.SE
Майк Пеннінгтон

Відповіді:


23

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

Інші застереження: завдання повинні бути незалежними. Якщо між завданнями є залежність даних, то це обмежує критичний шлях обчислення. FPGA підходять для булевої оцінки та цілої математики, а також апаратних інтерфейсів з низькою затримкою, але не для залежних від пам'яті робочих навантажень чи плаваючої точки.

Якщо вам доведеться зберегти навантаження в DRAM, то це буде вузьким місцем, а не процесором.


3
Щоб вирішити, чи є обмеження DRAM, ви також повинні знати, що у FPGA є багато невеликих розподілених оперативної пам’яті (наприклад, 500 незалежних 9kbit блоків оперативної пам’яті), які можуть усі читати / записувати протягом одного і того ж тактового циклу.
максимум

19

FPGA працює зовсім інакше, ніж процесор.

Для процесора ви пишете програмне забезпечення, яке вказує обладнання, що робити. На FPGA ви описуєте "як має виглядати обладнання" внутрішньо. Це так, ніби ви робите чіп, створений спеціально для вашого алгоритму.

Це прискорює багато речей і може знизити споживання електроенергії. Але у цього є свої недоліки: розробка займає набагато більше часу і набагато складніше. Вам потрібно мислити зовсім по-іншому і не можете використовувати алгоритми, які працюють в програмному забезпеченні прямо.

Для штучних нейронних мереж FPGA - чудовий вибір. У цій галузі існує багато поточних досліджень.


Насправді розробка FPGA часто виконується з використанням таких мов, як Verilog або VHDL, які описують поведінку, а не реалізацію - факт, який іноді корисний, але іноді може значно ускладнити конструкцію асинхронної послідовної логіки. Якби ви вказували реалізацію, затримка розповсюдження була б дещо послідовною, але в мовах поведінки вони навіть не гарантуються як позитивні . Ключова річ при дизайні FPGA - це те, що мови дуже спрощують одночасно багато (потенційно сотні чи тисячі) різних частин чіпа виконувати просту поведінку.
supercat

13

Багато залежить від алгоритму, але принцип можна пояснити досить просто.

Припустимо, що ваш алгоритм повинен підсумовувати багато 8-бітних чисел. Ваш процесор все одно повинен буде отримати кожну інструкцію, отримати операнди з оперативної пам’яті або кеш-пам’яті, виконати суму, зберегти результат у кеші та продовжити наступну операцію. Трубопровід допомагає, але ви можете виконати лише стільки одночасних операцій, скільки у вас ядер.

Якщо ви використовуєте FPGA, ви можете реалізувати велику кількість простих суматорів, які працюють паралельно, стискаючи, можливо, тисячі сум паралельно. Хоча одна операція може зайняти більше часу, у вас величезна ступінь паралелізму.

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


GPGPU - це чудовий вклад для використання нейронних мереж!
Ботнік

Існують також нейромережеві ASIC. Компанія Intel використовувала для виготовлення 16 нейронів у 80-х.
Ліор Білія

@LiorBilia добре, я нічого про них не знаю :). Я ніколи не працював з нейронними мережами, і дуже мало з FPGA
clabacchio

Нейромережа @clabacchio Software - це програма, яка здебільшого робить множення та порівняння операцій над числами з плаваючою комою. В основному я маю на увазі ... 95% і більше.
Каміль

Звичайний процесор може зробити досить непогану роботу підсумовувати багато 8-бітних чисел; на швидкій машині час виконання буде домінувати у вартості отримання даних із пам'яті (99% вибору коду надходитиме з улов). Більш цікавим прикладом може бути робота з кодованими даними за допомогою схеми, яка вимагає досить "незвичних" домовленостей або перестановок бітів. Наприклад, якщо фрагмент даних відбору проб відео повертає переплетені біти для червоного, зеленого та синього, FPGA може легко переставити біти; звичайний процесор матиме набагато більше проблем.
supercat

6

Приблизно 3 рівні спеціалізації обчислювальної техніки:

Процесор (як у вашому ноутбуці) - найзагальніший із них. Він може зробити все, але ця універсальність поставляється ціною повільної швидкості та великим енергоспоживанням. Процесор програмується на ходу, інструкції надходять з оперативної пам'яті. Програми для процесора - це швидко, дешево і легко записати і дуже легко змінити.

FPGA (що означає Field Programmable Gate Array) є середнім рівнем. Як випливає з назви, його можна запрограмувати "у полі", тобто поза фабрикою. Зазвичай FPGA програмується один раз, цей процес можна описати як встановлення внутрішньої структури. Після цього процесу він поводиться як крихітний комп'ютер, який спеціалізується на одній задачі, яку ви обрали для нього. Ось чому він може працювати краще, ніж загальний процесор. Програмування FPGA дуже складно і дорого, і налагодження їх дуже важке.

ASIC (що означає інтегральну схему для конкретних додатків) - найкращий фахівець. Це чіп, розроблений і виготовлений для одного і єдиного завдання - завдання, яке він виконує надзвичайно швидко і ефективно. Немає можливості перепрограмувати ASIC, вона залишає фабрику повністю визначеною і марною, коли її робота більше не потрібна. Розробка ASIC - це те, що можуть дозволити собі лише великі корпорації, і налагодження їх добре, майже неможливо.

Якщо ви думаєте в "ядрах", тоді погляньте на це так: ЦП мають 4, 6, можливо, 8 великих ядер, які можуть зробити все. ASICS часто має тисячі ядер, але дуже крихітних, здатних лише до одного.

Ви можете подивитися на спільноту майнінгу біткойна. Вони роблять хеши SHA256.

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

Звичайно, немовляти ASIC коштують майже 2000 доларів при масовому виробництві, але це дає вам уявлення про те, як можна пограбувати проти спеціаліста.

Питання лише в тому: чи може FPGA принести вам більше заощаджень, ніж це б коштувало проектування? Звичайно, замість того, щоб запустити його на одному ноутбуці, ви можете спробувати запустити його на 20 ПК.


Хоча хешинг - дуже особливий випадок; зауважте, що монети на основі скріптів (навмисно) не дуже прискорені спеціалізованим обладнанням.
pjc50

1
& Налагодження ASIC, як правило, обробляється в симуляції перед відправкою на виробництво. Тому зазвичай від специфікації до виготовлення проходить 6 місяців або більше. Діагностування помилок після виробництва - це дорого, але не неможливо.
pjc50

І хоча це важко, насправді це може бути дуже важко, є такі речі, як сканування кордонів, тест JTAG та прямі методики за допомогою FIB і т. Д. Тому їх налагодити далеко не можливо, просто потрібно знати, що ти робиш . На сьогоднішній день ASIC більше посилається на проектний потік (HDL, Synthesis, P&R), що він насправді стосується фактичного пристрою, оскільки більшість пристроїв є ASIC, включаючи такі речі, як процесори ARM.
заповнювач

@ pjc50 Так, це було моє значення - в особливих випадках різниця швидкостей надзвичайно величезна. Але scrypt asics все ще належить процесорам і графічним процесорам. Не на мільйонний коефіцієнт (як у ша), але все ще набагато більше 100.
Agent_L

@placeholder так, але навіть якщо ви знайдете помилку, це не дуже корисно для всіх тих чіпів, які вже виготовлені. Я мав на увазі "налагодження", як у "видаленні помилки", а не просто "ось воно".
Agent_L

5

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

Подешевше - я маю на увазі загальні зусилля, а не вартість FPGA IC, але також дуже швидка пам'ять для FPGA (вона вам знадобиться для нейронної мережі) і весь процес розробки.

  1. Використовуйте SSE - я бачив досить прості реалізації нейронної мережі з 2-3-кратною продуктивністю. Це може бути хорошою ідеєю, якщо у вас у ноутбуці немає виділеного GPU.

    Підвищення швидкості нейронних мереж на процесорах Вінсента Ванхоука та Ендрю Старшого

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

    Ось реалізація нейронної мережі (та безкоштовний код). Тут використовується Nvidia CUDA.

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


1
Проблема тут полягає у визначенні продуктивності. Якщо ми маємо на увазі швидше, то так, fpga може бути швидшим, ніж звичайний cpus. Однак, fpga не такі гнучкі, як процесор, вони розроблені для ефективного виконання лише заздалегідь заданої задачі. Виконання іншого завдання означатиме зміну внутрішньої проводки, реально впроваджуючи іншу програму
Gianluca Ghettini
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.