加速和修复有不同的用例吗?

时间:2011-06-07 03:12:04

标签: haskell repa

我一直在玩修复和加速 - 他们都很有趣,但是当我使用一个而另一个时,我无法解决问题。他们是在一起成长,竞争对手,还是只针对不同的问题?

1 个答案:

答案 0 :(得分:14)

Repa是一个用于高效数组构造和遍历的库,在Haskell中编程并在Haskell运行时中运行。 Repa依靠GHC的优化器和线程来提高性能。您可以将任意Haskell代码与Repa混合使用(诸如map之类的修复函数将Haskell函数作为参数)。

Accelerate是GPU编程的嵌入式语言。 Accelerate依靠自己的编译器和GPU并行性来提高性能。使用Accelerate库的一段代码实际上并不进行数组计算。它生成一个Accelerate程序,由Accelerate自己的编译器处理,以生成实际处理数组数据的代码。

如果要在Haskell中编程GPU,则Accelerate是主要选项。如果您希望代码在CPU上运行,则可以使用Repa。 Accelerate不会生成多核代码。它的架构可以支持另一个目标,但据我所知,使用Accelerator支持CPU的动机很低,因为竞争更加激烈。

编辑:Obsidian和Nikola是GPU编程的替代品。从对文件的简要调查来看,黑曜石的范围似乎较窄;它可以以(f >=> g >=> h)的形式表达管道。 Nikola的功能集似乎更接近Accelerate。我没有真正比较它们的经验。