我一直在玩Repa和Accelerate-它们都很有趣,但是当我使用一个和另一个时我无法解决。他们是在共同成长,是竞争对手,还是只是为了解决不同的问题?
最佳答案
Repa是一个用于高效数组构造和遍历的库,在Haskell中进行编程并在Haskell运行时中运行。 Repa依靠GHC的优化器和线程来提高性能。您可以将任意Haskell代码与Repa混合使用(Repa函数(例如map
)将Haskell函数作为参数)。
Accelerate是用于GPU编程的嵌入式语言。 Accelerate依靠自己的编译器和GPU并行性来提高性能。使用Accelerate库的一段代码实际上并不执行数组计算。它生成一个Accelerate程序,由Accelerate自己的编译器处理该程序,以生成实际处理数组数据的代码。
如果要在Haskell中对GPU进行编程,则“加速”是主要选择。如果您希望代码在CPU上运行,那么Repa是您的最佳选择。 Accelerate不会生成多核代码。它的构建方式可以支持其他目标,但是据我所知,使用Accelerator支持CPU的动机很低,因为竞争更加激烈。
编辑: Obsidian和Nikola是GPU编程的替代方法。从对文档的简短调查来看,黑曜石的范围似乎更窄。它可以使用(f >=> g >=> h)
形式表示管道。 Nikola的功能集似乎更接近Accelerate的功能集。我没有经验可以真正比较它们。
关于haskell - Accelerate和Repa有不同的用例吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6260263/