Naar inhoud springen

OpenCL

Uit Wikipedia, de vrije encyclopedie
Dit is een oude versie van deze pagina, bewerkt door MichielDMN (overleg | bijdragen) op 2 okt 2011 om 20:01.
Deze versie kan sterk verschillen van de huidige versie van deze pagina.
OpenCL
Logo
OpenCL
Ontwerper(s) Apple Inc.
Ontwikkelaar(s) Apple
Uitgebracht 28 augustus 2009 (16 jaar geleden)
Recentste versie 1.1 
(11 juni 2010)
Besturings­systeem Multiplatform
Geschreven in C++, C
Categorie API
Licentie(s) OSI-approved license
Website (en) Projectpagina
Portaal  Portaalicoon   Informatica

OpenCL (Open Computing Language) is een programmeertaal en platform ontwikkeld door Apple voor het uitvoeren van parallelle berekeningen op de CPU en de GPU. De taal is gebaseerd op C en stelt applicaties in staat om de GPU te gebruiken voor allerlei berekeningen (ook bekend als GPGPU).

Geschiedenis

OpenCL werd door Apple bij de Khronos Group voorgesteld als open standaard, zoals OpenGL en OpenAL, standaarden voor respectievelijk 3D-computergraphics en 3D-geluid. Op 16 juni 2008 werd de Compute Working Group opgericht bij Khronos Group met als doel met standaardiseren van berekeningen op heterogene data (data van allerlei bronnen) en parallelle berekeningen op de CPU en de GPU.[1] Op 9 december 2008 werd versie 1.0 van de standaard uitgebracht.[2] Op dezelfde dag kondigde NVIDIA ook aan deze versie geheel te zullen ondersteunen.[3] Op 12 december 2008 werd OpenCL door AMD en NVIDIA voor het eerst gedemonstreerd op SIGGRAPH Asia 2008.

Aan OpenCL wordt meegewerkt door allerlei bedrijven, zoals Activision Blizzard, AMD, Apple, Electronic Arts, Ericsson, IBM, Intel, Motorola, Nokia, NVIDIA, Samsung en Texas Instruments.

OpenCL is uitgebracht in Mac OS X 10.6 Snow Leopard.[4]

Sinds de versie 10.10 bevat ook Ubuntu OpenCL.[5] (en onofficieel sinds 9.10 [6])

Techniek

OpenCL maakt gebruik van een deelverzameling van de ISO/IEC C99-standaard van C met uitbreidingen voor parallellisme.[2] De IEEE 754-standaard wordt gebruikt voor berekeningen met zwevendekommagetallen.

De implementaties van Apple,[7] NVIDIA,[7] RapidMind[7] en Mesa Gallium3D[8] zijn gebaseerd op LLVM met clang als frontend.

Toepassingen

OpenCL kan toegepast worden op gebieden waarbij de rekenkracht van de grafische kaart een prestatievoordeel biedt. Voorbeelden zijn: simulaties van vloeistoffen, beeldbewerking, wiskundige operaties (vb. Fast Fourier Transform), medische beeldverwerking en computerspellen.

OpenCL C

OpenCL definieert ook OpenCL C. Dit is een variant van de gelijksoortige C99-taal die gebruikt wordt voor het optimaliseren van GPU-programmatie. Het implementeert veranderingen die nodig zijn om een C-programmeertaal te gebruikt voor GPU's aan te passen zodat er een ondersteuning is voor parallelle berekeningen. OpenCL C omvangt ook een ondersteuning voor vectortypes. Dit zorgt voor een betere efficiëntie van de streamline dataflow. Ontwikkelaars gebruiken OpenCL C om performantie en data-intensieve routines te herschrijven in hun applicatie. Tijdens de herschrijving wordt de routine naar zijn meest elementaire staat gebracht. Een serie van discrete operaties beschrijven de berekeningen die gevormd kunnen worden in parallel over een dataset.

Kernel

De resulterende code is gelijkaardig aan dat van een normale C-functie, dit wordt OpenCL-kernel genoemd. In tegenstelling tot traditionele C-code is OpenCL-kernel geïmplementeerd in de applicatie in een ongecompileerde status. Ze worden gecompileerd tijdens de vlucht en geoptimaliseerd voor de gebruikershardware voordat het naar de GPU wordt gestuurd voor de berekeningen.

API

Een andere variant op de OpenCL is OpenCL-API. De OpenCL-API zorgt voor functies die toegang geven tot applicaties om parallel computer taken te beheren. Het somt de openCL capabele hardware op in een systeem en stelt ze klaar voor gebruik van datastructuren tussen applicaties en OpenCl. Het controleert ook de compilatie en de indiening van kernels naar de GPU. Het heeft ook een rijke set aan functies die wachttijden beheren en ook synchronisatie.

Runtime

OpenCl Runtime voert taken uit die gevraagd zijn door de applicatie via OpenCL-API. OpenCL Runtime zorgt ook voor de efficiënte transfer van data tussen het hoofdgeheugen en het gewijde VRAM dat gebruikt wordt door de GPU. Op zijn beurt geeft het orders van de kernel naar de GPU-hardware. Tijdens deze orders regelt OpenCL Runtime alles.

Zie ook