OpenCL

Wikipedia
Loikkaa: valikkoon, hakuun

OpenCL (Open Computing Language) on Khronos Groupin kehittämä rinnakkaisohjelmointiin tarkoitettu viitekehys, jonka tarkoitus on mahdollistaa ohjelmistojen hajauttaminen erilaisille laskenta-alustoille helposti. OpenCL koostuu kohdelaitteilla suoritettavista ydinfunktioista (kernel) sekä isäntälaitteella suoritettavista ohjauskäskyistä. Isäntälaitteet ovat tyypillisesti tavanomaisia CPU-laitteita, joissa suoritettava koodi voidaan kirjoittaa eri ohjelmointikielillä, kunhan ne tukevat OpenCL APIa (esimerkiksi C/C++, C#, Java, Fortran, Python, ...). OpenCL on pyritty suunnittelemaan siten, että kohdealustana voivat toimia hyvinkin erilaiset suoritusympäristöt, kuten CPU, GPU, DSP,... Rinnakkaistaminen on mahdollista toteuttaa myös useammalla alustalla yhtä aikaa (esim NxCPU + MxGPU). OpenCL skaalautuu aina sulautetuista alustoista supertietokoneisiin. Suurimpia laitevalmistajia jotka tukevat OpenCL-rajapintaa ovat esimerkiksi NVIDIA, AMD, Apple ja Intel.

Kernel sovellukset kehitetään OpenCL C - kielellä, joka perustuu C99-kieleen, sisältäen laajennuksia jotka helpottavat rinnakkaissuorituksen hallittavuutta. Tällaisia laajennuksia ovat esimerkiksi osoiteavaruuden indeksöinti globaalisti sekä lokaalisti rinnakkaistetussa tehtävälohkossa. Koska ohjelmoija ei voi tietää millaisessa kohdelaitteessa sovellusta suoritetaan, kernel-funktiot tyypillisesti käännetään ajonaikaisesti (vrt. GPU shader kielet). OpenCL-alustoista huomattava osa koostuu erilaisista grafiikkapiireistä ja siksi on kieleen lisätty myös liittymärajapinnat sekä OpenGL, että DirectX muistiobjekteihin. Käytännössä tämä näkyy siten, että esimerkiksi OpenGL-tekstuureita voidaan käsitellä suoraan OpenCL-kerneleillä.

OpenCL mahdollistaa sekä data-perusteisen rinnakkaistamisen sekä tehtävälähtöisen rinnakkaistamisen. Data-lähtöisessä ohjelmointimallissa kernel-funktiot suorittavat samaa käskysarjaa eri tietolohkoilla yhtä aikaa (SIMD). Tehtävälähtöisessä tapauksessa työ voidaan jakaa eri kerneleihin, joiden työryhmiä suoritetaan yhtä aikaa (task parallel). Kernel-työryhmien suoritusta voidaan synkronoida tehtäväjonoilla, ja näihin syötettävillä synkronointikäskyillä.

Ensimmäinen versio OpenCL 1.0 julkaistiin joulukuussa 2008. Laajennus 1.1 esiteltiin kesäkuussa 2010, jota useat laitevalmistajat tukevat. Spesifikaatiot laajennukseen OpenCL 1.2 esiteltiin marraskuussa 2011.

Katso myös[muokkaa | muokkaa wikitekstiä]

Viite[muokkaa | muokkaa wikitekstiä]

  • Aaftab Munshi et al. OpenCL Programming Guide, Addison-Wesley, 2012. ISBN 0-321-74964-2.
Tämä tietotekniikkaan liittyvä artikkeli on tynkä. Voit auttaa Wikipediaa laajentamalla artikkelia.