7

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

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

反对:

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

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

有人对此有解释吗?

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

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

4

1 回答 1

6

无论是顺序范围还是并行范围,filter都将生成一个向量数据结构——分别是 aVector或 a ParVector

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

已经开发了一种允许有效并行构建向量的解决方案,但尚未实施。我建议你提交一张,以便在下一个版本中修复它。

于 2011-05-26T21:49:59.770 回答