Xxhash: Tambahkan hash Meow di tolok ukur

Dibuat pada 21 Okt 2018  ·  8Komentar  ·  Sumber: Cyan4973/xxHash

Komentar yang paling membantu

meow_hash sepenuhnya bergantung pada keberadaan instruksi AES yang dipercepat perangkat keras.

Saya menduga itu bahkan tidak akan dikompilasi tanpa adanya instruksi ini, karena kodenya cukup pendek, dan saya tidak melihat jalur kode cadangan perangkat lunak apa pun. Selain itu, semua instruksi AES yang dapat saya baca menggunakan intrinsik Intel langsung, sehingga tidak portabel di seluruh arsitektur, terlepas dari kemampuan perangkat kerasnya.

Ini belum tentu merupakan hal yang "buruk": lagi pula, mereka mendapatkan kecepatan tinggi untuk input yang lama sebagai imbalannya.

Tetapi poin utamanya adalah: dengan ketergantungan pada set instruksi perangkat keras khusus seperti itu, portabilitas keluar dari daftar fitur.

Sebagai efek samping, itu bahkan tidak akan berjalan pada platform yang digunakan untuk tolok ukur xxHash.

Mungkin saya harus meluangkan waktu untuk mendokumentasikan ini.

Semua 8 komentar

meow_hash sepenuhnya bergantung pada keberadaan instruksi AES yang dipercepat perangkat keras.

Saya menduga itu bahkan tidak akan dikompilasi tanpa adanya instruksi ini, karena kodenya cukup pendek, dan saya tidak melihat jalur kode cadangan perangkat lunak apa pun. Selain itu, semua instruksi AES yang dapat saya baca menggunakan intrinsik Intel langsung, sehingga tidak portabel di seluruh arsitektur, terlepas dari kemampuan perangkat kerasnya.

Ini belum tentu merupakan hal yang "buruk": lagi pula, mereka mendapatkan kecepatan tinggi untuk input yang lama sebagai imbalannya.

Tetapi poin utamanya adalah: dengan ketergantungan pada set instruksi perangkat keras khusus seperti itu, portabilitas keluar dari daftar fitur.

Sebagai efek samping, itu bahkan tidak akan berjalan pada platform yang digunakan untuk tolok ukur xxHash.

Mungkin saya harus meluangkan waktu untuk mendokumentasikan ini.

Ini tidak lagi benar, Anda harus meninjau kembali ini.

Ya, membaca pengumuman, meow telah meningkat pesat dalam beberapa revisi.
Ia bahkan mengumumkan kompatibilitas dengan ARM.

Saya perlu waktu untuk melihat lebih dalam.

Saya hanya melihat sepintas, dan tidak dapat menemukan jalur cadangan perangkat lunak. Mungkin itu ada di sana dan saya melewatkannya.
Juga, saya belum tahu apakah modul perangkat keras AES yang berbeda dijamin menghasilkan nilai hash yang persis sama, atau jika ada lebih dari itu (seperti parameter tambahan yang mungkin diatur secara berbeda dan memerlukan instruksi khusus mesin untuk menjadi seragam). Menghitung dan menggunakan hash secara lokal adalah satu hal, dalam hal ini representasi yang tepat tidak menjadi masalah. Ini adalah hal lain untuk menulis/membuat serial nilai dan mengharapkannya untuk dibaca/direproduksi persis di sistem lain mana pun. Bagian interoperabilitas itu sedikit lebih rumit.
Tapi sekali lagi, mungkin itu ada, dan saya hanya perlu waktu untuk melihat ke dalamnya.

Untuk referensi, ini bertentangan dengan versi terbaru saya, 2.0 GHz Core i7 Gen 2 (Sandy Bridge)

Dentang 7.0.1
Bendera: -O3 -march=native

