ConceptioArchivearXiv CS
arXiv CSopen access

GPUSparse: GPU-Accelerated Learned Sparse Retrieval with Parallel Inverted Indices

Unknown · 2026 · arxiv_cs
arXiv CS · Papers · License: Open Access · 2026
Open Source ↗Direct PDF ↓
clouddistributedcomputingparallelcomputing
distributed computing, parallel computing, cloud

GPUSparse: GPU-Accelerated Learned Sparse Retrieval with Parallel Inverted Indices Ashutosh Sharma MIT-IBM Watson AI Lab USA [email protected]

arXiv:2606.26441v1 [cs.IR] 24 Jun 2026

Abstract Learned sparse retrieval models such as SPLADE achieve retrieval quality competitive with dense models while preserving the interpretability and exact-match advantages of sparse representations. However, inference-time scoring still relies on CPU-bound inverted index traversal algorithms (WAND, Block-Max WAND), creating a fundamental bottleneck for real-time serving at scale. We present GPUSparse, a system for GPU-accelerated exact learned sparse retrieval that introduces: (1) a GPU-parallel inverted index with block-aligned, warp-coalesced posting lists; (2) a batched scatteradd scoring algorithm that processes hundreds of queries simultaneously; and (3) fused Triton kernels with analysis of the fundamental tradeoff between work-efficiency and hardware utilization. On MS MARCO passage ranking (8.8M passages) with real SPLADE embeddings, GPUSparse matches CPU exact scoring to three decimals (MRR@10=0.383, equal to Pyserini SPLADE at this precision; Recall@1000≥0.999 vs. dense matmul, the residual from floating-point tie-breaking) while providing 235× speedup over Pyserini CPU at 8.8M documents (1.27ms vs. 298ms per query). Compared to Seismic (the fastest CPU sparse retrieval system), which trades 25% recall for speed (R@1000=0.738 vs. 0.983 exact), GPUSparse achieves exact scoring at 787 QPS throughput (batch 500) on the full 8.8M collection, with 1.3ms per query. Our documentparallel kernel achieves 62.6% of H100 peak HBM bandwidth, revealing a fundamental work-efficiency vs. bandwidth-efficiency tradeoff in GPU sparse retrieval.

1

Introduction

The information retrieval landscape has been transformed by learned sparse representations. Models such as SPLADE [7, 8], SPLADE++ [9], uniCOIL [14], and LACONIC [20] encode queries and documents into high-dimensional sparse vectors over the vocabulary space, where non-zero dimensions correspond to semantically relevant terms with learned importance weights. These representations achieve retrieval quality competitive with dense bi-encoders [11] while preserving the interpretability and exact-match capabilities of traditional lexical retrieval [19]. Despite their quality advantages, learned sparse models face a critical serving bottleneck: inference-time scoring still relies on CPU-bound inverted index traversal. The standard algorithms, WAND (Weak AND) [2] and Block-Max WAND (BMW) [6], achieve exact top-𝑘 retrieval through safe document skipping, but their

pivot-selection logic is inherently sequential and difficult to parallelize on GPU hardware. Seismic [3] introduces geometric blocking for learned sparse vectors with aggressive query-term pruning (query_cut1 ) to reduce latency, trading recall for speed: at query_cut=5 on 8.8M documents (measured on our hardware), Seismic achieves 10.5𝜇s amortized per-query batch throughput for top-10 retrieval but with Recall@1000=0.738 and MRR@10=0.326 when retrieving 1000 results at 206𝜇s/query. Meanwhile, dense retrieval has embraced GPU acceleration through simple matrix multiplication: scoring 𝑁 documents against a query batch is a single torch.mm call that fully utilizes GPU compute and memory bandwidth. This asymmetry between GPU-accelerated dense retrieval and CPU-bound sparse retrieval is increasingly untenable as learned sparse models demonstrate quality parity with dense approaches. We bridge this gap with GPUSparse, a complete system for GPU-accelerated learned sparse retrieval. Like SPARe’s iterative mode [4], we reformulate sparse retrieval scoring as a batched scatter-add over a GPU-resident inverted index, eliminating the sequential pivot-selection bottleneck of WAND/BMW while achieving massive parallelism across queries, terms, and documents. We go further with a single fused Triton kernel and a warp-aligned posting-list layout, and we characterize the work- vs. bandwidthefficiency tradeoff this scatter-add pattern induces on GPUs. Critically, our approach performs exact scoring, computing the true inner product between every query and every document, achieving Recall@1000≥0.999 against CPU ground truth while providing 235× speedup over Pyserini CPU at full 8.8M scale. Our contributions are: (1) GPU-Parallel Inverted Index: A novel data structure that stores posting lists in block-aligned, warp-coalesced format on GPU memory, with padding to 32-element boundaries for optimal memory access patterns (§3). (2) Batched Scatter-Add Scoring: A parallel scoring formulation that processes multiple queries simultaneously by scatter-adding term contributions into per-query score accumulators, replacing sequential WAND traversal with embarrassingly parallel GPU operations (§4). The scatteradd-over-inverted-index reformulation itself is shared with SPARe’s iterative mode [4]; our contribution is its fusedkernel realization below. (3) Fused Triton Scoring Kernel: A custom Triton kernel that fuses posting list traversal, query-document score accumulation, and atomic scatter-add into a single GPU kernel launch, eliminating intermediate memory materializations. 1We use the parameter name query_cut from the pyseismic-lsr library API; the

∗ Code available at https://github.com/ashutoshuiuc/gpu-sparse.

Seismic paper denotes this query-term cut as cut.

Ashutosh Sharma

We additionally implement a document-parallel CSR kernel and analyze the fundamental tradeoff between workefficiency and bandwidth utilization in GPU sparse retrieval (§5). (4) Evaluation at Full Scale with Correctness Verification: Experiments on MS MARCO passage ranking (up to 8.8M passages) with real SPLADE embeddings, reporting MRR@10, nDCG@10, and Recall@1000 with official qrels. We verify functional correctness against CPU exact scoring and compare against Seismic (multi-threaded), Pyserini SPLADE, cuSPARSE SpMV, and GPU dense baselines (§6).

Block-Max Pruning. Mallia et al. [22] adapt block-max pruning specifically for learned sparse representations, achieving significant speedups over standard BMW on SPLADE indices.

Dynamic Superblock Pruning. Carlson et al. [5] introduce dynamic superblock pruning for learned sparse retrieval, adapting block structures to the score distribution of learned sparse vectors. While this improves CPU efficiency, the sequential traversal bottleneck remains.

2 Background and Related Work 2.1 Learned Sparse Retrieval Learned sparse retrieval models map text to sparse vectors over the vocabulary V of a language model. Given input text 𝑥, a model |V| produces s(𝑥) ∈ R ≥0 with ∥s(𝑥)∥ 0 ≪ |V |. The max-pooling SPLADE variant [8] computes this via:

2.3

GPU-Accelerated Retrieval

