GPU

GPU programozás Bevezetés

GPU programozás Bevezetés

A GPU-n (Graphics Processing Unit) általános célú számítás, ismertebb nevén GPU programozás, a GPU és a CPU (Central Processing Unit) együttes használata a számítás felgyorsítására olyan alkalmazásokban, amelyeket hagyományosan csak a CPU kezel.Annak ellenére, hogy a GPU programozása gyakorlatilag csak az elmúlt két évtizedben volt életképes, alkalmazásai gyakorlatilag minden iparágat magukban foglalnak. Például a GPU programozását a videó, a digitális kép és az audiojel feldolgozásának, a statisztikai fizika, a tudományos számítás, az orvosi képalkotás, a számítógépes látás, az ideghálózatok és a mély tanulás, a kriptográfia, sőt a behatolás észlelésének felgyorsítására használták, sok más területen.

Ez a cikk elméleti bevezetésként szolgál azok számára, akik szeretnék megtanulni a GPU-gyorsítású programok írását, valamint azoknak, akiket csak általános érdekel ez a lenyűgöző téma.

A különbség a GPU és a CPU között

Sokáig a nagy felbontású, nagy pontosságú 3D grafika normává válása előtt a legtöbb számítógépnek nem volt GPU-ja. Ehelyett a CPU végrehajtotta a számítógépes programok összes utasítását az utasítások által meghatározott alapvető számtani, logikai, vezérlési és bemeneti / kimeneti (I / O) műveletek végrehajtásával. Emiatt a CPU-t gyakran a számítógép agyának nevezik.

De az utóbbi években a grafikus processzor, amelynek célja a képek létrehozásának felgyorsítása a megjelenítő eszközre történő kimenetre, gyakran segített a CPU-nak olyan problémák megoldásában, amelyeket korábban kizárólag a CPU kezelt.

Az Nvidia grafikus kártyagyártó egyszerű módszert kínál a GPU és a CPU közötti alapvető különbség megértésére: „A CPU néhány magból áll, amelyek szekvenciális soros feldolgozásra vannak optimalizálva, míg a GPU tömegesen párhuzamos architektúrával rendelkezik, amely több ezer kisebb, hatékonyabb több feladat egyidejű kezelésére tervezett magok.”

A több feladat egyidejű kezelésének képessége nagyon alkalmassá teszi a GPU-kat egyes feladatokra, például egy szó keresésére a dokumentumban, míg más feladatok, például a Fibonacci szekvencia kiszámítása, egyáltalán nem részesülnek a párhuzamos feldolgozásból.

Azonban a párhuzamos feldolgozásból jelentős hasznot hozó feladatok között szerepel a mély tanulás, amely a technika egyik legkeresettebb képessége manapság. A mély tanulási algoritmusok utánozzák az aktivitást a neocortex neuronrétegeiben, lehetővé téve a gépek számára, hogy megtanulják megérteni a nyelvet, felismerni a mintákat vagy komponálni a zenét.

A mesterséges intelligencia növekvő jelentőségének eredményeként a GPU-n lévő általános célú számítástechnikát értő fejlesztők iránti igény egyre nőtt.

CUDA Versus OpenCL Versus OpenACC

Mivel a GPU-k a számítási problémákat a grafikai primitívek szempontjából értik, a GPU-k általános célú processzorokként történő használatának korai erőfeszítései megkövetelték a számítási problémák átalakítását a grafikus kártyák nyelvén.

Szerencsére ma már sokkal könnyebb elvégezni a GPU-val gyorsított számítást az olyan párhuzamos számítási platformoknak köszönhetően, mint az Nvidia CUDA, OpenCL vagy OpenACC. Ezek a platformok lehetővé teszik a fejlesztők számára, hogy figyelmen kívül hagyják a CPU és a GPU közötti nyelvi akadályokat, és ehelyett a magasabb szintű számítási koncepciókra összpontosítsanak.

CUDA

Az Nvidia által 2007-ben kiadott CUDA (Compute Unified Device Architecture) ma a domináns tulajdonosi keretrendszer. "A CUDA segítségével a fejlesztők drámai módon felgyorsíthatják az alkalmazások számítását a GPU-k kihasználásával" - írja le az Nvidia keretrendszer.

A fejlesztők olyan programozási nyelvekből hívhatják a CUDA-t, mint a C, C ++, Fortran vagy Python, a grafikus programozás ismerete nélkül. Sőt, az Nvidia CUDA eszközkészlete tartalmaz mindent, ami a fejlesztőknek meg kell kezdeniük olyan GPU-gyorsított alkalmazások létrehozásához, amelyek jelentősen felülmúlják a CPU-hoz kötött társaikat.

