Vraag OpenCL uitvoeren op hardware van gemengde leveranciers


Ik heb gespeeld met de ATI OpenCL-implementatie in hun Stream 2.0 bèta. De OpenCL in de huidige bèta gebruikt de CPU nu alleen, de volgende versie zou GPU-kernels moeten ondersteunen. Ik heb Stream gedownload omdat ik een ATI GPU op mijn werkcomputer heb.

Ik schrijf software die enorm zou profiteren van winst door de GPU te gebruiken. Hoewel deze software op klantcomputers werkt, heb ik niet de luxe (zoals veel wetenschappelijke computeromgevingen hebben) om de exacte hardware te kiezen die daarvoor moet worden ontwikkeld en geoptimaliseerd. Dus mijn vraag is, als ik de ATI OpenCL-implementatie met mijn applicatie distribueer, betekent dit dat het nooit in staat zal zijn om b.v. NVidia-videokaarten? En als ik de NVidia OpenCL SDK gebruik, dat deze nooit optimaal zal werken op AMD-chips (gezien de ATI / AMD-link)?

Met andere woorden, wie is er uiteindelijk verantwoordelijk voor het leveren van de OpenCL-implementatie? Zullen gebruikers in staat zijn om b. installeer een OpenCL 'driver' voor hun NVidia videokaart, samen met een 'driver' die hen optimale prestaties levert op hun AMD CPU?

Als terzijde, zijn er goede / actieve ondersteuningsforums voor OpenCL buiten de Khronos-prikborden, of is dat de plek om naartoe te gaan? Ik heb gezien dat ATI een bord heeft, en NVidia heeft waarschijnlijk een eigen forum, waar hangt de OpenCL-gebruiker / ontwikkelaarsgemeenschap rond? Is het al op één plek samengevat?


11
2017-09-07 09:11


oorsprong


antwoorden:


Uiteindelijk zal OpenCL op dezelfde manier werken als OpenGL. Dat wil zeggen, gebruikers zullen de huidige stuurprogramma's installeren vanaf hun hardwareleveranciers (ATI, NVIDIA, Intel). U als ontwikkelaar koppelt eenvoudigweg tegen een OpenCL-bibliotheek bij het bouwen van uw toepassingen. Wanneer gebruikers uw toepassing uitvoeren, wordt de toepassing doorgestuurd naar de juiste leverancierspecifieke bibliotheken die door de stuurprogramma's worden geleverd.

Dit is de manier waarop het werkt, maar het werkt nog niet op deze manier.

Een ander belangrijk ding om in gedachten te houden is dat je waarschijnlijk nog steeds leverancierspecifieke codepaden moet aanbieden, omdat code die op de CPU draait met OpenCL waarschijnlijk andere geoptimaliseerde kernelparameters zal gebruiken dan code die op de GPU draait. Hetzelfde geldt waarschijnlijk voor verschillen tussen GPU-leveranciers.


6
2017-09-07 09:35



Ik weet dat dit een oude vraag is met oude antwoorden hierboven. Ik dacht dat ik het zou updaten met een actueel antwoord.

Ja, één implementatie van OpenCL-kernels en -code werkt vandaag op een groot aantal verschillende apparaten met correct geschreven platform- en apparaattellingscode. Het is vrij eenvoudig om de juiste nummer- en apparaatopschrijvingscode te schrijven, het lastige gedeelte is het selecteren van welk platform of apparaat. U zou waarschijnlijk een configuratie-optie in uw app moeten presenteren waar de gebruiker er een kan selecteren, of een microbenchmark kan uitvoeren tegen elke app en dynamisch één kan selecteren en het resultaat van de bank kan cachen.

Mensen kunnen en zullen meer dan één platform hebben. Mijn systeem heeft bijvoorbeeld GTX 580 SLI, dus het heeft twee apparaten op het NVidia-platform. Het heeft ook de Intel OpenCL SDK, dus mijn CoreI7 990x Extreme CPU komt ook naar voren als een apparaat in het Intel-platform.

Ja, een binair bestand dat is ontwikkeld en gebouwd met behulp van, bijvoorbeeld, de NVidia OpenCL SDK, werkt op ATI of Intel OpenCL en omgekeerd. U hoeft zich daar geen zorgen meer over te maken.

Het is duidelijk dat een eindgebruiker misschien helemaal geen OpenCL heeft, dus het kan nodig zijn om delaycl load of LoadLibrary opencl.dll en dynamic link te gebruiken.

Ik stel voor om je code te testen op basis van de Intel OpenCL SDK, op NVidia GPU's en op AMD GPU's. U zult waarschijnlijk bugs vinden die problemen veroorzaken op het ene platform, maar werkt prima op anderen. Je zult waarschijnlijk ook merken dat die volledig fijne code op mysterieuze wijze geen correcte resultaten oplevert op een van die platforms, vanwege bugs van de bestuurder.


8
2018-03-10 05:56