Futhark语言
- 0.25.20 (2024年8月15日;穩定版本)[1]
![編輯維基數據鏈接](http://upload.wikimedia.org/wikipedia/commons/thumb/8/8a/OOjs_UI_icon_edit-ltr-progressive.svg/10px-OOjs_UI_icon_edit-ltr-progressive.svg.png)
Futhark是一个函数式、数据并行、阵列编程语言,最初于哥本哈根大学理学院计算机科学系(英语:UCPH Department of Computer Science)(DIKU)作为HIPERFIT(财务信息技术的函数式高性能计算)计划的一部份而开发[2]。它聚焦于确使以函数式风格书写的数据并行程序,可以高性能的执行于大规模并行硬件上,特别是在GPU上。Futhark强烈的受到NESL(英语:NESL)启发,但是为了确使更具进取性的编译器优化,对如何表达并行施加了约束。特别是,不支持非正规的嵌套数据并行[3]。
概述
Futhark是属于ML家族的语言,它具有从OCaml、Standard ML和Haskell派生的缩进不敏感的语法。类型系统基于了Hindley–Milner类型系统(英语:Hindley–Milner type system),还并具有各种扩展,比如唯一类型(英语:Uniqueness type)和大小依赖类型。Futhark不意图成为编写完全应用的通用编程语言,转而聚焦于书写计算“内核”(不必定相同于GPU内核),它们由用常规语言书写的应用程序来调用[4]。
例子
点积
下列程序计算包含双精度数值的两个向量的点积:
def dotprod xs ys = f64.sum (map2 (*) xs ys))
它还可以等价的书写为具有显式类型标注的形式:
def dotprod [n] (xs: [n]f64) (ys: [n]f64) : f64 = f64.sum (map2 (*) xs ys))
这制作出了大小依赖类型,即这个函数只能以相同大小的两个数组来调用,类型检查器会拒绝不能静态的确定符合这个要求的任何程序。
矩阵乘法
下列程序使用上述点积定义进行矩阵乘法:
def matmul [n][m][p] (A: [n][m]f64) (B: [m][p]f64) : [n][p]f64 = map (\A_row -> map (\B_col -> dotprod A_row B_col) (transpose B)) A
注意它的类型强制这个函数只能以具有相容大小的矩阵来调用。进一步的说,这是嵌套数据并行的例子。
引用
- ^ Release 0.25.20. 2024年8月15日 [2024年8月22日].
- ^ 存档副本. [2022-05-12]. (原始内容存档于2014-10-22).
- ^ Henriksen, Troels; Serup, Niels G. W.; Elsman, Martin; Henglein, Fritz; Oancea, Cosmin. Futhark: Purely Functional GPU-Programming with Nested Parallelism and In-Place Array Updates (PDF). Proceedings of the 38th ACM SIGPLAN Conference on Programming Language Design and Implementation. PLDI 2017. ACM. 2017 [2021-02-28]. (原始内容 (PDF)存档于2020-09-20).
- ^ Parallel Programming in Futhark — Interoperability. [2023-10-01]. (原始内容存档于2023-03-30).
|