Microsoft trekt C++ naar GPU's en clusters

Software tegelijk draaien op meerdere processors, inclusief grafische chips (gpu's), vereist flinke aanpassingen aan die programma's. Microsoft wil dit met een C++ tussenlaag overbodig maken.

Microsoft heeft de specificaties voor die tussenlaag onlangs geopenbaard. Dit C++ AMP (accelerated massive parallelism) vergemakkelijkt het parallel uitvoeren van applicaties die zijn geschreven in de veelgebruikte programmeertaal C++. Daarbij overkoepelt AMP zowel reguliere processors (cpu's) in verschillende gekoppelde systemen (clusters) als grafische processors (gpu's). Die laatste soort processor kan gecombineerd in een enkele computer zitten maar ook in een cluster.

Krachtig, maar goedkoop
Gpu's vormen tegenwoordig een krachtig maar goedkoop alternatief voor traditionele rekenmonsters. Aan elkaar gekoppelde videokaarten - al dan niet in een cloudopstelling - bestormen de wereldwijde ranglijst van krachtigste supercomputers. De huidige nummer twee in die top500 is een Chinese opstelling met grafische processors.

Microsoft wil de rekenkracht van gpu's beschikbaar maken voor een breder publiek. Daarbij mikt de Windows-producent op het bestaande brede scala aan applicaties en de bestaande expertise met C++. Applicaties moeten op gemakkelijke wijze te gebruiken zijn op parallelle computersystemen. C++ AMP vormt een tussenlaag die de eigenlijke applicaties afschermt voor de onderliggende, gedistribueerde hardware.

Nvidia- en AMD-onafhankelijk
Dit systeem voor parallelle software is qua gpu's platformagnostisch: het werkt op de gpu's van Nvidia en ook op die van AMD (die lang geleden videochipmaker Ati heeft opgeslokt). Beide chipfabrikanten hebben actief meegewerkt aan Microsofts AMP-initiatief voor C++. Maar Nvidia en AMD ondersteunen echter ook het concurrerende OpenCL.

De openheid van de C++ AMP-specificatie is al bij de aankondiging ervan benadrukt, in juni vorig jaar. Bovendien kan deze tussenlaag ook OpenCL omarmen. De specificatie van deze Microsoft-technologie moet namelijk ook implementatie op basis van OpenCL en OpenGL toestaan, meldt techsite Ars Technica. Waar OpenCL een raamwerk is voor software draaiend op uiteenlopende processors tegelijk, is OpenGL een platform voor grafische applicaties op diverse gpu's.

DirectX versus OpenGL

Een herhaling doemt op van de concurrentiestrijd tussen Microsofts DirectX (met daarin Direct3D) en OpenGL. Eerstgenoemde grafische versnellingstechniek is Windows-gebonden. De tweede is echter open source en platformonafhankelijk; OpenGL draait op Windows, Mac OS X, Linux en de diverse Unix-'smaken'. Developers trekken wel de vergelijking tussen Flash- en Silverlight-websites enerzijds en html-websites anderzijds: gesloten en bedrijfseigen versus open en onafhankelijk.

Volgens de voorstanders van OpenGL is die technologie krachtiger dan DirectX, maar volgens critici is het complexer en vereist het meer low-level programmeerwerk. Beide grafische tussenlagen namen al veel ontwikkelwerk uit handen doordat softwaremakers niet langer rekening hoefden te houden met verschillende grafische chips van diverse fabrikanten.

Handwerk voorkomen
Voor OpenCL versus C++ AMP geldt hetzelfde verschil. Ars Technica legt uit dat eerstgenoemde veel meer handwerk vereist omdat het erg low-level is. Vaak zijn in OpenCL de functies voor grafische processors gescheiden van die voor algemene processors. Developers moeten daar dus specifiek rekening mee houden; hun software aanpassen voor het één, voor het ander of voorzien van opties voor beide soorten processor.

Volgens Ars Technica is er wat OpenCL betreft dus een kloof tussen de gpu- en de cpu-wereld. Het overbruggen daarvan vereist veel handmatig beheer van de programmeur. Het nu opdoemende C++ AMP moet dit stroomlijnen en developers op een hoger niveau hun code laten schrijven.

Patentbelofte
De volgende versie van Microsofts ontwikkeltool Visual C++, wat onderdeel is van het Visual Studio-pakket, krijgt ondersteuning voor deze parallelle tussenlaag ingebouwd. Het softwarebedrijf roept makers van andere sdk's (software development kits) en code-compilers op om C++ AMP ook te implementeren.

Hierbij heeft Microsoft al de toezegging gedaan dat het geen patentclaims zal neerleggen met betrekking tot deze technologie. Die belofte is opgenomen in de specificatie, waarbij er nog wel een uitzondering geldt: als een implementerende partij Microsoft aanklaagt voor patentinbreuk.