Uusimmat

Ohjelmointikirjastot

24.08.2011 18:35 Muropaketin toimitus
NVIDIA CUDA

CUDA on NVIDIAn kehittämä arkkitehtuuri rinnakkaislaskentaan, joka pyrkii hyödyntämään grafiikkapiiriä yleiskäyttöisessä laskennassa. CUDAa hyödyntäviä ohjelmia ohjelmoidaan C-kielellä, mutta mukana on NVIDIAn kehittämiä laajennuksia ja tiettyjä rajoituksia.

CUDAn käyttö on yleistynyt paljon pelipuolella lähinnä fysiikkamallinnuksissa, mutta lisäksi se on löytänyt tiensä moniin ei-graafisiin sovelluksiin. Esimerkkejä käyttökohteista löytyy muun muassa laskennallisista biologia- ja kryptografiasovelluksista sekä yhtenä tunnetuimpana esimerkkinä Berkleyn yliopiston ylläpitämästä BOINC-infrastruktuurista. Kyseessä on infrastruktuuri, jonka avulla voidaan ajaa useita hajautettuja laskentaprojekteja samanaikaisesti ja ideana on, että tutkijat voivat käyttää ympäri maailmaa olevien kotitietokoneiden joutilasta laskentatehoa. BOINCin käytössä on nykypäivänä satoja tuhansia tietokoneita, joilla sen laskentateho ylittää viiden petaFLOPSin rajan.

CUDA ei ole tuettuna kaikilla vanhemmilla NVIDIAn näytönohjaimilla, sillä tuki rajoittuu työpöytäpuolelle GeForce 8 -tuoteperheeseen ja sitä uudempiin malleihin. Lisäksi tuki kattaa tiettyjä Tesla-työasema- ja datapalvelinratkaisuja, Quadro-työpöytä- ja mobiilinäytönohjaimia, GeForce-mobiilinäytönohjaimia sekä ION-alustat.

NVIDIA julkaisi CUDAn ensimmäisen SDK-paketin helmikuussa 2007 Windowsille ja Linuxille, ja Mac OS X -tuki tuli mukaan 2.0-versiossa vuotta myöhemmin. CUDAn uusin versio on toukokuussa 2011 julkaistu 4.0, jonka SDK on aiempien versioiden tavoin saatavilla ilmaiseksi.

 

NVIDIA PhysX

PhysX ei ole varsinaisesti ohjelmointikirjasto, vaan peleihin implementoitava reaaliaikainen fysiikkamoottori, joka käyttää fysiikan kiihdyttämisessä apuna näytönohjainta.

NVIDIA julkaisi vuoden 2008 helmikuussa lehdistötiedotteen, jossa se ilmoitti ostaneensa AGEIA Technologiesin. Yritys hehkutti tuolloin kykenevänsä yritysoston myötä tuomaan GeForce-tuoteperheen näytönohjaimilla kiihdytettävät PhysX-ominaisuudet satojen miljoonien kuluttajien saataville. NVIDIAn toimitusjohtaja Jen-Hsun Huang paljasti yrityksen liittävänsä PhysX:n osaksi CUDAa, minkä myötä mikä tahansa CUDAa tukeva näytönohjain tukisi PhysX:ää.

PhysX:n nitominen CUDAan ja näytönohjainajureihin tapahtui virallisesti alkuvuodesta 2008. Nykyisellään PhysX on tuettuna GeForce 8- ja sitä uudempien tuoteperheiden kaikissa näytönohjaimissa ja ajurit itsessään ovat saatavilla 32- ja 64-bittisille Windows XP-, Vista- ja 7- sekä Linux- ja Mac OS X -käyttöjärjestelmille. Lisäksi PhysX:ää käytetään Microsoft Xbox 360-, Sony PlayStation 3- ja Nintendo Wii -pelikonsolien peleissä.

 

PhysX:n arkkitehtuuri

PhysX:ssä keskeisenä osana on arkkitehtuurikaaviossa keskellä oleva SDK-lohko, jota ohjelmistokehittäjät käyttävät implementoidessaan PhysX:ää. Lisäelementit NVIDIAlta, kuten APEX, tai kolmansilta osapuolilta mahdollistavat kirjastojen käyttämisen PhysX-efektien kanssa ja helpottavat fysiikan luomista ja implementointia peleihin aiempaa helpommin. APEXin ohella Natural Motion on yksi suuri tekijä, jonka kirjasto on suurilta osin vastuussa esimerkiksi Grand Theft Auto IV -pelin efekteistä.