./xxhsum 0.6.5 (64-bits little endian), by Yann Collet
Sample of 100 KB...
XXH32               :     102400 ->    54765 it/s ( 5348.2 MB/s)
XXH32 unaligned     :     102400 ->    53782 it/s ( 5252.1 MB/s)
XXH64               :     102400 ->   104882 it/s (10242.4 MB/s)
XXH64 unaligned     :     102400 ->   105935 it/s (10345.2 MB/s)
XXH32a              :     102400 ->    78027 it/s ( 7619.8 MB/s)
XXH32a unaligned    :     102400 ->    75624 it/s ( 7385.2 MB/s)
XXH64a              :     102400 ->    77204 it/s ( 7539.5 MB/s)
XXH64a unaligned    :     102400 ->    76209 it/s ( 7442.3 MB/s)
XXH auto            :     102400 ->   105179 it/s (10271.4 MB/s)
XXH auto unaligned  :     102400 ->   101546 it/s ( 9916.6 MB/s)
XXH32 auto          :     102400 ->   107646 it/s (10512.3 MB/s)
XXH32 auto unaligne :     102400 ->   104364 it/s (10191.8 MB/s)
XXH64 auto          :     102400 ->   107443 it/s (10492.4 MB/s)
XXH64 auto unaligne :     102400 ->   105843 it/s (10336.3 MB/s)
meow auto           :     102400 ->   214435 it/s (20940.9 MB/s)
meow auto unaligned :     102400 ->   213289 it/s (20829.0 MB/s)

Dengan -march=penryn -mno-sse4.2 -mno-avx dan implementasi C:

./xxhsum 0.6.5 (64-bits little endian), by Yann Collet
Sample of 100 KB...
XXH32               :     102400 ->    54106 it/s ( 5283.8 MB/s)
XXH32 unaligned     :     102400 ->    53303 it/s ( 5205.4 MB/s)
XXH64               :     102400 ->   107245 it/s (10473.1 MB/s)
XXH64 unaligned     :     102400 ->   107774 it/s (10524.8 MB/s)
XXH32a              :     102400 ->    78394 it/s ( 7655.6 MB/s)
XXH32a unaligned    :     102400 ->    79666 it/s ( 7779.9 MB/s)
XXH64a              :     102400 ->    78907 it/s ( 7705.7 MB/s)
XXH64a unaligned    :     102400 ->    78179 it/s ( 7634.6 MB/s)
XXH auto            :     102400 ->   108878 it/s (10632.6 MB/s)
XXH auto unaligned  :     102400 ->   105124 it/s (10266.0 MB/s)
XXH32 auto          :     102400 ->   105819 it/s (10333.9 MB/s)
XXH32 auto unaligne :     102400 ->   103970 it/s (10153.3 MB/s)
XXH64 auto          :     102400 ->   110021 it/s (10744.2 MB/s)
XXH64 auto unaligne :     102400 ->   107109 it/s (10459.9 MB/s)
meow auto           :     102400 ->    15962 it/s ( 1558.8 MB/s)
meow auto unaligned :     102400 ->    16022 it/s ( 1564.6 MB/s)

Ini tidak lagi benar, Anda harus meninjau kembali ini

...aaand di Meow 0.5 itu benar lagi; dalam versi terbaru mereka lagi hanya memiliki jalur kode x64 AES :)

Jadi ya, Meow Hash agak spesifik untuk x86_64 dan Nehalem+, atau harus beralih ke versi mundur yang lambat.

Sementara itu, XXH3 memiliki jalur kode vektor untuk semua x86_64 (termasuk Core 2 dan teman-teman), Pentium 4+ (yang diperlukan untuk Windows 7+), ARMv7-A w/NEON (tersedia di sebagian besar Android dan semua perangkat iOS kecuali iPhone asli ), ARM64 (semua iPhone dan Android terbaru), VSX POWER9 (banyak server dan superkomputer memiliki ini, tetapi ini adalah ceruk pasar), dan jika itu tidak cukup, bahkan versi skalar masih sangat cepat bahkan pada 32-bit target, mengingat mereka memiliki pengganda yang layak.

