Jie pasiūlė į Linux branduolį įtraukti iki 4 kartų greitesnį memchr diegimą

Neseniai buvo išleistas pasiūlymas dėl Linux branduolio, kuriame siūloma įtraukti pleistrų rinkinį su a optimizuotas funkcijos memchr() įgyvendinimas naudojamas ieškant simbolio masyve.

Funkcija memchr () nuskaito pirmuosius n baitų atminties srityje, į kurią nurodo s pirmą kartą c. Tiek c, tiek baitai atminties srityje, į kuriuos nurodo s, yra interpretuojami kaip nepasirašyti simboliai.

Pasiūlymas žada būk greitesnis norėdami rasti simbolį atminties bloke. Kūrėjų testuose naujasis diegimas gali būti beveik keturis kartus greitesnis atliekant dideles paieškas

Skirtingai nuo ankstesnės versijos, kurioje buvo naudojamas baitas po baito palyginimas, siūlomas įgyvendinimas sukurtas atsižvelgiant į visapusišką 64 bitų ir 32 bitų procesoriaus registrų naudojimą. Vietoj baitų lyginimas atliekamas naudojant mašininius žodžius, todėl vienu metu galima palyginti bent 4 baitus.

Ši pataisų serija optimizavo „memchr()“ ir pridėjo makrokomandą
„memchr_inv()“, kad abi funkcijos galėtų jį naudoti bitų kaukei generuoti.

Pradinis „memchr()“ įgyvendinimas pagrįstas baitų palyginimu,
kuri nevisiškai naudoja 64 arba 32 bitų registrą procesoriaus. Įgyvendiname a
palyginimas žodžiais, kad būtų galima palyginti bent 4 baitus su tuo pačiu
oras. Optimizuotas memchr() yra beveik 4 kartus greitesnis nei originalas
ilgoms grandinėms. Linux branduolyje matome, kad eilutės ilgis
Ieškoma pagal "memchr()" yra iki 512 baitų aplanke drivers/misc/lkdtm/heap.c.

Kai ieškote didelėse eilutėse, nauja versija pasirodė esanti apie 4 kartus greitesnė už senąją (pavyzdžiui, 1000 simbolių eilutėms). Mažoms grandinėms naujojo diegimo efektyvumas nėra toks reikšmingas, bet vis tiek didesnis nei pradinės versijos.

Įdomiausias naujojo pasiūlymo dalykas yra didelių tinklų patobulinimas, kuris žymiai pagerina laiką. Verta paminėti, kad „Linux“ branduolyje memchr() apdorotų eilučių dydis siekia 512 baitų. Mūsų bandymuose 512 baitų eilučių našumas padidėja, kai paieškos simbolis yra eilutės gale, tai yra 20%.

Verta paminėti, kad pradinė memchr() versija įdiegta naudojant baitų palyginimo techniką, kuri ne iki galo išnaudoja 64 arba 32 bitų procesoriaus registrus.

Naudojame visų žodžių palyginimą, kad CPU vienu metu būtų galima palyginti 8 simbolius. Šis kodas yra pagrįstas David Light įgyvendinimu.

Sukuriame du failus, kad įvertintume pirmojo failo našumą kuriame yra vidutiniškai 10 simbolių prieš paskirties simbolį. Antrame faile yra bent 1000 simbolių prieš tikslinis personažas.

Mūsų „memchr()“ diegimas yra šiek tiek geriau per pirmąjį bandymą ir beveik 4 kartus greičiau nei originalas įgyvendinimas antrajame bandyme.

Branduolio 5.18 testavimas su nauju "memchr()" variantu 32 bitų ir 64 bitų architektūroms neatskleidė jokių problemų.

Kas atsitiks, jei p nėra 8 (arba 4 32 bitų tiksluose) baitų lygiu? Ne visi tikslai palaiko nesuderintas (efektyvias) apkrovas, tiesa?
 Manau, kad tai veikia, jei p nėra išlygintas 8 arba 4 baitais. Tarkime, kad eilutė yra 10 baitų. For kilpa čia ieškos pirmųjų 8 baitų. Jei paskirties simbolis yra paskutiniuose 2 baituose, antrasis ciklas jį suras. Tai taip pat veikia 32 bitų įrenginiuose.

Bendras našumo padidėjimas dar neįvertintas branduolio posistemių, kai naudojamas optimizuotas "memchr()" variantas, taip pat nebuvo aptarta, ar nepaisyti įgyvendinimo (funkcijos memchr() iškvietimas branduolio kode, įskaitant tvarkykles ir failų sistemas, įvyksta 129 kartus).

Pagaliau Jei norite sužinoti daugiau apie tai, galite patikrinti išsamią informaciją Šioje nuorodoje.


Palikite komentarą

Jūsų elektroninio pašto adresas nebus skelbiamas. Privalomi laukai yra pažymėti *

*

*

  1. Atsakingas už duomenis: Miguel Ángel Gatón
  2. Duomenų paskirtis: kontroliuoti šlamštą, komentarų valdymą.
  3. Įteisinimas: jūsų sutikimas
  4. Duomenų perdavimas: Duomenys nebus perduoti trečiosioms šalims, išskyrus teisinius įsipareigojimus.
  5. Duomenų saugojimas: „Occentus Networks“ (ES) talpinama duomenų bazė
  6. Teisės: bet kuriuo metu galite apriboti, atkurti ir ištrinti savo informaciją.