Obliczenia GPU – co to jest?
Procesory graficzne lub procesory graficzne są obecne we wszystkich obwodach elektronicznych, które wytwarzają jedną lub drugą formę wyświetlania, zwłaszcza w komputerze.
Wczesne procesory graficzne były stosunkowo proste. Jednak wraz z pojawieniem się gier, animacji 3D i renderowania wideo, które wypchnęły procesory poza ich granice, na ratunek musiały przyjść mocniejsze procesory graficzne.
Z biegiem czasu te nowe karty graficzne zyskiwały na mocy i złożoności, a różne firmy i badacze szukali sposobów wykorzystania ich przewagi w zakresie wykonywania równoległego. W tym poście zobaczysz, jak to wyglądało do tej pory.
Co to jest procesor graficzny?
Procesor graficzny lub jednostka przetwarzania grafiki to wyspecjalizowany obwód przeznaczony do manipulacji danymi w celu pomocy w tworzeniu obrazów do wyświetlenia. Innymi słowy, procesor graficzny to system, który tworzy obrazy widoczne na dowolnej powierzchni wyświetlacza, takiej jak monitor komputera, ekran smartfona, konsola do gier i tak dalej.
Procesory graficzne były początkowo prostymi urządzeniami, które łączyły elementy graficzne w celu stworzenia idealnego wyjścia dla konkretnego urządzenia. Jednak z biegiem czasu i wraz z pojawieniem się gier komputerowych, procesory graficzne zaczęły rosnąć pod względem złożoności i mocy, rodząc nowe GPGPU lub ogólnego przeznaczenia Computing na procesorach graficznych.
Co to jest przetwarzanie GPU?
Obliczenia GPU lub GPGPU to wykorzystanie procesora graficznego do obliczeń wykraczających poza grafikę. Oznacza to wykorzystanie procesorów graficznych wbudowanych w kartę graficzną komputera i pierwotnie przeznaczonych do przetwarzania grafiki komputerowej do obliczania innych typów danych, takich jak symulacje naukowe, kryptowaluta górnictwo, obliczenia algebry, prognozowanie pogody, sieci neuronowe i tak dalej.
Powodem tej ewolucji obliczeń GPU jest imponujący rozwój jednostek przetwarzania grafiki, który wynika z rozproszonej architektury równoległej nowoczesnych systemów GPU.
W miarę jak procesor komputera stawał się coraz mocniejszy i mógł obsługiwać bardziej złożone programy i gry, producenci kart graficznych również starali się nadążać za rozwojem nowoczesnych komputerów i grafiki 3D. Nvidia zaprezentowała GeForce 256 w 1999 roku jako pierwsza na świecie karta graficzna GPU i od tego momentu wszystko ewoluowało.
Główną przewagą kart GPU nad procesorami jest ich architektura przetwarzania równoległego, która umożliwia przetwarzanie dużych zadań związanych z danymi w rozproszony, równoległy sposób, co zapobiega powstawaniu wąskich gardeł i zawieszaniu się procesora.
Jakie są zastosowania obliczeń GPU?
Zastosowań obliczeń na GPU jest wiele. Oto kilka najważniejszych zastosowań:
- Uczenie maszynowe i sieci neuronowe
- Logika rozmyta
- Bioinformatyka
- Modelowanie molekularne
- Renderowanie wideo
- Obliczenia geometryczne
- Badania klimatyczne i prognozowanie pogody
- Astrofizyka
- Kryptografia
- Wizja komputerowa
- Łamanie hasła
- Badania kwantowe
Przetwarzanie GPU kontra procesor
Zarówno procesory graficzne, jak i procesory przetwarzają dane cyfrowe, ale robią to na różne sposoby. Procesor lub jednostka centralna jest przeznaczona do przetwarzania szeregowego przy dużych prędkościach, podczas gdy procesory graficzne są przeznaczone do przetwarzania równoległego przy znacznie niższych prędkościach. Oczywiście procesor może wykorzystywać hiperwątkowość, aby uzyskać 2 wątki na rdzeń lub nawet mieć dziesiątki rdzeni, ale zasadniczo są to procesory szeregowe.
Podczas gdy procesory mogą mieć kilka rdzeni, nowoczesne procesory graficzne są wyposażone w tysiące rdzeni, na przykład Nvidia GeForce RTX 3090 który ma ponad 10 tys. rdzeni. Aby jednak uzyskać przewagę nad procesorami, dane muszą umożliwiać przetwarzanie równoległe, na przykład przetwarzanie strumienia zawierającego tysiące obrazów jednocześnie.
Procesory graficzne kontra układy ASIC
ASIC oznacza układ scalony specyficzny dla aplikacji, co oznacza, że może wykonać tylko jedno zadanie – to znaczy zadanie, do którego wykonania został zaprojektowany. Układ ASIC to wyjątkowa maszyna opracowywana od podstaw, której zbudowanie wymaga specjalistycznej wiedzy na temat sprzętu. Układy ASIC są powszechnie stosowane w wydobywaniu kryptowalut, ponieważ oferują dobre korzyści w zakresie przetwarzania równoległego i lepszą wydajność niż procesory graficzne.
Główna różnica między nimi polega jednak na tym, że procesory graficzne są bardziej wszechstronne. Na przykład możesz łatwo zbudować platformę do wydobywania kryptowalut za pomocą procesorów graficznych. Części są łatwo dostępne, a jeśli skończysz z wydobyciem, zawsze możesz sprzedać kartę GPU graczom lub innym górnikom. Jednakże w przypadku układów ASIC można sprzedać używaną maszynę innym górnikom, ponieważ prawie nie można z nią zrobić nic innego.
Poza wydobywaniem kryptowalut jeszcze trudniej jest zdobyć maszynę ASIC, ponieważ nie jest ona produktem masowym. Kontrastuje to mocno z systemami GPU, które można dostać wszędzie i łatwo skonfigurować.
GPU kontra przetwarzanie klastrowe
Chociaż pojedyncza karta graficzna zawiera tysiące rdzeni, które dodają ogromną moc każdemu komputerowi, do którego ją podłączysz, teoretycznie możesz dodać do płyty głównej komputera tyle kart graficznych, ile jest w stanie obsłużyć, i jeszcze bardziej zwiększyć jej możliwości przetwarzania.
Z drugiej strony klaster komputerów odnosi się do wielu komputerów połączonych w sieć w celu funkcjonowania jako jeden duży komputer – superkomputer. Każdy komputer w sieci nazywany jest węzłem i może mieć na pokładzie wielordzeniowy procesor oraz jedną lub więcej kart graficznych.
Każdy klaster musi mieć węzeł główny, czyli komputer główny odpowiedzialny za zarządzanie węzłami roboczymi i planowanie ich. Będzie także zawierać oprogramowanie, które przydziela dane i programy dla węzłów roboczych w celu obliczania i zwracania wyników.
Przyspieszenie GPU kontra Hyper-threading
Procesor został zaprojektowany do obsługi wielu zadań jednocześnie i dlatego działa z bardzo dużymi prędkościami, planując czas przetwarzania pomiędzy wieloma procesami. Jeśli jednak napotka funkcję wymagającą dużej mocy obliczeniowej, może spędzić trochę czasu w pętli, zanim powróci do innych procesów. Zwykle skutkuje to ogólnym spowolnieniem komputera, a w gorszych przypadkach całkowitym zawieszeniem systemu.
Projektanci komputerów mogą uniknąć tego przerażającego scenariusza, stosując hiperwątkowość lub akcelerację GPU. Hyper-threading pozwala pojedynczemu rdzeniowi procesora działać jako dwa wątki przetwarzające. Zatem gdy jeden wątek zostanie uwięziony w pętli wymagającej dużej mocy obliczeniowej, drugi wątek może nadal utrzymywać system w całości.
Nowoczesne komputery mają teraz wiele rdzeni, od 2 do 4, 8, 16, 32 i tak dalej. Ponadto obsługują technologię Hyper-Threading, więc 2-rdzeniowy procesor oferuje 4 wątki, 4-rdzeniowy oferuje 8 wątków i tak dalej.
Hyper-threading w przypadku wielordzeniowych procesorów rozwiąże większość problemów obliczeniowych, zapobiegnie wąskim gardłom i zapewni najwyższą wydajność w prostych grach, produkcji muzycznej oraz małych projektach graficznych, wideo i uczenia maszynowego. Kiedy jednak potrzebujesz większej mocy, często właściwym rozwiązaniem jest procesor graficzny.
Akceleracja GPU lub sprzętowa to zdolność aplikacji do wykorzystania mocy przetwarzania równoległego procesora graficznego do przetwarzania dużych ilości danych bez obciążania procesora. Prawidłowe działanie wielu profesjonalnych aplikacji zależy od akceleracji GPU. Należą do nich programy do projektowania/renderowania wideo i animacji, kodery, kryptografia, duże sieci neuronowe i tak dalej.
Podstawy programowania GPGPU
Programowanie procesorów graficznych ogólnego przeznaczenia początkowo odbywało się przy użyciu DirectX i OpenGL biblioteki. Zostały one jednak zaprojektowane wyłącznie do tworzenia grafiki, więc aby działały, konieczne było ponowne wykorzystanie danych w modelach graficznych.
Na szczęście na przestrzeni lat nastąpił znaczny postęp w GPGPU, co doprowadziło do powstania bibliotek, języków programowania i frameworków. Najpopularniejszym z tych frameworków jest CUDA firmy Nvidia.
CUDA ułatwia każdemu programiście zanurzenie się w programowaniu procesorów graficznych bez konieczności znajomości szczegółów klasycznego programowania procesorów graficznych. Zapewnia funkcje, które wykraczają poza grafikę, a wiele jednostek ma nawet funkcje specyficzne dla uczenia maszynowego.
Dostępne biblioteki ułatwiają także tworzenie od podstaw nowych programów akcelerowanych przez GPU lub dostosowywanie napisanych wcześniej programów do przetwarzania równoległego. Wybierasz odpowiednią bibliotekę, optymalizujesz kod pod kątem pętli równoległych, rekompilujesz i gotowe.
Rdzenie CUDA kontra procesory strumieniowe
Często spotykasz się z terminami Rdzenie Cuda i procesory strumieniowe. Oba terminy odnoszą się po prostu do rdzenia GPU lub Jednostki arytmetyczne i logiczne procesora graficznego. CUDA Core to zastrzeżona technologia firmy Nvidia, natomiast procesory Stream pochodzą od AMD.
Innym terminem, z którym możesz się spotkać, jest wieloprocesorowy strumień strumieniowy lub SM. To kolejna technologia Nvidii, która pierwotnie grupowała 8 rdzeni CUDA na SM. Wykonuje za jednym razem 32 osnowy, wykorzystując 4 cykle zegara na polecenie. Nowsze konstrukcje mają teraz ponad 100 rdzeni na wieloprocesor do przesyłania strumieniowego.
Najpopularniejsze języki i biblioteki GPU
Istnieje wiele bibliotek i języków, które działają zarówno na platformach Nvidia CUDA, jak i AMD. Oto tylko kilka:
- Nvidia cuBLAS – Podstawowe podprogramy algebry liniowej dla CUDA
- cuDNN – Biblioteka głębokich sieci neuronowych
- OpenCL – Otwarty standard programowania równoległego
- Openmp – Dla procesorów graficznych AMD
- CZEŚĆ P – Biblioteka C++
- Nvidia cuRAND – Losowe generowanie liczb
- cuFFT – Dla szybkiej transformaty Fouriera
- Nvidia NPP – Przetwarzanie obrazu i sygnału 2D
- GPU VSIPL – Przetwarzanie obrazu wektorowego i sygnału
- OpenCV – Biblioteka GPU do widzenia komputerowego
- OtwórzACC – Język rozwoju równoległego
- W PyCU – Python dla platformy CUDA
- TensorRT – Głębokie uczenie się dla CUDA
- CUDA C++ – Język C++ dla CUDA
- CUDA C – Język C dla CUDA
- CUDA Fortran – CUDA dla programistów FORTRAN
Najpopularniejsze projekty klastrów GPU
Według stanu na czerwiec 2022 r. 8 z 10 najszybszych superkomputerów na świecie jest akcelerowanych przez procesor graficzny. Wszystkie mają również wspólny system operacyjny Linux i są następujące:
Ranga | Nazwa | Petaflopy | Rdzenie procesora | Rdzenie GPU | Moc (kW) | Rok |
1. | Granica | 1,102 | 591,872 | 8,138,240 | 21,100 | 2022 |
2. | POKÓJ | 151.90 | 75,264 | 1,034,880 | 2,900 | 2022 |
3. | Szczyt | 148.6 | 202,752 | 2,211,840 | 10,096 | 2018 |
4. | Piła | 94.64 | 190,080 | 1,382,400 | 7,438 | 2018 |
5. | Perlmuttera | 64.59 | N / A | N / A | 2,589 | 2021 |
6. | Selene | 63.46 | 71,680 | 483,840 | 2,646 | 2020 |
7. | Tianhe-2 | 61.445 | 427,008 | 4,554,752 | 18,482 | 2013 |
8. | Do gwiazd | 46.1 | 21,632 | 297,440 | 921 | 2022 |
Podsumowanie
Docierając do końca tego zanurzenia się w obliczeniach na GPU i wszystkim, co się z tym wiąże, powinieneś już mieć pojęcie o jego mocy i zakresie.
Aby uzyskać więcej informacji, możesz sprawdzić platformę dla programistów Nvidia tutaj lub że z AMD tutaj.