将CPE限制为1.0

基本上,有两个问题我应该有不同的答案,而我却回答相同。

问题1:

编写问题5.13中描述的内部乘积过程的版本,该过程使用6×1循环展开。对于x86-64,我们对展开版本的测量得出整数数据的CPE为1.07,而两个浮点数据的CPE仍为3.01。 A.解释为什么在Intel Core i7 Haswell处理器上运行的任何(标量)内部产品过程版本都无法达到低于1.00的CPE。

问题2:

编写问题5.13中描述的内部乘积过程的版本,该过程使用6×6循环展开。我们使用x86-64对该功能进行的测量得出,整数数据的CPE为1.06,浮点数据的CPE为1.01。 有什么因素将性能限制为1.00?

我的困惑:

我的困惑是,对于这两个问题(问题1的A和问题2的“什么因素将性能限制为1.00的CPE?”)都是相同的:它们不能超过吞吐量限制。

当请求6x1循环展开我编写的代码时,我理解问题的开头,这将受到延迟的限制。但是,A询问的是循环的任何版本,而不仅仅是Xx1的变体。

另外由于对处理器的特别提及,可能是由于它不是超级缩放器,但我不太确定。

但是,我与我的老师交谈,他说这些问题的答案是不同的,但是我不明白为什么。

5.13如下

假设我们希望编写一个过程来计算两个向量u和v的内积。该函数的抽象版本的CPE为14-18,x8664用于不同类型的整数和浮点数据。

1 /* Inner product. accumulate in temporary */
2 void inner4(vec_ptr u,vec_ptr v,data_t *dest)
3 {
4 long i;
5 long length = vec_length(u);
6 data_t *udata = get_vec_start(u);
7 data_t *vdata = get_vec_start(v);
8 data_t sum = (data_t) 0;
9
10 for (i = 0; i < length; i++) {
11 sum += udata[i] * vdata[i];
12 }
13 *dest = sum;
14 }

我们的测量结果表明,对于整数数据,此功能的CPE为1.50;对于浮点数据,此功能的CPE为3.00。

结论:

我了解循环展开代码。但是,问题1的答案与问题2的书面部分(“什么因素将CPE的性能限制为1.00?”)有什么不同?

mj40779 回答:将CPE限制为1.0

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3135086.html

大家都在问