|
1
3
如果有一个闭式公式
就像在这种情况下,
所以如果我们有一个2元素的simd向量,从z0和z1开始,我们可以 每个 他们中的2个前进,得到z2和z3。
用
加/多因子因子将用于8个步骤。
通常人们使用
例如,Haswell或SandyBridge上的上述循环将以每8个周期一个向量的速度运行,在
(或者,如果使用一个fma而不是mul->add编译,则我们有5个周期延迟)。 回避串行依赖性不仅对SIMD有用,而且对于避免FP ADD/MUL(或FMA)延迟上的瓶颈也有用,这将进一步加快速度,达到FP ADD+MUL延迟与ADD+MUL吞吐量之比。
只需展开更多,并使用多个向量,例如
|
|
|
2
3
在输入信号是 Heaviside step function .您希望获得对该函数的筛选器响应,该函数称为 Step response . 在这种情况下,递归可以消除。首先,让我们展开递归几个步骤。
从上一个等式:
现在很容易以矢量化的形式重写它。
其中“'”表示矢量寄存器或单SIMD寄存器。现在可以很容易地将其转换为immintrin指令。请注意,现在您不能更改任何样本的输入值,而是有时更改四个样本的倍数。 此外,可以将两个或多个SIMD寄存器表示为一个向量,并进一步展开递归。这将提高性能,因为更好的管道利用率,但不要过度使用它,否则您将没有足够的寄存器。 |