Rayon 和 Faster 可以结合使用吗?

Sta*_*kop 6 parallel-processing simd rust rayon

Rayon非常适合集合的算法并行化,而Faster非常适合 x86 平台上的矢量化 (SIMD),例如Vec<f32>. 我试图将它们结合起来,迭代器似乎并不喜欢彼此。有没有办法将这两个库用于可以从向量化和并行化中受益的算法?像 Faster 示例中的这个:

let lots_of_3s = (&[-123.456f32; 128][..]).iter()
    .map(|v| {
        9.0 * v.abs().sqrt().sqrt().recip().ceil().sqrt() - 4.0 - 2.0
    })
    .collect::<Vec<f32>>();
Run Code Online (Sandbox Code Playgroud)

And*_*org 4

\n\n

你可以只使用 Rayon\xe2\x80\x99spar_chunks并使用 Faster 处理每个块。

\n\n
let lots_of_3s = (&[-123.456f32; 1000000][..])\n    .par_chunks(128)\n    .flat_map(|chunk| {\n        chunk\n            .simd_iter(f32s(0.0))\n            .simd_map(|v| {\n                f32s(9.0) * v.abs().sqrt().rsqrt().ceil().sqrt() - f32s(4.0) - f32s(2.0)\n            })\n            .scalar_collect()\n    })\n    .collect::<Vec<f32>>();\n
Run Code Online (Sandbox Code Playgroud)\n