Для ядра Linux прапанавана рэалізацыя функцыі memchr, якая працуе да 4 разоў хутчэй

Для ўключэння ў склад ядра Linux прапанаваны набор патчаў з аптымізаванай рэалізацыяй функцыі memchr(), ужывальнай для пошуку знака ў масіве. У адрозненне ад старога варыянту, у якім прымянялася пабайтавае параўнанне, прапанаваная рэалізацыя пабудавана з улікам поўнага выкарыстання 64- і 32-разрадных рэгістраў CPU. Замест байтаў параўнанне ажыццяўляецца з выкарыстаннем машынных слоў, што дазваляе за раз параўноўваць як мінімум 4 байта.

Пры пошуку ў вялікіх радках новы варыянт аказаўся хутчэй старога прыкладна ў 4 разы (напрыклад, для радкоў у 1000 сімвалаў). Для радкоў невялікага памеру эфектыўнасць новай рэалізацыі не гэтак значная, але ўсё роўна вышэй у параўнанні з зыходным варыянтам. У ядры Linux памер апрацоўваных у memchr() радкоў дасягае 512 байт. Прырост прадукцыйнасці для 512 байтавых радкоў, у сітуацыі, калі шуканы сімвал знаходзіцца ў канцы радка, складае 20%.

Тэставанне ядра 5.18 з новым варыянтам "memchr()" для 32- і 64-разрадных архітэктур не выявіла якія-небудзь праблем. Агульны прырост прадукцыйнасці падсістэм ядра пры выкарыстанні аптымізаванага варыянту "memchr()" пакуль не ацэньваўся, як не аналізавалася і мэтазгоднасць замены рэалізацыі (у кодзе ядра выклік функцыі memchr() сустракаецца 129 раз, у тым ліку ў кодзе драйвераў і файлавых сістэм).

Крыніца: opennet.ru

Дадаць каментар