Accelerate

Hacker News Top 工具

摘要

Accelerate 是 Haskell 中用于高性能并行数组计算的嵌入式领域特定语言,支持在线编译到多核 CPU 和 CUDA GPU。

暂无内容
查看原文
查看缓存全文

缓存时间: 2026/05/16 15:40

AccelerateHS/accelerate

源: https://github.com/AccelerateHS/accelerate

高性能并行数组 for Haskell

CI (https://github.com/tmcdonell/accelerate/actions/workflows/ci.yml)
Gitter (https://gitter.im/AccelerateHS/Lobby)
Hackage (https://hackage.haskell.org/package/accelerate)
Stackage LTS (https://stackage.org/lts/package/accelerate)
Stackage Nightly (https://stackage.org/nightly/package/accelerate)

Data.Array.Accelerate 定义了一种用于Haskell高性能计算的嵌入式数组计算语言。多维规则数组的计算以参数化集合操作(如 map、reduce 和 permutation)的形式表达。这些计算会在运行时被编译并在多种架构上执行。

更多细节请参见我们的论文:

此外还有一些关于 Accelerate 的演示文稿幻灯片:

Simon Marlow 的《Parallel and Concurrent Programming in Haskell》Mar13 第6章包含对 Accelerate 的入门教程。
Trevor 的博士论文 详细介绍了前端优化和 CUDA 后端的设计与实现。

目录

简单示例

一个简单的例子:计算两个单精度浮点数向量的点积:

dotp :: Acc (Vector Float) -> Acc (Vector Float) -> Acc (Scalar Float)
dotp xs ys = fold (+) 0 (zipWith (*) xs ys)

除了类型,这段代码几乎与对应的 Haskell 列表版本相同。类型表明该计算可能会被实时编译以优化性能;例如,使用 Data.Array.Accelerate.LLVM.PTX.run 可以将其即时卸载到 GPU 上运行。

可用性

Accelerate 包可从以下位置获得:

  • Hackage: accelerate - 只需将其添加到你的 cabal 文件中
  • GitHub: AccelerateHS/accelerate - 使用 git clone https://github.com/AccelerateHS/accelerate.git 获取源代码

要安装 Haskell 工具链,可以尝试 GHCup (https://www.haskell.org/ghcup/)。

附加组件

以下受支持的附加组件作为独立包提供:

  • accelerate-llvm-native:面向多核 CPU 的后端
  • accelerate-llvm-ptx:面向支持 CUDA 的 NVIDIA GPU 的后端。需要计算能力 3.0 或更高的 GPU(参见 维基百科表格
  • accelerate-examples:展示 Accelerate 使用的计算内核和应用程序,以及回归测试套件(支持功能和性能测试)
  • 多种格式之间的转换:
    • accelerate-io (https://hackage.haskell.org/package/accelerate-io):在原始指针之间直接复制数据
    • accelerate-io-array (https://hackage.haskell.org/package/accelerate-io-array):不可变数组
    • accelerate-io-bmp (https://hackage.haskell.org/package/accelerate-io-bmp):未压缩的 BMP 图像文件
    • accelerate-io-bytestring (https://hackage.haskell.org/package/accelerate-io-bytestring):紧凑的不可变二进制数据
    • accelerate-io-cereal (https://hackage.haskell.org/package/accelerate-io-cereal):使用 cereal (https://hackage.haskell.org/package/cereal) 进行二进制序列化
    • accelerate-io-JuicyPixels (https://hackage.haskell.org/package/accelerate-io-JuicyPixels):各种像素格式的图像
    • accelerate-io-repa (https://hackage.haskell.org/package/accelerate-io-repa):另一个用于高性能并行数组的 Haskell 库
    • accelerate-io-serialise (https://hackage.haskell.org/package/accelerate-io-serialise):使用 serialise (https://hackage.haskell.org/package/serialise) 进行二进制序列化
    • accelerate-io-vector (https://hackage.haskell.org/package/accelerate-io-vector):高效盒装和拆箱的一维数组
  • accelerate-fft:快速傅里叶变换实现,带有 FFI 绑定到优化实现
  • accelerate-blas:BLAS 和 LAPACK 操作,带有 FFI 绑定到优化实现
  • accelerate-bignum:固定宽度大整数算术
  • colour-accelerate:Accelerate 中的颜色表示(RGB、sRGB、HSV 和 HSL)
  • containers-accelerate (http://hackage.haskell.org/package/containers-accelerate):基于哈希的容器类型
  • gloss-accelerate:从 Accelerate 生成 gloss 图片
  • gloss-raster-accelerate:光栅图像和动画的并行渲染
  • hashable-accelerate (http://hackage.haskell.org/package/hashable-accelerate):可转换为哈希值的类型类
  • lens-accelerate:Accelerate 类型的 Lens 运算符
  • linear-accelerate:Accelerate 中的 Linear 向量空间
  • mwc-random-accelerate:生成填充高质量伪随机数的 Accelerate 数组
  • numeric-prelude-accelerate:将 numeric-prelude 提升到 Accelerate
  • wigner-ville-accelerate (https://github.com/Haskell-mouse/wigner-ville-accelerate):Wigner-Ville 时频分布

以上所有包均可从 Hackage 获得。

文档

  • Haddock 文档已包含在内,并与 Hackage 上的各个包版本链接。
  • 库中使用的 HOAS(高阶抽象语法)到 de-Bruijn 转换的思路在此处单独描述

示例

accelerate-examples

accelerate-examples 包提供了多种计算内核和几个完整应用程序。示例包括:

要运行这些示例,可以从 Hackage 使用 cabal get accelerate-examples 获取源代码,或克隆 git 仓库,然后对各个可执行文件使用 cabal run

Mandelbrot (https://i.imgur.com/RgXRqsc.jpg)
Raytracer (https://i.imgur.com/ZNEGEJK.jpg)

LULESH

LULESH-accelerate 是 Livermore 非结构化拉格朗日显式冲击流体动力学(LULESH)小应用的实现。LULESH 代表典型的流体动力学代码,如 ALE3D,但它是高度简化的应用,硬编码用于在非结构化六面体网格上求解 Sedov 爆炸问题。

LULESH 网格

其他示例

Accelerate 用户还构建了一些自己的重要应用。欢迎添加你自己的例子!

  • Jonathan Fraser, GPUVAC (https://github.com/GeneralFusion/gpuvac):显式平流磁流体动力学模拟
  • David van Balen, Sudokus (https://github.com/dpvanbalen/Sudokus):数独求解器
  • Trevor L. McDonell, lol-accelerate:基于环的格密码学 Λ ○ λ (Lol) 库的后端
  • Henning Thielemann, patch-image (http://hackage.haskell.org/package/patch-image):合并重叠图像的拼贴
  • apunktbau, bildpunkt (https://github.com/abau/bildpunkt):光线行进距离场渲染器
  • klarh, hasdy (https://github.com/klarh/hasdy):使用 Accelerate 的 Haskell 分子动力学
  • Alexandros Gremm 在 2014 年 CSCS 暑期学校(http://user.cscs.ch/blog/2014/cscs_usi_summer_school_2014_30_june_10_july_2014_in_serpiano_tessin/index.html)中使用 Accelerate(代码 (https://github.com/agremm/cscs))

我们是谁?

Accelerate 团队(过去和现在)包括:

Accelerate 的维护者和主要开发者是 Trevor L. McDonell 。

邮件列表和联系方式

引用 Accelerate

如果您在学术研究中使用 Accelerate,我们鼓励(但不是必需)引用以下论文:

  • Manuel M. T. Chakravarty, Gabriele Keller, Sean Lee, Trevor L. McDonell, and Vinod Grover. Accelerating Haskell Array Codes with Multicore GPUs. In DAMP ’11: Declarative Aspects of Multicore Programming, ACM, 2011.
  • Trevor L. McDonell, Manuel M. T. Chakravarty, Gabriele Keller, and Ben Lippmeier. Optimising Purely Functional GPU Programs. In ICFP ’13: The 18th ACM SIGPLAN International Conference on Functional Programming, ACM, 2013.
  • Robert Clifton-Everest, Trevor L. McDonell, Manuel M. T. Chakravarty, and Gabriele Keller. Embedding Foreign Code. In PADL ’14: The 16th International Symposium on Practical Aspects of Declarative Languages, Springer-Verlag, LNCS, 2014.
  • Trevor L. McDonell, Manuel M. T. Chakravarty, Vinod Grover, and Ryan R. Newton. Type-safe Runtime Code Generation: Accelerate to LLVM. In Haskell ’15: The 8th ACM SIGPLAN Symposium on Haskell, ACM, 2015.
  • Robert Clifton-Everest, Trevor L. McDonell, Manuel M. T. Chakravarty, and Gabriele Keller. Streaming Irregular Arrays. In Haskell ’17: The 10th ACM SIGPLAN Symposium on Haskell, ACM, 2017.

Accelerate 主要由学术界人士开发,因此引用对我们非常重要。作为额外的好处,你增加了 Accelerate 的曝光度和潜在用户(以及开发者!)基础,这对所有 Accelerate 用户都有益。

提前感谢!

缺少什么?

以下是目前缺少的功能列表:

  • 初步 API(部分 API 可能在后续版本中发生变化)
  • 更多功能……请联系我们!

相似文章

AdaExplore:基于失败驱动的自适应与多样性保留搜索的高效内核生成

arXiv cs.CL

来自卡内基梅隆大学、华盛顿大学和Arm的研究人员提出了AdaExplore,这是一种用于GPU内核代码生成的LLM智能体框架。该框架通过失败驱动自适应与多样性保留搜索技术,在不进行额外微调的情况下,在KernelBench Level-2和Level-3基准测试中分别实现了3.12倍和1.72倍的加速。

一个可定制的编译器,用于为AI模型生成高效的融合GPU内核 [P]

Reddit r/MachineLearning

作者介绍了一款用 Python 编写、高度可定制且易于修改的 ML 编译器。该编译器通过多级 IR 流水线将 LLMs 转换为优化的 CUDA 内核,在特定操作上实现了与 PyTorch 相当甚至更优的性能。文章详细阐述了该编译器的优化过程、降级规则以及用于生成高效融合 GPU 内核的 CLI 用法。