Szerző: Gálffy Csaba

2011. március 1. 12:00

Egységesíti a memóriakezelést az új CUDA

Új memóriaarchitektúrát vezet be az NVIDIA a CUDA-rendszereknél: a platformot használó szoftverek transzparensen látják, a GPU-k pedig közvetlenül elérik egymás és a rendszer memóriáját. Frissülnek a fejlesztői eszközök is, bővül a C++-támogatás.

Szeptemberben jelentette be az NVIDIA a CUDA eszközök 3.2-es verzióját, egy időben a Fermi-alapú Tesla gyorsítókártyák megjelenésével. Azóta eltelt öt hónap, így a féléves fejlesztési ciklusnak megfelelően időszerűvé vált a következő verzióról beszélni. Az NVIDIA bejelentése szerint a fejlesztőeszköz új változata 4.0-s verziószámot viseli és számos jelentős újítást vezet be a GPGPU platformon.

Egységes, virtuális

A CUDA 4.0 legfontosabb újdonságát a memóriakezelés alapos átrendezése jelenti, amely a következő lépés a több CUDA lapkát futtató rendszerek optimalizálása felé. Az első rendszerek igazi teljesítménynövekedést csak a kis utasításállománnyal, nagy adathalmazokon futtatott programok esetében értek el, a lapkák teljesen függetlenül dolgoztak még egy szerveren belül is. A CUDA következő iterációban az NVIDIA ezeket a korlátokat bontotta le, elérhetővé téve a CUDA memóriát a többi GPU, illetve más eszközök számára is. Ezen az úton a következő lépés a CUDA 4.0, amely még egyszerűbbé teszi a magok számára a kooperatív munkát és egymás memóriájának elérését.

Szoftveres oldalon ez két megoldásban ölt testet: egyrészt a teljes CUDA platform (CPU-k és GPU-k) egységes virtuális memóriacímteret kap, így az alkalmazások transzparens módon használhatják a memóriát, a virtuális címzést a meghajtó fordítja le fizikai címekre. A meghajtóra hárul így a memóriakezelés teljes feladata, az NVIDIA mérnökei szerint sikerült megoldani a sok heterogén feldolgozóegység és sok, szintén heterogén sebességű memória allokációjának és elérésének optimalizációját. Az alkalmazásfejlesztői oldalról ez a memóriakezelés jelentős egyszerűsítését jelenti, a felhasználói programok csak az egységesített memóriát látják, a háttérben pedig a meghajtó elvégzi a szükséges, alacsony szintű műveleteket.

Heterogén memória

Hardveres oldalon a GPUDirect 2.0-s verzióját aktiválja az új CUDA. Míg az 1.0-s kiadás elérhetővé tette a GPU-k mögött lévő memória elérését egyéb eszközök számára, a megoldás nem volt problémamentes és inkább a különböző csomópontok közötti Infiniband és hálózati kapcsolat optimalizálását célozta. A megoldás nagy hátránya, hogy a GPU memóriájának elérése nem közvetlen, hanem külső kérésre a rendszermemóriába került egy másolat a kért adatról, ezt tudta elérni más eszköz. A CUDA-memóriából a GPU-n és az adatbuszon keresztül a chipset és a CPU érintésével a rendszermemóriába kerülő adat által bejárt útvonal túl hosszú a csomóponton belüli GPU-k együttműködéséhez.

A GPUDirect 2.0-s verziója megszünteti a rendszermemóriába másolás szükségességét. Az adatelérés ideje így jelentősen rövidül, és a sávszélesség is kevésbé korlátozott - a GPU-k az SLI technológiából megismert módon, a PCI Express buszon keresztül közvetlenül tudnak kommunikálni. A GPUDirect 2.0 tehát gyakorlatilag NUMA-szerű (Non-Uniform Memory Access) rendszerbe rendezi a csomópontban található CUDA-magokat, a lokáis memóriát ugyanis a Tesla egységek 148 GBps sávszélességgel , a többi maghoz rendelt memóriát pedig a PCI Express 8 GBps sebességével érik el.

Komplexebb feladatok

A memóriaarchitektúra átrajzolásával az NVIDIA célja egyértelmű: míg eddig a magok meglehetősen elszigetelten dolgoztak a saját memóriájuk felhasználásával, a címtér egységesítésével és a GPU-k közti kommunikáció felgyorsításával a CUDA újabb, komplexebb feladatok elvégzésére is alkalmassá vált. A cég láthatóan próbálja a platformot a valódi általános felhasználás felé tolni, szemben a jelenleg alkalmazott magasan specializált feladatok elvégzésével.

Mindent vivő munkahelyek

Mindig voltak olyan informatikai munkahelyek, melyek nagyon jól fekszenek az önéletrajzban.

Mindent vivő munkahelyek Mindig voltak olyan informatikai munkahelyek, melyek nagyon jól fekszenek az önéletrajzban.

A rendszerszintű teljesítményen túl az NVIDIA a magonkénti feldolgozás sebességének növelését sem tévesztette szem elől. A CUDA 4.0-ban megjelent a nyílt forráskódú Thrust konyvtár, amely a C++ Standard Template Library CUDA-s megfelelője. Ugyan a Thrust eddig is elérhető volt, az NVIDIA kutatási projektjéből kifejlődő könyvtár a platform teljes értékű tagjává vált. A könyvtár elsősorban az eddig STL-t használó C++ alkalmazásokat gyorsítja és automatikusan képes elosztani a feladatokat a CPU és a GPU között. A C++ részleges támogatása a Fermivel érkezett a CUDA-platformra, azóta az NVIDIA folyamatosan implementálja az újabb és újabb C++ funkciókat, most a virtuális függvények támogatása, valamint a new és a delete dinamikus memória operátorok kerültek be, fejlesztői kérésre.

Lassan jön

A fejlesztői eszközök terén is hozott újdonságot a CUDA 4,0, megújult a Visual Profiler teljesítményelemző eszköz, amely az alkalmazást lassító problémákra mutat rá, és mostantól hasznos tippeket is ad a magasabb teljesítmény elérése érdekében. Az új platformmal érkezik egy bináris disassembler is, amely képes lesz a CUDA fordító kimenetét analizálni.

A CUDA 4.0 kiadásra jelölt verziója regisztrált fejlesztők számára március 4-én lesz elérhető, a végleges verziót illetően az NVIDIA egyelőre nem árult el pontosabb kiadási időpontot - az előző verziókból kiindulva azonban még néhány hónapig el fog tartani a friss platform csiszolása.

a címlapról