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.
Odpowiedzi:
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.
źródło
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ń.
źródło
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.
źródło
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.
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.
źródło
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.
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
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).
źródło