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.
programming-languages
hardware
sorting
MaiaVictor
źródło
źródło
Odpowiedzi:
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.
źródło
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.
źródło
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ń.
źródło