1

下面是一个关于练习测试的问题。该表实际上已填写了所有解决方案。但是,我需要澄清为什么这些解决方案是这样的。(阅读水平线下方的问题)。

例如,我真的很想了解 A2 和 A3 的解决方案行。

正如我所看到的,您在 A2 中遇到以下情况:

  1. x * y
  2. xy * r
  3. xyr * z

现在,让我们看看它是如何进行的:

|1|2|3|4|5|6|7|8 |9|10|11|12|13|14|15|16|17|18|19|20|21|
| | | | | | | |  | |  |  |  |  |  |  |  |  |  |  |  |  |
{ x * y } | | |  | |  |  |  |  |  |  |  |  |  |  |  |  |
        { xy * r } |  |  |  |  |  |  |  |  |  |  |  |  |
                 { xyr * z  }  |  |  |  |  |  |  |  |  |
//next iteration, which means different x, y and z's|  |
                   {x2 * y2    }  |  |  |  |  |  |  |  |
                               {x2y2 * r   } // this is dependent on both previous r and x2y2
                                           {x2y2r * z  }

所以我们能够重叠 xyr * z 和 x2 * y2,因为没有依赖冲突。但是,这只是摆脱了 3 个周期,对吗?

所以它仍然是 (12 - 3) / 3 = 9 / 3 = 3 Cycles Per Element(三个元素)。那么他们如何获得 A2 的 8/3 CPE 呢?

任何帮助理解这个概念将不胜感激!不急,因为考试要到下周。如果您需要任何其他信息,请告诉我!


(以下是完整的测试题文本,以及完整填写解决方案的表格)

考虑以下用于计算 n 个整数数组的乘积的函数。

我们将循环展开了 3 倍。

int prod(int a[], int n) {

int i, x, y, z;
int r = 1;

for(i = 0; i < n-2; i += 3) {
    x = a[i]; y = a[i+1]; z = a[i+2];
    r = r * x * y * z; // Product computation
}
for (; i < n; i++)
    r *= a[i];

return r;
}

对于标记为 Product 计算的行,我们可以使用括号来创建五个不同的计算关联,如下所示:

r = ((r * x) * y) * z; // A1
r = (r * (x * y)) * z; // A2
r = r * ((x * y) * z); // A3
r = r * (x * (y * z)); // A4
r = (r * x) * (y * z); // A5

我们用每个元素的周期数 (CPE) 来表示函数的性能。如书中所述,此度量假设运行时间(以时钟周期为单位),长度为 n 的数组是 Cn + K 形式的函数,其中 C 是 CPE。

我们在 Intel Pentium III 上测量了该功能的五个版本。回想一下,这台机器上的整数乘法运算有 4 个周期的延迟和 1 个周期的发出时间。

下表显示了 CPE 的一些值,以及缺少的其他值。测量的 CPE 值是实际观察到的值。“理论 CPE”意味着如果唯一的限制因素是整数乘法器的延迟和发布时间,则可以实现的性能。

在此处输入图像描述

填写缺少的条目。对于测量的 CPE 的缺失值,您可以使用具有相同计算行为的其他版本的值。对于理论 CPE 的值,您可以仅考虑乘法器的延迟和发布时间来确定迭代所需的周期数,然后除以 3。

4

1 回答 1

1

在不了解 CPU 架构的情况下,我们只能猜测。

我的解释是时序图只显示了从收集操作数到写入结果的流水线的一部分,因为这与依赖解析相关。

现在,大的if:如果在依赖解析器和执行单元之间有一个缓冲阶段,则可以开始第一组 ( 3 ) 的第三次乘法和第二组 ( 4 )的第一次乘法偏移量 8。

由于3依赖于2,因此在这里使用不同的单元没有意义,因此3在2之后立即排队到单元 1 。下面的指令,4不依赖于先前的结果,因此可以排队到单元 2,并并行启动。

从理论上讲,这可能最早发生在第 6 周期,CPE 为 6/3。实际上,这取决于 CPU 设计。

于 2012-11-05T10:34:56.133 回答