- 如下:外层正常循环,里面套了一层rayon,rayon执行时间为40ms
for i in 0..10{
...
//40ms
par.iter{
}
...
}
- 把1中的外层循环也改成rayon,但这时里层的rayon运算速度变慢了,为178ms,请问这是为什么?
let x = (0..10).collect::<Vec<_>>();
x.par.iter().map(||{
....
//178 ms
par.iter{
}
...
});
1
共 4 条评论, 1 页
评论区
写评论赞, 好代码! 👍
--
👇
Pikachu: 有几个细节问题想要确认一下:
我的怀疑是,当你的外层循环已经并行的时候,thread pool里面所有的线程都被占用了。这时候内层循环就没办法并行了,所以你的第二段代码测出来的可能是单线程执行的耗时+rayon的overhead。
具体细节我之后自己测一下试试看。
非常感谢大佬!!!这个例子解释的非常好,如果CPU支持的线程数再大一点,那么理论上Both loop parallelization的Outer time应该在10ms左右。
--
👇
Pikachu: rust playground
Result:
rust playground
Result:
有几个细节问题想要确认一下:
我的怀疑是,当你的外层循环已经并行的时候,thread pool里面所有的线程都被占用了。这时候内层循环就没办法并行了,所以你的第二段代码测出来的可能是单线程执行的耗时+rayon的overhead。
具体细节我之后自己测一下试试看。