Wprowadzenie programowania GPU

Wprowadzenie programowania GPU

Obliczenia ogólnego przeznaczenia na procesor graficzny (jednostka przetwarzania grafiki), lepiej znana jako programowanie GPU, to użycie GPU wraz z procesorem (jednostka przetwarzania centralnego) w celu przyspieszenia obliczeń w aplikacjach tradycyjnie obsługiwanych tylko przez CPU.Mimo że programowanie GPU było praktycznie opłacalne tylko przez ostatnie dwie dekady, jego aplikacje obejmują teraz praktycznie każdą branżę. Na przykład programowanie GPU zostało wykorzystane do przyspieszenia wideo, obrazu cyfrowego i przetwarzania sygnałów audio, fizyki statystycznej, obliczeń naukowych, obrazowania medycznego, wizji komputerowej, sieci neuronowych i głębokiego uczenia się, kryptografii, a nawet wykrywania wtargnięcia, wśród wielu innych obszarów.

Artykuł ten służy jako teoretyczne wprowadzenie skierowane do tych, którzy chcieliby nauczyć się pisać programy akcelerowi GPU, a także tych, którzy są tylko ogólne zainteresowanie tym fascynującym tematem.

Różnica między GPU a procesorem

Długo przed wysokiej rozdzielczością grafikę 3D o wysokiej wierności stała się normą, większość komputerów nie miała procesora graficznego. Zamiast tego procesor przeprowadził wszystkie instrukcje programów komputerowych, wykonując podstawowe operacje arytmetyczne, logiczne, sterujące i wejściowe/wyjściowe (I/O) określone przez instrukcje. Z tego powodu procesor jest często opisywany jako mózg komputera.

Ale w ostatnich latach GPU, który ma na celu przyspieszenie tworzenia obrazów do wyjścia na urządzenie wyświetlające, często pomaga procesorowi w rozwiązywaniu problemów w obszarach, które wcześniej były obsługiwane wyłącznie przez procesor.

NVIDIA Producent kart graficznych zapewnia prosty sposób zrozumienia podstawowej różnicy między GPU a procesorem: „CPU składa się z kilku rdzeni zoptymalizowanych do sekwencyjnego przetwarzania seryjnego, podczas gdy GPU ma masowo równoległą architekturę składającą się z tysięcy mniejszych, bardziej wydajnych, bardziej wydajnych rdzenie zaprojektowane do obsługi wielu zadań jednocześnie."

Możliwość obsługi wielu zadań jednocześnie sprawia, że ​​GPU są bardzo odpowiednie do niektórych zadań, takich jak wyszukiwanie słowa w dokumencie, podczas gdy inne zadania, takie jak obliczenie sekwencji Fibonacciego, w ogóle nie korzystają z przetwarzania równoległego.

Jednak wśród zadań, które znacząco korzystają z równoległego przetwarzania, jest głębokie uczenie się, jedna z najbardziej poszukiwanych umiejętności w dziedzinie technologii. Algorytmy głębokiego uczenia się naśladują aktywność w warstwach neuronów w neokorcie, umożliwiając maszynom naukę rozumienia języka, rozpoznawania wzorów lub komponowania muzyki.

W wyniku rosnącego znaczenia sztucznej inteligencji popyt na programistów, którzy rozumieją ogólne przetwarzanie na procesor graficznych.

CUDA kontra opencl kontra OpenAcc

Ponieważ GPU rozumie problemy obliczeniowe w kategoriach prymitywów graficznych, wczesne wysiłki na rzecz wykorzystania GPU jako procesorów ogólnego przeznaczenia wymagały przeformułowania problemów obliczeniowych w języku kart graficznych.

Na szczęście znacznie łatwiej jest wykonywać komputerowe komputery GPU dzięki równoległym platformom obliczeniowym, takim jak CUDA, OpenCL lub OpenAcc Nvidia. Platformy te pozwalają programistom zignorować barierę językową, która istnieje między procesorem a GPU, a zamiast tego skupiają się na koncepcjach obliczeniowych na wyższym poziomie.

CUDA

Początkowo wydane przez NVIDIA w 2007 r., CUDA (Compute Unified Device Architecture) jest dziś dominującymi ramami własnymi. „Dzięki CUDA programiści są w stanie dramatycznie przyspieszyć aplikacje obliczeniowe, wykorzystując moc GPU”, opisuje framework nvidia.