GPU acceleration for retrieval has primarily focused on dense vectors. FAISS [10] provides GPU-optimized flat index search and IVF indices. For dense retrieval, scoring 𝑁 documents against a query reduces to matrix multiplication, which GPUs excel at. Cols(𝑥) = max log(1 + ReLU(Wh𝑡 + b)) (1) 𝑡 ∈𝑥 BERTv2 [18] accelerates ColBERT late interaction scoring with (the original SPLADE [7] sum-pools the same per-token term inresidual compression and centroid-based candidate generation. stead of taking the max). where h𝑡 are token hidden states from a NVIDIA cuVS (formerly RAFT) [16] provides GPU-native vector transformer encoder, W ∈ R | V | ×𝑑 is the masked language model similarity search for dense embeddings. These systems demonstrate head, and b ∈ R | V | is its bias vector. Typical sparsity is 100–200 nonthat GPU acceleration is transformative for retrieval but focus exzero terms per document and 20–60 per query. Retrieval scores are clusively on dense representations. inner products: score(𝑞, 𝑑) = s(𝑞) ⊤ s(𝑑). Recent advances include For sparse retrieval on GPU, SPARe [4] is the closest prior system: SPLADE-v3 [12] with improved distillation, and LACONIC [20] it offers both a cuSPARSE SpMV path (dot) and an iterative path which achieves dense-level effectiveness through a two-phase trainthat stores the collection in CSC (column/term-major) layout, effecing curriculum with causal LLM backbones. tively a GPU-resident inverted index, and for each query term gathers that term’s posting list and accumulates document scores with 2.2 CPU Inverted Index Algorithms PyTorch’s index_add_ (a scatter-add), followed by top-𝑘. This iterWAND (Weak AND).. Broder et al. [2] introduced WAND for exative path is conceptually the same scatter-add-over-inverted-index act top-𝑘 retrieval over inverted indices. WAND maintains posting reformulation we use. Our contribution over SPARe is therefore list iterators sorted by current document ID and uses upper-bound not the reformulation itself but its realization: a single fused Triton scores to safely skip documents that provably cannot enter the topkernel (vs. SPARe’s Python-level per-term loop over index_add_), 𝑘 heap. The algorithm is exact (no recall loss) but its pivot-selection a warp-aligned, block-padded posting-list layout designed for coprocedure is inherently sequential. alesced GPU access, the work- vs. bandwidth-efficiency analysis, and exact evaluation at full 8.8M scale. Mallia et al. [21] explore Block-Max WAND (BMW).. Ding and Suel [6] partition posting GPU-accelerated decoding of compressed posting lists, an early step lists into fixed-size blocks with precomputed maximum scores per toward GPU inverted index processing. Sparton [17] introduces a block, enabling block-level skipping. BMW is also exact (preserves fused Triton kernel achieving up to 4.8× speedup for the SPLADE top-𝑘 guarantees) but retains WAND’s sequential pivot-selection language model head (encoding), but targets encoding, not retrieval structure, making GPU parallelization difficult. scoring. Lin and Lin [24] take an alternative approach, converting Seismic. Bruch et al. [3] design an index specifically for learned sparse lexical representations into compact dense vectors to ensparse representations. Posting lists are partitioned into geometriable GPU retrieval via standard matrix multiplication, eliminating cally coherent blocks via 𝑘-means clustering, with summary vectors inverted indices entirely. enabling efficient block-level pruning. Unlike WAND/BMW, Seismic Allan-Poe [23] unifies dense, sparse, and full-text retrieval into a introduces a query_cut parameter that limits the number of query single GPU-accelerated graph-based index with warp-level hybrid terms processed, making retrieval approximate. On MS MARCO distance kernels. While Allan-Poe handles sparse scoring on GPU, (8.8M passages) with SPLADE embeddings, we measure Seismic at it uses a graph index rather than inverted index traversal, targeting 10.5𝜇s per-query batch throughput for top-10 (93K QPS, Intel Xeon hybrid search rather than learned sparse retrieval specifically. Gold 6448Y) and 206𝜇s/query for top-1000, with Recall@1000=0.738 GPUSparse differs from prior work by designing custom GPUand MRR@10=0.326 at query_cut=5. Increasing query_cut to 50 native inverted index data structures (block-aligned, warp-coalesced yields negligible quality improvement (MRR@10=0.326, R@1000=0.738), posting lists) and fused Triton scoring kernels specifically for learned suggesting the approximation is inherent to the geometric blocking sparse retrieval, with analysis of the fundamental work-efficiency structure rather than tunable. vs. bandwidth-efficiency tradeoff in GPU sparse scoring.

GPUSparse: GPU-Accelerated Learned Sparse Retrieval with Parallel Inverted Indices

3 GPU-Parallel Inverted Index 3.1 Design Goals

4 Batched Scatter-Add Scoring 4.1 Reformulation

Traditional inverted indices are designed for CPU sequential access: variable-length posting lists with delta-coded document IDs, optimized for branch prediction and cache-line prefetching. While naive exhaustive traversal of posting lists is straightforward on any hardware, the key challenge for GPU parallelization is that WAND/BMW-style conditional pruning requires coordinated, sorted traversal across posting lists with data-dependent branching, patterns that cause severe warp divergence on GPUs. Our approach sidesteps this entirely by performing unconditional scatter-add over all posting entries, trading work-efficiency (processing entries that WAND would skip) for massive parallelism. To maximize GPU throughput for this scatter-add pattern, our index layout ensures:

The key insight is that sparse retrieval scoring can be decomposed into independent scatter-add operations. For a query 𝑞 with non|𝑞 | zero terms {(𝑡𝑖 , 𝑤𝑖 )}𝑖=1 , the score for document 𝑑 is:

(1) Warp-aligned posting lists: Padded to multiples of 32 elements so that each warp loads a full chunk without masking overhead. (2) Flat memory layout: All posting lists concatenated into two contiguous arrays (doc_ids, scores) with per-term offset metadata, enabling coalesced reads. (3) No variable-length encoding: Raw int32 doc IDs and float32 scores (no delta coding) to avoid sequential decompression dependencies.

3.2

|𝑞 | ∑︁

𝑤𝑖 · 𝑠𝑑 (𝑡𝑖 )

(4)

𝑖=1

where 𝑤𝑖 = s(𝑞) [𝑡𝑖 ] is the SPLADE query weight for term 𝑡𝑖 , and 𝑠𝑑 (𝑡𝑖 ) is the stored document weight for term 𝑡𝑖 (zero if 𝑑 is not in the posting list for 𝑡𝑖 ). This decomposes into |𝑞| independent scatter-add operations: scores[𝑑] += 𝑤𝑖 · PL(𝑡𝑖 ) [𝑑]

4.2

∀𝑑 ∈ PL(𝑡𝑖 )

(5)

Parallel Execution Model

