Quicker ADC : Unlocking the hidden potential of Product Quantization with SIMD

December 21, 2018 Β· Entered Twilight Β· πŸ› IEEE Transactions on Pattern Analysis and Machine Intelligence

πŸŒ… TWILIGHT: Old Age
Predates the code-sharing era β€” a pioneer of its time

"Last commit was 6.0 years ago (β‰₯5 year threshold)"

Evidence collected by the PWNC Scanner

Repo contents: .dockerignore, .github, .gitignore, .travis.yml, AutoTune.cpp, AutoTune.h, AuxIndexStructures.cpp, AuxIndexStructures.h, CMakeLists.txt, CONTRIBUTING.md, Clustering.cpp, Clustering.h, Dockerfile, FaissAssert.h, FaissException.cpp, FaissException.h, Heap.cpp, Heap.h, INSTALL.md, IVFlib.cpp, IVFlib.h, Index.cpp, Index.h, IndexBinary.cpp, IndexBinary.h, IndexBinaryFlat.cpp, IndexBinaryFlat.h, IndexBinaryFromFloat.cpp, IndexBinaryFromFloat.h, IndexBinaryIVF.cpp, IndexBinaryIVF.h, IndexFlat.cpp, IndexFlat.h, IndexHNSW.cpp, IndexHNSW.h, IndexIVF.cpp, IndexIVF.h, IndexIVFFlat.cpp, IndexIVFFlat.h, IndexIVFPQ.cpp, IndexIVFPQ.h, IndexIVFVPQ.cpp, IndexIVFVPQ.h, IndexLSH.cpp, IndexLSH.h, IndexPQ.cpp, IndexPQ.h, IndexScalarQuantizer.cpp, IndexScalarQuantizer.h, IndexVPQ.cpp, IndexVPQ.h, InvertedLists.cpp, InvertedLists.h, LICENSE, Makefile, MetaIndexes.cpp, MetaIndexes.h, OnDiskInvertedLists.cpp, OnDiskInvertedLists.h, PATENTS, PolysemousTraining.cpp, PolysemousTraining.h, ProductQuantizer.cpp, ProductQuantizer.h, README-faiss.md, README.md, VPQ_Impl.h, VecProductQuantizer.cpp, VecProductQuantizer.h, VectorTransform.cpp, VectorTransform.h, acinclude, benchs, build-aux, c_api, cmake, configure, configure.ac, demos, depend, docs, example_makefiles, gpu, hamming.cpp, hamming.h, img, index_io.cpp, index_io.h, makefile.inc.in, misc, python, tests, tutorial, utils.cpp, utils.h, utils_simd.cpp

Authors Fabien André, Anne-Marie Kermarrec, Nicolas Le Scouarnec arXiv ID 1812.09162 Category cs.CV: Computer Vision Cross-listed cs.AI, cs.DB, cs.PF Citations 29 Venue IEEE Transactions on Pattern Analysis and Machine Intelligence Repository https://github.com/nlescoua/faiss-quickeradc ⭐ 15 Last Checked 1 month ago
Abstract
Efficient Nearest Neighbor (NN) search in high-dimensional spaces is a foundation of many multimedia retrieval systems. A common approach is to rely on Product Quantization, which allows the storage of large vector databases in memory and efficient distance computations. Yet, implementations of nearest neighbor search with Product Quantization have their performance limited by the many memory accesses they perform. Following this observation, AndrΓ© et al. proposed Quick ADC with up to $6\times$ faster implementations of $m\times{}4$ product quantizers (PQ) leveraging specific SIMD instructions. Quicker ADC is a generalization of Quick ADC not limited to $m\times{}4$ codes and supporting AVX-512, the latest revision of SIMD instruction set. In doing so, Quicker ADC faces the challenge of using efficiently 5,6 and 7-bit shuffles that do not align to computer bytes or words. To this end, we introduce (i) irregular product quantizers combining sub-quantizers of different granularity and (ii) split tables allowing lookup tables larger than registers. We evaluate Quicker ADC with multiple indexes including Inverted Multi-Indexes and IVF HNSW and show that it outperforms the reference optimized implementations (i.e., FAISS and polysemous codes) for numerous configurations. Finally, we release an open-source fork of FAISS enhanced with Quicker ADC at http://github.com/nlescoua/faiss-quickeradc.
Community shame:
Not yet rated
Community Contributions

Found the code? Know the venue? Think something is wrong? Let us know!

πŸ“œ Similar Papers

In the same crypt β€” Computer Vision