FPGA i GP(GPU) w wysokowydajnych obliczeniach i przetwarzaniu sygnałów. Podstawowe informacje.

Ponieważ już wielokrotnie wspominałem o układach rekonfigurowalnych FPGA (wiki: [PL] [Ang], pora dokładniej wyjaśnić zakres użyteczności tych urządzeń. Przede wszystkim,nie chodzi tu o klasyczne rozwiązania stosowane obecnie przez większość prostych,przeciętnych użytkowników komputerów (choć mogłoby),lecz o zaawansowane obliczenia i symulacje. Zasadniczo więc, mówimy o rozwiązaniach,które bardziej już zaczynają przypominać komputery serwerowe,lub wielkie serwerownie/klastry, niż przeciętnego peceta. (Swoją drogą zresztą,z przeciętnych pecetów można zrobić klaster typu Beowulf)

Oczywiście, w wielkich rozwiązaniach serwerowych stosowane są też liczne mikroprocesory (CPU) – zwłaszcza firm Intel (w przypadku serwerów np. Xeon,Itanium) i AMD (Opteron), w zakładach produkcyjnych zaś,głównie mikroprocesory ARM. Interesujące z pewnych względów są również inne architektury procesorów,np. architektura SPARC – chyba jedyna w pełni otwarta architektura komercyjnego,realnie sprawdzonego procesora – i jej pochodne. Nie można też zapomnieć, o potencjale pojawiających się na rynku mikroprocesorów APU (CPU + GPU) (wiki: [PL] [Ang]). Koszt użycia opartego o nie systemu wieloprocesorowego jest jednak (pomimo potencjalnie oferowanych znakomitych możliwości) większy – tak pod względem kosztów układów, jak i potencjalnej eksploatacji w obliczeniach równoległych,dlatego nie będę ich ujmował w niniejszym tekście,aby uniknąć dodatkowych komplikacji.

Jeśli chodzi o przeprowadzanie symulacji, czy złożonych równoległych obliczeń fizycznych stosunkowo dobrą opinie uzyskały ostatnio rozwiązania typu (GP)GPU. Pod pojęciem GPU kryją się jak wiadomo układy karty graficznej,zatem jako (GP)GPU rozumiemy w praktyce wykorzystanie kart graficznych w skomplikowanych obliczeniach „generalnego przeznaczenia” (General-Purpose computing on Graphic Processor Units).

https://upload.wikimedia.org/wikipedia/commons/5/5b/Geforce3gpu.jpg

Jest to możliwe dzięki faktowi że współczesne mikroprocesory kart graficznych posiadają setki albo nawet tysiące (te obecne zdecydowanie tysiące) pojedynczych rdzeni,na których wykonywane są elementarne obliczenia. Rdzenie te są dużo prostsze w budowie niż rdzenie współczesnych procesorów wielordzeniowych i mają mniejsze możliwości – ale,jak pisałem jest ich piekielnie dużo.I one wszystkie pracują naraz.

Początkowo, użycie procesora graficznego do innego rodzaju obliczeń nie było to takie proste, ale od czasu wprowadzenia rozwiązań takich jak np. technologia CUDA firmy Nvidia, obliczenia te można całkiem rozsądnie przyspieszyć. Również nowsze programy komercyjne (szczególnie dla środowiska Windows), stosujące metodę elementów skończonych w symulacjach, wykorzystują już często możliwości nowoczesnych kart graficznych. Za pomocą kart graficznych można znacznie szybciej obliczać funkcje hashujące, niż na pojedynczym współczesnym procesorze.

Czy zatem GP(GPU) jest najlepszym rozwiązaniem kwestii obliczeń równoległych ? Niekoniecznie.

Układy FPGA również zajmują znaczące miejsce, jeśli chodzi o złożone obliczenia,tym niemniej do niedawna zaprogramowanie ich było to możliwe głównie przy użyciu sprzętowych języków HDL. Układy te, jeśli chodzi o obliczanie stosowanych w kryptografii funkcji hashujących są wręcz uznawane za lepsze, zarówno jeśli chodzi o rezultaty związane z szybkością, jak i koszt energetyczny – nie tylko wśród społeczności naukowo-technicznej,ale i osób „kopiących bitcoiny”.

Przykładowy układ programowalny firmy Altera

Z efektywnością rozwiązań takich jak GP(GPU) można zapoznać się na przykładzie układu Nvidia Tesla, omówionego w artykule wikipedii i przedstawionego poniżej:

Istotne jest,że moc obliczeniową układów GPU mierzymy w FLOPSach (w Polskiej „terminologii”: „flop”),  czyli liczbie operacji zmiennoprzecinkowych na sekundę, natomiast moc obliczeniowa układów FPGA podawana jest raczej w stałoprzecinkowych jednostkach MIPS.  Nie można zatem mówić o prostej porównywalności tych układów pod względem mocy obliczeniowej

I co teraz z tym począć ? Opinie naprawdę wyglądają przecież na bardzo różne. Dla przykładu:

No dobrze. O co w tym wszystkim zatem chodzi ? Jakie wnioski można wyciągnąć z tego szumu informacyjnego, na temat roli układów GPU i FPGA w obliczeniach i systemach obliczeniowych

1. To prawda, że układy (GP)GPU i FPGA mogą konkurować na rynku obliczeniowym, mają też na nim charakterystyczne zalety i wady. I tak:

  • Układy GPU są bardzo wydajne pod względem jakości obliczeń (zwłaszcza w operowaniu danymi , przypominającymi obraz) i łatwiej dostępne na rynku (a zatem, potencjalnie tańsze w zakupie/łatwiejsze w odsprzedaniu)
  • Układy FPGA są za to bardziej wydajne pod względem energochłonności (koszt energetyczny obsługi kart graficznych i całej reszty komputera w tym procesora).
  • GPU mogą być łatwiejsze w zaprogramowaniu jak FPGA i wymagają mniejszej wiedzy, ponieważ ich programowanie z reguły odbywa się w języku wysokiego poziomu. (np. podobnych do C)
  • Układy GPU są za to potencjalnie mniej elastyczne, niż układy FPGA ponieważ są typowymi układami ASIC.

Jeśli zatem tu układy typu GPU wygrywają,to głównie ze względu na mniejsze wymagania co do wiedzy,łatwość programowania i niską cenę urządzenia. Jednak wydajność i koszty odpowiednio zaprogramowanego układu FPGA mogą być odpowiedniejsze/lepsze.

2. Generalnie układy FPGA i GPU mają jednak różne obszary zastosowań:

  • Układy GPU pracując na liczbach zmiennoprzecinkowych oferują dokładniejsze wyniki, gdy układy FPGA są znacznie mniej wydajne, jeśli chodzi o liczby zmiennoprzecinkowe (ich zaimplementowanie wymaga więcej miejsca na układzie)
  • Układy GPU nie są ze względu na swą konstrukcję wydajne przy małych liczb całkowitych czy operacjach dzielenia. Liczby całkowite to bardziej domena procesora czy układów FPGA.
  • Układy GPU uzyskują pełną efektywność tam, gdzie problem można efektywnie uczynić równoległym i minimalną rolę odgrywają zależności w obliczeniach i korzystaniu ze wspólnych danych.
  • Szczyt efektywności układów FPGA występuje tam, gdzie korzysta się z 1 algorytmu (przeprogramowanie zajmuje czas) – choć zważywszy na malejący czas, potrzebny do przeprogramowania układu, ma to coraz mniejsze znaczenie.
  • Układy FPGA mają dużo większą wydajność I/O (wejścia/wyjścia) niż karty graficzne z układem GPU, ograniczone do złącz PCI-Express (nawet wysokowydajnych PCI x16 – złącza te są prawdziwym „wąskim gardłem” dla GPGPU) i nie wymagają nadzoru procesora.
  • Układy FPGA często lepiej radzą sobie z przetwarzaniem danych z licznych źródeł, oraz pewnych form obrazu niezgodnych ze standardami wg których tworzono układy GPU.
  • Układy FPGA są szczególnie cenne dla systemów czasu rzeczywistego, czyli takich, gdzie nawet 1 µs ma znaczenie i nie może być przerw związanych np. ze współdzieleniem zasobów.
  • Nie każdy rodzaj obrazu jest domeną GPU.

Tezy te znajdują częściowe potwierdzenie również w artykule „FPGAs and GPGPUs Vie for Military System Design Mindshare” czasopisma COTS Journal. (artykuł z 2012 roku).

Zalety systemów elektronicznych opartych o FPGA, są zatem chyba szczególnie interesujące, dla rozwiązań analogicznych do np. architektury mainframe, używanej do wielu równocześnie przeprowadzanych operacji (głównie transakcyjnych) oraz wskazują,że jest ona bardziej rozwiązaniem, uzupełniającym niektóre słabości architektury (GP)GPU. Co więcej architektury oparte o FPGA, dają możliwość implementacji rozwiązań informatycznych o charakterze sprzętowym i algorytmów niemożliwych do zrealizowania przy pomocy GPU.

Oczywiście abstrahując od obliczeń musimy również pamiętać,że układy FPGA mogą zastępować niektóre rzadkie i prototypowe urządzenia, jeśli zostaną odpowiednio zaprogramowane. GPU nie. Należy też pamiętać, że duża część problemów, związanych z programowaniem tak pod architekturą (GP)GPU oraz pod układami FPGA jest do rozwiązania w środowisku OpenCL (Wiki:[PL] [Ang]).

Ponieważ w chwili obecnej, nie stać mnie ani finansowo ani pod względem praktycznym na w pełni praktyczne porównanie tych rozwiązań – ewentualne komentarze i korekty osób które tego próbowały (i które pomogą ocenić praktyczną rolę tych rozwiązań czytelnikom tego bloga) są bardzo mile widziane. Dziękuję.

Mikroprocesor – bardziej skomplikowany,ale tańszy od samochodu i dlaczego ?

Niektórzy ludzie oceniający rzeczy po ich cenach mogliby uznać,że dobry mikroprocesor jest mniej wart od samochodu.Mało kto docenia i dostrzega tu różnicę masy.Oczywiście związane są z tym też przyczyny użytkowe – ale fakt pozostaje faktem: Z racji jej masowości technika mikroprocesorowa jest bardzo niedoceniana i wielu ludzi nie zdaje sobie sprawy, jak złożoną kwestią jest uzyskanie tego mieszczącego się w dłoni układu elektronicznego, wartego te kilkadziesiąt (te stare), kilkaset do kilku tysięcy złotych.Tymczasem o ile dobry mechanik byłby w stanie złożyć jakiś samochód w garażu, to złożenie prostego wydawałoby się procesora typu ASIC wymaga już bardziej kosztownego sprzętu i jest nieco trudniejsze w praktyce…

Aby wytłumaczyć w czym leży problem zacznijmy od materiału filmowego (przypuszczalnie reklamowego) firmy GlobalFoundries , produkującej mikroprocesory m.in. dla takich firm jak AMD i Qualcomm – być może dzięki niemu osoby znające język angielski zrozumieją skalę problemu:

Jak można się dowiedzieć z załączonego filmu istnieją następujące główne problemy związane z produkcją mikroprocesorów – są to:

A) Odpowiednie zaprojektowanie mikroprocesora – niech was nie zwiedzie mały czas jaki temu poświęcono,w praktyce projekt jest kluczowy dla realizacji działania chipu w sposób prawidłowy. Nie chodzi tu tylko o ograniczenie takich problemów jak elektromigracja , wycieki elektronów czy degradacja obwodów – w praktyce pomimo faktu,że dużą część projektu mikroprocesora do formy finalnej opracować może komputer, fakty są takie,że algorytmy projektowania obwodów są wciąż na tyle niewydajne, że kluczowe elementy – celem zaoszczędzenia energii zużywanej przez obwód i miejsca na chipie muszą projektować i przeprojektowywać ludzie. Inna od oczekiwanej pozycja rynkowa (przynajmniej w porównaniu z tym czego oczekiwała firma AMD) układu AMD FX (Buldozer) w zakresie zbyt dużego zużycia energii i miejsca wg wypowiedzi 1 z byłych inżynierów AMD była właśnie spowodowana tym,że inżynierowie AMD nie projektowali kluczowej części procesora. (Swoją drogą w tym artykule po raz kolejny użyte jest słowo Silikon zamiast krzem.W języku polskim zaś silikony to nieco inne materiały – polimery krzemoorganiczne, nie krzem – jakość dziennikarstwa technicznego w Polsce po prostu jest żałosna). Poziom komplikacji mikroprocesorów przedstawię poniżej na mikrofotografii procesora UltraSparc T2:

