gpt4 book ai didi

haskell - 在 Haskell 中使用 parBuffer 时如何确定要使用的缓冲区大小

转载 作者:行者123 更新时间:2023-12-02 03:23:30 25 4
gpt4 key购买 nike

documentaion对于 parBuffer

parBuffer :: Int -> Strategy a -> Strategy [a]
Like evalBuffer but evaluates the list elements in parallel when pushing them into the buffer."

evalBuffer :: Int -> Strategy a -> Strategy [a]
evalBuffer is a rolling buffer strategy combinator for (lazy) lists. evalBuffer is not as compositional as the type suggests. In fact, it evaluates list elements at least to weak head normal form, disregarding a strategy argument r0."

我问题的第一部分是这是否意味着 parBuffer也无视其战略论点?另外,如果它只是忽略它,为什么还要提供一个 Strategy 参数?

我的问题的第二部分是如何确定要与 parBuffer 一起使用的缓冲区大小?如果parBuffer始终保持缓冲区大小为 n , n=1 之间有什么区别?和 n=10除了更多的 Spark 必须留在内存中?我在想选择 n=<number of threads>" 可能是明智的但我不知道这会如何改善因为parBuffer无论是否n=1,只要 Spark 被消耗,仍会产生 Spark 或 n=4 .

最佳答案

第一个答案:parBuffer 采用Strategy 来评估列表的一个元素,并返回一个Strategy 用于评估整个列表。所以是的,它并行评估列表。但它仍然需要知道如何评估每个项目。 (您想要范式还是弱头范式还是...?)所以它不会忽略第一个参数。

其次... Benchmark呢?我怀疑答案取决于每个 Spark 的确切工作量、您拥有多少数据依赖性等。

关于haskell - 在 Haskell 中使用 parBuffer 时如何确定要使用的缓冲区大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31638491/

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