Ik ben een programma aan het schrijven dat zo snel mogelijk moet zijn. Daarom dat ik inplaats van eerst wat werkends schrijven alles wat ik doe meteen zo optimaal wil schrijven, want elke miliseconde is er 1. Ergens in de applicatie moet ik regelmatig linked lists doorlopen. De elementen in die list liggen niet achter elkaar, wat wel jammer is, maar daar kan ik niks aan doen.
Ik loop die linked list af en vergelijk elk item met een waarde die ik zoek en ik test natuurlijk of de volgende in de list NULL is, zo ja, dan stop ik en heb ik niks gevonden. Toevallig weet ik ook hoe lang die list is, dus ik zou ipv, op NULL checken, ook dat tellertje af kunnen laten lopen.
Teller:
pro: cpu hoeft niet te wachten op de NULL test om door te lopen naar het volgende item (loop unrolling)
con: extra instructies in de inner loop
Geen teller:
pro: ziet er efficient en schoon uit
con: mogelijk kans dat de cpu stalled bij het evalueren
Als je nog andere optimalisatie tips hebt, help uw medemens en toon je inteligentie
Ik loop die linked list af en vergelijk elk item met een waarde die ik zoek en ik test natuurlijk of de volgende in de list NULL is, zo ja, dan stop ik en heb ik niks gevonden. Toevallig weet ik ook hoe lang die list is, dus ik zou ipv, op NULL checken, ook dat tellertje af kunnen laten lopen.
Teller:
pro: cpu hoeft niet te wachten op de NULL test om door te lopen naar het volgende item (loop unrolling)
con: extra instructies in de inner loop
Geen teller:
pro: ziet er efficient en schoon uit
con: mogelijk kans dat de cpu stalled bij het evalueren
offtopic:
De list is eigenlijk een double linked list, ook moet ik regelmatig een nieuw item invoegen, dat doe ik altijd aan het begin (4 instructies in C). Soms moet ik er een item uithalen (2 instructies) en ook wel eens 2 items wisselen van 2 verschillende lists (in theorie 8, maar ik kom op 10 instructies).
Vraagje: wat zou de snelste methode zijn van deze 3 operaties?
De list is eigenlijk een double linked list, ook moet ik regelmatig een nieuw item invoegen, dat doe ik altijd aan het begin (4 instructies in C). Soms moet ik er een item uithalen (2 instructies) en ook wel eens 2 items wisselen van 2 verschillende lists (in theorie 8, maar ik kom op 10 instructies).
Vraagje: wat zou de snelste methode zijn van deze 3 operaties?
Als je nog andere optimalisatie tips hebt, help uw medemens en toon je inteligentie
"Beauty is the ultimate defence against complexity." David Gelernter