For a batch of 𝐵 queries with maximum 𝑀 terms each, we launch a 2D grid of GPU thread blocks: • Dimension 0: Query index (𝐵 programs) • Dimension 1: Query term position (𝑀 programs) Each program loads one posting list and scatter-adds weighted scores into a [B, N] output matrix using atomic additions. This ¯ achieves 𝑂 (𝐵 · 𝑀) parallelism with each program processing 𝑂 (𝐿) ¯ postings, where 𝐿 is the average posting list length.

Block-Aligned Posting Lists

We store the inverted index as two flattened arrays on GPU: doc_ids (int32) and scores (float32), with per-term metadata: • offsets[vocab_size]: Start position of each term’s posting list in the flattened array. • lengths[vocab_size]: Actual number of postings per term. • padded_lengths[vocab_size]: Length rounded up to the nearest multiple of 32 (warp size). • max_scores[vocab_size]: Maximum document score per term (for WAND pruning). Each posting list is padded to a multiple of the warp size 𝑊 = 32:   |PL(𝑡)| ×𝑊 (2) padded_length(𝑡) = 𝑊 Padding entries use doc_id = -1 and score = 0, which are masked out during scoring. Within each posting list, entries are sorted by document ID to enable potential merge-join optimizations.

3.3

score(𝑞, 𝑑) =

Memory Analysis

For a collection of 𝑁 documents with average 𝑘¯ non-zero terms per document: Memory ≈ 𝑁 · 𝑘¯ · (4 + 4) · (1 + 𝜖pad ) bytes

(3)

where 𝜖pad is the padding overhead from rounding posting lists to warp-size multiples. With SPLADE representations averaging 𝑘¯ ≈ 127 non-zero terms per document (measured on MS MARCO with splade-cocondenser-ensembledistil), a 100K-document index requires 93 MB, easily fitting on a single GPU. The actual padding overhead depends on the posting list length distribution and is reported with our experimental results.

4.3

Exact Scoring Guarantee

A critical advantage of our scatter-add approach is that it computes exact inner products. Every posting entry is processed for every matching query term; no documents are skipped, no posting lists are pruned. This provides Recall@𝑘 ≥ 0.999 vs. dense matmul scoring for all 𝑘, with the small residual from floating-point tie-breaking when documents share near-identical scores at the top-𝑘 boundary (atomic accumulation order differs from sequential CPU summation). Standard WAND and BMW are also exact (safely pruning only documents that provably cannot enter the top-𝑘). However, systems like Seismic that introduce query-term pruning (query_cut) become approximate. Our approach guarantees exactness by construction without safe-pruning logic, simplifying implementation while enabling full GPU parallelism.

5 Fused Triton Scoring Kernel 5.1 Motivation The PyTorch-based scatter-add implementation incurs overhead from: (1) Python loop over term positions, (2) multiple kernel launches per scatter operation, and (3) intermediate tensor allocations. Our fused Triton kernel eliminates all three.

5.2

Kernel Design

We implement _fast_scatter_add_kernel in Triton with the following structure: @triton . jit def _fast_scatter_add_kernel ( doc_ids , doc_scores , # index offsets , lengths , # metadata q_term_ids , q_scores , # query

Ashutosh Sharma

This reveals a fundamental design tradeoff in GPU sparse retrieval: ¯ • Term-parallel (scatter-add): Work-efficient (𝑂 (𝐵 · 𝑞¯ · 𝐿)), ): bandwidth-inefficient (scattered atomics), faster at practical q_idx = tl . program_id (0) scale. t_pos = tl . program_id (1) ¯ • Doc-parallel (CSR gather): Work-inefficient (𝑂 (𝐵 · 𝑁 · 𝑘)), # Load query term and posting list term_id = tl . load ( q_term_ids + ...) bandwidth-efficient (coalesced reads/writes), faster only q_score = tl . load ( q_scores + ...) when 𝑁 is small relative to posting list selectivity. # Process posting list in chunks where 𝑞¯ is average query terms, 𝐿¯ is average posting list length, 𝑘¯ for chunk in range ( n_chunks ) : is average document terms, and 𝑁 is collection size. For SPLADE pl_docs = tl . load ( doc_ids + ...) on 100K documents: 𝑞¯ · 𝐿¯ ≈ 50 × 417 ≈ 20.9K entries per query pl_scores = tl . load ( doc_scores + ...) (scatter-add), vs. 𝑁 · 𝑘¯ = 100,000 × 127 = 12.7M entries (doccontribs = q_score * pl_scores tl . atomic_add ( out + ... , contribs ) parallel), a ∼600× work ratio. Even accounting for the doc-parallel kernel’s ∼170× higher bandwidth utilization, scatter-add processes Each program instance handles one (query, term) pair and proits smaller workload faster. The crossover would require 𝑞¯ · 𝐿¯ > cesses the posting list in chunks of BLOCK_PL elements. The tl.atomic_add 𝑁 · 𝑘¯ · (𝛽 scatter /𝛽 doc ) where 𝛽 denotes effective bandwidth; i.e., querycall enables concurrent accumulation from multiple terms into the term selectivity would need to approach full-collection scanning, same document’s score. We set BLOCK_PL=128 as default; empirwhich does not occur with SPLADE representations. ically, values of 64–512 yield within 15% of each other, with 128 On GPU WAND.. True WAND pivot-selection requires sorted, selected via grid search over kernel latency. coordinated traversal across posting lists, which is fundamentally sequential. We explored a GPU-friendly approximation using term5.3 Memory Access Pattern and Bandwidth level upper-bound pruning (UB(𝑡𝑖 ) = 𝑤𝑖 · max𝑑 𝑠𝑑 (𝑡𝑖 )). In practice, Analysis this provides no speedup on SPLADE data because the pruning Within each chunk of BLOCK_PL elements, all elements are loaded threshold starts at zero, and the overhead of the pruning check in parallel via vectorized memory operations; chunks are processed exceeds the savings. Since our exact scoring already achieves 15𝜇s sequentially within each program. Since thousands of programs per query, we retain the simpler unpruned kernel. (one per query-term pair) execute concurrently, the GPU maintains high occupancy. The atomic writes to the output matrix are scat6 Experiments tered across document positions. Our scatter-add kernel achieves 6.1 Setup 12.5 GB/s effective HBM bandwidth at 100K documents (0.37% of H100’s 3.35 TB/s peak). This low utilization is expected and by Hardware. GPU experiments run on NVIDIA H100 80GB SXM5 design: the scatter-add kernel is work-efficient, processing only GPUs with HBM3 memory (3.35 TB/s theoretical bandwidth) and posting list entries for terms that appear in the query (∼50 terms per CUDA 12.4. CPU baselines (Seismic, Pyserini) use the same maquery × their posting lists), rather than iterating over all documents. chine’s Intel Xeon Gold 6448Y (32 cores, 2.1 GHz). Multi-GPU exThe total data read per 500-query batch is only 0.09 GB at 100K periments use two H100s connected via NVLink. documents. This mirrors the well-known difficulty of GPU sparse Data. We evaluate on MS MARCO passage ranking [15], the matrix–vector products on irregularly structured matrices, where standard first-stage retrieval benchmark. We use the full collection realized bandwidth depends heavily on the sparsity layout and acof 8.8M passages and subsets at 100K, 500K, and 1M scales, all cess regularity [1]; our scatter-add deliberately trades bandwidth encoded with SPLADE-cocondenser-ensembledistil.2 We evaluate utilization for work-efficiency. all 6,980 dev-small queries using official qrels (the full standard To validate this analysis, we implemented an alternative documentevaluation set). SPLADE representation statistics: parallel kernel using a CSR (Compressed Sparse Row) index by document. Each program handles one (query, document) pair, iter• Document sparsity: Average 127.2 non-zero terms (std: ating over the document’s term list and looking up query weights 34.3). from a dense query matrix. This kernel eliminates all atomic opera• Query sparsity: Average 49.9 non-zero terms (std: 18.2). tions (each program exclusively owns its output cell) and achieves • Vocabulary: 30,522 (BERT WordPiece). 2,097 GB/s effective bandwidth (62.6% of H100 peak); the re• Score distribution: Follows log(1 + ReLU(·)), with values maining gap to theoretical peak is attributable to instruction overin [0, 3.5]. head in the inner loop (loading term IDs, performing lookups into the dense query matrix) and TLB pressure from iterating over perMetrics. We report MRR@10, nDCG@10, and Recall@1000 using document term lists of varying length. However, the doc-parallel official MS MARCO relevance judgments. We also report Recall@𝑘 kernel reads 76 GB per batch (vs. 0.09 GB for scatter-add) because against exact dense matmul to verify scoring correctness. it must process every document for every query, regardless of term Baselines. overlap. At 100K documents, the doc-parallel kernel takes 36.4ms vs. 7.3ms for scatter-add, yet slower despite far better hardware 2 https://huggingface.co/naver/splade-cocondenser-ensembledistil utilization, because it performs ∼850× more memory transfers. out_scores , # output [B , N ] num_docs , max_qterms , BLOCK_PL : tl . constexpr

