Für den Linux-Kernel wurde eine Implementierung der memchr-Funktion vorgeschlagen, die bis zu viermal schneller läuft

Für die Aufnahme in den Linux-Kernel wurde eine Reihe von Patches mit einer optimierten Implementierung der memchr()-Funktion vorgeschlagen, die zur Suche nach einem Symbol in einem Array verwendet wird. Im Gegensatz zur alten Version, die einen Byte-für-Byte-Vergleich verwendete, berücksichtigt die vorgeschlagene Implementierung die vollständige Nutzung von 64- und 32-Bit-CPU-Registern. Anstelle von Bytes wird der Vergleich mithilfe von Maschinenwörtern durchgeführt, sodass mindestens 4 Bytes gleichzeitig verglichen werden können.

Bei der Suche in großen Zeichenfolgen erwies sich die neue Option als etwa viermal schneller als die alte (z. B. für Zeichenfolgen mit 4 Zeichen). Bei kleinen Strings ist die Effizienz der neuen Implementierung nicht so groß, aber im Vergleich zur Originalversion immer noch höher. Im Linux-Kernel erreicht die Größe der in memchr() verarbeiteten Zeichenfolgen 1000 Byte. Der Leistungsgewinn für 512-Byte-Strings beträgt 512 %, wenn sich das gesuchte Zeichen am Ende des Strings befindet.

Der Test des 5.18-Kernels mit der neuen Option „memchr()“ für 32-Bit- und 64-Bit-Architekturen ergab keine Probleme. Der Gesamtleistungsgewinn von Kernel-Subsystemen bei Verwendung der optimierten Version von „memchr()“ wurde noch nicht bewertet, noch wurde die Machbarkeit eines Austauschs der Implementierung analysiert (im Kernel-Code kommen Aufrufe der Funktion memchr() 129 Mal vor). , auch im Code von Treibern und Dateisystemen).

Source: opennet.ru

Kommentar hinzufügen