|
写这种 micro benchmark 的时候一定要小心设计,不然你的代码很可能就被 compiler 给 “优化” 没了
运算好的结果至少要读入参与另一个运算,才能不被 compiler 认为是无用运算
至于如何写好 micro-benchmark,也是单独的一门学问了,这种 benchmark 很有针对性地,只能测出某一点的性能,比如专门测试 cache,或者这种预测命中机制的命中率
巨大的循环本身测不出 ALU 能力,又没有访存所以测不出内存带宽,所有变量都在 register 中完成所以测不出 cache,连 instruction 都几乎完全命中,如果中间的函数不复杂的话,最后测出的东西也不能说明任何方面的性能了 :huh: |
|