突破二分查找局限!SIMD Quad 算法在不同平台展现卓越性能优势
查找算法选择在查找已排序数组中的某个值时有线性查找和二分查找等算法。线性查找是逐个遍历数组元素C 里用 std::find 函数实现。对于大型数组二分查找更出色它通过持续将搜索区间一分为二定位目标值C 中 std::binary_search 函数实现该算法。流行的 Roaring Bitmap 格式检查值是否存在时常用二分查找。SIMD Quad 算法的启发与实现为找更快查找方法得到两点启发一是现代处理器有数据并行指令SIMD可同时检查多个值二是现代处理器内存级并行性好可尝试四叉查找。基于此研发出 SIMD Quad 算法它结合四叉插值查找与 SIMD 技术将数组划分为含 16 个元素的块以块的最后一个元素为插值键缩小搜索范围再用 SIMD 指令检查块内元素。其核心是分层搜索先在块边界用插值查找再在块内用 SIMD 并行检查。具体步骤包括初始检查、块划分、四叉插值查找、块选择、SIMD 检查和剩余元素检查。基准测试结果进行基准测试针对数组大小从 2 到 4096 个元素生成 100,000 个已排序的 16 位无符号整数数组分别进行 1000 万次“冷”模式和“热”模式的成员查询测量线性搜索、二分搜索和 SIMD Quad 算法的平均查询时间。用搭载 Apple LLVM 的 Apple M4 和搭载 GCC 的 Intel Emeral Rapids 处理器测试。结果显示数组规模变大时二分搜索性能优于线性搜索SIMD Quad 算法在 Intel 和 Apple 平台表现差异显著但在所有情况下都比二分搜索快。该算法的 SIMD 部分简单能提速四叉方法在 Intel 平台对大型数组且缓存未命中情况是不错的优化方式。相关链接与结论源代码可在 GitHub 上获取。结论表明教科书上的二分查找虽不错但可采用更有效方法SIMD Quad 算法试图利用内存级和数据并行性还有进一步优化空间。此外还提供了延伸阅读链接。附录源代码给出了 simd_quad 函数的源代码。关于作者与文章信息作者 Daniel Lemire 是魁北克大学TELUQ的计算机科学教授。文章发布于 2026 年 4 月 27 日 - 2026 年 4 月 28 日。评论有 Scott Myron、[purplesyringa]、Sam Mason、Walter 等人的评论及回复涉及对文章内容的疑问、其他数据结构的讨论和测试结果分享等。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2571488.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!