7

並列コレクションを少しテストしたかったので、次のコード行を (REPL で) 使用しました。

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

に対して:

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

ただし、並列バージョンは高速ではありません。実際、それは少し遅くさえ感じます (しかし、私は実際にそれを測定していません)。

誰かがそれについて説明していますか?

編集 1: はい、マルチコア プロセッサを使用しています

編集 2: OK、私は自分で問題を「解決」しました。の実装がisProbablePrime問題であり、並列コレクションではないようです。素数性をテストする別の関数に置き換えisProbablePrimeたところ、期待どおりのスピードアップが得られました。

4

1 に答える 1

6

順次範囲と並列範囲の両方でfilter、ベクトルデータ構造(それぞれaVectorまたはa )が生成されParVectorます。

これは、範囲コレクションから生成される並列ベクトルの既知の問題です。並列ベクトルのトランスフォーマーメソッド(などfilter)は、ベクトルを並列に構築しません。

ベクトルの効率的な並列構築を可能にするこのソリューションはすでに開発されていますが、まだ実装されていません。次のリリースで修正できるように、チケットを提出することをお勧めします。

于 2011-05-26T21:49:59.770 に答える