Perpustakaan pengoptimuman ARM NEON baharu yang dipanggil NEON Bytepack telah menunjukkan peningkatan prestasi yang mengagumkan dalam tugas pemampatan data, mencapai kelajuan pemprosesan sehingga 86 GB/s pada data yang berada dalam L1. Pratonton penyelidikan ini, yang dicipta oleh pembangun Ashton Six, memberi tumpuan kepada pembungkusan dan pembukaan bit daripada tatasusunan bait secara cekap menggunakan set arahan NEON SIMD milik ARM.
Pengesahan Komuniti Melalui Ujian Bebas
Projek ini memperoleh kredibiliti apabila ahli komuniti berjaya menghasilkan semula keputusan penanda aras merentas platform ARM yang berbeza. Seorang pengguna pada mulanya mempersoalkan ketulenan keputusan tersebut, dengan menyatakan isu kompilasi dengan kod perbandingan asas. Walau bagaimanapun, selepas mendapati bahawa pelaksanaan asas x86 menggunakan pengepala SIMDe (SIMD Everywhere) untuk menterjemah intrinsik x86 kepada setara ARM, mereka mengesahkan kesahihan penanda aras tersebut.
Ujian pada kes Google Cloud C4A Axion menunjukkan prestasi yang lebih baik daripada keputusan asal Graviton4, dengan beberapa konfigurasi mencapai lebih 123 GB/s untuk operasi lebar bit tertentu. Pengesahan ini merentas pelbagai platform pelayan ARM menunjukkan nilai praktikal teknik pengoptimuman tersebut.
SIMD (Single Instruction, Multiple Data) membolehkan pemproses melakukan operasi yang sama pada berbilang titik data secara serentak, mempercepatkan tugas pengiraan tertentu dengan ketara.
Keputusan Ujian Platform
- Graviton4 (Neoverse V2): Penanda aras asal menunjukkan min geometri 86 GB/s
- Google Cloud C4A Axion: Sehingga 123.63 GB/s untuk operasi pembungkusan 2-bit
- Apple M1 Pro: Prestasi terhad disebabkan sokongan operasi anjakan kecil yang lemah
- Apple M3/M4: Prestasi anjakan kecil yang lebih baik berbanding M1
Semua platform menggunakan seni bina teras Neoverse V2 yang sama kecuali pemproses Apple
Inovasi Teknikal Di Sebalik Peningkatan Prestasi
Perpustakaan ini mencapai peningkatan kelajuannya melalui beberapa pengoptimuman utama. Ia beroperasi pada tahap bait dan bukannya bekerja dengan jenis data yang lebih besar, membolehkan lebih banyak elemen logik diproses setiap arahan. Pelaksanaannya menggunakan interleaving sejajar di mana penyumbang data sejajar dengan sempadan perkataan, membolehkan kebanyakan pergerakan data runtuh menjadi operasi tunggal tanpa tumpahan merentas perkataan.
Kod ini juga menggunakan teknik pembentukan arahan, menggunakan fungsi pembantu kecil untuk operasi muatan, simpan, dan manipulasi bit yang menggalakkan pemproses menggunakan operasi muatan/simpan berpasangan dan arahan sisip-anjakan gabungan. Selain itu, perpustakaan ini termasuk pengkhususan setiap lebar bit yang menyisipkan gelung panas, menghapuskan overhed panggilan fungsi, suis, atau pembinaan topeng semasa operasi kritikal.
Lebar bit merujuk kepada berapa banyak bit yang diperlukan untuk mewakili setiap nilai data - contohnya, nilai 0-7 hanya memerlukan 3 bit setiap satu.
Pengoptimuman Teknikal Utama
- Paralelisme peringkat bait: Lebih banyak elemen logik diproses bagi setiap arahan
- Interleaving sejajar: Penyumbang disejajarkan kepada sempadan perkataan, kebanyakan pergerakan runtuh kepada operasi tunggal
- Pembentukan arahan: Fungsi pembantu menggalakkan operasi muatan/simpan berpasangan dan operasi anjakan-sisip gabungan
- Penjadualan mikroarkitektur: Rantai terpisah, julat hidup dipangkas, port seimbang, gelung panas dibuka
- Overhed kawalan minimum: Pengkhususan lebar-per-bit memasukkan gelung panas tanpa panggilan fungsi atau suis
Cabaran dan Penyelesaian Khusus Platform
Ujian komuniti mendedahkan perbezaan platform yang menarik, terutamanya dengan pemproses M1 milik Apple. Seorang penguji mendapati bahawa cip M1 mempunyai prestasi yang ketara lemah dengan operasi anjakan kecil, yang mempengaruhi kod manipulasi bit jenis ini. Pembangun menyatakan bahawa pemproses M3 sebahagiannya menangani isu ini, manakala cip M4 menyelesaikannya sepenuhnya.
Perpustakaan ini menyasarkan perkakasan kelas pelayan dan bukannya peranti pengguna, memberi tumpuan kepada beban kerja gudang data dan analitik di mana lebar jalur memori sering menjadi faktor pengehad. Untuk aplikasi dunia sebenar, pembangun mengesyorkan penggabungan operasi bytepack dengan peringkat pemprosesan lain untuk mengekalkan keputusan perantaraan dalam daftar pemproses, memaksimumkan faedah prestasi.
Perbandingan Prestasi (pemprosesan GB/s)
Lebar Bit | NEON Pack | NEON Unpack | Baseline Pack | Baseline Unpack |
---|---|---|---|---|
1-bit | 90.50 | 66.80 | 38.83 | 58.94 |
2-bit | 104.93 | 72.88 | 48.14 | 56.17 |
3-bit | 84.55 | 73.11 | 40.92 | 59.56 |
4-bit | 95.22 | 70.09 | 52.83 | 68.66 |
5-bit | 80.43 | 69.70 | 39.64 | 56.96 |
6-bit | 79.58 | 68.11 | 44.66 | 57.56 |
7-bit | 66.66 | 66.20 | 38.24 | 53.96 |
8-bit | 79.73 | 80.17 | 58.37 | 73.35 |
Diuji pada Neoverse V2 ( Graviton4 ) dengan set kerja 16 KiB dalam cache L1
Kesan Lebih Luas Terhadap Pemprosesan Data
Kerja ini menangani kesesakan biasa dalam analitik data di mana tatasusunan nombor dengan had atas yang diketahui - seperti kod kategori atau nilai enum - memerlukan pemprosesan yang cekap. Dengan membungkus nilai-nilai ini dengan lebih ketat dalam memori, pengoptimuman boleh meningkatkan prestasi lebih daripada dua kali ganda untuk operasi terikat memori yang biasa dalam sistem pangkalan data dan analitik.
Projek ini telah mencetuskan perbincangan tentang keupayaan ARM NEON berbanding set arahan SIMD x86, dengan ahli komuniti berkongsi pandangan tentang ciri yang hilang dan penyelesaian sementara. Ada yang menyatakan bahawa walaupun NEON kekurangan arahan mudah tertentu yang terdapat dalam pemproses x86, seni bina set arahan ARM menawarkan sokongan yang lebih baik untuk operasi elemen 8-bit dan ciri prestasi yang lebih boleh diramal.
Rujukan: NEON Bytepack