Ser*_*tch 2 c++ performance simd vectorization avx2
考虑以下代码,其中a是一个参数数组,float并且s是一个最初未初始化的结果数组float:
s[n - 1] = mu * a[n - 1];
for (int j = n - 2; j >= 0; j--)
s[j] = mu * (a[j] + s[j + 1]);
return s;
Run Code Online (Sandbox Code Playgroud)
有没有机会用SIMD(AVX2)改善这种重复代码的性能?
编辑:我后来发现这个公式/算法被称为"折扣金额",但无法在互联网上找到它的并行版本.
相关:是否可以在计算中对串行依赖关系使用SIMD,如指数移动平均滤波器? - 如果有一个封闭形式的公式,可以提前n步,你可以用它来回避串行依赖.但我认为这不是这种情况.
这看起来像串行依赖的前缀和类型,在垂直添加之上a[j].有很多方法可以加速,加快速度
O( SIMD_width / log(SIMD_width) ).