为什么使用并行集合不会更快?

时间:2011-05-26 21:01:51

标签: scala scala-2.9 parallel-collections

我只想稍微测试并行集合,并使用以下代码行(在REPL中):

(1 to 100000).par.filter(BigInt(_).isProbablePrime(100))

针对:

(1 to 100000).filter(BigInt(_).isProbablePrime(100))

但并行版本并不快。事实上,它甚至感觉有点慢(但我还没有真正测量过)。

有没有人对此作出解释?

编辑1:是的,我确实有一个多核处理器

编辑2:好的,我自己“解决”了这个问题。 isProbablePrime的实现似乎是问题,而不是并行集合。我用另一个函数替换了isProbablePrime以测试素数,现在我得到了预期的加速。

1 个答案:

答案 0 :(得分:6)

对于顺序和并行范围,filter将生成矢量数据结构 - 分别为VectorParVector

这是从范围集合生成的并行向量的已知问题 - 并行向量的变换器方法(例如filter)不会并行构造向量。

已经开发出一种允许有效并行构建载体的解决方案,但尚未实施。我建议您提交ticket,以便下次发布时可以修复。