Dlaczego komputery nie są dostarczane ze specjalistycznym sprzętem, takim jak sieci sortujące?

10

Zamiast programowania w taki sposób, w jaki to robimy, dlaczego nie opracowujemy specyfikacji typowych zadań, takich jak „sortowanie”, a następnie nie pozwalamy środowisku skompilować go, aby jak najlepiej wykorzystać jego sprzęt? W ten sposób moglibyśmy wysłać komputer z nowym specjalistycznym sprzętem, takim jak sieci sortujące, i automatycznie pracowałby z istniejącym kodem.

MaiaVictor
źródło
2
Kup kartę PCI FPGA i zaimplementuj dowolne rozszerzenia.
SK-logic
Sprzęt to nie magia. Wiele rzeczy nie może zostać przyspieszonych znacznie (lub wcale) przez wyspecjalizowany sprzęt, a nawet jeśli to możliwe, istniejący sprzęt często musi zostać dostosowany (lub przynajmniej ponownie skompilowany). Zobacz yosefk.com/blog/its-done-in-hardware-so-its-cheap.html
3
@WorldEngineer Nie widzę, jak to wchodzi w obraz. Przeciętny użytkownik nie wie, do czego służy 80% rzeczy we współczesnym procesorze, jest szczęśliwy, ponieważ powiedziano mu, że przyspiesza to działanie ich programów (a to jądro prawdy). Jeśli sortowanie rzeczywiście było tak powszechne, jak przypuszcza OP i można je zoptymalizować za pomocą dedykowanego sprzętu, umieściliby go obok predyktora gałęzi („co to jest, ogrodnictwo?”), Opublikowali komunikat prasowy z informacją, że stworzyli aplikacje X i Y 5% szybciej i sprzedaj to.
1
Przypomina mi to ideę rdzeni konserwacyjnych , które są ukierunkowane raczej na wydajność energetyczną niż na szczytową wydajność.
Paul A. Clayton

Odpowiedzi:

19

Przede wszystkim komputery są dostarczane ze specjalistycznym sprzętem . Każdy laptop i komputer stacjonarny sprzedawany od kilku lat ma teraz specjalizowany koprocesor, procesor graficzny, który obsługuje algorytmy przetwarzania wizualnego, takie jak aplikacje wideo i gry. Bardzo duże komputery ( np. „Superkomputery”, rodzina System Z firmy IBM) mają wiele wyspecjalizowanych procesorów do obsługi przetwarzania numerycznego („przetwarzanie wektorowe”) itp .

Po drugie, sortowanie jest jednym z najlepiej zbadanych aspektów obliczeń i okazuje się być zbyt skomplikowane, aby można je było wbudować w sprzęt w więcej niż najprostszych przypadkach. Sortowanie polega na szybkości i poprawności. Szybkość zależy od wyboru algorytmu, rodzaju i zmienności danych oraz objętości danych. Prawidłowość zależy od rodzaju i kontekstu danych. Posortowanie średniej liczby tablic liczb całkowitych pasujących do natywnego rozmiaru słowa procesora ( np., 31 lub 63 bitów plus znak). Sortowanie ciągów znaków, które zawierają więcej niż tylko wartości ASCII, jest niezwykle skomplikowane - IBM opublikował ponad 500 stronic książki 20 lat temu, omawiając kwestie zestawów znaków w kontekście granic narodowych i powszechnego użycia. A potem pojawia się kwestia nieciągłych danych - sortowanie połączonej listy wymaga ścigania wskaźników w całej pamięci.

Ross Patterson
źródło
10

Głównym problemem jest to, że algorytmy sortowania (1) wymagają dużej elastyczności, a (2) i tak bardzo trudno byłoby przyspieszyć przy użyciu sprzętu.

Jedną rzeczą jest to, że algorytmy sortowania są już wystarczająco szybkie, aby przekroczyć przepustowość pamięci procesora - procesor będzie już spędzał dużą część czasu, czekając, aż dane przesuną się do tyłu i do przodu do pamięci głównej. Przyspieszony sprzętowo koprocesor sortowania lub specjalna instrukcja sortowania miałyby ten sam problem.

Sposób wykorzystania tego pasma pamięci polega na zastosowaniu lepszych algorytmów i struktur danych, które mają lepszą „lokalizację”, i nadal wykonuje się znaczącą pracę w tej dziedzinie, zwłaszcza „algorytmy niepamięci cache” (są one nieświadome w tym sensie, że działają) niezależnie od szczegółów buforowania, podczas gdy algorytmy „rozpoznające pamięć podręczną” są dostosowane do określonego rozmiaru strony pamięci podręcznej itp.).

