Czy wyjście FPGA może obsługiwać komputer wielordzeniowy?

20

Nie rozumiem, jak FPGA można wykorzystać do przyspieszenia algorytmu. Obecnie pracuję na czasochłonnym algorytmie czasu rzeczywistego na laptopie quadcore, aby możliwe było równoległe wykonywanie czterech obliczeń.

Ostatnio otrzymałem powiadomienie, że FPGA może przynieść jeszcze lepszą wydajność. Nie rozumiem, jak to działa. Czy ktoś może wyjaśnić, w jaki sposób FPGA przyspiesza algorytm i czy powinienem przejść na rozwiązanie FPGA Xilinx lub Altera albo kontynuować wykonywanie obliczeń na moim laptopie quadcore.

Dodatkowe szczegóły: Algorytm obsługuje 20 sztucznych sieci neuronowych, wykorzystując dane wejściowe zasilane przez transformację pakietu falkowego

Dziękuję wszystkim za wspaniałe odpowiedzi.

Carlos - Mongoose - Danger
źródło
1
Czy rozważałeś uruchomienie algorytmu na komputerze stacjonarnym (lub serwerze)? Zazwyczaj są one szybsze niż procesory do laptopów. (Stałym czynnikiem, ale wciąż szybszym.)
ntoskrnl
1
Pomyśl o użyciu GPU do przetwarzania sieci neuronowej. Procesory graficzne mają wiele jednostek, które mogą równolegle pomnożyć liczby zmiennoprzecinkowe.
Kamil
@ntoskrnl Zakładam, że ma procesor i5 lub lepszy (4 rdzenie), więc wydajność na komputerze stacjonarnym lub serwerze będzie po prostu proporcjonalna do szybkości zegara. Może na Xeon może zyskać niewielką (20%?) Wydajność dzięki ogromnej pamięci podręcznej i lepszej przepustowości pamięci, ale to niewiele.
Kamil
Jaki masz procesor?
Kamil
Interesujące terminy pytań, otrzymaliśmy podobne pytanie o networkengineering.SE
Mike Pennington

Odpowiedzi:

23

Mój kolega ocenił to i doszedł do wniosku, że układy FPGA przewyższą komputer, gdy będziesz mieć ponad 100 niezależnych , całkowitych zadań pasujących do układu FPGA. Do zadań zmiennoprzecinkowych GPGPU pokonało FPGA. W przypadku wąskiej wielowątkowości lub operacji SIMD procesory są wyjątkowo zoptymalizowane i działają z wyższą częstotliwością zegara niż zwykle osiągają układy FPGA.

Pozostałe zastrzeżenia: zadania muszą być niezależne. Jeśli między zadaniami występują zależności danych, ogranicza to krytyczną ścieżkę obliczeń. Układy FPGA są dobre do oceny logicznej i matematyki liczb całkowitych, a także sprzętowych interfejsów o niskim opóźnieniu, ale nie do obciążeń zależnych od pamięci lub liczb zmiennoprzecinkowych.

Jeśli musisz zachować obciążenie w pamięci DRAM, będzie to wąskie gardło, a nie procesor.

pjc50
źródło
3
Aby zdecydować, czy DRAM jest limitem, musisz również wiedzieć, że FPGA mają wiele małych rozproszonych pamięci RAM (np. 500 niezależnych 9-bitowych bloków RAM), które wszystkie mogą odczytywać / zapisywać w tym samym cyklu zegara.
maksymalnie
19

FPGA działa zupełnie inaczej niż procesor.

Dla procesora piszesz oprogramowanie, które mówi sprzętowi, co ma robić. W FPGA opisujesz wewnętrznie „jak powinien wyglądać sprzęt”. To tak, jakbyś tworzył układ specjalnie dla twojego algorytmu.

Przyspiesza to wiele rzeczy i może obniżyć zużycie energii. Ma jednak swoje wady: opracowanie zajmuje znacznie więcej czasu i jest znacznie bardziej skomplikowane. Musisz myśleć zupełnie inaczej i nie możesz używać algorytmów działających w oprogramowaniu w prosty sposób.

Dla sztucznych sieci neuronowych FPGA to świetny wybór. W tej dziedzinie prowadzonych jest wiele badań.

