我一直在玩 Repa 和 Accelerate——它们都很有趣,但我不知道什么时候使用其中一个,什么时候使用另一个。他们是一起成长,是竞争对手,还是只是为了不同的问题?
1 回答
Repa 是一个用于高效数组构造和遍历的库,在 Haskell 中编程并在 Haskell 运行时中运行。Repa 依靠 GHC 的优化器和线程来提高性能。您可以将任意 Haskell 代码与 Repa 混合使用(Repa 函数,例如map
将 Haskell 函数作为参数)。
Accelerate 是一种用于 GPU 编程的嵌入式语言。Accelerate 依靠自己的编译器和 GPU 并行性来提高性能。使用 Accelerate 库的一段代码实际上并不进行数组计算。它生成一个 Accelerate 程序,该程序由 Accelerate 自己的编译器处理以生成实际处理您的数组数据的代码。
如果你想在 Haskell 中对 GPU 进行编程,Accelerate 是首选。如果您希望您的代码在 CPU 上运行,Repa 是您的最佳选择。Accelerate 不会生成多核代码。它的架构可以支持另一个目标,但据我所知,使用 Accelerator 支持 CPU 的动机很低,因为竞争更加激烈。
编辑:黑曜石和尼古拉是 GPU 编程的替代品。从对文档的简要调查来看,黑曜石的范围似乎更窄。它可以用(f >=> g >=> h)
. Nikola 的功能集似乎更接近 Accelerate 的。我没有经验来真正比较它们。