dinsdag 25 mei 2021

Waarom DOOM niet extreem soepel loopt op nieuwe CPU's

Een tijdje geleden had ik DOOM BFG edition aangeschaft en het viel mij op dat DOOM niet extreem soepel loopt, terwijl moderne CPU's toch veel sneller zijn dan die van 1993.

De reden hiervoor is de opbouw van het beeld bij DOOM. De muren worden namelijk verticaal getekend door de oorspronkelijke engine. Dus iedere keer een verticale rij van 1 pixel breed. Dat is echt killing voor je CPU cache. Daardoor heb je weinig aan de snelheid van je CPU, want de CPU is alleen maar aan het wachten op je memorybus.

Eerder had ik al geschreven over cachelines. Bij het tekenen van muren in SunRacer heb ik initieel ook geprobeerd om muren verticaal te tekenen, dus 1 pixel breed. Dat was zo langzaam dat het soms niet eens lukte om het hele scherm (1920x1080) te tekenen binnen 1 frame.

De CPU kan 64 bytes tegelijkertijd naar het geheugen wegschrijven, maar als de software vervolgens maar 4 bytes (1 pixel) verandert, dan gooi je een hoop performance weg.

Tegenwoordig houd ik in SunRacer meer rekening met de horizontale cachelines en bereken zoveel mogelijk pixels horizontaal. De CPU heeft dan wel meer werk, omdat er meer programmacode wordt doorlopen per pixel. Maar de CPU stond toch niets te doen. Dus is het uiteindelijke resultaat toch 2 keer sneller.

Geen opmerkingen:

Een reactie posten