我有2个版本的程序我必须分析。一个是递归的,另一个是迭代的。我必须比较两者的缓存命中率,并检查两种方法的性能和指令数量的差异
无论块设置如何,对于这两种方法,迭代方法的内存访问量大约减少100。两者都触发2次未命中。如果我将设置设置为1块大小为256的话,我只能将缓存命中率降低到85%。
对于指令计数迭代大约是1000指令
有人可以向我解释为什么会发生这种情况或提供一些我能读到的文献,我似乎无法找到任何东西。我想概括一下为什么会发生这种情况。
答案 0 :(得分:0)
从这个问题中得到一些信息:Recursion or Iteration?以及麦克吉尔的COMP 273中的一些信息,我认为你也是这样,这就是你问的原因。
每次递归调用通常都要求将该调用的返回地址压入堆栈;在MIPS(汇编)中,这必须手动完成,否则返回地址会被每个 jal 覆盖。因此,通常更多的缓存空间用于递归解决方案,因此内存访问计数更高。在迭代解决方案中,这不是必需的。