Predložena je implementacija funkcije memchr za Linux kernel, koja radi do 4 puta brže

Skup zakrpa s optimiziranom implementacijom funkcije memchr(), korištenih za traženje simbola u nizu, predložen je za uključivanje u Linux kernel. Za razliku od stare verzije, koja je koristila poređenje bajt po bajt, predložena implementacija je izgrađena uzimajući u obzir punu upotrebu 64- i 32-bitnih CPU registara. Umjesto bajtova, poređenje se vrši pomoću mašinskih riječi, što omogućava da se uporede najmanje 4 bajta istovremeno.

Prilikom pretraživanja u velikim nizovima, nova opcija se pokazala oko 4 puta brža od stare (na primjer, za nizove od 1000 znakova). Za male žice, efikasnost nove implementacije nije toliko značajna, ali je ipak veća u odnosu na originalnu verziju. U Linux kernelu, veličina stringova obrađenih u memchr() dostiže 512 bajtova. Dobitak performansi za nizove od 512 bajta, u situaciji kada je traženi znak na kraju niza, iznosi 20%.

Testiranje kernela 5.18 sa novom opcijom "memchr()" za 32-bitne i 64-bitne arhitekture nije otkrilo nikakve probleme. Ukupni dobitak performansi podsistema kernela pri korištenju optimizirane verzije “memchr()” još nije procijenjen, niti je analizirana izvodljivost zamjene implementacije (u kodu kernela, pozivi funkcije memchr() se javljaju 129 puta , uključujući kod drajvera i sistema datoteka).

izvor: opennet.ru

Dodajte komentar