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

Mar*_*ton 16 haskell repa

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

Hea*_*ink 14

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

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

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

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

  • 单挑,加速现在支持多核CPU:https://github.com/AccelerateHS/accelerate#additional-components (3认同)