根据函数的CPE,如何计算下限?

时间:2016-04-25 01:27:53

标签: c linux performance optimization

我遇到了一种计算数据类型float的CPE下限(由关键路径确定)的方法。但是,我不确定这些数字来自何处,在尝试计算类似界限之前我需要澄清一些。

这就是我所遇到的: 的 (4+3)/3 = 2.33

我认为由于CPE值它除以3,但我对(4 + 3)来自哪里感到困惑。

对于整数和浮点数据,此函数的CPE为3.00。

void inner4(vec_ptr u, vec_ptr v, data t *dest) {
    long i; 
    long length = vec_length(u);
    data_t *udata = get_vec_start(u);
    data_t *udata = get_vec_start(v);
    data_t sum = (data_t) 0;
    for (i = 0; i < length; i++){
        sum = sum + udata[i] * vdata[i]'
    }
    *dest = sum;
}

enter image description here

1 个答案:

答案 0 :(得分:1)

  

...我认为由于CPE值,它除以3,但我是   对(4 + 3)的来源感到困惑。

表示你的(4+3)/3 = 2.33表示浮动的下限CPE(或CPI)是比率的简化(可能在分解后),如 {中的示例所示。您在评论中提供的{3}} 。即,将每种类型的指令计数相加,每一个乘以其相应的时钟周期,全部除以总指令计数。

链接中的示例2,也适用于类型float,但具有不同的处理器指令混合时钟周期计数,而不是您引用的单位你的帖子提供插图。虽然您的帖子中没有足够的信息来确切知道这些值是如何得出的,但链接中给出的公式清楚地显示了比率的构建方式。

遵循示例2中给出的相同形式:并给出以下(设计的)指令混合和循环计数,尽管是一个非常简化的示例(即仅两种指令类型),这显示了您的比率可能具有已派生:

Instruction type    Instruction count   Clock cycle count  

Floating point      6000                2
Control transfer    3000                3

该比率将为:

(6000*2 + 3000*3)/9000  
After factoring:    

(4 + 3)/3 - Ratio is the sum of two instruction types, each multiplied
            by their corresponding cycle count, all divided by the total
            instructions in the specific program, then factored to
            lowest terms.