Linux çekirdeğine memchr'den 4 kata kadar daha hızlı bir uygulama eklemeyi önerdiler.

geçenlerde Linux çekirdeği için bir teklif yayınlandıiçeren bir dizi yamanın dahil edilmesinin önerildiği memchr() işlevinin optimize edilmiş uygulaması dizideki bir karakteri aramak için kullanılır.

memchr() işlevi, c'nin ilk örneği için s ile gösterilen bellek alanının baştaki n baytını tarar. Hem c hem de s ile gösterilen bellek alanındaki baytlar, işaretsiz karakterler olarak yorumlanır.

Öneri sözler daha hızlı ol bir bellek bloğu içindeki bir karakteri bulmak için. Geliştirici testlerinde, yeni uygulama büyük aramalarda neredeyse dört kat daha hızlı olabilir

Bayt bayt karşılaştırma kullanan önceki sürümden farklı olarak, önerilen uygulama 64-bit ve 32-bit CPU kayıtlarının tam kullanımı dikkate alınarak oluşturulmuştur. Bayt yerine karşılaştırma, bir seferde en az 4 baytın karşılaştırılmasına izin veren makine kelimeleri kullanılarak yapılır.

Bu yama serisi, "memchr()" i optimize etti ve için bir makro ekledi.
"memchr_inv()", böylece her iki işlev de onu bir bit maskesi oluşturmak için kullanabilir.

"Memchr()" öğesinin orijinal uygulaması bayt karşılaştırmasına dayanır,
CPU'daki 64 veya 32 bitlik kaydı tam olarak kullanmayan. biz uygularız
kelimelerle karşılaştırma, böylece en az 4 bayt aynı ile karşılaştırılabilir
hava. Optimize edilmiş memchr(), orijinalinden neredeyse 4 kat daha hızlıdır
uzun zincirler için. Linux Çekirdeğinde, dizenin uzunluğunu buluyoruz
"memchr()" tarafından aranan sürücü/misc/lkdtm/heap.c dosyasında 512 bayta kadardır.

Büyük dizilerde arama yaparken, yeni sürüm eskisinden yaklaşık 4 kat daha hızlı çıktı (örneğin, 1000 karakterlik diziler için). Küçük zincirler için, yeni uygulamanın verimliliği o kadar önemli değil, ancak yine de orijinal versiyondan daha yüksek.

Yeni teklifle ilgili ilginç olan şey, büyük zincirler için süreyi önemli ölçüde iyileştiren iyileştirmedir. Linux çekirdeğinde şunu belirtmekte fayda var. memchr() içinde işlenen dizelerin boyutu 512 bayta ulaşır. Testlerimizde, arama karakterinin olduğu bir durumda 512 baytlık dizeler için performans kazancı dizenin sonunda, %20'dir.

Memchr()'in orijinal versiyonunun, 64-bit veya 32-bit CPU'daki kayıtları tam olarak kullanmayan bayt bazında karşılaştırma tekniği ile uygulandığını belirtmekte fayda var.

Tam kelime karşılaştırması kullanıyoruz, böylece CPU'da aynı anda 8 karakter karşılaştırılabilir. Bu kod, David Light'ın uygulamasına dayanmaktadır.

İlk dosyanın performansını ölçmek için iki dosya oluşturuyoruz hedef karakterin önünde ortalama 10 karakter içerir. İkinci dosya, dosyadan önce en az 1000 karakter içerir. hedef karakter.

"memchr()" uygulamamız biraz ilk testte daha iyi ve orijinalinden neredeyse 4 kat daha hızlı ikinci testte uygulama.

5.18-bit ve 32-bit mimariler için yeni "memchr()" varyantıyla Kernel 64 testi herhangi bir sorun ortaya çıkarmadı.

p 8 (veya 4 bitlik hedeflerde 32) bayt hizalı değilse ne olur? Tüm hedefler hizalanmamış (verimli) yükleri desteklemez, değil mi?
 p 8 veya 4 bayt hizalı değilse işe yaradığını düşünüyorum. Dizenin 10 bayt olduğunu varsayalım. Buradaki for döngüsü ilk 8 baytı arayacaktır. Hedef karakter son 2 bayttaysa, ikinci for döngüsü onu bulur. 32 bit makinelerde de bu şekilde çalışır.

Genel performans kazancı henüz değerlendirilmedi optimize edilmiş "memchr()" varyantı kullanılırken çekirdek alt sistemlerinin ne olduğu veya uygulamanın geçersiz kılınıp kılınmayacağı tartışılmamıştır (memchr() işlev çağrısı, sürücüler ve dosya sistemleri dahil olmak üzere çekirdek kodunda 129 kez gerçekleşir).

Nihayet Bununla ilgili daha fazla bilgi edinmek istiyorsanız, detayları kontrol edebilirsin Aşağıdaki bağlantıda.


Yorumunuzu bırakın

E-posta hesabınız yayınlanmayacak. Gerekli alanlar ile işaretlenmiştir *

*

*

  1. Verilerden sorumlu: Miguel Ángel Gatón
  2. Verilerin amacı: Kontrol SPAM, yorum yönetimi.
  3. Meşruiyet: Onayınız
  4. Verilerin iletilmesi: Veriler, yasal zorunluluk dışında üçüncü kişilere iletilmeyecektir.
  5. Veri depolama: Occentus Networks (AB) tarafından barındırılan veritabanı
  6. Haklar: Bilgilerinizi istediğiniz zaman sınırlayabilir, kurtarabilir ve silebilirsiniz.