Accelerate – 用于高性能数组计算的嵌入式语言

2026-05-16 1 阅读 tosh
Haskell 的高性能并行数组 Data.Array.Accelerate 为 Haskell 中的高性能计算定义了一种嵌入式数组计算语言。多维、规则数组上的计算以参数化集体运算(例如映射、归约和排列)的形式表示。这些计算是在线编译的,并在一系列架构上执行。有关更多详细信息,请参阅我们的论文: 使用多核 GPU 加速 Haskell 数组代码 优化纯函数式 GPU 程序(幻灯片) 嵌入外来代码 类型安全的运行时代码生成:加速到 LLVM(幻灯片)(视频) 流式传输不规则数组(视频) 还有一些关于加速的幻灯片:用于 Haskell 中高性能计算的嵌入式语言 在 Haskell 中进行 GPGPU 编程Accelerate(视频)(研讨会)Simon Marlow 的《Haskell 中的并行和并发编程》一书的第 6 章包含 Accelerate 的教程介绍。 Trevor 的博士论文详细介绍了前端优化和 CUDA 后端的设计和实现。目录 用于加速数组计算的嵌入式语言 一个简单的示例 可用性 其他组件 要求 文档示例 我们是谁?邮件列表和联系人 Citing Accelerate 缺少什么?一个简单的例子 作为一个简单的例子,考虑计算两个单精度浮点数向量的点积: 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:加速 - 只需将其添加到您的 cabal 文件 GitHub:AccelerateHS/accelerate - 使用 git clone https://github.com/AccelerateHS/accelerate.git 获取源代码 要安装 Haskell 工具链,请尝试 GHCup 。其他组件 以下受支持的附加组件可作为单独的软件包提供: Accelerator-llvm-Native:面向多核 CPU 的后端 Acceleration-llvm-ptx:面向支持 CUDA 的 NVIDIA GPU 的后端。需要具有计算能力 3.0 或更高的 GPU(参见维基百科上的表格)加速示例:展示 Accelerate 以及回归测试套件的使用的计算内核和应用程序(支持功能和性能测试)各种格式之间的转换:加速io:用于在原始指针之间直接复制数据加速io-array:不可变数组加速io-bmp:未压缩的BMP图像文件加速io-bytestring:紧凑、不可变的二进制数据accelerate-io-cereal:使用谷物的数组的二进制序列化accelerate-io-JuicyPixels:各种像素格式的图像accelerate-io-repa:另一个用于高性能并行数组的Haskell库accelerate-io-serialise:使用serialise的数组的二进制序列化accelerate-io-vector:高效的装箱和拆箱一维数组accelerate-fft:快速傅里叶变换实现,带有FFI绑定加速blas:BLAS和LAPACK操作,与FFI绑定到优化实现加速-bignum:固定宽度大整数算术颜色加速:加速中的颜色表示(RGB,sRGB,HSV和HSL)容器加速:基于散列的容器类型光泽加速:从加速生成光泽图片光泽-光栅加速:光栅图像和动画的并行渲染hashable-accelerate :可转换为哈希值的类型的类 lens-accelerate :加速类型的透镜运算符 Linear-accelerate :加速中的线性向量空间 mwc-random-accelerate :生成填充有高质量伪随机数的 Accelerate 数组 numeric-prelude-accelerate :提升 numeric-prelude 以加速 wigner-ville-accelerate :Wigner-Ville 时频分布。这些都可以在 Hackage 上找到。文档 Haddock 文档包含在 Hackage 上并与各个软件包版本链接。库中使用的 HOAS(高阶抽象语法)到 de-Bruijn 转换背后的思想将单独描述。示例加速示例加速示例包提供了一系列计算内核和一些完整的应用程序。这些示例包括: Canny 边缘检测的实现 交互式 Mandelbrot 集生成器 固体粒子之间万有引力的 N 体模拟 PageRank 算法的实现 简单的射线追踪器 基于粒子的稳定流体流动模拟 元胞自动机模拟 一个“密码恢复”工具,用于 MD5 哈希值的字典查找 要运行这些工具,可以使用 Hackage 获取源代码