数据并行Haskell中PArray和[::]之间有什么区别?

ger*_*ter 33 haskell data-parallel-haskell

我一直在对Data Parallel Haskell进行大量研究,发现了两种单独的并行数组类型.这种[::]类型似乎在研究论文中显得更多,似乎是理想的类型,但PArray似乎无处不在.关于该主题的Wiki页面清楚地表明,[::]无法将类型数组传递给非开发代码.为什么?为什么有这种中间PArray类型?这对我来说似乎完全是多余的.维基称之为"平面阵列",但矢量化的重点是使平行阵列平坦.

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

更新2:经过更多的研究,我发现教学是一个完整的混乱.维基页面在近一年内没有任何内容更新,与hackage文档相矛盾(参见Data.Array.Parallel.Prelude,它明确表示不会导入特殊的前奏),并且通常过时.该GHC Trac的页面也已经过时了,包括,例如,引导到提到包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.
Run Code Online (Sandbox Code Playgroud)

我猜想,当启用矢量化时,该模块会自动替换为使用展平变换的另一个表示.这甚至可能是这样的

type [::] = PArray
Run Code Online (Sandbox Code Playgroud)

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

JTN*_*JTN 1

参考这个:

http://hackage.haskell.org/packages/archive/dph-seq/0.5.1.1/doc/html/Data-Array-Parallel.html

  • 最好在您的答案中包含链接中有趣的部分 (2认同)