Komunitas pengembang C++ sedang ramai membicarakan pustaka Parallel Hashmap, dengan para pengembang melaporkan peningkatan kinerja yang signifikan ketika beralih dari container pustaka standar. Proyek open-source ini, yang dibangun berdasarkan implementasi swiss table dari Abseil, telah menarik perhatian karena penanganan operasi konkuren yang efisien dan penggunaan memori yang dioptimalkan.
Fitur Utama:
- Implementasi header-only
- Pengganti langsung untuk kontainer standar
- Membutuhkan dukungan C++11 (tersedia API C++14 dan C++17)
- Mendukung pencarian heterogen
- Serialisasi efisien untuk data yang dapat disalin secara trivial
- Dukungan otomatis untuk hash_value() dari boost
Kinerja dan Implementasi
Pustaka ini menawarkan beberapa implementasi hashmap yang dioptimalkan untuk berbagai kasus penggunaan, dengan perhatian khusus pada kemampuan pemrosesan paralel. Meskipun awalnya beberapa orang mengira aspek paralel mengacu pada instruksi SIMD, diskusi komunitas mengungkapkan bahwa kekuatan sebenarnya terletak pada kemampuannya menangani operasi penulisan konkuren secara efisien dengan mendistribusikan data ke bucket independen. Desain ini memungkinkan skalabilitas yang lebih baik dalam lingkungan multi-thread dibandingkan dengan hash map tradisional yang memerlukan penguncian seluruh tabel.
Tidak banyak [overhead kinerja], masih memiliki semua trik swiss table
Analisis Kritis dari Komunitas
Meskipun mendapat sambutan positif, beberapa pengembang telah menunjukkan area yang perlu ditingkatkan. Dokumentasi pengujian kinerja dikritik karena terlalu fokus pada beban kerja penyisipan acak dengan jumlah thread terbatas (8 thread), kurangnya analisis komprehensif tentang beban kerja campuran, skenario hanya-baca, dan situasi konkurensi yang lebih tinggi. Selain itu, beberapa pengembang mencatat bahwa perbandingan dengan implementasi modern lainnya seperti flat_hash_map dari Abseil akan memberikan konteks yang berharga.
Aplikasi Praktis
Pustaka ini menawarkan empat implementasi berbeda dari container map dan set, masing-masing dengan pertimbangan khusus terkait penggunaan memori dan stabilitas pointer. Meskipun ini memberikan fleksibilitas, hal ini juga menimbulkan kompleksitas kognitif dalam memilih implementasi yang tepat untuk kasus penggunaan tertentu. Yang perlu dicatat, pustaka ini telah menemukan aplikasi praktis dalam lingkungan produksi, termasuk potensi penggunaan dalam implementasi firewall kernel Linux (nftables) di mana operasi set dan map yang efisien sangat penting.
Jenis-Jenis Kontainer:
- phmap::flat_hash_set/map
- phmap::node_hash_set/map
- phmap::parallel_flat_hash_set/map
- phmap::parallel_node_hash_set/map
Pengembangan Masa Depan
Perkembangan menarik dalam evolusi proyek ini adalah munculnya dua jalur paralel: repositori parallel-hashmap asli yang hanya membutuhkan C++11, dan repositori GTL yang lebih baru yang membutuhkan C++20. Pengembang merekomendasikan menggunakan GTL untuk proyek yang menggunakan C++20 atau lebih tinggi, karena di sinilah pengembangan baru terjadi, sementara parallel-hashmap tetap menjadi pilihan utama untuk proyek dengan persyaratan kompiler yang lebih lama.
Referensi: The Parallel Hashmap