gpt4 book ai didi

haskell - Haskell 中的并行映射

转载 作者:行者123 更新时间:2023-12-02 02:32:57 24 4
gpt4 key购买 nike

是否有一些可以并行评估列表的 map 替代品?我不需要它来偷懒。

类似于:pmap::(a -> b) -> [a] -> [b] 让我 pmapexpense_function big_list 并拥有我的所有核心100%。

最佳答案

是的,请参阅parallel package :

ls `using` parList rdeepseq

将通过rdeepseq策略并行评估列表中的每个元素。请注意,如果您的元素太便宜而无法获得并行评估每个元素的好处(因为它节省了每个元素的 Spark ),则使用具有良好 block 值的 parListChunk 可能会提供更好的性能。

编辑:根据你的问题,我觉得我应该解释为什么这是一个答案。这是因为 Haskell 很懒!考虑一下这个声明

let bs = map expensiveFunction as

尚未评估任何内容。您刚刚创建了一个映射 expenseFunction 的 thunk。那么我们如何并行评估它呢?

let bs = map expensiveFunction as
cs = bs `using` parList rdeepseq

现在,在以后的计算中不要使用 bs 列表,而是使用 cs 列表。 IOW,您不需要并行映射,您可以使用常规(惰性)映射和并行评估策略。

编辑:如果你环顾四周,你会看到 parMap函数执行我在此展示的操作,但包装在一个辅助函数中。

针对您的评论,以下代码对您不起作用吗?它对我有用。

import Control.Parallel.Strategies

func as =
let bs = map (+1) as
cs = bs `using` parList rdeepseq
in cs

关于haskell - Haskell 中的并行映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5606165/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com