我只想稍微测试并行集合,并使用以下代码行(在REPL中):
(1 to 100000).par.filter(BigInt(_).isProbablePrime(100))
针对:
(1 to 100000).filter(BigInt(_).isProbablePrime(100))
但并行版本并不快。事实上,它甚至感觉有点慢(但我还没有真正测量过)。
有没有人对此作出解释?
编辑1:是的,我确实有一个多核处理器
编辑2:好的,我自己“解决”了这个问题。 isProbablePrime
的实现似乎是问题,而不是并行集合。我用另一个函数替换了isProbablePrime
以测试素数,现在我得到了预期的加速。
答案 0 :(得分:6)
对于顺序和并行范围,filter
将生成矢量数据结构 - 分别为Vector
或ParVector
。
这是从范围集合生成的并行向量的已知问题 - 并行向量的变换器方法(例如filter
)不会并行构造向量。
已经开发出一种允许有效并行构建载体的解决方案,但尚未实施。我建议您提交ticket,以便下次发布时可以修复。