Pro linuxové jádro byla navržena implementace funkce memchr, která běží až 4krát rychleji

Sada patchů s optimalizovanou implementací funkce memchr() používaná k hledání symbolu v poli byla navržena pro zahrnutí do linuxového jádra. Na rozdíl od staré verze, která používala porovnávání bajtů po bajtech, je navrhovaná implementace postavena s ohledem na plné využití 64- a 32bitových CPU registrů. Namísto bajtů se porovnání provádí pomocí strojových slov, což umožňuje porovnávat alespoň 4 bajty najednou.

Při vyhledávání ve velkých řetězcích se nová volba ukázala být asi 4x rychlejší než stará (například pro řetězce 1000 znaků). U malých řetězců není efektivita nové implementace tak výrazná, ale stále je vyšší ve srovnání s původní verzí. V linuxovém jádře dosahuje velikost řetězců zpracovaných v memchr() 512 bajtů. Zisk výkonu pro řetězce o délce 512 bajtů v situaci, kdy je hledaný znak na konci řetězce, je 20 %.

Testování jádra 5.18 s novou volbou "memchr()" pro 32bitové a 64bitové architektury neodhalilo žádné problémy. Celkový nárůst výkonu jaderných subsystémů při použití optimalizované verze „memchr()“ ještě nebyl posouzen, ani nebyla analyzována proveditelnost nahrazení implementace (v kódu jádra se volání funkce memchr() vyskytují 129krát , včetně kódu ovladačů a souborových systémů).

Zdroj: opennet.ru

Přidat komentář