dirtysalt 发表于 2008-06-12 12:44

动态规划代码生成问题

还是Aho Dragon Book那本书,第二版中文版370,英文版570页关于动态规划代码生成的问题

不理解书中的C的设置,实际上我觉得那样设置C 根本就没有含义。按照书中前面说C是有i个寄存器可用的时候的cost,那么c就是没有任何寄存器可用的cost了,但是后面计算的时候c是(min{1<=i<=n}C)+1的值,这就没有任何意思了,因为如果c没有任何寄存器可用时,首先我们要将一部分reg spill用于计算,计算完之后在将结果保存到内存中,将reg恢复,这样代价就不是1,计算方式也不是这样的。

按照我的理解根本就不需要设置c有n个分量,只需要设置两个分量c,c表示该节点放在内存中的代价,c表示放在reg中的代价,假设按照书中的几种指令方式
Ri = Mj
Ri = Ri op Rj
Ri = Ri op Mj
Ri = Rj
Mi = Ri
来产生d/e的结果,这样d开始的cost是,e是
对于/有两种匹配方式Ri = Ri op Rj,Ri = Ri op Mj,如果按照第一种匹配
那么就是d.cost(d.cost=1)+e.cost(e.cost=1)+cost(/)(assume =1)=3
如果按照第二种匹配
d.cost(d.cost=1)+e.cost(e.cost=0)+cost(/)=2
所以d/e的cost=2,由于没有任何直接保存到mem的操作,那么cost=cost+cost(Mi = Ri)(assume =1)=3
所以d/e的cost分量就是。

对于书中的例子,我还特意按照我自己的理解花了一幅图,在附件中,希望你们能够理解我的意思。

[ 本帖最后由 dirtysalt 于 2008-6-12 12:45 编辑 ]

dirtysalt 发表于 2008-06-14 00:30

这个问题需要关注

自顶自己的贴,自顶

cjaizss 发表于 2008-06-14 10:22

原书的意思应该是不存在C的
C中,必须要有1<=i<=r
r是通用寄存器的个数

dirtysalt 发表于 2008-06-14 23:51

回复 #3 cjaizss 的帖子

有的,C的意思是计算到内存的代价。
这个问题已经搞清楚了,如果斑竹还有什么疑问的,可以在水木清华smth->计算机体系结构板块里面找到这个问题我和斑竹的讨论。不过那本龙书描述这个问题不清楚,我的理解模型也有错误,看完作者的论文后才明白。谢谢斑竹关注,敬礼

nmap 发表于 2008-06-16 00:08

学习:handshake
页: [1]
查看完整版本: 动态规划代码生成问题