Botnic
źródło
W rzeczywistości rozwój FPGA często odbywa się przy użyciu języków takich jak Verilog lub VHDL, które opisują zachowanie, a nie implementację - co jest czasem przydatne, ale czasem może znacznie skomplikować projektowanie asynchronicznej logiki sekwencyjnej. Gdybyśmy określili implementacje, opóźnienia propagacji byłyby nieco spójne, ale w językach behawioralnych nie ma nawet gwarancji, że będą pozytywne . Kluczową sprawą przy projektowaniu FPGA jest to, że języki bardzo ułatwiają, aby wiele (potencjalnie setki lub tysiące) różnych części układu wykonywało proste zachowania jednocześnie.
supercat
13

Wiele zależy od algorytmu, ale zasadę można wyjaśnić w prosty sposób.

Załóżmy, że Twój algorytm musi sumować wiele liczb 8-bitowych. Twój procesor nadal będzie musiał pobrać każdą instrukcję, pobrać operandy z pamięci RAM lub pamięci podręcznej, wykonać sumę, zapisać wynik w pamięci podręcznej i przejść do następnej operacji. Potok pomaga, ale możesz wykonać tylko tyle operacji jednocześnie, ile posiadasz rdzenie.

Jeśli korzystasz z FPGA, możesz zaimplementować dużą liczbę prostych sumatorów, które działają równolegle, dzieląc może tysiące sum równolegle. Chociaż pojedyncza operacja może zająć więcej czasu, masz duży stopień równoległości.

Możesz także użyć GPGPU do wykonywania podobnych zadań, ponieważ są one również wykonane z wielu prostszych rdzeni.

clabacchio
źródło
GPGPU to świetne wejście dla sieci neuronowych!
Botnic
Istnieją również ASIC sieci neuronowej. Intel tworzył taki, który zaimplementował 16 neuronów w latach 80.
Lior Bilia
@LiorBilia dobrze, nic o nich nie wiem :). Nigdy nie pracowałem z sieciami neuronowymi, a bardzo mało z FPGA
clabacchio
@clabacchio Oprogramowanie sieci neuronowej to program, który najczęściej zwielokrotnia i porównuje operacje na liczbach zmiennoprzecinkowych. Przez większość mam na myśli ... 95% lub więcej.
Kamil
Konwencjonalny procesor może całkiem dobrze zsumować wiele liczb 8-bitowych; na szybkiej maszynie czas wykonywania byłby zdominowany przez koszt pobierania danych z pamięci (99% pobrań kodu pochodziłoby z połowu). Bardziej interesującym przykładem może być praca z danymi zakodowanymi przy użyciu schematu, który wymaga raczej „nietypowych” aranżacji lub permutacji bitów. Na przykład, jeśli dane próbkowania wideo zwracają bity przeplatane dla czerwonego, zielonego i niebieskiego, układ FPGA może łatwo zmienić bity; konwencjonalny procesor miałby znacznie więcej problemów.
supercat
6

Istnieją około 3 poziomy specjalizacji sprzętu komputerowego:

Procesor (jak w laptopie) jest najbardziej ogólny z nich wszystkich. Może zrobić wszystko, ale ta wszechstronność ma swoją cenę za niską prędkość i wysokie zużycie energii. Procesor jest programowany w ruchu, instrukcje pochodzą z pamięci RAM. Programy do CPU są szybkie, tanie i łatwe do napisania i bardzo łatwe do zmiany.

FPGA (co oznacza Field Gate Programmable Array) to środkowa warstwa. Jak sama nazwa wskazuje, można go zaprogramować „w terenie”, czyli poza fabryką. FPGA zwykle programuje się raz, proces ten można opisać jako konfigurację jego wewnętrznej struktury. Po tym procesie zachowuje się jak mały komputer specjalizujący się w jednym zadaniu, które dla niego wybrałeś. To dlatego może lepiej sobie radzić niż zwykły procesor. Programowanie FPGA jest bardzo trudne i kosztowne, a debugowanie ich jest bardzo trudne.

ASIC (co oznacza układ scalony do konkretnych zastosowań) jest najlepszym specjalistą. Jest to układ zaprojektowany i wyprodukowany do jednego i tylko jednego zadania - zadania, które wykonuje niezwykle szybko i skutecznie. Nie ma możliwości przeprogramowania ASIC, pozostawia fabrykę w pełni zdefiniowaną i jest bezużyteczna, gdy jej zadanie nie jest już potrzebne. Projektowanie ASIC to coś, na co stać tylko duże korporacje, a debugowanie ich jest dobrze, prawie niemożliwe.

Jeśli myślisz w „rdzeniach”, spójrz na to w ten sposób: procesory mają 4, 6, a może 8 dużych rdzeni, które mogą zrobić wszystko. ASICS często ma tysiące rdzeni, ale bardzo małych, zdolnych do jednej rzeczy.

