Похож на clojure will have a fork-join implementation, который выглядит как функциональная оболочка над каркасом вилок java.clojure pmap/preduce vs fork-join
Мне интересно, какая разница между ними и pmap/preduce?
Похож на clojure will have a fork-join implementation, который выглядит как функциональная оболочка над каркасом вилок java.clojure pmap/preduce vs fork-join
Мне интересно, какая разница между ними и pmap/preduce?
Вилка-соединение является более общей, чем последовательность /preduce
и должна обеспечивать более мелкозернистый контроль над параллелизмом. Точные API для этого все еще находятся в воздухе.
От взгляда на этот код их функциональность будет в основном одинаковой - единственная разница в том, что pmap
использует фьючерсы, запущенные в Agent threadpool, в качестве базового примитива, в то время как pvmap
использует fork-join.
Я не в состоянии сказать точно, но я ожидал бы, что то, что лучше работает в общем случае, станет стандартной реализацией для pmap
, если не будет достаточно значительных компромиссов, чтобы сделать их стоящими.
Он также выглядит (на данный момент, по крайней мере) каркас fork-join поддерживает только векторы, поэтому он не является полу-ленивым, как pmap
.
Одно из отличий, насколько я понимаю, заключается в том, что pmap
будет работать только в той степени, в какой он «подавленности». Функция отображается над каждым членом последовательности, указанной в pmap
. Если зернистость слишком мала, потенциальные преимущества параллелизма проглатываются из-за создания и управления слишком большим количеством Future
.
Вилка-соединение позволяет краже работы, так что количество запусков на каждой нити может быть адаптивным.
Ни PMAP, ни pvmap не избавит нас от необходимости использовать правильный размер блока. Для моих проектов, которые обычно означают разбиение данных на куски и использование карты на каждом фрагменте, затем используйте pmap для сопоставления кусков параллельно. затем уменьшить и сгладить.
Эти слайды содержат некоторые диаграммы, показывающие сравнение между двумя подходами: http://data-sorcery.org/2010/10/23/clojureconj/
Это собирается быть темой разговора на Clojure-CONJ конференции: http://clojure-conj.org/speakers#liebke David liebke теперь активно работает над этим для следующей версии clojure –
@Alex, этот абстрактный вопрос подсказывает этот вопрос :). – Surya
Рассматривается ли какая-либо мысль стратегии реализации fork-join на ClojureCLR или, как правило, для поддержки API fork-join дружественна альтернативным реализациям? –