Bubar proposal kanggo kernel Linux dirilis, kang diusulake kanggo kalebu pesawat saka patch karo a implementasine optimized saka fungsi memchr (). digunakake kanggo nggoleki karakter ing larik.
Fungsi memchr () mindai n bait anjog saka area memori nuding dening s kanggo Kayata pisanan saka c. Loro-lorone c lan bait ing area memori sing ditunjuk dening s diinterpretasikake minangka karakter sing ora ditandatangani.
Proposal kasebut janji dadi luwih cepet kanggo nemokake karakter ing blok memori. Ing tes pangembang, implementasine anyar bisa meh kaping papat luwih cepet ing panelusuran gedhe
Beda karo versi sadurunge, sing nggunakake perbandingan byte-by-byte, implementasine ngajokaken digawe considering nggunakake lengkap 64-dicokot lan 32-dicokot ndhaftar CPU. Tinimbang bita, perbandingan ditindakake kanthi nggunakake tembung mesin, sing ngidini paling ora 4 bita bisa dibandhingake ing siji wektu.
Seri patch iki ngoptimalake "memchr ()" lan nambah makro kanggo
"memchr_inv ()" supaya loro fungsi bisa digunakake kanggo generate bitmask.Implementasi asli "memchr()" adhedhasar perbandingan byte,
kang ora kanthi nggunakake 64 utawa 32 bit ndhaftar ing CPU. We ngleksanakake a
mbandhingake kanthi tembung supaya paling sethithik 4 bait bisa dibandhingake karo sing padha
cuaca. Memchr optimized () meh 4 kaping luwih cepet saka asli
kanggo rentengan dawa. Ing Linux Kernel, kita nemokake yen dawa senar
digoleki dening "memchr ()" nganti 512 bait ing drivers/misc/lkdtm/heap.c.
Nalika nggoleki ing strings gedhe, versi anyar diaktifake metu dadi bab 4 kaping luwih cepet saka lawas (contone, kanggo strings saka 1000 karakter). Kanggo ranté cilik, efisiensi implementasi anyar ora pati penting, nanging isih luwih dhuwur tinimbang versi asli.
Wangsulan: Bab ingkang menarik bab proposal anyar iku dandan kanggo rentengan gedhe, kang banget mbenakake kaping. Perlu dicathet yen ing kernel Linux, ukuran strings diproses ing memchr () tekan 512 bait. Ing tes kita, gain kinerja kanggo strings 512-bait, ing kahanan ngendi karakter search ana ing mburi senar, iku 20%.
Iku worth sebutno sing versi asli saka memchr () dipun ginakaken karo technique comparison byte-wicaksana, kang ora kanthi nggunakake ndhaftar ing 64-dicokot utawa 32-dicokot CPU.
Kita nggunakake kabeh comparison tembung supaya 8 karakter bisa dibandhingake ing wektu sing padha ing CPU. Kode iki adhedhasar implementasine David Light.
Kita nggawe rong file kanggo ngukur kinerja file pisanan sing ngemot rata-rata 10 karakter luwih dhisik tinimbang karakter tujuan. File kapindho ngemot paling ora 1000 karakter sadurunge file karakter target.
Implementasine "memchr ()" rada luwih apik ing test pisanan lan meh 4 kaping luwih cepet saka asli implementasine ing test kapindho.
Pengujian kernel 5.18 kanthi varian "memchr ()" anyar kanggo arsitektur 32-bit lan 64-bit ora mbukak masalah.
Apa sing kedadeyan yen p ora 8 (utawa 4 ing 32 bit target) bait selaras? Ora kabeh target ndhukung beban sing ora selaras (efisien), ta?
Aku kerjane yen p ora 8 utawa 4 bait selaras. Ayo kita ngomong string punika 10 bita. The for loop kene bakal nggoleki 8 bait pisanan. Yen karakter tujuan ana ing 2 bita pungkasan, sing kapindho kanggo daur ulang bakal nemokake. Iki uga bisa digunakake ing mesin 32-bit.
Keuntungan kinerja sakabèhé durung dievaluasi saka subsistem kernel nalika nggunakake optimized "memchr ()" varian, utawa wis rembugan apa kanggo override implementasine (panggilan fungsi memchr () 129 kaping ing kode kernel, kalebu pembalap lan sistem file).
Pungkasan Yen sampeyan kepengin ngerti babagan iki, sampeyan bisa mriksa rinciane Ing link ing ngisor iki.
Dadi pisanan komentar