2011. március 12., szombat

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

Új memória architektú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ória cí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ória architektú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.


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 könyvtá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.

0 megjegyzés :

Megjegyzés küldése