news 2026/5/1 8:46:29

突破二分查找局限!SIMD Quad 算法在不同平台展现卓越性能优势

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
突破二分查找局限!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 等人的评论及回复,涉及对文章内容的疑问、其他数据结构的讨论和测试结果分享等。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 8:44:51

终极指南:3步开启OBS多平台直播,obs-multi-rtmp插件完整教程

终极指南:3步开启OBS多平台直播,obs-multi-rtmp插件完整教程 【免费下载链接】obs-multi-rtmp OBS複数サイト同時配信プラグイン 项目地址: https://gitcode.com/gh_mirrors/ob/obs-multi-rtmp 还在为每个直播平台单独配置OBS而烦恼吗&#xff1f…

作者头像 李华
网站建设 2026/5/1 8:40:30

如何快速提升显卡性能:NVIDIA Profile Inspector完整优化指南

如何快速提升显卡性能:NVIDIA Profile Inspector完整优化指南 【免费下载链接】nvidiaProfileInspector 项目地址: https://gitcode.com/gh_mirrors/nv/nvidiaProfileInspector 想要充分发挥显卡潜能,获得更流畅的游戏体验吗?NVIDIA …

作者头像 李华
网站建设 2026/5/1 8:38:40

OneMore插件:让OneNote从普通笔记工具升级为专业生产力平台

OneMore插件:让OneNote从普通笔记工具升级为专业生产力平台 【免费下载链接】OneMore A OneNote add-in with simple, yet powerful and useful features 项目地址: https://gitcode.com/gh_mirrors/on/OneMore 还在为OneNote功能不够强大而烦恼吗&#xff1…

作者头像 李华
网站建设 2026/5/1 8:38:31

019、PID控制器的C语言实现(一):基础框架

019、PID控制器的C语言实现(一):基础框架 上个月调一个直流有刷电机的速度环,板子跑起来电机嗡嗡响,转速在目标值上下疯狂震荡,示波器一看,速度曲线像心电图。我盯着代码里的PID结构体看了半天,发现积分项没做限幅,误差累积到天上去了。这种问题在嵌入式PID实现里太常…

作者头像 李华
网站建设 2026/5/1 8:34:24

开源内部工具平台Dunder.Company:一体化自托管解决方案解析

1. 项目概述:一个面向初创公司的开源内部工具平台最近在GitHub上看到一个挺有意思的项目,叫henriquesss/dunder.company。光看这个名字,可能有点摸不着头脑,但如果你对美剧《办公室》(The Office)有点了解&…

作者头像 李华