为什么没有代表数组的地图?

2024-04-18

背景

我在用repa更多的是作为一种“管理”工具。我路过reactive-bananas AddHandlers in an Array: Array D DIM2 (AddHandler Bool).

目前我正在使用这个拼凑:

mapMArray :: (Monad m, R.Source r a, R.Shape sh)  => (a -> m b) -> Array r sh a -> m (Array D sh b)
mapMArray f a = do
    l <- mapM f . R.toList $ a
    return $ R.fromFunction sh (\i -> l !! R.toIndex sh i)
  where sh = R.extent a

所以我可以做这样的事情:

makeNetworkDesc :: Frameworks t => Array D DIM2 (AddHandler Bool) -> Moment t ()
makeNetworkDesc events = do

    -- inputs
    aes <- mapMArray fromAddHandler events

    -- outputs
    _ <- mapMArray (reactimate . (print <$>)) aes

Question

是否有原因不包括在内repa?


基本上出于同样的原因,没有什么比parMapM在平行下 http://hackage.haskell.org/package/parallel-2.2.0.1: mapM and mapM_(或一般的一元行动)destroy并行性。这是一个简单的例子:

next :: State Int Int
next = modify (+1) >> get

现在,假设repaMapM需要对所有步骤进行排序Statemonad,如果有人会使用repaMapM (const next)。由于这显然违背了并行性(并且还可能导致性能低下),因此它不是修复的一部分。毕竟,高性能和并行性就在 repa 的描述中(强调我的):

雷帕提供高性能,规则的,多维的,形状多态的parallel arrays.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么没有代表数组的地图? 的相关文章

随机推荐