Sparc T2 Open Source Chip

Proste ? Nie sądzę. Uproszczony diagram ? Proszę bardzo:

T2 - Diagram

Obecnie produkowane inne procesory nie wyglądają dużo prościej…

B) Produkcja – problemy produkcyjne zostały częściowo wymienione w filmie dokładniej.Wymieńmy je zatem:

  • Uzyskanie oczyszczonego krzemu – krzem zanieczyszczony oznacza wadliwe układy.W dodatku np. pierwiastki promieniotwórcze w układach pamięci, czy procesorach mogą spowodować błędy – dlatego konieczne jest ich usunięcie.
  • Wytworzenie monokryształu – z reguły metale w tym krzem krystalizują jako polikryształy,konieczne jest zatem zapewnienie do krystalizacji specyficznych, ściśle określonych warunków tak by nie doszło do zarodkowania polikryształów w strukturze. Nawet w przypadku fotowoltaiki polikryształy są mniej wydajne – cóż dopiero mówić o przypadku procesorów.Wytworzenie monokryształu zajmuje bardzo długi czas,a wytworzenie monokryształu o odpowiedniej średnicy jest kluczowe – im większa średnica, tym więcej układów można wytworzyć na pojedynczym „waflu”, co przekłada się na zysk i cenę.
  • Prawidłowe wycięcie „wafli” (ang. wafer) monokrystalicznych – może i pomijane, ale bardzo ważne. Grubość pojedynczej warstwy to przecież ułamek milimetra,ważna jest też orientacja krystalograficzna, ze względu np. na późniejsze domieszkowanie.
  • Walka z pyłem i funkcjonowanie cleanroomu – pokazane na filmie, problem uzyskania środowiska o czystości np 1000 razy większej niż naturalna jest dość złożony i wymaga nie tylko ubioru ochronnego ale i stałego zaawansowanego filtrowania i odprowadzania powietrza. Powietrze w takich clean roomach może być wymieniane setki razy,ciśnienie jest zaś często nieco wyższe, by powietrze jeśli już „uciekało” a nie przepływało (z zanieczyszczeniami) do środka.
  • Uzyskanie (co najmniej kilku) określonych warstw „matryc”, dzięki technikom fotolitografii (obecnie m.in. ultrafiolet) z zastosowaniem odpowiedniej chemicznej warstwy ochronnej. Brzmi pięknie w teorii,w praktyce jednak wymaga odpowiednich soczewek,odpowiedniej wiązki światła,odpowiedniej manipulacji wiązką i odpowiedniego ułożenia „wafla”.
  • Wykorzystanie technik implantacji jonów/domieszkowanie – wymaga odpowiednich metod nanoszenia warstw atomowych,tak samo trawienie – wymaga określonych kwasów.I wszystko oczywiście przy zachowaniu odpowiedniej dokładności !
  • Wycięcie pojedynczych mikroprocesorów
  • Testowanie – nie wspomniane,tymczasem oprócz ilości praktyczny uzysk (czyli udział  sprawnych mikroprocesorów) zależy właśnie od niego.tzw.Uzysk nie jest podawany przez producenta,tak samo jak nie były podawane parametry przy których procesor zaczynał działać niestabilnie. Realnie w latach 90-tych bywało tak,że tylko 50% procesorów przy otwarciu produkcji było sprawnych,oczywiście w miarę jak ją kontynuowano – błędów znacznie ubywało.Proces testowania jest bardzo złożony i wymagający.I tak, jak w przypadku oprogramowania – wszystkiego przetestować się zapewne nie da, dlatego trzeba się pilnować przy produktach pierwszej danej generacji.Tym niemniej, producenci w obecnych czasach wypuszczają również poprawki do oprogramowania procesorów.Zysk to co najmniej kilka procent wydajności,stąd czasem warto takie poprawki zainstalować – jest to w końcu równie dobre rozwiązanie jak np. rekompilacja programów na danym procesorze celem polepszenia wydajności.
  • Osadzanie mikroprocesora na podstawce – na filmie wygląda bardzo prosto i ładnie – ale niech was to nie zmyli.Tu bardzo łatwo o błąd i uszkodzenie mikrochipu.  Łączenie między nóżkami a układem wbrew pozorom jest równie krytyczną, co pozostałe momenty częścią procesu produkcyjnego.

