我了解数字信号处理器由多个 MAD(乘加单元)组成,它们并行执行以实现差分方程,如下所示:
和这个;
我的问题是,在编写多核 CPU/GPU 和 FPGA 时,我是否需要小心同步?如果不是为什么?
我了解数字信号处理器由多个 MAD(乘加单元)组成,它们并行执行以实现差分方程,如下所示:
和这个;
我的问题是,在编写多核 CPU/GPU 和 FPGA 时,我是否需要小心同步?如果不是为什么?
很难对这样的问题给出一个通用的答案,因为 CPU 架构,尤其是那些专门用于信号处理应用的架构,都是不同的。在大多数情况下,您不必担心支持并行执行某些指令组合的处理器上的执行单元同步。为了实现这种并行性,通常必须满足一些标准,例如:
指令间依赖性(或数据危险),其中一条指令的输出是后续指令的输入,如果前一条指令的延迟过大,可能会导致流水线停顿。
通常,您需要确保将输入数据存储在足够快以支持并行执行的内存中。例如,在 TI C5000 架构上,有两种内部 RAM:DARAM(双存取 RAM)和 SARAM(单存取 RAM)。为了充分利用处理器上的双 MAC 单元,您的输入数据必须在 DARAM 中,否则内存接口的速度将不足以为执行单元提供数据。
如果您满足这些特定于处理器的约束,那么通常,处理器的流水线逻辑足够智能,可以知道这一点并自动将指令转发到适当的执行单元,从而使流程对您透明。在更复杂的架构上,它可能比这更复杂:我似乎记得一些 TI C6000 DSP,例如,具有较少保护的流水线,因此通过错误地订购指令,您可能会得到不希望的操作(无论是降低性能还是不正确的答案,我不记得了)。
这在很大程度上取决于处理器。您作为示例列出的差分方程是 IIR 滤波器。这里当前采样时间的结果取决于前一个采样时间的结果。这确实不能很好地并行化,因此多个乘加单元并不是很有用。这对于 FIR 滤波器是不同的,其中每个滤波器系数都可以在单独的乘法器上运行。