我遇到了一种计算数据类型浮动的CPE (由关键路径确定)的下界的方法。但是,我不知道这些数字是从哪里来的,在尝试计算类似的界限之前,我需要做一些澄清。
这就是我所想到的:(4+3)/3 = 2.33
我假设它被除以3,因为CPE值,但是我不知道(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;
}

发布于 2016-04-25 13:31:29
...I假设它被除以3,因为CPE值,但是我不知道(4+3)从哪里来。
您的(4+3)/3 = 2.33 (表示浮点数的下限CPE,或CPI)似乎是对比率的简化(可能是在分解之后),如注释中提供的https://en.wikipedia.org/wiki/Cycles_per_instruction示例中所示。即每种类型的指令数之和,每种类型的指令数乘以相应的时钟周期,全部除以总指令数。
链接中的示例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.https://stackoverflow.com/questions/36830819
复制相似问题