高通 Hexagon V65 HVX 编程参考手册(6)
4.6 指令延迟
延迟是定义的实现,可以随着未来的版本而改变。
HVX数据包在多个时钟周期中执行,但通常以管道的方式执行,以便可以在每个上下文周期上发布和完成一个数据包。上下文通过时间交错来共享硬件,这样可能需要使用所有上下文才能达到峰值计算带宽。
除了少数例外(即直方图和提取),所有数据包的所有结果都将在执行开始后的固定时间内生成。但是,当需要这些来源时,情况是不同的。需要更多管道化的指令需要早期的来源。只有HVX寄存器是早期源寄存器。早期源操作数包括:
- 输入到倍增器。例如“V3.h=vmpyh(V2.h,V4.h)”。V2和V4是乘数输入。对于带有累积的乘法指令,累加器不被认为是一个早期的源乘法器输入。
- 输入到移位/位计数指令。只有正在移位或计数的寄存器才被认为是早期源。积累器并不是早期的资料来源。用
- 的输入来排列指令。只有正在排列的寄存器才被认为是早期源(而不是累积器)。
- 未对齐的存储数据是一个早期的来源。
如果在前一个向量包中产生了早期源寄存器,则可能会产生联锁停滞。软件应该努力在生产者和早期源消费者之间安排一个干预数据包。
下面的示例显示了各种联锁情况:
V8 = VADD(V0,V0)
V0 = VADD(V8,V9) // NO STALL
V1 = VMPY(V0,R0) // STALL due to V0
V2 = VSUB(V2,V1) // NO STALL on V1
V5:4 = VUNPACK(V2) // STALL due to V2
V2 = VADD(V0,V4) // NO STALL on V4
4.7 插槽、资源、延迟汇总
表4-6总结了所有HVX指令类型的六边形插槽、HVX资源和延迟要求。
表4-6 HVX插槽/资源/延迟汇总