Słyszałem o ludziach używających układów FPGA do poprawy wydajności systemów, które wykonują takie czynności, jak wydobywanie monet bitowych, handel elektroniczny i składanie białek.
W jaki sposób FPGA może konkurować z procesorem pod względem wydajności, skoro procesor zwykle działa co najmniej o rząd wielkości szybciej (pod względem szybkości zegara)?
Komentarze
- FPGA robi wszystko na raz.
Odpowiedź
CPU „Są to sekwencyjne urządzenia przetwarzające. Rozbijają algorytm na sekwencję operacji i wykonują je pojedynczo.
FPGA są (lub mogą być skonfigurowane jako) równoległe urządzenia przetwarzające. Cały algorytm może zostać wykonany w pojedynczym tyknięciu zegara lub, w najgorszym przypadku, przy znacznie mniejszej liczbie taktów zegara niż w przypadku procesora sekwencyjnego. Jednym z kosztów zwiększonej złożoności logiki jest zwykle niższy limit taktowania urządzenia.
Mając na uwadze powyższe, układy FPGA mogą przewyższać procesory wykonujące określone zadania, ponieważ potrafią to samo zadanie przy mniejszych taktach zegara, aczkolwiek przy niższej ogólnej częstotliwości zegara. Zyski, które można osiągnąć, są w dużym stopniu zależne od algorytmu, ale przynajmniej rząd wielkości nie jest nietypowy dla czegoś takiego jak FFT.
Ponadto, ponieważ można zbudować wiele równoległych jednostek wykonawczych w FPGA, jeśli masz dużą ilość danych, które chcesz przepuścić przez ten sam algorytm, możesz rozprowadzić dane między równoległymi jednostkami wykonawczymi i uzyskać o kolejne rzędy wielkości wyższą przepustowość, niż można to osiągnąć przy użyciu nawet wielordzeniowego procesora.
Cena, jaką płacisz za korzyści, to zużycie energii i $$$.
Komentarze
- +1; FPGA jednak nie są tak dynamiczne jak procesory, dlatego procesory są zwykle lepiej dostosowane do komputerów PC
- ” Cena, jaką płacisz za korzyści, to zużycie energii i $$$ ' s. ” – Często jest to prawda, ale można z łatwością pokonać wysokiej klasy maszynę Intel Xeon o wartości 1000 USD za pomocą low-end 50 $ Xilinx Spartan-6 za wiele algorytmów. Ale zwykle zajmuje to dużo czasu inżynierskiego i możesz skończyć z bardzo niestandardowym projektem, który działa tylko dla jednej aplikacji i jest trudny do zmiany. Zatem kompromis to nie tylko moc i pieniądze, ale także czas opracowania algorytmu, możliwość ponownego wykorzystania i elastyczność. (Chociaż można argumentować, że czas == pieniądze.)
- markt, jeśli chodzi o twoje ostatnie zdanie, czy nie ' t FPGA ma dużo mniejszą moc niż procesory? Istnieje szeroka gama urządzeń zarówno dla procesorów, jak i FPGA, ale jeśli spojrzymy na te, które są używane do takich rzeczy, jak wydobywanie monet bitowych, nie ' t procesorów używanych do tych celów zadania są znacznie bardziej energochłonne niż FPGA, które byłyby używane?
- @David: Mówiąc o wydobywaniu bitcoinów, istotną miarą jest liczba hashów na wat. Markt mówi o ogólnym zużyciu energii. Oznacza to, że dany układ FPGA może zużywać 3 razy więcej mocy niż typowy procesor, ale może być znacznie ponad 3 razy szybszy przy wydobywaniu bitcoinów; więc dla Bitcoina, który ' jest wygrany.
- @Billy: liczba hashów na wat · sekunda, a nie na wat.
Odpowiedź
Markt ma w większości rację, ale zamierzam dorzucić moje 2 centów tutaj:
Wyobraź sobie, że mówiłem ci, że chcę napisać program, który odwraca kolejność bitów w 32-bitowej liczbie całkowitej. Coś takiego:
int reverseBits(int input) { output = 0; for(int i = 0;i < 32;i++) { // Check if the lowest bit is set if(input & 1 != 0) { output = output | 1; // set the lowest bit to match in the output! } input = input >> 1; output = output << 1; } return output; }
Teraz moja implementacja nie jest elegancka, ale jestem pewien, że zgodzisz się, że wymagałoby to wykonania pewnej liczby operacji i prawdopodobnie jakiejś pętli. Oznacza to, że w procesorze spędziłeś dużo więcej niż 1 cykl, aby wykonać tę operację.
W FPGA możesz po prostu połączyć to jako parę zatrzasków. Dostajesz swoje dane do jakiegoś rejestru, a następnie podłączasz je do innego rejestru w odwrotnej kolejności bitów. Oznacza to, że operacja zakończy się w jednym cyklu zegara w układzie FPGA. W ten sposób w jednym cyklu FPGS zakończył operację, której wykonanie zajęło procesorowi ogólnego przeznaczenia wiele tysięcy cykli! Dodatkowo można połączyć prawdopodobnie kilkaset takich rejestrów równolegle. Więc jeśli możesz przenieść kilkaset liczb na FPGA, w jednym cyklu zakończy te tysiące operacji setki razy, a wszystko to w jednym cyklu zegara FPGA.
Jest wiele rzeczy, które CPU ogólnego przeznaczenia może to zrobić, ale jako ograniczenie ustawiliśmy uogólnione i proste instrukcje, które koniecznie muszą zostać rozszerzone na listy prostych instrukcji, aby wykonać niektóre zadania. Mogę więc sprawić, by procesor ogólnego przeznaczenia miał instrukcję taką jak „odwrotna kolejność bitów dla rejestru 32-bitowego” i dał procesorowi te same możliwości co właśnie zbudowane FPGA, ale istnieje nieskończona liczba takich możliwych przydatnych instrukcji, więc włóż tylko te, które gwarantują koszt w popularnych procesorach.
Układy FPGA, CPLD i ASIC dają dostęp do surowego sprzętu, który umożliwia definiowanie szalonych operacji, takich jak „odszyfrowanie zaszyfrowanych bajtów AES256 kluczem” lub „dekodowanie ramki wideo h.264”. Mają one opóźnienia rzędu więcej niż jednego cyklu zegara w układzie FPGA, ale można je zaimplementować w znacznie bardziej efektywny sposób niż zapisywanie operacji w milionach wierszy kodu asemblera ogólnego przeznaczenia. Ma to również tę zaletę, że sprawia, że układ FPGA / ASIC o stałym przeznaczeniu dla wielu z tych operacji jest bardziej energooszczędny, ponieważ nie muszą one wykonywać tak dużej dodatkowej pracy!
Równoległość jest drugą częścią, którą zaznacza wskazał i chociaż jest to również ważne, najważniejsze jest to, że gdy FPGA równolegle wykonuje coś, co było już drogie w procesorze pod względem cykli potrzebnych do wykonania operacji. Kiedy zaczniesz mówić „Mogę wykonać w 10 cyklach FPGA, zadanie, które zajmuje mojemu procesorowi 100 000 cykli i mogę wykonywać to zadanie równolegle 4 elementy na raz „możesz łatwo zrozumieć, dlaczego FPGA może być dużo szybsze niż procesor!
Więc dlaczego nie używamy FPGA, CPLD i ASIC do wszystkiego? Ponieważ generalnie jest to cały chip, który wykonuje tylko jedną operację. Oznacza to, że chociaż możesz sprawić, aby proces działał o wiele rzędów wielkości szybciej w układzie FPGA / ASIC, nie możesz go zmienić później, gdy ta operacja nie będzie już użyteczna. Powód, dla którego nie możesz (ogólnie) zmienić FPGA raz w obwodzie jest to, że okablowanie interfejsu jest stałe i zwykle obwód nie zawiera elementów, które pozwoliłyby na przeprogramowanie FPGA w bardziej użyteczną konfigurację. Niektórzy badacze próbują zbudować hybrydowe moduły procesora FPGA, w których istnieje sekcja procesora, która może być ponownie podłączona / przeprogramowana jak FPGA, co pozwala na „załadowanie” efektywnej sekcji procesora, ale żaden z nich kiedykolwiek trafił na rynek (o ile wiem).
Komentarze
- Na przykład odwracania bitów (i wszystkich innych bitów zadania swap / selekcji) nie ' tak naprawdę nie zajmuje 1 cyklu zegara, zajmuje 0. W Twoim przykładzie potrzeba 1 cyklu zegara, aby przechowywać dane w zatrzasku , co nie jest tą samą operacją. Zajmuje 1 cykl zegara, niezależnie od tego, czy odwrócisz bity, czy nie. Operacja odwrócenia bitów to 0 cykli zegara; bez narzutu, po prostu inny routing. Różnica to nie tylko semantyka, zwłaszcza gdy zaczynasz dodawać rzeczy. Na przykład, ile czasu zajmuje przesunięcie 32-bitowego słowa w dół o 3 bity, a następnie zamiana co drugi fragment, a następnie odwrócenie?
- ” hybrydowy FPGA-CP Moduł U ” – są na rynku od dawna (patrz xilinx.com/products/silicon-devices/ soc / zynq-7000 / index.htm dla nowoczesnego, odnoszącego sukcesy), ale nawet bez specjalnego wsparcia, łączenie oprogramowania & HDL jest zwykle realizowane poprzez zaimplementowanie wewnątrz miękkiego procesora FPGA na tkaninie.
- @wjl Masz ' dobrze, że technicznie wykonanie operacji nie wymaga żadnych cykli. Twierdziłbym, że twój przykład różni się tylko semantycznie, głównie dlatego, że wykonanie tych trzech operacji logicznie przekłada się na ustalony wzorzec bitowy (tj. Zaczynam od b1b2b3b4, a kończę na b3b1b4b2). Taki był mój punkt w całej odpowiedzi. Próbowałem zwrócić uwagę, że opisywanie operacji jako serii kroków jest często konieczne tylko wtedy, gdy masz ustalony zestaw instrukcji / układ bramek.
- @wjl: Sposób, w jaki David-gardner zadał pytanie, wygląda na to, że ” CPU ” jest odpowiednikiem wysoko taktowanego, potokowego i zoptymalizowanego procesora Intel lub AMD x86 / x86_64. Jest wiele miękkich ” procesorów „, ale żaden z tych zaprojektowanych do umieszczenia w FPGA nie może być taktowany jak i7, ani też nie są prawie tak zoptymalizowane lub zdolne. Jeśli chodzi o hybrydy, bardziej miałem na myśli coś takiego: newsroom.intel.com/docs/DOC-1512 , który najwyraźniej istnieje
- Zynq naprawdę nie jest ' t zbyt złym procesorem (ARM Cortex-A9 – to samo, co obsługuje tablety itp.), Ale zgadzam się, że byłoby o wiele lepiej mieć zintegrowany FPGA o dużej szybkości x86_64. =)
Odpowiedź
Wszystkie inne popularne odpowiedzi tutaj przedstawione mówią o dosłownych różnicach między układami FPGA a procesorami. Wskazują na równoległą naturę FPGA i sekwencyjną naturę procesora lub podają przykłady, dlaczego niektóre algorytmy mogą dobrze działać na FPGA. Wszystko to jest dobre i prawdziwe, ale sugerowałbym jednak, że istnieje bardziej fundamentalna różnica między procesorami a układami FPGA.
Jaki jest wspólny mianownik między układem FPGA a procesorem? Chodzi o to, że oba są zbudowane na krzemie. A w niektórych przypadkach dosłownie te same procesy krzemu.
Podstawową różnicą są abstrakcje, które nakładamy na ten krzem. Jeden człowiek nie jest w stanie zrozumieć wszystkich szczegółów pojedynczej nowoczesnej konstrukcji procesora, od krzemu po spakowany układ scalony. Dlatego w ramach procesu inżynieryjnego dzielimy ten złożony problem na mniejsze, możliwe do rozwiązania problemy, którymi ludzie mogą się zająć.
Zastanów się, co jest potrzebne, aby przekształcić ten krzem w działający procesor. Oto nieco uproszczony widok warstw abstrakcji niezbędnych do tego celu:
-
Najpierw mamy inżynierów, którzy wiedzą, jak tworzyć tranzystory z krzemu. Wiedzą, jak zaprojektować małe tranzystory, które wysysają moc i przełączają się z częstotliwością 10 lub nawet 100 gigaherców, i wiedzą, jak zaprojektować solidne tranzystory, które mogą sterować sygnałami z wystarczającą mocą, aby wysłać je z pakietu IC i przez PCB do innego układu.
-
Następnie mamy projektantów logiki cyfrowej, którzy wiedzą, jak złożyć te tranzystory razem w bibliotekach z setkami różnych komórek logicznych. Bramki logiczne, klapki, muxy i sumatory, żeby wymienić tylko kilka. Wszystko w różnych konfiguracjach.
-
Następnie mamy różne grupy inżynierów, którzy wiedzą, jak połączyć te cyfrowe (a czasem analogowe) bloki, aby utworzyć bloki funkcjonalne wyższego poziomu, takie jak szybkie transceivery, kontrolery pamięci, predyktory gałęzi, jednostki ALU itp.
-
Następnie mamy projektantów procesorów, którzy opracowują projekty procesorów wysokiej klasy, łącząc te jednostki funkcjonalne w kompletny system.
I to nie koniec. W tym momencie mamy działający procesor, który uruchamia kod asemblera, ale nie jest to język, do którego pisze większość programistów w dzisiejszych czasach.
- Możemy mieć kompilator C do tego kompilacji do asemblera kod (prawdopodobnie przez jakąś pośrednią reprezentację)
- Moglibyśmy dodać kolejną abstrakcję na szczycie C, aby uzyskać język obiektowy
- Moglibyśmy nawet napisać maszynę wirtualną na C lub C ++ abyśmy mogli zinterpretować takie rzeczy, jak kod bajtowy Javy
I od tego miejsca warstwy abstrakcji mogą być kontynuowane. Ważną kwestią jest tutaj to, że te warstwy abstrakcji łączą się, tworząc system oparty na procesorze, który skaluje się masowo i kosztuje niewielki ułamek niestandardowego projektu krzemu.
JEDNAK ważną kwestią, którą należy tutaj poruszyć, jest to, że każda abstrakcja również niesie za sobą koszt. Projektant tranzystora nie buduje idealnego tranzystora dla każdego przypadku użycia. Buduje rozsądną bibliotekę, więc czasami używany jest tranzystor, który zużywa trochę więcej mocy lub trochę więcej krzemu, niż jest to naprawdę potrzebne do wykonania zadania. I podobnie projektanci logiki nie budują każdej możliwej komórki logicznej. Mogą zbudować 4-wejściową bramkę NAND i 8-wejściową bramkę NAND, ale co się stanie, gdy inny inżynier potrzebuje 6-wejściowej NAND? Używa 8-wejściowej bramki NAND i odłącza 2 nieużywane wejścia, co powoduje utratę zasobów krzemu i utratę mocy. I tak idzie w górę łańcucha abstrakcji. Każda warstwa daje nam sposób na poradzenie sobie ze złożonością, ale jednocześnie obciąża nas dodatkowymi kosztami w postaci krzemu i mocy.
Teraz porównaj te abstrakcje z tym, co jest potrzebne dla FPGA. Zasadniczo abstrakcje FPGA kończą się na drugim miejscu na powyższej liście. FPGA umożliwia programistom pracę w warstwie logiki cyfrowej. Jest to nieco bardziej wyrafinowane, ponieważ procesory są „ zakodowane na stałe w tej warstwie, a FPGA muszą być konfigurowane w czasie wykonywania (co, przy okazji, jest powodem, dla którego procesory zwykle działają na znacznie wyższych częstotliwościach), ale istotną ważną prawdą jest to, że są one daleko kilka abstrakcji dla układów FPGA niż dla procesorów.
Zatem Dlaczego FPGA może być szybsze niż procesor? FPGA wykorzystuje znacznie mniej abstrakcji niż procesor, co oznacza, że projektant pracuje bliżej krzemu. Nie pokrywa kosztów wszystkich wielu warstw abstrakcji, które są wymagane dla procesorów. Koduje na niższym poziomie i musi pracować ciężej, aby osiągnąć daną funkcjonalność, ale w nagrodę otrzymuje wyższą wydajność.
Ale oczywiście jest Wadą jest również mniej abstrakcji. Wszystkie te abstrakcje procesora istnieją nie bez powodu. Dają nam znacznie prostszy paradygmat kodowania, co oznacza, że więcej osób może z łatwością dla nich opracować. To z kolei oznacza, że istnieje o wiele więcej projektów procesorów, a zatem mamy ogromne korzyści w zakresie ceny / skali / czasu wprowadzenia procesorów na rynek.
Więc to wszystko. FPGA mają mniej abstrakcji, więc mogą być szybsze i bardziej energooszczędne, ale trudne do zaprogramowania. Procesory mają wiele abstrakcji, dzięki czemu są łatwe w tworzeniu, skalowalne i tanie. Ale dla tych korzyści rezygnują z szybkości i siły w handlu.
Komentarze
- Ponadto FPGA ' są zaprojektowane przy użyciu prostych, powtarzalnych bloków, które mają wykonywać proste zadania logiczne. Są dostosowane do określonych rodzajów zadań.Procesory ' s, OTOH, mają wiele złożonych części funkcjonalnych, z których każda wykonuje różne czynności. Można by pomyśleć, że procesor to grupa wielu różnych urządzeń podobnych do FPGA (w końcu ' to tylko krzem, elektronika i matematyka). Więc ' nie dotyczy abstrakcji, ale ' złożoności. Procesory ' to złożone urządzenia składające się z wielu różnych typów urządzeń elektrycznych, podczas gdy FPGA składa się z kilku. CPU to strzelba, podczas gdy FPGA to karabin.
Odpowiedź
Podczas gdy wszystkie inne odpowiedzi są poprawne , żaden z nich nie odnosi się jeszcze do przykładu wydobywania bitcoinów z twojego pytania, co jest rzeczywiście przyzwoitym przykładem. Wydobywanie bitcoinów polega na wielokrotnym obliczaniu kryptograficznej funkcji skrótu, SHA-256 wyniku innego obliczenia SHA-256, danych, w których zmienia się tylko jedna 32-bitowa liczba całkowita, aż wynikowy skrót ma określone właściwości. Każdy SHA-256 składa się z 64 powtórzeń tego samego algorytmu obejmującego 32-bitowe dodatki, przesunięcia bitów i kilka innych operacji manipulowania bitami.
Jeśli zaprogramujesz tę pętlę na 32-bitowym (lub większym) procesorze , znajdziesz jego zestaw instrukcji bardzo dobrze dopasowany do tego zadania — SHA-256 został zaprojektowany do wydajnego działania na procesorach. Nadal będziesz używać tylko może 2% obszaru krzemowego nowoczesnego procesora, z funkcjami intensywnie zajmującymi się obszarami, takimi jak buforowanie, mnożenie, dzielenie, operacje zmiennoprzecinkowe, rozgałęzianie i przewidywanie ramek itp., Albo w ogóle nie są używane, albo nie mogą zapewniają znaczny wzrost wydajności dla tego konkretnego zadania.
W konfigurowalnym sprzęcie, takim jak FPGA, po prostu zaimplementujesz tylko te 2% i dalej optymalizujesz, zapominając o wykonywaniu kodu, a raczej projektując bramki do bezpośredniego obliczania każdego z te często powtarzane podfunkcje. Potokowe w taki sposób, że każda z nich przekazuje wynik do następnego każdego cyklu zegara i powtarzane 128 razy (i ze specjalną dodatkową logiką, w której każdy SHA-256 zaczyna się i kończy), otrzymujesz wynik co cykl zegara (dla może 100 milionów hashów na sekundę na FPGA reklamowanym do obsługi 300 MHz przy prostszej logice niż ta), podczas gdy na nowoczesnym procesorze można oczekiwać jednego wyniku co kilka tysięcy cykli zegara na rdzeń, powiedzmy 10 milionów hashów na sekundę ond na wielordzeniowym procesorze wieloprocesorowym.
Jeśli ten konkretny przykład Cię interesuje, możesz rzucić okiem na moje powiązane odpowiedz na temat elementów wewnętrznych kopaczy ASIC na bitcoin.stackexchange, ponieważ wielu kopaczy FPGA pracuje w ten sam sposób, używając konfigurowalnego zamiast niestandardowego sprzętu. Tylko dla kompletności: istnieją inne możliwości, takie jak ograniczenie lub unikanie opisanego przeze mnie przetwarzania potokowego na korzyść bardziej trywialnej równoległości przy użyciu wielu niezależnych funkcji mieszających SHA-256. W zależności od ograniczeń wynikających z wewnętrznych układów FPGA i jego całkowitego rozmiaru , co może nawet dać lepszą wydajność, chociaż byłoby mniej wydajne pod względem liczby bramek i narzutu routingu, gdybyś miał całkowitą swobodę w projektowaniu całego układu, a nie tylko konfiguracji FPGA.
Komentarze
- To ' to bardzo dobry punkt na temat wykorzystania krzemu.
- Może (nieumyślnie!) wprowadza w błąd, biorąc pod uwagę, że FPGA składa się z dość złożonych komórek z wieloma fizycznymi bramkami, z których typowa aplikacja ponownie wykorzystuje tylko ułamek, umożliwiając ich producentom reklamowanie równoważnych liczb bramek, próbując powiedzieć, ile to wszystko może być warte w ” typowo ” application …
Odpowiedź
Powyższe odpowiedzi, choć poprawne, pomijają kwestię dlaczego FPGA (i niestandardowe układy ASIC) są szczególnie dobre do obliczeń bitcoinów.
Prawdziwą zaletą jest to, że duża część obliczeń SHA-256 to operacje logiczne (na przykład przesunięcia bitowe), które można wykonać w okablowanie. Wykonane w ten sposób wymagają 0 cykli zegara.
Kolejną ważną zaletą jest to, że FPGA są znacznie bardziej energooszczędne (tj. MIPS na wat) niż procesory, więc ilość energii wymagana do obliczeń jest znacznie mniej. Jest to ważne, ponieważ koszt wydobycia bitcoina zależy od tego, ile energii zużyjesz do jego wytworzenia.
Chipy ASIC są bardziej energooszczędne niż FPGA, więc mogą wykonać ten sam kod znacznie taniej. Możesz także włożyć na pokład więcej jednostek egzekucyjnych, aby je przyspieszyć. Wadą jest to, że koszt wykonania niestandardowego układu ASIC jest bardzo wysoki, więc musiałbyś sprzedać sporo chipów, aby pokryć koszty produkcji.
GPU są również używane do robienia bitcoinów, ale ponieważ są one znacznie mniej energooszczędne, tracą pozycję na rzecz układów FPGA i niestandardowych układów ASIC.
Komentarze
- Jeśli spojrzysz na algorytm haszujący Monero znany jako cryptonight, zobaczysz, że implementacja FPGA jest prawie niemożliwa ze względu na dużą ilość pamięć wymagała losowego dostępu (2 MB). W tym przypadku zaletą jest procesor.
- @ lucas92 nie możesz zintegrować pamięci RAM z układem FPGA, aby pomieścić potrzebną ilość pamięci?
- Prawdopodobnie wygrałeś ' ma wystarczająco dużo elementów logicznych w FPGA.