Er is een implementatie van de memchr-functie voorgesteld voor de Linux-kernel, die tot vier keer sneller werkt

Er is een reeks patches met een geoptimaliseerde implementatie van de memchr()-functie, gebruikt om naar een symbool in een array te zoeken, voorgesteld voor opname in de Linux-kernel. In tegenstelling tot de oude versie, die byte-voor-byte vergelijking gebruikte, is de voorgestelde implementatie gebouwd rekening houdend met het volledige gebruik van 64- en 32-bit CPU-registers. In plaats van bytes wordt de vergelijking uitgevoerd met behulp van machinewoorden, waardoor er minimaal 4 bytes tegelijk kunnen worden vergeleken.

Bij het zoeken in grote strings bleek de nieuwe optie ongeveer 4 keer sneller te zijn dan de oude (bijvoorbeeld voor strings van 1000 tekens). Voor kleine strings is de efficiëntie van de nieuwe implementatie niet zo groot, maar nog steeds hoger in vergelijking met de originele versie. In de Linux-kernel bereikt de grootte van de tekenreeksen die in memchr() worden verwerkt 512 bytes. De prestatiewinst voor strings van 512 bytes, in een situatie waarin het gezochte teken aan het einde van de string staat, is 20%.

Het testen van de 5.18-kernel met de nieuwe "memchr()"-optie voor 32-bits en 64-bits architecturen bracht geen problemen aan het licht. De algehele prestatiewinst van kernelsubsystemen bij gebruik van de geoptimaliseerde versie van “memchr()” is nog niet beoordeeld, noch is de haalbaarheid van het vervangen van de implementatie geanalyseerd (in de kernelcode komen oproepen naar de memchr()-functie 129 keer voor , inclusief in de code van stuurprogramma's en bestandssystemen).

Bron: opennet.ru

Voeg een reactie