Możesz spojrzeć na społeczność wydobywającą bitcoiny. Robią skróty SHA256.

  • Rdzeń procesora i7: hash / s 0,8-1,5 M
  • FPGA: 5-300 M wartości skrótu / s
  • ASIC: hash / s 12000M na jeden malutki układ, hash / s 2000000M (tak, ten 2T) dla jednego 160-chipowego urządzenia

Oczywiście te dzieci ASIC kosztują prawie 2000 USD, gdy są produkowane masowo, ale daje to wyobrażenie o tym, jak bardzo wszechstronny może poradzić sobie ze specjalistą.

Jedyne pytanie brzmi: czy FPGA może przynieść Ci więcej oszczędności niż zaprojektowanie go kosztowałoby? Oczywiście, zamiast uruchamiać go na JEDNYM laptopie, możesz spróbować uruchomić go na 20 szt.

Agent_L
źródło
Hashowanie jest jednak bardzo szczególnym przypadkiem; zwróć uwagę, że monety oparte na szyfrach (celowo) nie są bardzo przyspieszalne przez wyspecjalizowany sprzęt.
pjc50,
1
& Debugowanie ASIC zwykle odbywa się w symulacji przed wysyłką do produkcji. Tak więc zwykle trwa to 6 miesięcy lub więcej od specyfikacji do produkcji. Diagnozowanie błędów po wytworzeniu jest ... drogie, ale nie niemożliwe.
pjc50,
I chociaż jest to trudne, w rzeczywistości może być bardzo bardzo trudne, istnieją takie rzeczy, jak skanowanie granic, test JTAG i techniki bezpośrednie przy użyciu FIB itp. Więc ich debugowanie nie jest niemożliwe, wystarczy wiedzieć, co robisz . Teraz dni ASIC odnosi się bardziej do przepływu projektu (HDL, Synteza, P&R), że faktycznie odnosi się do rzeczywistego urządzenia, ponieważ większość urządzeń to układy ASIC, w tym procesory ARM.
symbol zastępczy
@ pjc50 Tak, o to mi chodziło - w szczególnych przypadkach różnica prędkości jest ogromna. Ale scrypt asics nadal wykorzystuje CPU i GPU. Nie milion razy (jak w przypadku sha), ale wciąż znacznie ponad 100.
Agent_L
@placeholder tak, ale nawet jeśli znajdziesz błąd, nie ma on większego zastosowania dla wszystkich już wyprodukowanych układów. Miałem na myśli „debugowanie”, jak w „usuwaniu błędu”, a nie tylko „tutaj jest”.
Agent_L
5

Tak, FPGA może przewyższyć nowoczesny procesor (jak Intel i7) w niektórych konkretnych zadaniach, ale istnieją łatwiejsze i tańsze metody poprawy wydajności sieci neuronowej.

Tańsze - mam na myśli całkowity wysiłek, nie koszt układu scalonego FPGA, ale także bardzo szybką pamięć dla FPGA (potrzebowałbyś jej do sieci neuronowej) i cały proces programowania.

  1. Użyj SSE - widziałem dość proste implementacje sieci neuronowej o 2-3-krotnie lepszej wydajności. Może to być dobry pomysł, jeśli nie masz dedykowanego procesora graficznego w swoim laptopie.

    Poprawa prędkości sieci neuronowych na procesorach autorstwa Vincenta Vanhoucke i Andrew Seniora

  2. Użyj GPGPU (obliczenia ogólne na procesorach graficznych) - myślę, że możesz zarchiwizować wzrost wydajności 100-200x na GPU laptopów średniej klasy, takich jak GeForce 730M.

    Oto implementacja sieci neuronowej (i darmowy kod). Wykorzystuje Nvidia CUDA.

    Podejście GPGPU jest bardzo skalowalne, jeśli w pewnym momencie zdasz sobie sprawę, że potrzebujesz większej mocy obliczeniowej - możesz po prostu użyć komputera stacjonarnego z mocniejszym GPU lub nawet Nvidii Tesli K80 z 4992 rdzeniami (to jest drogie).

Kamil
źródło
1
Problem polega na zdefiniowaniu wydajności. Jeśli mamy na myśli szybsze niż tak, FPGA może być szybsza niż normalny procesor. Jednak FPGA nie są tak elastyczne jak procesor. Są zaprojektowane tak, aby skutecznie wykonywać tylko wstępnie zdefiniowane zadanie. Wykonanie innego zadania oznaczałoby zmianę wewnętrznego okablowania, a właściwie wdrożenie innej FPGA
Gianluca Ghettini