OpenCL
| OpenCL | ||||
|---|---|---|---|---|
| Ontwerper(s) | Apple Inc. | |||
| Ontwikkelaar(s) | Apple | |||
| Uitgebracht | 28 augustus 2009 (16 jaar geleden) | |||
| Recentste versie | 1.1 (11 juni 2010) | |||
| Besturingssysteem | Multiplatform | |||
| Geschreven in | C++, C | |||
| Categorie | API | |||
| Licentie(s) | OSI-approved license | |||
| Website | (en) Projectpagina | |||
| ||||
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
Externe links
- (en) Officiële website
- (en) Specificatie van OpenCL 1.0
- ↑ (en) Khronos start heterogeen computerinitiatief
- ↑ a b (en) De Khronos Group brengt OpenCL 1.0 uit
- ↑ (en) NVIDIA voegt OpenCL toe aan de toolkit van de GPU-industrie
- ↑ (en) Apple Previews Mac OS X Snow Leopard to Developers, Apple, 9 juni 2008
- ↑ (en) Ubuntu 10.10: GPU hardware versnelling (OpenCL) beschikbaar
- ↑ (en) [1]
- ↑ a b c (en) Users, The LLVM Compiler Infrastructure
- ↑ (en) OpenCL, Zack Rusin, 1 februari 2009