PhysX:ää tukevassa pelissä PhysX:n laskutoimenpidekyselyt menevät HAL-tasoon, joka on esimerkiksi DirectX:n kaltainen rajapinta. HALin myötä fysiikkaa voidaan ajaa erilaisella raudalla, mikä PC:llä tarkoittaa joko x86-arkkitehtuurin mukaista prosessoria, PPU:ta tai NVIDIA PhysX:n myötä GeForce-näytönohjaimen grafiikkapiiriä. NVIDIAn mukaan erillisiä PPU-kortteja voidaan käyttää ainoastaan alhaisen tason fysiikkalaskentaan, kun taas näytönohjaimissa riittää suorituskykyä monimutkaisempaan fysiikkalaskentaan.

NVIDIAn esimerkkikaaviossa on käytetty aikanaan eniten hypeä osakseen saanutta PhysX-peliä, Unreal Tournament 3:a, joka sijoittuu kaaviossa kaikkein vasemmalle. Seuraavana pelin käskyt ohjautuvat HAL-tasoon, joka käytännössä on PhysX-ajuri, ja siitä edelleen ajureiden kautta rautaan, jossa laskutoimitukset suoritetaan.

 

OpenCL

OpenCL on alun perin Applen, mutta nykyään Khronos Group -konsortion kehittämä avoin, rojaltivapaa standardi usealle eri alustalle ja rinnakkaisohjelmointiin moderneille prosessoreille, joita löytyy työpöytäkoneista, palvelimista sekä mobiililaitteista. Khronos Groupin taustalla toimivat muun muassa AMD-, Apple-, ARM-, IBM-, Intel-, Nokia-, NVIDIA-, Samsung- ja Texas Instruments -yritykset.

OpenCL:n perimmäinen tarkoitus on hyvin samanlainen kuin NVIDIAn CUDAn eli valjastaa grafiikkapiirit 3D-laskennan ohella yleishyödylliseen laskentaan. Näytönohjainpohjainen yleishyödyllinen laskenta on vasta viime vuosina nostanut päätään, mikä näkyy myös OpenCL:n historiassa. Standardin 1.0-versio julkaistiin vuoden 2008 joulukuussa ja uusin 1.1-versio kesäkuussa 2010. OpenCL:n taustalla ovat suuret erillisnäytönohjainvalmistajat, AMD ja NVIDIA, minkä myötä standardi on tuettuna molempien edellä mainittujen valmistajien näytönohjaimilla.

C-ohjelmointikieleen perustuva OpenCL-standardi määrittelee muun muassa C99-ohjelmointikielen näytteen rinnakkaisuuteen kehitetyille laajennuksilla, rajapinnan koordinoimaan datan ja tehtäväperusteisen rinnakkaislaskennan useilla erilaisilla epäsymmetrisillä prosessoreilla, IEEE 754 -standardiin perustuvia lukuisia vaatimuksia sekä tehokkaan yhteistoiminnan OpenGL:n, OpenGL ES:n ja muiden rajapintojen kanssa.

OpenCL:ssä Framework toimii ohjelman ja prosessorin sekä näytönohjaimen välissä, ja antaa ohjelmille mahdollisuuden käyttää isäntää eli prosessoria sekä yhtä tai useampaa OpenCL-laitetta yhtenä heterogeenisenä rinnakkaislaskentajärjestelmänä.

Framworkin sisällä toimiva runtime antaa isäntäohjelmalle mahdollisuuden muokata kontekstejä niiden luomisen jälkeen. Edustakääntäjä kääntää lähdekoodista binääriksi, joka sisältää OpenCL-kernelit, ja taustakääntäjä kääntää binäärit edelleen laitekohtaiseksi binääriksi niille suunnitelluilla optimoinneilla.

 

Microsoft DirectCompute

DirectCompute on Microsoftin käsialaa ja se kilpailee samalla alalla NVIDIAn CUDAn ja Khronos Groupin OpenCL:n kanssa. Kyseessä on ohjelmointirajapinta, joka on kehitetty grafiikkapiirien GPGPU-käyttöä ajatellen ja tuettuina ovat yrityksen Windows 7- ja Windows Vista -käyttöjärjestelmät. DirectCompute on osa Microsoftin vuosien varrella massiiviseksi paisunutta DirectX-kokoelmaa. DirectCompute on tuettuna kolmen eri version, 10:n, 10.1:n ja 11:n, turvin, joista jälkimmäinen julkaistiin DirectX 11:n kanssa ja on taaksepäin yhteensopiva aiempien versioiden kanssa.

