1

我想问一些关于 OpenCL 编程的问题。我知道四分之一的波前可以为每个周期时钟发出指令,并且需要四个周期时钟来调用波前。要完成 VLIW 架构中的指令,需要 8 个周期的时钟。因此,调用另一个波前是一种解决方案。如果我调用两个波前,那么它将是八个周期时钟。因此,在波前 A 被执行(4 个周期时钟)之后,波前 B 被执行(另一个 4 个周期时钟)。波前 B 执行完毕后(总周期时钟为 8),波前 A 将用另一条指令再次执行。

问题是:

如果每个处理单元的四个 ALU 已经用于执行另一条指令,ALU 如何执行另一条指令?

例如:在循环 1 中,工作项 0-15 开始执行指令“ADD”。每个处理单元中的第一个 ALU(SIMD/计算单元中总共 16 个 PE)计算“ADD”指令。
它发生在波前的第 2、3 和 4 周期(现在每个 PE 中有 4 个 ALU 忙于执行“ADD”指令)在第 5 周期,波前 2 的四分之一开始执行指令“SUBTRACT”。处理元件中的 ALU 如何计算指令,因为它们忙于从第一个波前计算“ADD”指令(请记住,在第一个周期中四分之一波前的指令“ADD”执行未完成,因为它需要 8 个周期时钟)?

更新:8个周期时钟意味着写入后读取的延迟

4

1 回答 1

1

正如您所说,处理波前需要 4 个时钟周期。该指令的结果被发送到寄存器,但由于写入后读取延迟,这些结果将仅在 8 个时钟周期后可用。这里的重要区别是 ALU 在 4 个周期内完成了它们的工作,因此它们可以继续处理其他指令。寄存器存储器需要 8 个周期来完成其工作,即存储新数据并使其再次可见。

作为所有类型的内存访问(包括寄存器)的一般说明:内存访问的处理方式与普通算术不同,ALU 可以在等待内存访问完成时继续执行不依赖于内存访问结果的指令。

于 2013-12-28T11:48:15.777 回答