Mereka mencadangkan untuk memasukkan dalam kernel Linux pelaksanaan sehingga 4 kali lebih cepat daripada memchr

Baru-baru ini cadangan untuk kernel Linux telah dikeluarkan, di mana ia dicadangkan untuk memasukkan satu set patch dengan a pelaksanaan dioptimumkan bagi fungsi memchr(). digunakan untuk mencari aksara dalam tatasusunan.

Fungsi memchr() mengimbas n bait utama bagi kawasan memori yang ditunjuk oleh s untuk contoh pertama c. Kedua-dua c dan bait dalam kawasan memori yang ditunjuk oleh s ditafsirkan sebagai aksara tidak bertanda.

Cadangan janji menjadi lebih pantas untuk mencari watak dalam blok ingatan. Dalam ujian pembangun, pelaksanaan baharu boleh menjadi hampir empat kali lebih pantas pada carian besar

Tidak seperti versi sebelumnya, yang menggunakan perbandingan bait demi bait, pelaksanaan yang dicadangkan dibuat dengan mengambil kira penggunaan penuh daftar CPU 64-bit dan 32-bit. Daripada bait, perbandingan dilakukan menggunakan kata mesin, yang membolehkan sekurang-kurangnya 4 bait dibandingkan pada satu masa.

Siri tampung ini mengoptimumkan "memchr()" dan menambah makro untuk
"memchr_inv()" supaya kedua-dua fungsi boleh menggunakannya untuk menjana bitmask.

Pelaksanaan asal "memchr()" adalah berdasarkan perbandingan bait,
yang tidak menggunakan sepenuhnya daftar 64 atau 32 bit dalam CPU. Kami melaksanakan a
perbandingan dengan perkataan supaya sekurang-kurangnya 4 bait boleh dibandingkan dengan yang sama
cuaca. Memchr() yang dioptimumkan hampir 4 kali lebih pantas daripada yang asal
untuk rantai panjang. Dalam Linux Kernel, kami mendapati bahawa panjang rentetan
yang dicari oleh "memchr()" adalah sehingga 512 bait dalam pemacu/misc/lkdtm/heap.c.

Apabila mencari pada rentetan besar, versi baharu ternyata kira-kira 4 kali lebih pantas daripada yang lama (contohnya, untuk rentetan 1000 aksara). Untuk rantaian kecil, kecekapan pelaksanaan baharu tidak begitu ketara, tetapi ia masih lebih tinggi daripada versi asal.

Perkara yang menarik tentang cadangan baharu itu ialah penambahbaikan untuk rantaian besar, yang meningkatkan masa dengan ketara. Perlu dinyatakan bahawa dalam kernel Linux, saiz rentetan yang diproses dalam memchr() mencapai 512 bait. Dalam ujian kami, peningkatan prestasi untuk rentetan 512-bait, dalam situasi di mana watak carian berada di hujung rentetan, ia adalah 20%.

Perlu dinyatakan bahawa versi asal memchr() dilaksanakan dengan teknik perbandingan bait-bijak, yang tidak menggunakan sepenuhnya daftar pada CPU 64-bit atau 32-bit.

Kami menggunakan perbandingan perkataan keseluruhan supaya 8 aksara boleh dibandingkan pada masa yang sama pada CPU. Kod ini adalah berdasarkan pelaksanaan David Light.

Kami mencipta dua fail untuk mengukur prestasi fail pertama yang mengandungi purata 10 aksara mendahului aksara destinasi. Fail kedua mengandungi sekurang-kurangnya 1000 aksara sebelum fail watak sasaran.

Pelaksanaan "memchr()" kami adalah sedikit lebih baik pada ujian pertama dan hampir 4 kali lebih cepat daripada yang asal pelaksanaan dalam ujian kedua.

Ujian kernel 5.18 dengan varian "memchr()" baharu untuk seni bina 32-bit dan 64-bit tidak mendedahkan sebarang masalah.

Apakah yang berlaku jika p tidak sejajar 8 (atau 4 pada sasaran 32 bit)? Tidak semua sasaran menyokong muatan tidak sejajar (cekap), bukan?
 Saya fikir ia berfungsi jika p tidak sejajar 8 atau 4 bait. Katakan rentetan ialah 10 bait. Gelung for di sini akan mencari 8 bait pertama. Jika aksara destinasi berada dalam 2 bait terakhir, gelung kedua untuk akan menemuinya. Ia juga berfungsi seperti ini pada mesin 32-bit.

Keuntungan prestasi keseluruhan belum dinilai subsistem kernel apabila menggunakan varian "memchr()" yang dioptimumkan, dan ia juga tidak dibincangkan sama ada untuk mengatasi pelaksanaan (panggilan fungsi memchr() berlaku 129 kali dalam kod kernel, termasuk pemacu dan sistem fail).

Akhirnya Sekiranya anda berminat untuk mengetahui lebih lanjut mengenainya, anda boleh menyemak butirannya Dalam pautan berikut.


Tinggalkan komen anda

Alamat email anda tidak akan disiarkan. Ruangan yang diperlukan ditanda dengan *

*

*

  1. Bertanggungjawab atas data: Miguel Ángel Gatón
  2. Tujuan data: Mengendalikan SPAM, pengurusan komen.
  3. Perundangan: Persetujuan anda
  4. Komunikasi data: Data tidak akan disampaikan kepada pihak ketiga kecuali dengan kewajiban hukum.
  5. Penyimpanan data: Pangkalan data yang dihoskan oleh Occentus Networks (EU)
  6. Hak: Pada bila-bila masa anda boleh menghadkan, memulihkan dan menghapus maklumat anda.