W przeciwieństwie do tego, aplikacje medialne (audio i grafika, szczególnie grafika 3D) wykorzystują niektóre bardzo powtarzalne struktury - oczywiście istnieje elastyczność, ale jest ona zbudowana na dużej i bardzo dobrze skonstruowanej podstawie. Dzięki temu akceleracja grafiki mogła zacząć się od rzeczy takich jak Blitting (konfigurowalna, ale wciąż bardzo dobrze zorganizowana operacja kopiowania bloków) i rysowanie linii / wielokątów. Oznaczało to, że wraz z bardziej zaawansowanym przetwarzaniem grafiki i dźwięku operacje wektorowe stały się oczywistym celem optymalizacji - najpierw MMX (wektory liczb całkowitych), a następnie SSE (wektory liczb zmiennoprzecinkowych). Oznaczało to, że istniała dość dobrze określona struktura działania silnika grafiki 3D, gdy stary potok grafiki 3D o stałej funkcji został przeniesiony na sprzęt graficzny 3D.

Jednak w przypadku grafiki 3D to, co kiedyś zrobiono w sprzęcie, teraz jest wykonywane w oprogramowaniu w celu zapewnienia elastyczności - shadery to na przykład oprogramowanie, dzięki czemu otrzymujemy ogromną gamę różnych shaderów dających wygląd różnych materiałów. Jednak to oprogramowanie nadal działa w dużo bardziej uporządkowany sposób niż oprogramowanie ogólne, a zatem nadal może korzystać ze znacznie bardziej wyspecjalizowanej platformy sprzętowej. Właśnie dlatego Twoja karta graficzna może teraz przyspieszyć wszystko, od fizyki po łamanie haseł - aplikacje, które również pasują do tego samego modelu i mogą być skutecznie wdrażane za pomocą zestawów instrukcji, które zapewniają nowoczesne procesory graficzne.

Procesory graficzne są teraz duchowymi lub faktycznymi potomkami cyfrowych procesorów sygnałowych, które były (i prawdopodobnie nadal są) rodzajem specjalistycznego procesora do obsługi sygnałów cyfrowych (np. Audio).

Co prowadzi do końcowego punktu - algorytmy sortowania można przyspieszyć sprzętowo. W zależności od danych sortowanie można obsługiwać za pomocą instrukcji MMX lub SSE (pojedyncza instrukcja-wiele danych) na procesorze, ale prawdopodobnie nie ma większego sensu z powodu problemu z przepustowością pamięci - być może możesz być nieco bardziej energooszczędny ale w ten sposób. Możesz jednak również użyć sprzętu graficznego. W ten sposób możesz skorzystać z często znacznie lepszej przepustowości pamięci dla kart graficznych. W ten sposób nie będziesz w stanie wymienić wszystkich rodzajów, ale z pewnością jest to możliwe i prawdopodobnie zrobione w razie potrzeby.

IOW z powodu różnych problemów ekonomicznych i praktycznych, projektowanie sprzętu specjalnie w celu przyspieszenia stosunkowo wąskiego zadania, takiego jak sortowanie, naprawdę nie ma sensu. Funkcja, która przyspiesza szerszy zakres zadań lub sprawia, że ​​istniejący sprzęt przyspieszający ma zastosowanie do szerszego zakresu zadań, często ma znacznie większy sens.

Steve314
źródło
3

Ale robią to! Są to tak zwane rozszerzenia zestawu instrukcji. (Rzeczy takie jak SSE i tym podobne)

Niektóre zadania mają bardzo ładne implementacje w oprogramowaniu. Zazwyczaj te implementacje są wystarczająco dobre, aby wykonać zadanie, więc nie jest wymagany żaden specjalistyczny sprzęt. Jeśli chcesz stworzyć specjalistyczny sprzęt, musisz mieć bardzo szeroki zakres aplikacji, aby było to opłacalne.

Jeśli spojrzysz na sprzęt, który może sprawić, że to zadziała, domyślam się, że będziesz patrzył na coś takiego jak FPGA. Jak widać w przypadku układów FPGA, układ stałby się znacznie droższy, podczas gdy nie byłby odpowiedni do wielu zastosowań.

Na nie
źródło
Będę musiał znaleźć google dla SSE, ale z góry sortowanie jest prawdopodobnie uniwersalne. Czy jest implementowany na poziomie sprzętowym?
MaiaVictor
Ech, skoro już tam jesteśmy, poleciłbyś książki?
MaiaVictor
Mówiłem właśnie o optymalizacjach specyficznych dla zadania, które są implementowane w procesorach w stylu CPU, ponieważ sieci sortujące są używane jako przykład. Nie wiem, czy SSE czy jakikolwiek inny zestaw instrukcji obejmuje optymalizacje sortowania. Zrobiłem sieci sortujące google, a ponieważ istnieją zoptymalizowane ogólne implementacje, myślę, że implementacje oprogramowania mogłyby równie dobrze wykonać zadanie, jeśli implementacja jest wykonana poprawnie.
Onno
Muszę zaznaczyć, że większość rozszerzeń zestawu instrukcji działa na niższym poziomie niż sieć sortująca, której użyto jako przykładu, ale nie jest niemożliwe opracowanie optymalizacji wielu rejestrów, która może wykonać sortowanie w ten sposób. Ale dla producentów procesorów pytanie brzmiałoby: „czy spłaci się na tyle, aby uzasadnić koszty?”.
Onno