GitHub axtarış mühərrikinin ən vacib əməliyyatlarından biri olan case-folding (hərflərin böyük-kiçik fərqini silmək) üçün yeni bir yanaşma təqdim edib. Şirkət mühəndisləri bu əməliyyatı adi bir nüvədə saniyədə 45 GiB'dən çox sürətlə yerinə yetirə bilən bir alqoritm hazırlayıb.
Ənənəvi yanaşmalarda hər bir simvol üçün ayrıca yoxlama aparılır — məsələn, simvolun böyük hərf olub-olmadığını yoxlamaq, sonra çevirmək. Bu yanaşma sadə görünsə də, böyük verilənlər üzərində performans itkisinə səbəb olur. GitHub'un hazırladığı yeni üsul isə branch-free (şaxələnməsiz) dövrü və bayt arifmetikasından istifadə edir. Bu o deməkdir ki, proqram hər bir simvol üçün hansı əməliyyatı yerinə yetirəcəyinə qərar vermək məcburiyyətində qalmır — bütün simvollar eyni qaydada emal olunur.
Bu yanaşmanın əsas üstünlüyü CPU-nun branch prediction (şaxə proqnozlaşdırma) səhvlərini aradan qaldırmasıdır. Müasir prosessorlar şərti keçidləri təxmin edərək işləyir, lakin təxmin səhv olarsa, ciddi performans itkisi yaranır. Branch-free dövrlər bu problemi tamamilə aradan qaldırır. Nəticədə eyni tək nüvədə, adi disklərdən belə daha sürətli oxu sürəti əldə edilir.
Alqoritm xüsusi olaraq kod axtarışı üçün optimallaşdırılıb. Mətn sənədlərindən fərqli olaraq, kod fayllarında rəqəmlər, xüsusi simvollar və müxtəlif dillərə aid sözlər çox olur. Case-folding əməliyyatı bu zaman yalnız hərf simvollarına tətbiq edilməli, digər simvollar isə olduğu kimi saxlanmalıdır. GitHub'un həlli bu fərqi də nəzərə alaraq minimum əlavə yüklə işləyir.
GitHub bu optimallaşdırmanı artıq öz kod axtarış infrastrukturunda tətbiq edib. İstifadəçilər üçün bu o deməkdir ki, böyük repozitoriyalarda belə axtarış nəticələri əvvəlkindən daha sürətli gələcək. Xüsusilə milyonlarla sətir kodu olan açıq mənbə layihələrində bu fərq hiss olunacaq.
Maraqlıdır ki, bu üsul yalnız kod axtarışı üçün deyil, eyni zamanda mətn emalı, məlumat sıxışdırma və şifrələmə kimi digər sahələrdə də tətbiq oluna bilər. GitHub mühəndislərinin bu işi, hardware'ın limitlərindən maksimum yararlanmaq üçün proqram təminatında edilə biləcək incə optimallaşdırmaların gücünü bir daha göstərir.


