GPU kan bij CPU-geheugen in OpenCL 2.0


Warning: Undefined array key "bio" in /home/techwatch/domains/test.bits-chips.nl/public_html/wp-content/plugins/wpcodebox2/src/Runner/QueryRunner.php(126) : eval()'d code on line 13

Author:

Reading time: 2 minutes

De Khronos Group heeft de bijna definitieve versie 2.0 vrijgegeven van de OpenCL-specificatie, bedoeld om GPU‘s en andere hardwareversnellers te programmeren. Een van de belangrijkste toevoegingen is de mogelijkheid om moderne hardware te adresseren waarbij de GPU en CPU over dezelfde virtuele geheugenruimte beschikken. Bovendien is het dankzij een intermediaire taal niet langer nodig om broncode te verschepen met een product.

In het OpenCL-model is er een host-programma op de CPU dat bepaalde rekentaken (de kernels) naar een GPU delegeert. Geschikte taken zijn typisch vrij simpel maar toepasbaar op een grote dataset, bijvoorbeeld het optellen van een kleur bij alle pixels in een afbeelding. GPU‘s beschikken over een groot aantal simpele rekenkernen die deze taak parallel aanpakken, waardoor de berekening een stuk sneller verloopt.

Er is echter een belangrijke bottleneck: de dataset moet eerst gekopieerd worden naar het geheugen van de GPU voordat die er iets mee kan, en het resultaat moet na afloop weer teruggepompt worden naar het CPU-geheugen. Om die reden werken chipfabrikanten aan hybride processoren waarbij CPU en GPU bij hetzelfde werkgeheugen kunnen.

OpenCL 2.0 houdt hier rekening mee. De specificatie voorziet erin dat de host-CPU en de GPU-devices complexe datastructuren direct kunnen delen, zelfs wanneer ze pointers bevatten. Dat elimineert de geheugenbottleneck. Bovendien hoeft de programmeur zich geen zorgen meer te maken over het omzetten tussen een complexe datastructuur en iets dat uitgewisseld kan worden met de GPU.

De nieuwe standaard introduceert ook de mogelijkheid om vanuit een kernel nieuwe kernels te starten, zonder tussenkomst van de host-CPU. Bovendien zijn pipes toegevoegd, Fifo-datastructuren waaruit kernels kunnen lezen en waarnaar ze kunnen schrijven. Dat biedt mogelijkheden voor een verwerkingspijplijn met minimale tussenkomst van de CPU.

OpenCL-kernels moeten tot nog toe geschreven worden in een C-achtige taal en worden ofwel van tevoren, ofwel runtime gecompileerd door de OpenCL-driver. De Khronos Group introduceert hier nu echter ook een intermediaire laagniveau taal voor, gebaseerd op LLVM. Deze ’halfbakken‘ Spir-code (Standard Portable Intermediate Representation) wordt runtime gecompileerd naar machinecode voor de GPU.

Dat moet voordelen bieden voor IP-bescherming. Op het moment kan de programmeur kiezen tussen het meeleveren van de broncode voor zijn kernels, of proberen om de kernels voor zo veel mogelijk devices te compileren. Spir lost dat dilemma op.

Minstens zo interessant is dat de OpencL-compiler hiermee in tweeën gesplitst wordt: een front-end om de C-code om te interpreteren, en een device-specifiek back-end om de intermediaire code naar machinecode om te zetten. Met Spir wordt het mogelijk om ook andere talen in te zetten voor het schrijven van kernels, door een alternatieve front-end in te zetten. Met name C++ kan op warme belangstelling rekenen.

De twee standaarden (OpenCL en OpenCL Spir) hebben op het moment nog het predicaat provisional, wat betekent dat er nu nog kleine wijzigingen aangebracht kunnen worden. Over een half jaar worden beide voorstellen definitief.