经过研究,我发现代码生成器决定在关闭优化时使用句柄(在编译器中是双重引用),并在优化打开时使用指向句柄的指针!
但这一条指令导致代码的运行时间惊人地减慢了32%。我怀疑这与指令流水线有关,因为这种额外的解引用导致了3条相关指令,这可能解释了速度减慢。
我需要证明这一点,并试图获得更多关于流水线的信息,如果有人能推荐一些关于指令流水线的好材料,有用的架构模拟器和流水线可视化工具,那就太好了。
发布于 2012-04-08 01:38:34
当需要取消引用指针时,必须首先从内存中加载指针,然后才能加载指针所指向的值。如果你有一个指向一个值的指针,那么你需要进行三次连续的加载。这称为指针跟踪。如果这些指针不在缓存中,性能影响可能是巨大的。流水线不会有太大帮助。关于计算机架构的标准书籍是hennessy & patterson。有几个架构模拟器。http://gem5.org非常流行(完全公开地说,我是一个提交者),但它们几乎总是有一个陡峭的学习曲线。
https://stackoverflow.com/questions/9427123
复制相似问题