Daniel Lemire

3 篇内容

技术文章Daniel Lemire

Profile-guided optimization in Go

文章介绍了 Go 语言的 Profile-guided optimization (PGO) 原理与使用方法。作者解释了编译器在缺乏运行时信息时依赖启发式做优化决策,而 PGO 通过收集 CPU profile 让编译器了解热路径,从而更激进地内联热函数和去虚拟化接口调用。文中通过三个 JSON 文档的解析基准测试,展示了 PGO 可带来 2–4% 的吞吐量提升,但效果因训练数据与工作负载匹配程度而异,甚至可能出现略微性能回退。作者指出 Go 的 PGO 优化幅度有限但成本近乎为零,适合在发行版构建中默认启用。整体内容提供了可操作的实践指南和定量参考,但仅覆盖单个简单解析场景,未涉及更复杂的工作负载或 profile 采样策略。

本文以清晰的步骤和实际数据展示了 Go PGO 的用法与效果,避免了纯理论描述,为需要优化 Go 程序性能的开发者提供了可直接尝试的方法和预期参考。实验规模虽小,但结论谨慎,强调了 workload 匹配的重要性,可迁移到其他 Go 项目的构建流水线中。适合关注编译器优化、性能工程和 Go 工具链的读者。

技术文章Daniel Lemire

How fast is C++26’s std::hive?

文章对 C++26 标准库新增容器 std::hive 进行了性能基准测试,并与 std::vector 和 std::list 在插入、遍历、删除和内存占用等方面进行对比。实验使用特定编译器、硬件和测试数据,测量了纳秒/元素、指令数和周期数。结果显示 hive 的插入成本约为 vector 的两倍,遍历速度与链表相当且远慢于 vector,主要因跳过字段和缺乏自动向量化;但在元素删除和内存占用上优于 list。作者指出 hive 不是更快的 vector,而是提供了稳定引用和常数时间删除的更好 list。该基准测试为 C++ 开发者在选择容器时提供了具体的性能参考,但结论受限于合成负载和单一硬件平台。

推荐收录,因为文章提供了针对 std::hive 的详细基准测试,用数据揭示了其与 vector 和 list 的性能差距和原因(如指令开销、缓存局部性、自动向量化影响),并给出了实际使用建议。适合 C++ 系统编程和性能优化场景的读者,可帮助他们在需要稳定引用与快速删除时做出容器选择,且评测方法论可迁移至其他数据结构的性能对比。

技术文章Daniel Lemire

Memory-level parallelism: AMD is the king

文章通过 pointer chase 基准测试,系统测量了 Intel、AMD 和 Graviton 处理器的内存级并行度(MLP)演化。核心方法是构建 1 GiB 的随机循环数组,同时运行多条独立的指针追逐路径(lanes),通过观测吞吐量饱和点确定单核可维持的最大并发内存请求数。结果显示,AMD Zen 5(Turin)达到 58 条并发缓存行请求和 24.5 GiB/s/s 随机访问带宽,约为 Intel Granite Rapids 的两倍;Intel 十年间从 10 增长至 30,主要提升在最近两代;Graviton 5 延迟显著改善,但 MLP 停滞在 19。测试在 AWS 云实例上进行,数据与脚本公开。该研究为理解处理器内存子系统的实际能力提供了可重复的实验框架和跨代对比。

推荐收录。文章不是泛泛的性能宣传,而是给出了可复现的指针追逐实验设计、完整的跨平台数据及演化趋势分析,直接揭示了 MLP 这一隐藏关键参数对软件性能的实质影响。对从事性能调优、系统选型或体系结构研究的读者极具参考价值,其测量方法和结论可迁移至各类内存敏感型工作负载的优化中。