Versnellen van programma's met behulp van de debuginformatie

Promotor Koen De Bosschere
Begeleider 1: Ludo Van Put
Begeleider 2: Bruno De Bus
Aantal studenten: 1 of meerdere
Richting: Ir. in de computerwetenschappen, Lic. in de informatica
DWARF Debugging Format

Contactpersoon: Ludo Van Put

Diablo is een raamwerk voor het herschrijven/transformeren van programma's tijdens het linken. Zoals je kan zien op de resultatenpagina, kan je door programma's te herschrijven heel wat code verwijderen. Wat in de resultaten niet wordt weergegeven is het feit dat deze gecompacteerde programma's vaak nog sneller uitvoeren. Er zijn echter een aantal beperkingen aan het optimaliseren (verkleinen en/of versnellen) tijdens het linken. Tijdens het linken werk je met gecompileerde code, met de object-bestanden (.o files). Een linker of een raamwerk zoals Diablo heeft geen informatie meer over de oorspronkelijke broncode. Een gevolg daarvan is dat bewerkingen op data in het geheugen moeilijk kunnen gemodelleerd worden. Deze bewerkingen moeten zeer conservatief benaderd worden, omdat foutieve transformaties kunnen leiden tot programma's die niet meer werken. Om aggressiever te kunnen optimaliseren, zouden we graag informatie hebben over de gebruikte datatypes en datastructuren in een programma, informatie waarover een compiler wel beschikt.

De compiler kan echter bevolen worden om informatie over de datatypes en datastructuren te genereren als debuginformatie. Het lijkt daarom logisch om deze debuginformatie te gaan gebruiken voor aggresieve optimalisaties uit te voeren tijdens het linken. De debuginformatie dient dan als communicatiekanaal tussen compiler en programmaherschrijver. Recent werd er in het kader van onderzoek met behulp van Diablo begonnen met het uitbuiten van de debuginformatie voor optimalisatiedoeleinden. Dit onderzoek is echter zeer jong en er zijn nog veel onbewandelde paden.

In deze scriptie krijg je de kans om je creativiteit de vrije loop te laten en op zoek te gaan naar optimalisatiemogelijkheden door gebruik van debuginformatie. Je kan gebruik maken van de bestaande code in Diablo, zodat je je niet in de details moet verliezen. Er komt dus zeker denkwerk aan te pas. Uiteraard zal je dan je ideeën moeten implementeren ter evaluatie van hun optimalisatiemogelijkheden. Al de code van het Diablo raamwerk is geschreven in de C programmeertaal. Kennis van C is dus een voordeel, maar geen noodzaak.

Naast optimalisatie van programma's, wordt Diablo ook gebruikt om programmacode te visualiseren. Hiervoor werd Lancet ontwikkeld, nota bene ook in het kader van een scriptie. Het gebruik van debuginformatie in Lancet zou de grafische voorstelling nog aantrekkelijker maken dan ze reeds is. Je kan de controleverloopgrafen verduidelijken door type-informatie weer te geven, of door links te voorzien naar de broncode die tot de machinecode heeft geleid. Dit zou van Lancet een ideaal tool maken voor het begrijpen of reverse engineeren van programma's. Ook kan je dan een goed beeld krijgen van het resultaat van een (compiler)optimalisatie op de machinecode die wordt gegenereerd.

Een derde luik is het geven van feedback aan de programmeur. Als je over debuginformatie beschikt kan je door het koppelen van de resultaten van optimalisaties en de broncode, nuttige hints geven aan de programmeur. Bijvoorbeeld als je in een analyse van de resulterende machinecode ontdekt dat een waarde die een functie teruggeeft nooit gebruikt wordt, dan kan je de programmeur hierop attent maken. De programmeur heeft in dat geval misschien een fout gemaakt in de broncode. Dergelijk onderzoek behoort tot de programma-analyse voor software engineering.

Het spreekt voor zich dat al deze onderzoeksactiviteiten niet door 1 student kunnen uitgevoerd worden. Elke geïnteresseerde student kan te kennen geven aan welk deel hij/zij zich het meest interesseert. Resultaten die uit de scriptie voortvloeien komen in aanmerking voor publicatie op internationale wetenschappelijke fora. Voorbeelden hiervan zijn: Static Analysis Symposium, Working Conference on Reverse Engineering, Workshop on
Program Analysis for Software Tools and Engineering
, ...

DWARF Debugging Format De debuginformatie die door Diablo kan verwerkt worden is beschreven in het DWARF formaat. Meer info hierover vind je op The DWARF Debugging Standard homepage.