Как выбрать между parList и parBuffer? - PullRequest
8 голосов
/ 18 марта 2011

Я начинаю с параллелизма haskell, я успешно научился использовать некоторые стратегии, такие как: r0, rseq, rdeepseq, parList, parMap. Теперь я смотрю дальше для большей эффективности. Итак, вот мой вопрос: в чем разница между parList и parBuffer? В каких случаях каждая стратегия эффективна?

1 Ответ

7 голосов
/ 18 марта 2011

В статье упоминаются оба этих комбинатора ( ссылка здесь ).

parList оценивает все элементы параллельно, отключая их все сразу. Я хотел бы предположить, что это полезно, когда вы хотите использовать весь список сразу, например, в случае сгибания карты. Если вы хотите оценить группу чисел, то суммируйте их, используйте parList для оценки, затем выполните суммирование.

parBuffer оценивает первые n элементов, а когда вы потребляете сверх этого, он устанавливает следующие n и так далее. Так что parBuffer имеет смысл, когда вы собираетесь использовать список по частям, начиная с начала - или когда список очень большой (или бесконечный), и вы не будете оценивать все это. Например, если вы хотите найти первые 10 ответов из некоторого списка дорогих для вычисления элементов, вы можете использовать take 10 . filter f с parBuffer для параллельной оценки последовательных фрагментов из списка, пока не найдете первые десять предметы, которые вы ищете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...