是否可以将 Rayon 和 Faster 结合起来?

Is it possible to combine Rayon and Faster?

Rayon looks great for algorithm parallelization of collections, and Faster 非常适合在 x86 平台上对 Vec<f32> 等集合进行矢量化 (SIMD)。我试图将它们结合起来,但迭代器似乎彼此不喜欢。有没有办法将这两个库用于可以同时受益于矢量化和并行化的算法?就像 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>>();

您可以只使用 Rayon 的 par_chunks 并使用 Faster 处理每个块。

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