DirectCompute-sovellusten ohjelmoiminen tapahtuu HLSL-kielellä, joka on C:n kaltainen kieli, mutta keskeisimpinä eroina HLSL:ssä ei ole käytössä osoittimia, vaan siinä on sisäänrakennetut muuttujat ja tietotyypit sekä varusfunktiot.

Ensimmäiset DirectComputea tukevat ohjelmat ovat keskittyneet lähinnä pelien efektien parantamiseen, kohdistuen jälkikäsittelyyn ja suodattimiin, Deferred Shading -tekniikkaan sekä realistisempiin varjoihin Ambient Occlusion- ja Order Independent Transparency -tekniikoilla. Käytännön esimerkkejä löytyy markkinoilta muun muassa Aliens vs Predator- ja Dirt 2 -peleistä.

 

AMD ATI Stream

ATI Stream jatkaa samalla linjalla kuin aiemmin käsitellyt CUDA-, OpenCL- ja DirectCompute-teknologiat. Kyseessä on nippu AMD:n rauta- ja ohjelmistoteknologioita, jotka toimivat prosessorin rinnalla ja kiihdyttävät näytönohjaimella muitakin kuin pelkästään 3D-sovelluksia.

Käytännössä ATI Stream rakentuu kahdesta komponentista: kehitys- sekä suoritusympäristöstä. Kehitysympäristö, ATI Stream Software Development Kit, sisältää Brook+-ohjelmointirajapinnan, joka on kehitetty versio Stanfordin yliopiston kehittämästä Brookista. Kyseessä on C:n kaltainen avoimeen lähdekoodiin perustuva ohjelmointikieli, joka on optimoitu Stream-laskentaan. ATI Streamia tukevia sovelluksia voi 2.0-ohjelmistoversioita uudemmilla versioilla kehittää myös käyttämällä OpenCL:ää.

Suoritusympäristö tunnetaan nimellä Compute Abstraction Layer ja se on ollut integroituna AMD:n näytönohjainten Catalyst-ajureihin jo parin vuoden ajan. Ohjelmistokehitys ja ohjelmien suorittaminen onnistuu Windows- ja Linux-käyttöjärjestelmillä.

 

Havok Physics

Havokin ratkaisut ovat PhysX:n kaltaisia fysiikkamoottoreita, joista ensimmäinen julkaistiin jo vuonna 2000 ja se teki itsensä tunnetuksi muun muassa Half-Life 2 -pelissä. Havok Physicsin uusin versio on 7.1 ja se on tuettuna tietokonepuolella Windows-, Linux- ja Mac OS X -käyttöjärjestelmissä sekä lisäksi Microsoft Xbox 360-, Xbox, Sony PlayStation 3-, PlayStation 2-, PlayStation Portable-, Nintendo Wii- ja GameCube -pelikonsoleissa. Lisenssin ostajille tarjotaan pääsy suurimpaan osaan ohjelmiston C/C++-lähdekoodista, mikä antaa mahdollisuuden ohjelmistokehittäjille vapauden muokata fysiikkamoottorin ominaisuuksia tai kääntää se eri alustoille.

Havok Physicsin keskeisenä ideana on tarjoa pääasiassa peleihin reaaliaikaisia kappaleiden välisiä yhteentörmäyksiä ja jäykkien kappaleiden dynaamisuutta kolmiulotteisena. Käytännössä fysiikkamoottori näkyy peleissä esimerkiksi ragdoll-hahmojen realistisissa ja dynaamisissa liikkeissä sekä ympäröivään peliympäristöön fyysisesti reagoivina kappaleina.

Sisältö

  1. GPGPU-tekniikka: Laskentaa näytönohjaimella
  2. Näytönohjainten historia & markkinatilanne
  3. Näytönohjaimen rakenne & grafiikkapiirien arkkitehtuuri
  4. GPGPU ja sen käyttökohteet & näytönohjaimen edut prosessoriin verrattuna
  5. Ohjelmointikirjastot
  6. Testit
  7. Loppuyhteenveto