GPUSparse: GPU-Accelerated Learned Sparse Retrieval with Parallel Inverted Indices

Table 1: Retrieval quality and latency on MS MARCO passage ranking (100K passages, 500 queries, top-1000, H100 80GB). Quality metrics via official qrels. SPLADE MRR@10 > BM25 reflects the model, not our system.

Table 2: System comparison on MS MARCO passages. All GPU methods use SPLADE embeddings; per-query latency at batched evaluation. Quality differences between SPLADE and BM25 reflect the retrieval model, not our system.

Method

MRR@10

nDCG@10

R@1000

Latency

Per-Q

System

Docs

MRR@10

nDCG@10

R@1000

Per-Q

HW

Pyserini BM25

0.702

0.735

0.973

12.6s∗

25.2ms

SPLADE + Dense MatMul SPLADE + Triton (Ours)

0.892 0.892

0.912 0.912

0.998 0.998

58.5ms 7.3ms

117𝜇s 15𝜇s

Pyserini BM25 Pyserini SPLADE Seismic (k=1000)

100K 8.8M 8.8M

0.702 0.383 0.326

0.735 0.449 –

0.973 0.983 0.738

25.2ms 298ms 206𝜇s

CPU CPU CPU

cuSPARSE SpMV torch.compile Dense MatMul Dense MatMul

100K 100K 100K 500K

0.888 0.888 0.888 0.770

0.909 0.909 0.909 0.806

0.998 0.998 0.998 0.998

46.2ms 23.9ms 117𝜇s 577𝜇s

H100 H100 H100 H100

GPUSparse GPUSparse GPUSparse GPUSparse

100K 500K 1M 8.8M

0.892 0.771 0.703 0.383

0.912 0.809 0.745 0.449

0.998 0.996 0.996 0.983

15𝜇s 90𝜇s 786𝜇s 1.27ms

H100 H100 H100 H100

∗ Pyserini BM25 runs single-threaded per query on CPU.

SPLADE methods use SPLADE-cocondenser-ensembledistil embeddings.

• Seismic [3]: Approximate sparse retrieval with geometric blocking, tested at 8.8M with 1–32 threads and query_cut ∈ {5, 10, 20, 50}. Directly measured on our hardware. • Pyserini SPLADE: Exact CPU SPLADE retrieval via Pyserini [13] with pre-built Lucene impact index at 8.8M passages. Ground truth for functional correctness. • Pyserini BM25: Lucene WAND via Pyserini (𝑘 1 =0.9, 𝑏=0.4); included for reference (quality gap is the SPLADE model, not our system). • cuSPARSE SpMV: Batched sparse matrix–matrix product via cuSPARSE, matching SPARe’s dot mode [4]. • torch.compile: PyTorch’s graph compiler applied to dense torch.mm of SPLADE vectors materialized as dense matrices. • GPU Dense MatMul: Uncompiled dense torch.mm with SPLADE embeddings as dense vectors. • Triton Fused (Ours): Custom Triton kernel with fused scatter-add (BLOCK_PL=128, empirically tuned via grid search). • Doc-Parallel (Ours): Document-CSR kernel where each program handles one (query, doc) pair with zero atomics (§5).

Pyserini SPLADE: exact CPU scoring via Lucene impact index, single-threaded, 6980 queries. Seismic: measured on our hardware (Xeon Gold 6448Y, 8 threads, query_cut=5). cuSPARSE/torch.compile: measured at 100K via SPARe [4] / PyTorch compilation. All exact GPU methods agree to ≥99.9% top-1000 ranking overlap; the ±0.004 MRR spread between them is floating-point tie-breaking, not a quality difference.

vs. BM25. The MRR@10 difference between GPUSparse (0.892 at 100K) and Pyserini BM25 (0.702) reflects the quality advantage of the SPLADE model, not our system. We include BM25 for reference only. vs. Pyserini SPLADE (Ground Truth). We measure Pyserini’s exact SPLADE retrieval via the pre-built Lucene impact index on the full 8.8M MS MARCO collection (6,980 dev-small queries). Pyserini SPLADE achieves MRR@10=0.383, nDCG@10=0.449, and Recall@1000=0.983 at 298ms per query (3.4 QPS, single-threaded). GPUSparse achieves matching metrics to three decimals (MRR@10=0.383, nDCG@10=0.449, R@1000=0.983) at 1.27ms per query (batch 500), confirming functional correctness at full scale and providing a 235× speedup over CPU exact scoring.

