高级技术

特定于运行代码的体系结构的技术

  • CPU缓存介绍
    • 性能的悬崖
    • 围绕缓存行构建直觉:大小,填充,对齐
    • 共享假
    • 真正的共享 ->分片
    • OS工具来查看缓存未命中
    • Mao与切片
    • SOA vs AOS布局
    • 减少指针追逐
  • 分支预测
    从内部循环中删除分支:
    if a { for { } } else { for { } }
    代替
    for { if a { } else { } }

    避免

    if i % 2 == 0 {

    1. evens++

    } else {

    1. odds++

    }

    counts[i & 1] ++并不总是更快,但通常更难以阅读
    TODO:ASCII类计数示例和基准

  • 排序数据可以通过缓存局部性和分支预测来帮助提高性能,即使考虑到排序所花费的时间
  • 函数调用开销
  • 关于Jeff Dean的2002年数字(加上更新)的评论
    • cpus变得更快了,但是内存没有跟上