0

我正在开发一个编译器,并编写了一个优化,实际上让我的代码变慢了!在调查它时,我发现代码生成器决定在我的优化关闭时使用句柄(在我们的编译器的情况下是双重引用),并在我的优化开启时使用指向句柄的指针!这导致在第二种情况下,每当访问数组时,就会产生一条更多的取消引用指令。

但是这条单条指令导致代码运行时间惊人地降低了 32%。我怀疑这与指令流水线有关,因为这种额外的取消引用会导致 3 个依赖指令,这可能解释了速度下降。

我需要演示同样的内容,并试图获得更多关于流水线的信息,如果有人能推荐一些关于指令流水线、有用的架构模拟器和流水线可视化器的好材料,那就太好了。

4

1 回答 1

0

当需要取消引用指针时,必须先从内存中加载指针,然后才能加载指针所指向的值。如果你有一个指向一个值的指针,那么你需要执行三个连续的加载。这称为指针追逐。如果这些指针不在缓存中,则性能影响可能很大。流水线没有太大帮助。计算机体系结构的标准书籍是轩尼诗和帕特森。那里有几个建筑模拟器。 http://gem5.org非常受欢迎(完全公开,我是一名提交者),但他们几乎总是有一个陡峭的学习曲线。

于 2012-04-07T17:38:33.717 回答