Для ядра 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

Додати коментар або відгук