ALU如何在AMD GPU(VLIW)中执行指令?

时间:2013-12-27 02:10:18

标签: opencl alu vliw

我想问一些关于OpenCL编程的事情。 据我所知,四分之一波前可以为每个周期时钟发出指令,并且需要四个周期时钟来调用波前。 要完成VLIW架构中的指令,需要8个周期时钟。 因此,调用另一个wavefront是一种解决方案。如果我再打两个波前 它将是八个周期时钟。因此,在执行波前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周期时钟表示写入后读取的延迟

1 个答案:

答案 0 :(得分:1)

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

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