19 januari 2011

Performance in computing, snel versus slank

Als je programmeert is je eerste beslommering dat je programma doet wat het moet doen. Als het twee rijen getallen moet optellen, moet het niet een andere bewerking daarop loslaten. En de optelling moet correct zijn.
Daarna (pas) is de performance van belang, waarbij meestal, of eigenlijk voornamelijk, aan de snelheid wordt gedacht.
Ik wil aantonen dat voor de beoordeling van (de kwaliteit van) een algoritme het geheugenbeslag, de zgn. 'footprint' van (veel) groter belang is.

De snelheid van (de uitvoering van) een proces is van veel factoren afhankelijk. Allereerst natuurlijk van het algoritme. Een in wezen traag algoritme zal nooit snel kunnen worden uitgevoerd.
Maar dan zijn er een groot scala van andere, vooral omgevingsomstandigheden van belang. Wordt de programmeertaal gecompileerd of geïnterpreteerd? Hoe modern is de processor en wat is de kloksnelheid? Kan het proces multithreaded worden uitgevoerd of niet? Is er überhaupt sprake van parallelle processing? Kan het eventueel draaien op een videokaartprocessor? En, in de (nabije?) toekomst, draait het op een quantumcomputer?
Allemaal vragen die direct van invloed zijn op de snelheid en daarmee de (doorloop)tijd van een proces.
Waarbij nog komt dat we aan tijd geen gebrek hebben. Of het proces nu binnen één seconde loopt of er weken over doet, dat kost niets meer.

Het geheugenbeslag is van een heel andere orde. Om met het laatste te beginnen, willen we een groter geheugen hebben, dan zullen we in de buidel moeten tasten, maar zelfs als we héél diepe zakken hebben, een computer heeft slechts beperkte ruimte voor geheugen.
Daarbij komt dat het algoritme bepalend is voor de hoeveelheid geheugen die vereist is. Dan maakt compileren of interpreteren niet meer uit, ja zelfs een quantumprocessor zal daar rekening mee moeten houden. Want vanzelfsprekend zal een proces dat veel geheugen vereist meer gesleep met gegevens met zich meebrengen, en daarmee trager zijn, dan een slank proces.

Uiteraard zal vrijwel altijd snelheid van groter belang blijven, maar het ontwerp van het algoritme moet meer op het geheugenbeslag gericht zijn. En voor de snelheid moeten we dan de juiste andere factoren kiezen. Dan krijgen we een optimale oplossing.

Geen opmerkingen:

Een reactie posten