Saya mulai mengumpulkan beberapa hasil benchmark lagi, karena ada beberapa permintaan semacam ini selama bertahun-tahun.
Dimulai dengan yang ini, yang merupakan permintaan berulang.

meowHash memang sangat cepat, mencetak kecepatan yang kira-kira sama dengan XXH3 untuk data besar (~100 KB), karenanya sedikit lebih cepat daripada XXH128 .
https://github.com/Cyan4973/xxHash/wiki/Performance-comparison

Yang sedang berkata, meowHash benar-benar dirancang untuk data besar. Dalam hal data _kecil_, kinerjanya tidak sebanding, karena algoritme memerlukan biaya tetap yang besar, yang diamortisasi dengan buruk pada data kecil.

Perkembangan yang mengkhawatirkan adalah adanya ketidaksesuaian dalam "cara merepresentasikan dan menginterpretasikan hasil".
Untuk data besar, ini agak sederhana, tabel yang diurutkan sudah cukup, memberikan gambaran instan tentang peringkat.
Untuk data kecil, tampaknya lebih kompleks.
Sejauh ini, saya telah menggunakan grafik, memberikan hasil kecepatan per panjang dan skenario yang berbeda. Berdasarkan menampilkan _lebih_ informasi, itu tentu lebih sulit untuk ditafsirkan.

Akibatnya, tidak jelas apakah pembaca, setelah menemukan angka kinerja pertama di tabel teratas yang menonjol, akan repot mencari grafik tambahan di bawah, sehingga memandu pilihannya sementara berpotensi kehilangan informasi penting untuk kasus penggunaannya.

Masalah lain adalah tentang grafik itu sendiri. Tabel yang diurutkan dapat diperpanjang, relatif mudah. Ada batasan, tentu saja, tetapi secara umum, menambahkan pesaing hanya menambahkan satu baris.
Namun, dalam grafik, setiap pesaing diwakili oleh garis. Garis cenderung tumpang tindih. Hanya ada begitu banyak warna untuk dipilih dll. Sangat cepat, jika nb pesaing yang diwakili besar, itu hanya kekacauan besar.
Jadi, jika kinerja data kecil membutuhkan grafik, itu sangat membatasi nb pesaing yang dapat diwakili.

Menambahkan paragraf yang berisi data tolok ukur "mentah", meskipun terpuji, adalah pengganti yang buruk.

Oleh karena itu, saya sedang mempertimbangkan untuk "meringkas" hasil pengujian data kecil, dan membuat "angka kinerja" yang dapat digunakan dalam tabel peringkat, untuk memberikan setidaknya petunjuk kinerja umum pada data kecil. Pembaca yang tertarik masih harus melihat ke bawah untuk informasi (grafik) yang lebih akurat, tetapi setidaknya, gagasan bahwa beberapa algoritma lebih cocok untuk data kecil daripada yang lain dapat disampaikan dengan cara yang relatif sederhana.

Masih ada masalah bahwa grafik hanya dapat mewakili nb pesaing yang terbatas, dan mungkin yang ingin diamati oleh pembaca bukan bagian dari daftar yang dipilih (bahkan ketika data mentah tersedia).

Saya bertanya-tanya apakah akan ada cara yang lebih baik untuk merepresentasikan grafik. Sesuatu yang lebih dinamis daripada tangkapan layar yang disiapkan, memungkinkan pengguna untuk memilih pesaing mana yang harus terlihat.

meow hash ditambahkan sebagai perbandingan:
https://github.com/Cyan4973/xxHash/wiki/Performance-comparison

Menambahkan entri ke tabel tidak masalah.
Tapi saya masih membutuhkan cara yang lebih baik untuk menggambar grafik untuk sejumlah besar kandidat.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat