Parallel processing 如何对并行代码进行基准测试?

Parallel processing 如何对并行代码进行基准测试?,parallel-processing,rust,benchmarking,rust-cargo,Parallel Processing,Rust,Benchmarking,Rust Cargo,我有一些代码,我使用人造丝并行化,希望提高它的性能,但由长凳测量的结果是。。。最不起眼的。我怀疑这可能是由于我执行基准测试的方式造成的(也许它们是并行运行的?),所以我测试了一个更简单的案例 考虑以下基于以下参数的并行化代码: 顺序代码(外部板条箱快速分拣)的结果如下: 我还尝试使用更长的向量进行基准测试,但结果是一致的。此外,我使用GNU时间执行了一些测试,看起来并行代码速度更快,向量更大,正如预期的那样 我做错了什么?我可以使用Bencher对并行代码进行基准测试吗?在测试中使用的数组非常小

我有一些代码,我使用
人造丝
并行化,希望提高它的性能,但由
长凳
测量的结果是。。。最不起眼的。我怀疑这可能是由于我执行基准测试的方式造成的(也许它们是并行运行的?),所以我测试了一个更简单的案例

考虑以下基于以下参数的并行化代码:

顺序代码(
外部板条箱快速分拣
)的结果如下:

我还尝试使用更长的向量进行基准测试,但结果是一致的。此外,我使用GNU时间执行了一些测试,看起来并行代码速度更快,向量更大,正如预期的那样


我做错了什么?我可以使用
Bencher
对并行代码进行基准测试吗?

在测试中使用的数组非常小,因此在这种情况下,并行代码的速度确实较慢

并行启动任务会有一些开销,当不同线程访问同一缓存线上的内存时,内存访问速度会变慢

对于迭代器来说,为了避免在微小数组上的开销,有很多方法,但是对于
join
来说,您可能需要自己实现并行/非并行决策


使用100倍大的阵列:

with rayon:            3,468,891 ns/iter (+/- 95,859)
without rayon:         4,227,220 ns/iter (+/- 635,260)
rayon if len > 1000:   3,166,570 ns/iter (+/- 66,329)
此任务的加速相对较小,因为内存有限(没有复杂的计算可并行化)。

OP状态:我也尝试使用较长的向量进行基准测试,但结果是一致的-您能否提供更多细节或事实,说明您认为OP不正确的原因?
running 1 test
test bench_qsort ... bench:       1,070 ns/iter (+/- 65)
with rayon:            3,468,891 ns/iter (+/- 95,859)
without rayon:         4,227,220 ns/iter (+/- 635,260)
rayon if len > 1000:   3,166,570 ns/iter (+/- 66,329)