Wafer - wikipedia

Jak widać na podstawie tych informacji i filmu wytworzenie mikroprocesora generalnie wymaga laboratoryjnej czystości i dokładności na wszystkich poziomach procesu produkcyjnego która jest bardzo kosztowna i praktycznie nieosiągalna w zwykłym garażu dla zwykłego człowieka.Co nie znaczy,że dla każdego zwykłego człowieka.Czy elektronika drukowana w technologii 3d będzie tu jakimś rozwiązaniem ? Zobaczymy.Aczkolwiek elektronika wysokiej jakości drukowana w technologii 3d zapewne nie będzie dostępna zbyt szybko, ze względu na problemy które wymieniłem i które w jakiś sposób muszą być najpierw rozwiązane. Nieco lepiej sprawy się mają jeśli chodzi o układy FPGA – jako wzorzec małoseryjnego procesora, bądź innego układu układy programowalne mogą  być swobodnie wykorzystane bez ponoszenia takich kosztów jakie byłyby potrzebne dla uzyskania złożonego układu ASIC.

Zresztą porównanie procesora i samochodu można streścić krótko – jeśli zepsuje się procesor za kilka tysięcy złotych to nic nie pomoże odesłanie go do mechanika.Dlaczego ? Przecież są ludzie którzy używają i samochodów za kilka tysięcy złotych w Polsce i je naprawiają,poddają tuningowi (no dobrze – procesory też można przetaktować ale nie o to chodzi) i przeróbkom. Rzecz w tym,że takie rzeczy w przypadku procesorów są w praktyce nie do zrealizowania. Dlaczego ? Ponieważ właśnie – procesor czy jego naprawa byłyby ZBYT SKOMPLIKOWANE

Ze względu na dostępność narzędzi,komplikację/kompleksowość i skalę…