A fejlesztőknek már elérhető a C++ AMP többplatformos verziója


Az elsősorban Windowsra fejlesztett programnyelv az ígéreteknek megfelelően más operációs rendszerekre is befut.


A Microsoft a 2011-es esztendő 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ó. Problémát jelentett azonban, hogy csak a Windows operációs rendszeren volt elérhető a felület, de a redmondi óriáscég már akkor elmondta, hogy idővel elkészül a többplatformos verzió is. Ezt a munkát az AMD-re bízták, amely cég a Microsoft a szakembereivel együttműködve most bejelentette a C++ AMP 1.2-es, nyílt forráskódú verzióját. Ennek megfelelően az említett felület már a Linux operációs rendszereken is működik, és technikailag bárhova portolható.

Egyelőre a rendszer csak a fejlesztőknek érhető el, de később lesz publikus verzió is. Utóbbira azért nem került most kiadásra, mert a gyártóknak több idő kell, hogy a végleges implementációkat megfelelően leteszteljék. A szükséges drivereket a fejlesztők természetesen elérik, de ezek még nem elég stabilak ahhoz, hogy a felhasználók számára is letölthetők legyenek.

 

 

A C++ AMP 1.2-es verziója többféleképpen implementálható Linuxon. Mindegyik opció alapja a LLVM Clang front-endje, ami a C++ AMP kódból LLVM-IR vagy SPIR kódot készít. A Clang fogja menedzselni a memóriamásolásokat is, tehát a fejlesztőnek ezzel sem kell foglalkoznia. A hardver szintjén ezek nem tűnnek el, de a programozó logikailag egységes memóriát lát.

A gyártók számára eddig a pontig az implementáció azonos, de ezután már nem. A C++ AMP-t ugyanis lehetőség lesz OpenCL, SPIR, illetve HSAIL felületen keresztül támogatni az adott hardver szempontjából. A SPIR opció lényegében egyértelmű, hiszen az LLVM Clang front-endje képes SPIR kódot fordítani, majd a rendszer ebből az adott gyártó által használt virtuális utasításkészletnek megfelelő kódot fordít, és innen történik a valós utasításkészletnek megfelelő kód fordítása, ahonnan már egyenes út vezet a hardverhez. Ehhez persze szükséges a SPIR támogatása a grafikus driverben.

Amennyiben az adott gyártó az C++ AMP kódból LLVM-IR kódot fordít úgy két utat választhat. Például az LLVM-IR-ből fordítható HSAIL kód, és ez már önmagában egy olyan virtuális utasításkészlet, amelyet számos hardver fog támogatni, tehát a HSA driverekbe épített finalizer segítségével szintén csak egy lépésre van a hardver. Ugyanakkor lehetséges, hogy az adott termék vagy a hozzá tartozó driver se a SPIR-t, se a HSAIL-t nem támogatja. Ilyenkor sincs veszve minden, mivel az OpenCL driver segíthet, de ekkor gyártóspecifikus bináris állományt kell készíteni, amit képes lefuttatni a meghajtóba épített OpenCL implementáció.

A jövő szempontjából mindenképp a SPIR és a HSAIL opciók lesznek használva, mivel ezek esetében garantált, hogy a C++ AMP-ben írt kód futni fog az összes ma támogatott és később érkező hardveren. A gyártóspecifikus bináris esetében csak a már megjelent rendszerek esetében lehet garanciát vállalni a futtathatóságra, ami persze éppen elég, mivel az új meghajtókba minden gyártó beépíti a SPIR vagy a HSAIL támogatását – esetleg mindkettőt.

Fontos adalék, hogy a SPIR 2.0-val és a HSAIL 1.0-val kihasználhatók az egységes memóriát direkten támogató lapkák is, így például az AMD Kaveri APU vagy az érkező Intel Broadwell kódnevű fejlesztés. Ehhez nem szükséges módosított kód, így a ma megírt C++ AMP programok egyszerűen automatikusan képesek kihasználni a bekezdés elején említett két felület előnyeit, amint ezek támogatása beépül a grafikus meghajtókba. Ezzel gyakorlatilag az említett hardverek esetében nem kell számolni memóriamásolással.

(Prohardver)

Figyelem! A tartalom legalább 2 éve nem frissült! Előfordulhat, hogy a képek nem megfelelően jelennek meg.

Copyright © 2023 Trans-Europe Zrt. Minden jog fenntartva.
linkedin facebook pinterest youtube rss twitter instagram facebook-blank rss-blank linkedin-blank pinterest youtube twitter instagram