En implementering af memchr-funktionen er blevet foreslået til Linux-kernen, der kører op til 4 gange hurtigere

Et sæt patches med en optimeret implementering af memchr()-funktionen, der bruges til at søge efter et symbol i et array, er blevet foreslået til inklusion i Linux-kernen. I modsætning til den gamle version, som brugte byte-for-byte-sammenligning, er den foreslåede implementering bygget under hensyntagen til den fulde brug af 64- og 32-bit CPU-registre. I stedet for bytes udføres sammenligningen ved hjælp af maskinord, som gør det muligt at sammenligne mindst 4 bytes ad gangen.

Når du søgte i store strenge, viste den nye mulighed sig at være omkring 4 gange hurtigere end den gamle (for eksempel for strenge på 1000 tegn). For små strenge er effektiviteten af ​​den nye implementering ikke så væsentlig, men den er stadig højere sammenlignet med den originale version. I Linux-kernen når størrelsen af ​​strenge behandlet i memchr() 512 bytes. Ydeevneforstærkningen for 512 byte strenge, i en situation, hvor det søgte tegn er i slutningen af ​​strengen, er 20%.

Test af 5.18-kernen med den nye "memchr()" mulighed for 32-bit og 64-bit arkitekturer afslørede ingen problemer. Den samlede præstationsgevinst for kerneundersystemer ved brug af den optimerede version af "memchr()" er endnu ikke blevet vurderet, og muligheden for at erstatte implementeringen er heller ikke blevet analyseret (i kernekoden forekommer kald til memchr()-funktionen 129 gange , herunder i koden for drivere og filsystemer).

Kilde: opennet.ru

Tilføj en kommentar