vs. Seismic. We directly measure Seismic [3] on our hardware (Intel Xeon Gold 6448Y, up to 32 threads) with the same 8.8M MS MARCO SPLADE embeddings. For top-10 retrieval at query_cut=5, Seismic achieves 10.5𝜇s/query batch throughput (93K QPS), with threading providing no additional benefit (the per-query computation is already minimal). For top-1000 retrieval, latency is 206𝜇s/query Key findings. with MRR@10=0.326 and Recall@1000=0.738. Notably, increas• Exact-quality scoring: GPUSparse matches CPU exact ing query_cut from 5 to 50 yields negligible quality improvescoring. MRR@10 of 0.383 equals Pyserini SPLADE at 8.8M ment (MRR@10=0.326, R@1000=0.738 at all settings), suggesting to three decimals, and Recall@1000 is ≥0.999 vs. dense matSeismic’s recall loss is inherent to its geometric blocking strucmul (the residual is floating-point tie-breaking), confirming ture on SPLADE representations. The systems target fundamenfunctional correctness. tally different regimes: (1) Seismic provides extremely fast approx• 235× speedup over Pyserini CPU at full 8.8M scale (1.27ms imate retrieval on CPU with ∼25% recall loss vs. exact scoring vs. 298ms per query); 6.3× faster than cuSPARSE SpMV (R@1000=0.738 vs. 0.983); (2) GPUSparse provides exact scoring and 8.0× faster than GPU dense matmul at 100K. matching Pyserini SPLADE at 1.27ms/query (batch 500, 8.8M docs). • 787 QPS throughput at 8.8M documents (batch 500) with At the same 8.8M scale, our per-query latency (1.27ms) is higher exact scoring vs. Seismic’s approximate retrieval (R@1000=0.738). than Seismic’s (206𝜇s for top-1000), but we provide exact scoring with 787 QPS batch throughput. For applications requiring exact 6.3 Comparison with Baselines rankings (evaluation, legal discovery, hybrid pipelines), GPUSparse Table 2 contextualizes GPUSparse against CPU and GPU baselines, is the appropriate choice; for latency-sensitive approximate search, all directly measured on our hardware. Seismic excels.

6.2

Retrieval Quality and Latency

Table 1 presents retrieval quality on MS MARCO passage ranking with official relevance judgments at 100K scale, alongside batch latency.

Ashutosh Sharma

Table 3: Effect of batch size on Triton fused kernel (50K SPLADE docs, top-10, H100). Batch

Latency (ms)

Per-Query (𝜇s)

QPS

1 8 32 64 128 200

0.33 0.36 0.47 0.66 1.08 2.00

331 44 15 10 8 10

3,019 22,521 68,514 96,650 118,704 99,912

vs. cuSPARSE and torch.compile. We directly measure cuSPARSE SpMV (SPARe’s dot path [4]) and PyTorch’s torch.compile on the same 100K SPLADE embeddings (Table 2). Our cuSPARSE baseline uses batched sparse matrix-matrix multiplication (torch.sparse.mm) over all 500 queries simultaneously, matching SPARe’s dot mode (its iterative mode is the PyTorch index_add_ scatter-add our fused kernel improves on). At 100K with 500 queries, cuSPARSE takes 46.2ms total, i.e. 0.09ms per query, which is comparable to our per-query latency at batch=1 (0.33ms). However, our Triton kernel processes the same 500-query batch in 7.3ms total (6.3× faster than cuSPARSE), demonstrating superior batch throughput. The torch.compile path (23.9ms total, materializing sparse vectors as dense) is 3.27× slower than our Triton kernel, confirming that custom sparse kernels outperform compiled dense approaches. vs. SPARe’s iterative scatter-add. The comparison that most directly isolates our contribution is against SPARe’s iterative mode, which shares our scatter-add-over-inverted-index reformulation but realizes it as a PyTorch index_add_ loop over query terms rather than a fused kernel. We reimplement SPARe’s iterative path faithfully (CSC posting lists, per-term index_add_, torch.topk) and run it on identical SPLADE data, 500-query batch, top-1000. Both produce identical top-10 rankings (overlap 1.000), confirming the two compute the same scores. Our fused Triton kernel is 270× faster at 100K (5.7ms vs. 1,526ms), 47× at 500K (33ms vs. 1,547ms), and 23× at 1M (69ms vs. 1,563ms). SPARe’s iterative latency is dominated by per-term Python-level kernel launches (it is nearly constant in collection size), which is precisely the overhead that fusing the entire traversal into one kernel launch eliminates. This shows the value of the reformulation lies in its fused-kernel realization, not the reformulation alone. vs. Dense MatMul. Our scatter-add kernel is consistently faster than dense torch.mm: 8.0× at 100K (7.3ms vs. 58.5ms) and 6.4× at 500K (89.9ms vs. 576.9ms). At 1M documents, dense representations exceed GPU memory (1M × 30K vocab = 114 GB), while our sparse index requires only 970 MB.

6.4

Batch Size and Throughput

Table 3 measures the effect of query batch size on latency and throughput at 50K documents using real SPLADE embeddings. Throughput peaks at 118,704 QPS at batch size 128, with perquery latency as low as 8.4𝜇s. Single-query latency (331𝜇s) is higher than Seismic’s 10.5𝜇s batch throughput for top-10 (or 206𝜇s for top1000), but provides exact scoring (Recall@1000≥0.999) vs. Seismic’s approximate retrieval (Recall@1000=0.738, MRR@10=0.326). The

Table 4: Scaling with real SPLADE embeddings on MS MARCO passages (H100 80GB). Latency for 500– 1000 query batch, top-1000. Docs

Batch

Lat. (ms)

Per-Q (𝜇s)

QPS

Index (MB)

GPU (MB)

MRR @10

100K 500K 1M 8.8M

500 1000 500 500

7.3 89.9 393 635

15 90 786 1,270

66,667 11,111 1,272 787

93 484 970 8,489

3,487 3,650 4,037 44,143

0.892 0.771 0.703 0.383

Table 5: Effect of document sparsity on Triton kernel (500K synthetic docs with varying sparsity, 64-query batch, H100). Avg Terms/Doc

Index (MB)

Latency (ms)

10 (BM25-like) 50 100 200 500

44 206 405 804 2,004

13.2 63.3 131 288 710

sub-linear latency growth from batch 1 to 128 (0.33 → 1.08 ms) reflects the GPU’s ability to absorb additional parallel work without significant contention: since each query writes to its own row of the [𝐵 × 𝑁 ] score buffer, atomic conflicts occur only when multiple terms from the same query update the same document simultaneously, a low-probability event given SPLADE’s sparse term distributions. At batch 200, per-query latency increases slightly (10𝜇s) due to wave quantization: the H100 has 132 Streaming Multiprocessors (SMs), and with 200 queries × ∼50 terms = 10,000 programs, execution requires ⌈10,000/132⌉ = 76 waves vs. 49 waves at batch 128, introducing scheduling overhead.

6.5

Scaling with Collection Size

Table 4 reports scaling with real SPLADE embeddings on MS MARCO passages. From 100K to 8.8M documents (88×), per-query latency increases 85× (15𝜇s to 1,270𝜇s), showing near-linear scaling. The full MS MARCO collection (8.8M passages) requires 8.5 GB for the index (11% of 80 GB H100), with 44 GB peak memory including the [𝐵 × 𝑁 ] score buffer at batch 500. Throughput is 787 QPS at 8.8M, demonstrating practical GPU-resident retrieval at full scale. The MRR@10 decrease from 0.892 (100K) to 0.383 (8.8M) reflects the retrieval task difficulty as more distractor passages are added, not system degradation: our MRR@10=0.383 equals Pyserini SPLADE to three decimals (0.383, Table 2), confirming functional correctness at full scale. Figure 1 visualizes the latency comparison across methods and collection sizes on a log-log scale. The scatter-add kernel consistently dominates dense matmul, with the gap widening at larger scales. The doc-parallel kernel, while slower in absolute terms, demonstrates near-peak bandwidth utilization.

