在循环方面计算哪个编译器更快

时间:2019-04-08 06:24:01

标签: performance compiler-construction clock instructions cpu-cycles

我只是有一个简单的问题,有点愚蠢,但是我只需要对即将到来的考试做一些澄清,所以我不会犯一个愚蠢的错误。我目前正在上计算机组织和设计课程,正在学习执行时间,CPI,时钟周期等。

对于一个问题,我必须计算2个编译器的周期数量,并找出哪一个更快,以及给定的指令数和每条指令的周期多少。我的主要问题是确定更快的编译器的速度。

例如,假设他们是两个编译器:

Compiler 1 has 3 load instructions, 4 store instructions, and 5 add 
instructions.

Compiler 2 has 5 load instructions, 4 store instructions, and 3 add 
instructions 

加载指令需要2个周期,存储指令需要3个周期,加法指令需要1个周期

所以我要做的加起来等于(3 + 4 + 5)和(5 + 4 + 3)这两个指令,它们都等于12条指令。

然后我将指令数量乘以周期,然后像这样将它们全部加在一起,从而计算出周期

Compiler 1: (3*2)+(4*3)+(5*1) = 23 cycles 
Compiler 2: (5*2)+(4*3)+(3*1) = 25 cycles 

因此显然编译器1更快,因为它需要更少的周期。要找出编译器1与编译器2相比要快多少,我是否要除以周期比率?

我的计算是23/25 = 0.92,所以编译器1比编译器2快0.92倍(快92%)。

我的一个同学正在与我讨论这个问题,并声称它将是25/23,这意味着它快了1.08倍。

我知道我也可以通过将周期除以如下指令来计算:

23 cycles/12 instructions = 1.91 
25 cycles/12 instructions = 2.08 
and then 1.91/2.08 = 0.92 which is the same as the above answer. 

我不确定哪种方法正确。

我还想知道第二个编译器的指令数量是否不同,比如说15条指令。计算循环比率是否足够?

还是我必须将周期与指令(周期/指令)分开,但要为两者都放入15条指令?

(ex. 23/15 and 25/15?) and then divide the quotients of both to get 
the times faster? I also get the same number(0.92) in that case. 

谢谢您的澄清。

2 个答案:

答案 0 :(得分:3)

第一个编译器的速度是第二个编译器的1.08倍,这快了 8%(因为1.0 + 0.08 = 1.08)。

答案 1 :(得分:0)

这两种计算可能都不准确,对于现代/多核处理器,生成更多指令的编译器实际上可能会生成更快的代码。