我需要实现前缀和算法,并且需要它尽可能快.例如:
[3, 1, 7, 0, 4, 1, 6, 3]
Run Code Online (Sandbox Code Playgroud)
有没有办法使用SSE/mmx/SIMD cpu指令执行此操作?
我的第一个想法是递归并行地对每一对求和,直到所有的总和都计算如下!
[3, 4, 11, 11, 15, 16, 22, 25]
Run Code Online (Sandbox Code Playgroud)
为了使算法更清晰,"z"不是最终的输出
而是用来计算输出
//in parallel do
for (int i = 0; i < z.length; i++) {
z[i] = x[i << 1] + x[(i << 1) + 1];
}
Run Code Online (Sandbox Code Playgroud)