Deweloperzy mogą nazywać CUDA z języków programowania, takich jak C, C ++, Fortran lub Python bez żadnych umiejętności w programowaniu graficznym. Co więcej, zestaw narzędzi CUDA z NVIDIA zawiera wszystko, czego potrzebują programiści, aby zacząć tworzyć aplikacje akcelerujące do GPU, które znacznie przewyższają ich odpowiedniki związane z procesorem.

SDK CUDA jest dostępny dla Microsoft Windows, Linux i MacOS. Platforma CUDA obsługuje również inne interfejsy obliczeniowe, w tym OpenCL, Microsoft DirectComput, OpenGL Compute Shaders i C ++ AMP.

Opencl

Początkowo wydany przez Khronos Group w 2009 roku, OpenCL jest najpopularniejszym otwartym, bezbłędnym standardem dla programów równoległych, równoległych. Według grupy Khronos „Opencl znacznie poprawia szybkość i reakcję szerokiego spektrum zastosowań w wielu kategoriach rynkowych, w tym w tytułach gier i rozrywki, oprogramowaniu naukowym i medycznym, profesjonalne narzędzia kreatywne, przetwarzanie wizji oraz szkolenie sieci neuronowej oraz wnioskowanie."

Opencl został jak dotąd zaimplementowany przez Altera, AMD, Apple, Arm, Creative, IBM, Imagination, Intel, Nvidia, Qualcomm, Samsung, Vivante, Xilinx i Ziilabs, i obsługuje wszystkie popularne systemy operacyjne na wszystkich głównych platformach, tworząc to Niezwykle wszechstronny. OpenCL definiuje język podobny do pisania programów, ale istnieją interfejsy API innych firm dla innych języków i platform programowania, takich jak Python lub Java.

Openacc

OpenACC jest najmłodszym standardem programowania do obliczeń równoległego opisanego w tym artykule. Początkowo został wydany w 2015 r. Przez grupę firm obejmujących Cray, CAPS, NVIDIA i PGI (grupa Portland), aby uprościć równoległe programowanie heterogenicznych systemów procesora/GPU.

„OpenACC to oparty na dyrektywach model równoległego programowania w zakresie, zaprojektowany dla naukowców i inżynierów zainteresowanych przeniesieniem swoich kodów do szerokiej zmienności heterogenicznych platform i architektury HPC z znacznie mniejszym wysiłkiem programowania niż wymagane z niskim poziomem Model.,”Stwierdza OpenACC na swojej oficjalnej stronie internetowej.

Deweloperzy zainteresowani OpenACC mogą adnotować kod źródłowy C, C ++ i Fortran. Celem jest dostarczenie modelu programowania akceleratora, który jest przenośny w systemach operacyjnych i różnych rodzajach procesorów hosta i akceleratorów.

Którego powinienem użyć?

Wybór między tymi trzema równoległymi platformami obliczeniowymi zależy od twoich celów i środowiska, w którym pracujesz. Na przykład CUDA jest szeroko stosowana w środowisku akademickim, a także uważa się za najłatwiejszy do nauczenia się. OpenCL jest zdecydowanie najbardziej przenośną równoległymi platformą obliczeniową, chociaż programy napisane w OpenCL nadal muszą być indywidualnie zoptymalizowane dla każdej platformy docelowej.

Naucz się kodowania GPU na Linuxhint.com

https: // linuxhint.COM/GPU-Programming-Python/

https: // linuxhint.COM/GPU-Programming-CPP/

Dalsze czytanie

Aby zapoznać się z CUDA, zalecamy przestrzeganie instrukcji w przewodniku CUDA Quick Start, który wyjaśnia, jak uruchomić CUDA w Linux, Windows i MacOS. Przewodnik po programowaniu OpenCL AMD zapewnia fantastyczny, dogłębny przegląd OpenCL, ale zakłada, że ​​czytelnik jest zaznajomiony z pierwszymi trzema rozdziałami specyfikacji OpenCL. OpenACC oferuje trzyetapowy samouczek wprowadzający zaprojektowany w celu wykazania, jak skorzystać z programowania GPU, a więcej informacji można znaleźć w specyfikacji OpenACC.