Per-query latency (𝜇s)

GPUSparse: GPU-Accelerated Learned Sparse Retrieval with Parallel Inverted Indices

Table 6: Memory footprint with real SPLADE data (avg. ∼127 terms/doc, measured index sizes) on H100 80GB. Score buffer = 𝐵 × 𝑁 × 4 bytes (projected for 𝐵=200 query batch).

103

Metric

102

Total (MB) % of 80 GB

101 500K 1M Collection size (documents)

Scatter-add (ours) Dense matmul

500K

1M

47 40

93 80

484 400

970 800

87 0.1%

173 0.2%

884 1.1%

1,770 2.2%

8.8M

Doc-parallel (ours) Seismic (8.8M, k=1000)

Figure 1: Per-query latency scaling with collection size (H100 80GB, batch 500, top-10). Seismic (206𝜇s/query at 8.8M, approximate R@1000=0.738) shown as reference. Our scatter-add kernel’s per-query latency crosses Seismic’s between 500K and 1M docs, but it provides exact scoring (R@1000=0.983). Dense matmul is shown only to 500K because it runs out of GPU memory beyond that (a 1M×30K dense matrix is 114 GB, exceeding the H100’s 80 GB); the doc-parallel kernel is measured to 500K, where it is already ∼5× slower than scatter-add.

Sparsity and Vocabulary Sensitivity

Table 5 uses synthetic documents with controlled sparsity to isolate the effect of the number of non-zero terms per document on kernel performance. Latency scales linearly with sparsity, as expected ¯ Real SPLADE representasince total work is proportional to 𝑁 × 𝑘. tions average ∼127 terms/doc; interpolating between the 100 and 200 rows gives an estimated latency of ∼170ms for 500K docs at true SPLADE sparsity. For sparser BM25-style representations (10 terms/doc), GPU retrieval is extremely fast (13ms for 500K docs). Vocabulary size (tested 10K–100K) has negligible impact on latency.

6.7

100K

Index (MB) Score buffer (MB)

100K

6.6

50K

Multi-GPU Scaling

We evaluate naive data-parallel sharding of a 100K-document SPLADE collection (batch 500, top-1000, real SPLADE data) across two NVLinkconnected H100s, splitting the candidate set evenly and merging partial top-𝑘 lists. Single-GPU scoring takes 5.67 ms; the two-GPU split takes 9.47 ms, a slowdown (0.6×). At these sub-10 ms latencies, per-launch and host-side coordination/merge overhead exceeds the compute saved by halving each shard, so naive sharding does not help. We therefore do not claim multi-GPU speedup at single-node scale: GPUSparse’s relevant scaling axis is single-GPU capacity (the 8.8M index fits in 8.5 GB), and multi-GPU is useful only for collections whose index exceeds one GPU’s memory (>50M documents), where each GPU does enough work to amortize the coordination cost. Designing a low-overhead multi-GPU merge (device-side top𝑘 reduction over NVLink) is left to future work.

Table 7: Kernel design analysis: scatter-add (term-parallel) vs. doc-parallel (CSR gather) at 100K docs, 500 queries, H100 80GB. Kernel Scatter-add Doc-parallel

6.8

Bytes/Batch

BW (GB/s)

% Peak

Latency

0.09 GB 76.3 GB

12.5 2,097

0.37% 62.6%

7.3ms 36.4ms

Memory Footprint Analysis

Table 6 shows that even at 1M documents with an analytical 200query batch, the complete system uses only 2.2% of H100’s 80 GB. At full scale (8.8M documents), our measured index is 8.5 GB (11% of 80 GB), with 44 GB peak memory including the score buffer at batch 500, which fits comfortably on a single H100. Extrapolating, 50M documents would need ∼50 GB for the index alone, requiring multi-GPU sharding. For comparison, materializing SPLADE representations as dense vectors for GPU matrix multiplication would require 𝑁 × |V | × 4 bytes (8.8M docs × 30K vocab ≈ 1 TB), which is infeasible. While dense retrieval models (e.g., DPR with 768-dim embeddings) require only 𝑁 × 768 × 4 bytes (8.8M = 27 GB), those models operate in a different representation space. Our sparse index stores only non-zero entries, requiring 8.5 GB for 8.8M documents.

6.9

Bandwidth Utilization and Kernel Design Analysis

Table 7 compares the bandwidth characteristics of our two kernel designs. The scatter-add kernel achieves only 12.5 GB/s effective bandwidth (0.37% of peak) because it processes only the sparse intersection of query terms and posting lists, which is work-efficient but bandwidth-inefficient. The doc-parallel kernel achieves 2,097 GB/s (62.6% of peak) by iterating over all document entries with coalesced access, which is bandwidth-efficient but work-inefficient. The scatter-add kernel is faster despite dramatically lower bandwidth utilization because it performs ∼850× fewer memory operations. This confirms that work-efficiency (processing only matching query-term intersections) dominates hardware utilization for GPU sparse retrieval at practical scale. The doc-parallel kernel is useful as a lower bound: it shows that our index format can sustain 62.6% of peak HBM bandwidth, and the gap between the two kernels is entirely due to the asymmetry between sparse query terms and full collection scanning.

Ashutosh Sharma

Table 8: Measured end-to-end pipeline latency (SPLADE encoding + Triton scoring + top-𝑘) on H100 80GB with 1M MS MARCO passages.

Table 10: Correctness verification: GPU Triton kernel vs. CPU exact dense matmul (top-1000, 500 queries). Recall measures ranking agreement.

Batch

Encode (ms)

Score (ms)

Per-Query (ms)

QPS

Docs

R@10

R@100

R@1000

GPU (s)

Speedup

1 8 32 64 128

3.6 5.5 6.8 11.1 17.2

1.2 2.7 7.1 13.9 29.2

4.8 1.0 0.43 0.39 0.36

209 977 2,303 2,561 2,758

100K 500K 1M

0.9988 0.9996 0.9996

0.9991 0.9991 0.9993

0.9989 0.9990 0.9990

0.006 0.033 0.069

2,103× 1,773× 1,703×

Table 9: BEIR evaluation with SPLADE embeddings and GPUSparse scoring (H100 80GB). All metrics via official qrels. Dataset

Docs

MRR@10

nDCG@10

R@1000

SciFact NFCorpus TREC-COVID

5,183 3,633 50,000

0.551 0.522 0.572

0.586 0.314 0.297

0.977 0.565 0.525

6.10

Latency 1.4ms 1.2ms 2.1ms

End-to-End Pipeline

