haskell - Accelerate 和 Repa 有不同的用例吗?

标签 haskell repa

我一直在玩 Repa 和 Accelerate——它们都很有趣,但我不知道什么时候使用其中一个,什么时候使用另一个。他们是一起成长,是竞争对手,还是只是为了不同的问题?

最佳答案

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 的动机很低,因为竞争更加激烈。

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

关于haskell - Accelerate 和 Repa 有不同的用例吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6260263/

相关文章:

linux - 编译以下快速排序示例时如何修复 'parse error on input ‘=’'?

arrays - 如何使用 Repa 在一定范围内获取数组切片

haskell - 使用 Haskell repa 数组库进行彩色图像文件 IO

performance - Haskell Repa 模板技巧

haskell - 是否有一种灵活的方法来指定 Haskell 类型系列的返回类型?

haskell - 我的二叉搜索树成员资格功能测试有什么问题?

haskell - 如何推断 monadT 堆栈中函数的执行顺序?

list - 为什么我要使用 Maybe 而不是 List?

haskell - (->) 是否有数据构造函数?

haskell - Monadic QuickCheck 测试不适用于任意 Repa 阵列