GPGPU

A GPGPU a General-Purpose Computing on Graphics Processing Units rövidítése. Alapvetően egy olyan terület jellemzéséről van szó, ahol a grafikus feldolgozásra tervezett GPU, azaz grafikus processzor masszív számítási teljesítményét általános felhasználásra is be lehet fogni. Ez már több mint egy évtizede létező tudományág, de csak az utóbbi években kezdett igazán népszerűvé válni.

Amióta az első programozható grafikus processzor megjelent, azóta a fejlesztők törekszenek arra, hogy a rendszer számítási teljesítményét ne csak grafikára használják. Az első elvi értelemben is használható hardver ezen a területen a 2001-ben bemutatkozott NVIDIA GeForce 3 volt, majd ezt sorba követték a modernebb megoldások. Az elvi szempontokat viszont ki kell hangsúlyozni, mivel ekkoriban még nem voltak olyan API-k, amelyekkel általánosan lehetett volna programozni a hardvereket, és igazából erre nem is volt akkora igény, mivel az első grafikus processzorok még igen buta megoldások voltak. A grafikus API-kon keresztül azonban pár lelkes fejlesztő már elkezdte ezt a területet kutatni, így a GPGPU kezdete ide vezethető vissza.

A GeForce 3 után a hardverek folyamatosan fejlődtek, így jobb lett a programozhatóságuk, gyorsultak, illetve nem elhanyagolható módon olyan irányba indultak, amely kedvezett a GPGPU területének. Ez odáig vezetett, hogy számos gyártóktól független API készült kifejezetten a GPGPU-s feldolgozásra, megemlítve itt az OpenCL-t, a C++ AMP-t, illetve a Renderscriptet. Ezek mellett olyan zárt, gyártói megoldások is születtek, mint az NVIDIA CUDA és az AMD (ATI) Stream, melyekre még épülnek programok, de egyre jobban visszaszorulnak, vagy a fejlesztésük már be is fejeződött, ami például a Stream esetében elmondható.

A grafikus processzorok esetében elmondható, hogy a hardvernek alapvetően azok a munkafolyamatok fekszenek, amelyek nagy adatmennyiséggel dolgoznak, jól párhuzamosíthatók és az egyes adatelemek között minimális a függőség. Ez tipikusan igaz a számítógépes grafikára, így ennek mintájára bármilyen olyan általános feladatot is lehet futtatni a GPU-kon, amelyek ehhez hasonló munkafolyamatot eredményeznek. A legmodernebb GPU-architektúrák esetében azonban már olyan fejlesztéseket is bevetettek a mérnökök, melyek tipikusan kiterjesztik a GPGPU használhatóságát, igazodva a fentebb említett API-khoz. Ezek a rendszerek már modern flow control hardvert kaptak, ami a szekvenciális kódban képes irányítani a folyamatokat azokban a programokban, amelyek elágazásokat vagy ciklusokat használnak. Az AMD GCN architektúrája már nagyon hatékony ezen a területen.

A GPU-k multiprocesszorai egyre inkább hasonlítanak majd a központi processzorokra, így a következő lépcső a magas szintű programozási nyelvek natív támogatása. Erre az előbb említett GCN architektúra már részben képes, hiszen támogatja a virtuális funkciókat, a kivételkezelést, a rekurziót, valamint a pointereket. Ezek kihasználásához változások szükségesek az operációs rendszerben, illetve el kell készíteni a fejlesztőeszközöket és a fordítókat. Az OpenCL természetesen nem tűnik el, hiszen megvannak a maga előnyei, de a magas szintű programozási nyelvekre is szükség van.

Hirdetés