We measure the complete GPU-resident retrieval pipeline including SPLADE query encoding (Table 8): At batch size 32, the complete pipeline achieves 0.43ms per query end-to-end (including SPLADE encoding) at 1M documents, demonstrating that GPU-resident sparse retrieval is practical for real-time serving. SPLADE encoding dominates at small batch sizes (3.6ms single-query encoding vs. 1.2ms scoring); the sub-linear scaling from batch 1 to 128 reflects efficient GPU batching of both the SPLADE encoder and the scoring kernel. At batch 128, throughput reaches 2,758 QPS with only 0.36ms per query. At full 8.8M scale, scoring alone is 1.27ms/query (batch 500), so the complete E2E pipeline would be ∼2.5ms/query (∼400 QPS) including SPLADE encoding, still well within real-time serving requirements for batch workloads.

6.11

Cross-Domain Evaluation (BEIR)

CPU exact dense matrix multiplication (the ground truth) at multiple scales. Table 10 confirms that GPUSparse achieves Recall@1000 ≥ 0.999 against exact CPU ground truth at all scales up to 1M. At full 8.8M scale, we verify against Pyserini SPLADE (the reference exact implementation): our MRR@10=0.383, nDCG@10=0.449, and R@1000=0.983 match Pyserini’s 0.383, 0.449, and 0.983 respectively, confirming functional correctness at full scale. The small deviation from perfect Recall@1000=1.000 in the dense matmul comparison arises from floating-point tie-breaking: when multiple documents share identical scores at the top-𝑘 boundary, GPU atomic additions produce slightly different rounding than sequential CPU accumulation, causing different boundary documents to be selected.

7

Discussion

Why not exact WAND on GPU?. WAND’s pivot-selection algorithm requires maintaining a globally sorted view of posting list iterators and updating it after each pivot evaluation. This coordinated, sequential access pattern maps poorly to GPU’s SIMT execution model. Our scatter-add approach sacrifices the document-level skipping of WAND but gains full parallelism: the resulting kernel processes more postings than WAND would, but completes in lower wall-clock time due to massive GPU parallelism, while achieving exact scoring as a bonus. Our kernel design analysis (§5) shows that work-efficiency (minimizing total data touched) matters more than hardware utilization (maximizing bandwidth) for GPU sparse retrieval, which explains why the simple scatter-add approach outperforms more sophisticated alternatives.

Dense vs. Sparse on GPU.. Our scatter-add kernel exploits sparsity ¯ entries per query, compared to 𝑂 (𝑁 · To validate that GPUSparse generalizes beyond MS MARCO, we to process only 𝑂 (𝑞¯ · 𝐿) evaluate on three BEIR [25] benchmarks using real SPLADE em|V |) for dense matmul over the full vocabulary. This advantage beddings encoded on the fly. compounds with scale: 8× faster at 100K and 6.4× at 500K. At 8.8M Table 9 confirms that GPUSparse generalizes across domains. documents, our sparse index uses only 8.5 GB, while materializing On SciFact (fact checking), nDCG@10=0.586 with R@1000=0.977 SPLADE vectors as dense 30K-dim matrices for matmul would demonstrates near-perfect recall. On NFCorpus (medical IR), nDCG@10=0.314 require ∼1 TB (infeasible even at 1M where it is 114 GB). The docreflects the inherently multi-relevant nature of the dataset. On parallel kernel analysis (§5) further confirms that the sparse format TREC-COVID (50K biomedical documents), nDCG@10=0.297 with can sustain 62.6% of peak HBM bandwidth when accessed with sub-2ms latency. All results use exact scoring; since our correctness coalesced patterns. verification confirms Recall@1000 ≥ 0.999 against CPU scoring at Relationship to Sparton. Sparton [17] optimizes the SPLADE enall MS MARCO scales (§6), these results are equivalent to CPU coding step (the language model head) with a fused Triton kernel SPLADE up to floating-point tie-breaking. Latency stays under achieving up to 4.8× speedup. Our work targets the complementary 2.2ms even at 50K documents. scoring step: given pre-computed sparse vectors, GPUSparse accelerates retrieval scoring. Together, they enable a fully GPU-resident 6.12 Functional Correctness Verification pipeline. To verify that our GPU scoring produces correct results, we compare the top-1000 rankings from the Triton scatter-add kernel against Limitations.

GPUSparse: GPU-Accelerated Learned Sparse Retrieval with Parallel Inverted Indices

(1) Single-query latency: At batch size 1, GPUSparse achieves 9.6ms/query at 8.8M docs. Seismic achieves 10.5𝜇s batch throughput for approximate top-10 retrieval at 8.8M docs. Our advantage is exact scoring with high batch throughput; for single-query approximate search, CPU methods are faster. (2) GPU cost: Requiring an H100 GPU is substantially more expensive than CPU-only retrieval. GPUSparse is best suited for settings where GPUs are already available (inference servers) and batch throughput is critical. (3) Score buffer memory: The [𝐵 × 𝑁 ] accumulation buffer scales as 𝑂 (𝐵 · 𝑁 ). At batch 500 with 8.8M documents, peak GPU memory is 44 GB (55% of H100’s 80 GB). Larger batch sizes at this scale would require chunked query processing. (4) Scattered writes: The scatter-add kernel achieves 12.5 GB/s effective bandwidth (0.37% of peak) due to random atomic writes, a consequence of work-efficiency (§5). A doc-parallel kernel achieves 62.6% peak bandwidth but is 5× slower. (5) No dynamic updates: The current index does not support insertions or deletions without a full rebuild.

8

interactive search without GPU access, CPU methods like Seismic [3] remain the appropriate choice. The two approaches are complementary, not competing. Future Work. (1) Hybrid kernel combining scatter-add workefficiency with doc-parallel bandwidth utilization via shared-memory accumulation and warp-level reduction. (2) Compressed posting lists (quantized scores, variable-byte doc IDs) for larger collections beyond single-GPU capacity. (3) Integration with streaming query batching and adaptive batch accumulation for production serving with variable query arrival rates. (4) Low-overhead multi-GPU sharding with device-side NVLink score merging for web-scale collections (100M+ documents): our measurements show naive data-parallel sharding regresses at single-node scale because hostside coordination dominates sub-10ms latencies, so a device-side top-𝑘 merge is needed to realize multi-GPU speedup. Reproducibility. All Triton kernels, index building code, and evaluation scripts are implemented in Python with PyTorch and Triton. Experiments use the publicly available MS MARCO passage ranking dataset and the SPLADE-cocondenser-ensembledistil model3 from HuggingFace. Code will be released upon publication.

Conclusion