A CUDA SDK elérhető Microsoft Windows, Linux és macOS rendszerekhez. a CUDA platform más számítási interfészeket is támogat, beleértve az OpenCL-t, a Microsoft DirectCompute-ját, az OpenGL Compute Shader-eket és a C ++ AMP-t.

OpenCL

A Khronos Group által 2009-ben kiadott OpenCL a legnépszerűbb nyílt, jogdíjmentes szabvány a cross-platform, párhuzamos programozáshoz. A Khronos Group szerint „az OpenCL nagymértékben javítja az alkalmazások széles spektrumának sebességét és reakciókészségét számos piaci kategóriában, beleértve a játék- és szórakoztatócímeket, tudományos és orvosi szoftvereket, professzionális kreatív eszközöket, látásfeldolgozást, valamint az ideghálózati képzést és következtetést.”

Az OpenCL-t eddig az Altera, az AMD, az Apple, az ARM, a Creative, az IBM, az Imagination, az Intel, az Nvidia, a Qualcomm, a Samsung, a Vivante, a Xilinx és a ZiiLABS valósította meg, és támogatja az összes népszerű operációs rendszert az összes főbb platformon, így rendkívül sokoldalú. Az OpenCL meghatároz egy C-szerű nyelvet a programok írásához, de más programozási nyelvekhez és platformokhoz, például Pythonhoz vagy Java-hoz léteznek harmadik féltől származó API-k.

OpenACC

Az OpenACC a párhuzamos számítások legfiatalabb programozási szabványa, amelyet ebben a cikkben ismertetünk. Eredetileg 2015-ben adta ki a Cray, a CAPS, az Nvidia és a PGI (Portland Group) társaságcsoport a heterogén CPU / GPU rendszerek párhuzamos programozásának egyszerűsítése érdekében.

„Az OpenACC egy felhasználó által vezérelt, teljesítményalapú, párhuzamos programozási modell, amelyet azon tudósok és mérnökök számára terveztek, akik érdekeltek abban, hogy kódjaikat sokféle heterogén HPC hardverplatformra és architektúrára továbbítsák, lényegesen kevesebb programozási erőfeszítés mellett, mint amire alacsony szintű igény esetén szükség van. modell.,”- állítja az OpenACC hivatalos honlapján.

Az OpenACC iránt érdeklődő fejlesztők kommentálhatják a C, C ++ és a Fortran forráskódot, hogy megmondják a GPU-nak, mely területeket kell gyorsítani. A cél egy olyan modell biztosítása a gyorsító programozásához, amely hordozható az operációs rendszerek, valamint a különféle típusú gazdagép-processzorok és gyorsítók között.

Melyiket használjam?

A három párhuzamos számítási platform közötti választás az Ön céljaitól és a környezettől függ. Például a CUDA-t széles körben használják az egyetemeken, és azt is a legkönnyebben megtanulhatónak tartják. Az OpenCL messze a leginkább hordozható párhuzamos számítási platform, bár az OpenCL-ben írt programokat még mindig egyedileg kell optimalizálni az egyes célplatformokhoz.

Tanulja meg a GPU-kódolást a LinuxHint-en.com

GPU programozás Python-nal

GPU programozás C-vel++

További irodalom

A CUDA megismerése érdekében javasoljuk, hogy kövesse a CUDA gyors üzembe helyezési útmutató utasításait, amelyek elmagyarázzák, hogyan lehet a CUDA-t Linux alatt, Windowson és macOS-on futtatni. Az AMD OpenCL programozási útmutatója fantasztikus, részletes áttekintést nyújt az OpenCL-ről, de feltételezi, hogy az olvasó ismeri az OpenCL specifikáció első három fejezetét. Az OpenACC háromlépéses bemutatót kínál, amely bemutatja, hogyan lehet kihasználni a GPU programozását, és további információk találhatók az OpenACC specifikációban.

Az X-Mouse Button Control segítségével az egér gombjait másképp alakíthatja át a különböző szoftvereknél
Lehet, hogy szüksége van egy eszközre, amely megváltoztathatja az egér vezérlését minden használt alkalmazással. Ebben az esetben kipróbálhatja az úgy...
Microsoft Sculpt Touch vezeték nélküli egér áttekintés
Nemrég olvastam a Microsoft Sculpt Touch vezeték nélküli egér és úgy döntött, hogy megveszi. Egy ideig használat után úgy döntöttem, hogy megosztom ve...
AppyMouse képernyős Trackpad és egérmutató a Windows táblagépekhez
A táblagép-felhasználók gyakran hiányolják az egérmutatót, különösen akkor, ha szokták használni a laptopokat. Az érintőképernyős okostelefonok és táb...