注册为分配外环

问题描述

我正在阅读红龙书,在注册外循环分配部分中,我发现了以下对我来说不太清楚的陈述。

如果外循环L1包含一个内循环L2,则L2中分配的寄存器名称不需要L1 - L2中分配的寄存器

他们想说什么?他们是在谈论在 L1L2 中都使用的变量吗,这些名称在 L2 中分配了寄存器。我不太明白文中的意思。

谁能给我解释一个可能的例子?

Block Diagram

解决方法

一个常见的优化是在循环期间将循环中使用的变量保存在寄存器中。这可以在紧密循环中产生巨大的差异,因为它避免了内存的使用。

对于这种形式的任何优化,在循环开始之前,寄存器将需要用变量的值进行初始化,这可能意味着从内存中读取它。如果该变量在循环期间被修改并且之后仍在使用,则可能需要将其保存回其内存位置。尽管如此,与每次迭代都读取和写入变量的值相反,这最多只是一次内存读取和一次写入。

以这种方式优化哪些变量的决定很重要。并且这里出现了在内部循环中使用变量而不是在封闭的外部循环中使用变量的可能性。在这种情况下,可能在外循环中有更多有益的寄存器用途。

因此,内循环中为优化变量保留的寄存器没有必要在包含循环中也保留。在开始内循环之前保存寄存器的值并在内循环退出时恢复它甚至可能是值得的。所有这些都取决于优化器对循环重复次数的最佳猜测、变量的优化使用位置的数量,当然还有可用的寄存器数量。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...