我正在编写一个编译器,并编写了一个优化实际上使我的代码更慢!在调查它时,我发现代码生成器决定在我的优化关闭时使用Handle(在我们的编译器的情况下为双引用),并在我的优化开启时使用Handle的指针!每当访问该阵列时,这导致在第二种情况下再一次去引用指令。
但是这条单指令导致代码运行时间减少了32%。我怀疑这与指令流水线有关,因为这个额外的去参考会导致3个相关指令,这可能解释了减速。
我需要展示相同的内容,并且我正在尝试获取有关流水线的更多信息,如果有人可以在指令流水线,有用的架构模拟器和管道可视化器上提供一些好的材料,那将会很棒。
答案 0 :(得分:0)
当您需要取消引用指针时,必须首先从内存中加载指针,然后才能加载指针指向的值。如果你有一个指向值的指针,那么你需要做三个连续的加载。这称为指针追逐。如果这些指针不在缓存中,则性能影响可能很大。流水线技术没有多大帮助。关于计算机体系结构的标准书籍是hennessy&帕特森。那里有几个建筑模拟器。 http://gem5.org非常受欢迎(完全披露,我是提交者),但他们几乎总是有一个陡峭的学习曲线。