We presented GPUSparse, a system for GPU-accelerated exact learned sparse retrieval with GPU-native inverted indices, batched scatter-add scoring, and fused Triton kernels. Our analysis of two kernel designs (work-efficient scatter-add and bandwidth-efficient document-parallel) reveals a fundamental tradeoff in GPU sparse retrieval. Evaluated on MS MARCO passage ranking with real SPLADE embeddings and official relevance judgments, GPUSparse demonstrates: • Exact scoring: MRR@10=0.383 equal to Pyserini SPLADE (to three decimals) at full 8.8M scale (6,980 queries), with Recall@1000≥0.999 vs. CPU dense matmul ground truth at all scales (100K–8.8M). • 235× speedup over Pyserini CPU exact scoring at 8.8M documents (1.27ms vs. 298ms per query), 6.3× faster than cuSPARSE SpMV (batched) at 100K. • 787 QPS throughput at 8.8M documents (batch 500), demonstrating practical GPU-resident full-scale retrieval. • 62.6% of H100 peak HBM bandwidth with the documentparallel kernel, validating GPU-native index design. • Memory efficient: 8.8M passages use only 8.5 GB (11% of 80 GB H100) for the inverted index. These results demonstrate that learned sparse retrieval need not be CPU-bound. GPU-accelerated exact scoring via GPUSparse provides identical quality to CPU-based SPLADE retrieval while achieving substantially higher batch throughput, making it a compelling choice for production retrieval systems where exact scoring and high throughput are required. Practical Guidance. GPUSparse is best suited for settings where (1) GPU resources are available (inference servers, cloud deployments), (2) query batching is feasible (batch reranking, offline evaluation, search-as-a-service), and (3) exact scoring is required (evaluation benchmarks, hybrid retrieval pipelines). For single-query

References [1] Nathan Bell and Michael Garland. Implementing sparse matrix-vector multiplication on throughput-oriented processors. In SC, pages 18:1–18:11, 2009. [2] Andrei Z. Broder, David Carmel, Michael Herscovici, Aya Soffer, and Jason Zien. Efficient query evaluation using a two-level retrieval process. In CIKM, pages 426–434, 2003. [3] Sebastian Bruch, Franco Maria Nardini, Cosimo Rulli, and Rossano Venturini. Efficient inverted indexes for approximate retrieval over learned sparse representations. In SIGIR, pages 152–162, 2024. [4] Tiago Almeida and Sérgio Matos. SPARe: Supercharged lexical retrievers on GPU with sparse kernels. In ECIR, pages 413–421, 2024. [5] Parker Carlson, Wentai Xie, Shanxiu He, and Tao Yang. Dynamic superblock pruning for fast learned sparse retrieval. In SIGIR, pages 3004–3009, 2025. [6] Shuai Ding and Torsten Suel. Faster top-𝑘 document retrieval using block-max indexes. In SIGIR, pages 993–1002, 2011. [7] Thibault Formal, Benjamin Piwowarski, and Stéphane Clinchant. SPLADE: Sparse lexical and expansion model for first stage ranking. In SIGIR, pages 2288–2292, 2021. [8] Thibault Formal, Carlos Lassance, Benjamin Piwowarski, and Stéphane Clinchant. SPLADE v2: Sparse lexical and expansion model for information retrieval. arXiv preprint arXiv:2109.10086, 2021. [9] Thibault Formal, Carlos Lassance, Benjamin Piwowarski, and Stéphane Clinchant. From distillation to hard negative sampling: Making sparse neural IR models more effective. In SIGIR, pages 2353–2359, 2022. [10] Jeff Johnson, Matthijs Douze, and Hervé Jégou. Billion-scale similarity search with GPUs. IEEE Transactions on Big Data, 7(3):535–547, 2021. [11] Vladimir Karpukhin, Barlas Oğuz, Sewon Min, Patrick Lewis, Ledell Wu, Sergey Edunov, Danqi Chen, and Wen-tau Yih. Dense passage retrieval for open-domain question answering. In EMNLP, pages 6769–6781, 2020. [12] Carlos Lassance, Hervé Déjean, Thibault Formal, and Stéphane Clinchant. SPLADE-v3: New baselines for SPLADE. arXiv preprint arXiv:2403.06789, 2024. [13] Jimmy Lin, Xueguang Ma, Sheng-Chieh Lin, Jheng-Hong Yang, Ronak Pradeep, and Rodrigo Nogueira. Pyserini: A Python toolkit for reproducible information retrieval research with sparse and dense representations. In SIGIR, pages 2356– 2362, 2021. [14] Jimmy Lin and Xueguang Ma. A few brief notes on DeepImpact, COIL, and a conceptual framework for information retrieval techniques. arXiv preprint arXiv:2106.14807, 2021. [15] Tri Nguyen, Mir Rosenberg, Xia Song, Jianfeng Gao, Saurabh Tiwary, Rangan Majumder, and Li Deng. MS MARCO: A human generated MAchine Reading COmprehension dataset. In CoCo@NIPS, 2016. [16] NVIDIA. cuVS: GPU-accelerated vector search. https://github.com/rapidsai/cuvs, 2024.

3 https://huggingface.co/naver/splade-cocondenser-ensembledistil

Ashutosh Sharma

[17] Thong Nguyen, Cosimo Rulli, Franco Maria Nardini, Rossano Venturini, and Andrew Yates. Sparton: Fast and memory-efficient triton kernel for learned sparse retrieval. In SIGIR, 2026. [18] Keshav Santhanam, Omar Khattab, Jon Saad-Falcon, Christopher Potts, and Matei Zaharia. ColBERTv2: Effective and efficient retrieval via lightweight late interaction. In NAACL, pages 3715–3734, 2022. [19] Stephen Robertson and Hugo Zaragoza. The probabilistic relevance framework: BM25 and beyond. Foundations and Trends in Information Retrieval, 3(4):333–389, 2009. [20] Zhichao Xu, Shengyao Zhuang, Crystina Zhang, Xueguang Ma, Yijun Tian, Maitrey Mehta, Jimmy Lin, and Vivek Srikumar. LACONIC: Dense-level effectiveness for scalable sparse retrieval via a two-phase training curriculum. arXiv preprint arXiv:2601.01684, 2026.

[21] Antonio Mallia, Michal Siedlaczek, Torsten Suel, and Mohamed Zahran. GPUaccelerated decoding of integer lists. In CIKM, pages 2193–2196, 2019. [22] Antonio Mallia, Torsten Suel, and Nicola Tonellotto. Faster learned sparse retrieval with block-max pruning. In SIGIR, pages 2411–2415, 2024. [23] Zhonggen Li, Yougen Li, Yifan Zhu, Congcong Ge, Zhaoqiang Chen, and Yunjun Gao. All-in-one graph-based indexing for hybrid search on GPUs. arXiv preprint arXiv:2511.00855, 2025. [24] Sheng-Chieh Lin and Jimmy Lin. A dense representation framework for lexical and semantic matching. ACM Transactions on Information Systems, 41(4):1–29, 2023. [25] Nandan Thakur, Nils Reimers, Andreas Rücklé, Abhishek Srivastava, and Iryna Gurevych. BEIR: A heterogeneous benchmark for zero-shot evaluation of information retrieval models. In NeurIPS Datasets and Benchmarks, 2021.

Record · ID 310788 · SHA-256 9dd27611cdc0baa2
Retrieved via Conceptio — every document is proof-bundled with source, license, and retrieval metadata.