Почему это не быстрее при использовании параллельных коллекций? - PullRequest
7 голосов
/ 27 мая 2011

Я просто хотел немного протестировать параллельные коллекции и использовал следующую строку кода (в REPL):

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

против:

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

Но параллельная версияне быстрееНа самом деле, это даже немного медленнее (но я на самом деле не измерял это).

У кого-нибудь есть объяснение этому?

Редактировать 1: Да, у меня есть многоядерныйпроцессор

Редактировать 2: ОК, я "решил" проблему сам.Реализация isProbablePrime кажется проблемой, а не параллельными коллекциями.Я заменил isProbablePrime другой функцией для проверки на простоту, и теперь я получаю ожидаемое ускорение.

1 Ответ

6 голосов
/ 27 мая 2011

Как с последовательным, так и с параллельным диапазонами, filter создаст векторную структуру данных - Vector или ParVector соответственно.

Это известная проблема с параллельными векторами, которые генерируются изколлекции диапазонов - методы преобразования (такие как filter) для параллельных векторов не создают вектор параллельно.

Решение для этого, которое позволяет эффективное параллельное построение векторов, уже было разработано, но еще не было реализовано,Я предлагаю вам подать тикет , чтобы его можно было исправить в следующем выпуске.

...