我一直在玩 Repa 和 Accelerate - 它们都很有趣,但我不知道何时使用其中一个,何时使用另一个。他们是一起成长、是竞争对手,还是只是为了解决不同的问题?
Repa 是一个用于高效数组构建和遍历的库,用 Haskell 编程并在 Haskell 运行时运行。 Repa 依靠 GHC 的优化器和线程来提高性能。您可以将任意 Haskell 代码与 Repa 混合(Repa 函数,例如map
以 Haskell 函数作为参数)。
Accelerate 是一种用于 GPU 和多核 CPU 编程的嵌入式语言。 Accelerate 依靠自己的编译器和 GPU/CPU 并行性来提高性能。使用 Accelerate 库的一段代码实际上并不执行数组计算。它生成一个Accelerate程序,由Accelerate自己处理运行时编译器生成实际处理数组数据的代码。然而,在实践中,您不应该注意到底层步骤,只需导入库并CPU.run (A.map f xs)
– or GPU.run
。 API 方面类似于 Repa,您可以在其中computeP
来获取价值。一个更明显的区别是 Accelerate 函数的参数类型为Exp a
如果它们是标量,或者Acc a
如果他们是集体的,确保你坚持“仅涉及常规多维数组的平面数据并行性 http://www.acceleratehs.org/documentation/users-guide/language.html".
如果你想在 Haskell 中支持 GPU,Accelerate 是主要选择。如果您只需要代码在 CPU 上运行,Repa 和 Accelerate 都是不错的选择。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)