gpt4 book ai didi

haskell - Data Parallel Haskell 中的 PArray 和 [::] 有什么区别?

转载 作者:行者123 更新时间:2023-12-03 08:42:45 24 4
gpt4 key购买 nike

我一直在对 Data Parallel Haskell 进行大量研究,并发现了两种单独的并行数组类型。 [::] type 似乎更多地出现在研究论文中,似乎是理想的类型,但是 PArray似乎无处不在。关于该主题的 wiki 页面清楚地表明 [::] 类型的数组不能传递给未矢量化的代码。为什么?为什么会有这个中间PArray类型?这对我来说似乎完全是多余的。 wiki 将其称为“平面数组”,但矢量化的全部意义在于使并行数组平面化。

更新:在阅读了更多论文、文档和源代码后,我更加困惑。 [::]或其同义词 PArr似乎在 GHC.PArr 中实现作为一个平面数组,而 PArray ,在多个地方称为“扁平”的中间类型,在 Data.Array.Parallel.PArray.Base 中实现以及从那里作为数据系列导入的其他模块,使用我阅读的许多论文中描述的扁平化转换。为什么平面阵列不平坦而嵌套阵列不平坦?

更新2:经过更多研究,我发现文档完全是一团糟。维基页面hasn't had any content updates在将近一年的时间里,与 hackage 文档相矛盾(参见 Data.Array.Parallel.Prelude,其中明确表示不要导入特殊前奏),并且通常已经过时。 GHC Trac page也已过时,例如,包括 DPH 软件包指南,其中提到了至少就 Hackage 而言(我没有,也不太可能在其他地方查看),不存在,也没有提到像 dph-lifted-vseg 这样的包。

更好的是,我相信我现在理解了第一次更新的答案,GHC.PArr 中的这部分评论暗示了这一点。 :

-- BIG UGLY HACK: The desugarer special cases this module.  Despite the uses of '-XParallelArrays',
-- the desugarer does not load 'Data.Array.Parallel' into its global state. (Hence,
-- the present module may not use any other piece of '-XParallelArray' syntax.)
--
-- This will be cleaned up when we change the internal represention of '[::]' to not
-- rely on a wired-in type constructor.

我的猜测是,启用矢量化后,该模块会自动替换为使用扁平化转换的另一种表示形式。这甚至可能类似于
type [::] = PArray

,解决了我原来的问题。然而,后一点不仅没有多大意义(为什么在矢量化关闭时将 [::] 限制为平面数组类型?),而且除了上述评论之外,我没有发现任何证据支持这两种理论。似乎学习任何东西的唯一可靠方法是查看 GHC 源,考虑到它的大小和复杂性,这是我渴望做的事情,即使我确信我会成功。

最佳答案

关于haskell - Data Parallel Haskell 中的 PArray 和 [::] 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11103707/

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