A Microsoft az elmúlt év nyarán mutatta be a C++ AMP (Accelerated Massive Parallelism) platformot, mely elsősorban a heterogén módon programozható rendszerekben rejlő lehetőségek kiaknázására használható. A felület főleg az OpenCL ellenfele lehet, és utóbbi nyílt mivolta végett ez nehéz meccsnek tűnik, de a Microsoft is nyílt specifikációkkal dolgozik a C++ AMP esetében. Ez szokatlan a redmondi óriáscégtől, de a vállalat ígéretet tett arra, hogy a technológiához használt szabadalmak ingyenes licenc mellett használhatók fel, és ez később sem változik majd meg, amire a Microsoft konkrét kötelezettséget is vállalt. Ebből a szempontból a C++ AMP értékelhető alternatíva mindenki számára, és az OpenCL komoly ellenfele lehet. A Microsoft persze valószínű, hogy nem kitörő örömmel vállalta a nyílt specifikációkat, de az OpenCL az Evans Data felmérése szerint 2011-ben a legdinamikusabban növekvő felület volt. Ennek megfelelően Észak-Amerikában, illetve az EMEA (Európa, a Közel-Kelet és Afrika) országokban már a második helyen tanyázik rendre az Intel Threading Building Blocks és az OpenMP mögött, az APAC (Ausztrália, Ázsia és a csendes-óceáni térség) országok esetében pedig a harmadik helyet foglalja el az előbbi két felület mögött.
Hirdetés
A C++ AMP a programozóknak kedvező módon közelíti meg a kérdést, vagyis elsősorban az egyszerűségre helyezi a hangsúlyt. A felület úgymond direktívákat ad a fordítónak, hogy a programkód mely részeit lehet GPU-val gyorsítani. Mindezt természetesen a programozónak kell részleteznie. A direktívákkal a fordítóprogram számára felismerhetővé vállnak a masszívan párhuzamosítható kódrészletek, majd a program fordítása az összegyűjtött információk alapján történik meg. Persze a jó eredményhez a programkód módosítására is szükség lehet, hiszen itt a gyorsítás a párhuzamos feldolgozással kerül előtérbe. Ha nincs párhuzamosan futtatható kódrészlet, akkor lényegében nem alkalmas a kód a GPU-n való futtatásra. Ezt is a fejlesztőnek kell koordinálnia, így a C++ AMP nem csodaszer, hanem egy újabb eszköz, amivel meg lehet próbálni elegánsan kihasználni a GPU-k erejét.
A C++ AMP hivatalosan a Visual Studio 11-ben lesz elérhető, melynek megjelenése még kérdéses, de valószínű, hogy a Windows 8 startjára befut. A nyílt specifikációknak hála azonban a C++ AMP gyakorlatilag más fejlesztőkörnyezetekbe is integrálható. A felülethez természetesen szükséges a driver oldaláról egy alapszintű támogatás, de minden olyan grafikus mag megfelel az igényeknek, mely támogatja a DirectCompute 5.0-s platformot. Egyszerűbben fogalmazva DirectX 11-es GPU-ra, vagy IGP-re lesz szükség a C++ AMP támogatásához. A CPU oldalán nincs különösebb követelmény, azaz bármelyik modernebb processzor megfelelő.
A C++ AMP persze elsődlegesen a heterogén módon történő programozást szeretné erősíteni, így igazán jó eredményt úgy lehet elérni vele, ha a fejlesztő jól strukturálja a programot, mivel a CPU és a GPU eltérő karakterisztikája a megfelelő kódrészleten lehet igazán előnyös. Ezen a ponton a legjobb megoldást az APU-k képzik, melyek lényegében heterogén módon programozható lapkák, rendkívül alacsony kommunikációs késleltetéssel a CPU-magok és az IGP között. A PC-s piacon ebbe a sorba csak az AMD Brazos platformja, illetve a Llano APU állt be eddig, de idén az Intel is rálép erre az ösvényre az Ivy Bridge kódnevű fejlesztéssel, illetve az ARM is a heterogén jövőképben bízik, ideértve a partnereket is, mint például az NVIDIA és a Samsung, mely vállalatok már konkrét tervekkel is rendelkeznek a komoly integrációval kapcsolatban. Szintén meg lehet említeni a ZiiLabs fejlesztéseit is, melyek elsődlegesen az OpenCL-re koncentrálnak, de valószínű, hogy a Stemcell tömbnek a DirectCompute 5.0 támogatása sem lenne akadály.
A C++ AMP specifikációi az alábbi linken érhetőek el. A támogatással kapcsolatban eddig csak az AMD és az NVIDIA tett korábban bejelentést, de nyilvánvalóan mindenki elkészíti a szükséges drivert a felület működéséhez, ami a DirectCompute 5.0-val megegyező alapokat tekintve nem lesz majd túl nehéz feladat.
Arról egyelőre nehéz nyilatkozni, hogy mennyire lesz veszélyes a C++ AMP az OpenCL-re, de alapvetően nem szükséges az, hogy bármelyik platform győzzön, hiszen a DirectX és az OpenGL is egymással párhuzamosan fejlődik még ma is. A C++ AMP a programozók szemszögéből mindenképpen előnnyel indul, hiszen a felület tisztán C++ alapon használható. Az OpenCL nehezebben kezelhető, de jobban ki lehet használni az adott hardvert, így a teljesítmény is előnyösebb lehet. A C++ AMP tehát inkább közvetett ellenfélnek tekinthető, noha valószínű, hogy a többség számára kedvezőbb alternatíva lesz.