Nieuwe tool maakt multicoreperikelen inzichtelijk

Reading time: 4 minutes

Author:

NXP‘er Jan Hoogerbrugge bracht onlangs de eerste versie uit van een gereedschap om softwareontwikkelaars te helpen bij het schrijven voor multicore processoren. De aanpak is nĂ©t even anders dan het bestaande aanbod.

’Elke ondernemer heeft natuurlijk de droom dat zijn bedrijfje ooit uitgroeit tot een succesvolle onderneming, maar voorlopig doe ik Biface erbij, naast mijn normale veertigurige baan bij NXP‘, vertelt Jan Hoogerbrugge over zijn eenmanszaak. Zijn tools moeten programmeurs helpen hun sequentiĂ«le C-software om te zetten naar geparallelliseerde code voor multicore processoren. ’Vanuit mijn studie in Delft en bij Philips en later NXP heb ik altijd aan compilers en multicoreachtige zaken gewerkt. Maar door de strategiewijziging naar high-performance mixed-signal van NXP, zit ik nu in de digitale-radiohoek en doe ik daar niets meer mee. Toen ben ik dat in de avonduren ernaast gaan doen.‘

Na twee jaar ontwikkelen zette hij onlangs een punt achter het bĂštaprogramma en bracht hij versie 1.0 van zijn Parallellization Assistant (PA) uit. Het gereedschap analyseert C-applicaties, brengt in kaart waar de meeste potentie zit voor parallellisering en geeft aan welke hobbels hiervoor geslecht moeten worden. Het is dus een tool voor code die reeds is geschreven, met name gericht op legacy toepassingen.

Hoogerbrugge koos de naam Biface, het Engelse woord voor ’vuistbijl‘, om het belang van gereedschap voor technologische vooruitgang te onderstrepen. ’Een aantal Amerikaanse profs in het vakgebied heeft ooit eens een mooi lijvig rapport geschreven voor de overheid, getiteld ’The future of computing performance: game over or next level?‘. Een van de aanbevelingen was dat er meer tools moeten komen om legacy code te transformeren naar multicores. Dat was een trigger om met Biface te beginnen.‘

Ondertussen zijn er verschillende startende en groeiende bedrijven die dit hiaat proberen op te vullen. Van een afstandje bieden ze zo ongeveer hetzelfde. Een dynamische profiler analyseert hoeveel tijd een applicatie doorbrengt in elke loop van het programma en maakt duidelijk waar de meeste winst te halen valt voor dataparallellisme, waarbij de programmeur een dataset zodanig opdeelt dat elke core de bewerking op een deel van de gegevens kan uitvoeren. Vervolgens maken de tools duidelijk hoe de verschillende variabelen binnen deze loop van elkaar afhangen, zodat de programmeur de code hierin zodanig kan herschrijven dat de iteraties net zo goed parallel als na elkaar uitgevoerd kunnen worden.

Aan de voorkant

Biface‘ Parallellization Assistant is geen uitzondering op het aanbod, maar Hoogerbrugge denkt dat er wel een subtiel verschil is dat de programmeur in sommige gevallen enorm kan helpen. Dat is terug te voeren op de zijn aanpak: vóór de compiler wordt er eerst een programma actief dat op strategische plekken in de broncode functieaanroepen plaatst. De aangepaste broncode wordt vervolgens door GCC of een andere standaard toolketen gecompileerd en gelinkt met een runtimebibliotheek van Biface die de profiling uitvoert.

’Andere tools vertrouwen op de debuginformatie in de binary. Daarmee kun je de regelnummers aanwijzen, maar als daar meerdere variabelen worden gerefereerd zoals bij array-indices, dan is het nog steeds de vraag waar de afhankelijkheden precies vandaan komen. PA instrumenteert de broncode aan de voorkant van de compiler. Daardoor kun je heel accuraat feedback geven aan de gebruiker over de variabelen die afhankelijkheden veroorzaken‘, vertelt Hoogerbrugge.

Een ander voordeel van deze aanpak is dat het gereedschap voor de programmeur transparant in de standaard toolketen integreert. In de makefile of de projectinstellingen moet alleen een andere compiler worden opgegeven, de Biface-tool sluist de opties een op een door.

Voor de weergave van de resultaten krijgt de gebruiker wel met een eigen grafische interface te maken. Hierin is direct de broncode aan te passen zodat de programmeur iteratief naar de parallelle implementatie toe kan werken. ’Ik kijk ook wel met een schuin oog naar een plug-in voor Eclipse, maar ik probeer nog een beetje helder te krijgen of je daar alles in kunt weergeven wat je wilt‘, aldus Hoogerbrugge. ’Ik toon bijvoorbeeld ook grafen van de afhankelijkheden in de functies. Dat moet ik wel kunnen blijven doen.‘

PA is geschikt voor Linux- en native Android-applicaties op X86- en Arm-processoren. ’In de tooling zit informatie over specifieke processoren om een schatting te kunnen maken van de versnelling die is te realiseren via parallellisatie. Je hebt ook een paar processorafhankelijke assembly-instructies nodig om accuraat te kunnen meten‘, legt Hoogerbrugge uit.

En het parallelliseren van code via GPU‘s? ’Die vraag krijg ik ook wel eens‘, zegt Hoogerbrugge. ’Ik heb er wel eens naar gekeken, maar voorlopig wil ik CPU‘s goed doen. Het blijft tenslotte voorlopig iets voor de avonduren.‘