Assembly 用汇编语言中的一条指令替换两条指令

Assembly 用汇编语言中的一条指令替换两条指令,assembly,cpu-architecture,instructions,Assembly,Cpu Architecture,Instructions,下面是程序中给出的若干指令的表格。第一列表示指令本身,第二列表示程序中任何指令的权重百分比,第三列表示任何给定指令的每条指令的周期数 现在,我想用一条指令madd替换add和mult madd接受三个输入,将前两个输入相乘,并将结果添加到第三个输入。通过这种方式,madd指令同时执行乘法和加法 add和mult的当前重量均为40%。所以问题是,当我替换mult并添加madd时,新madd指令的权重是多少 add和mult的当前重量均为40%。所以问题是我什么时候 更换mult并添加madd,新m

下面是程序中给出的若干指令的表格。第一列表示指令本身,第二列表示程序中任何指令的权重百分比,第三列表示任何给定指令的每条指令的周期数

现在,我想用一条指令madd替换add和mult

madd接受三个输入,将前两个输入相乘,并将结果添加到第三个输入。通过这种方式,madd指令同时执行乘法和加法

add和mult的当前重量均为40%。所以问题是,当我替换mult并添加madd时,新madd指令的权重是多少

add和mult的当前重量均为40%。所以问题是我什么时候 更换mult并添加madd,新madd的重量是多少 指令

如果程序由在一个位置消耗30%CPU时间的加法和在完全不同的位置消耗10%CPU时间的乘法组成,则与加法无关;那么,用乘法和加法指令替换任何内容可能是完全不可能的

如果程序由一个加法和1000个乘法组成,每个加法消耗30%的CPU时间,每个乘法消耗0.01%的CPU时间,那么在最佳情况下,您只能替换一个加法和一个乘法,并且仍然有999个未配对的乘法

如果程序由1000个加法和一个乘法组成,每个加法消耗0.03%的CPU时间,一个乘法本身消耗10%的CPU时间,那么在最佳情况下,您只能替换一个加法和一个乘法,并且仍然有999个未配对的加法

如果您知道加法和乘法的数量相等,并且所有加法和乘法指令都可以配对并替换为乘法和加法指令,而无需更改加载、存储或分支的数量;然后,您不知道乘法和加法指令的速度有多快/有多慢,或者至少您没有提供这些信息,因此仍然无法确定它将如何影响性能


换句话说,你几乎没有找到答案所需的任何信息。

你认为答案会是什么?到目前为止,你做了什么来解决它?这是一个家庭作业吗?@user28434这是一个问题的一个子部分。我被困在这里了。@Colin_us我把10%的add加上10%的mult。这将留下20%的add。因此,结果是,我们将有10%的madd指令,剩下20%的add指令。所以一般来说,我们之前有40%的add和mult指令组合在一起。现在,我们有10%的madd加上20%的add指令。您需要在这里做一个假设:即10%的add指令将使用MULT的输出作为一个源。考虑到这个假设,你的方向是正确的。还记得在新形成的MADD指令中修改CPI。如果体系结构有零寄存器,那么所有乘法器都可以用MADD替换。如果它只有一个寄存器,那么也可以对加法进行编码,因为madd Itanium有一个1.0寄存器和一个0.0寄存器。如果这些操作是完全独立的,那么40%的指令将被madd。如果程序中的每一个乘法后面都有一个相依加法最佳情况,那么三分之一的指令将是madd 20个独立加法,每90条指令将有10个真madd[100-10个包含加法]。性能不是问题的一部分。@PaulA.Clayton:Performance执行哪种类型的指令所花费的CPU时间百分比是问题所在,只是OP称之为权重。我认为,按权重计算,OP意味着指令计数的%,符合add和mult当前重量的为40%,mult和add的性能分数为2.2/5.9,37%。