Futhark是一个函数式数据并行阵列编程语言,最初于哥本哈根大学理学院计算机科学系英语UCPH Department of Computer Science(DIKU)作为HIPERFIT(财务信息技术的函数式高性能计算)计划的一部分而开发[2]。它聚焦于确使以函数式风格书写的数据并行程序,可以高性能的执行于大规模并行硬件上,特别是在GPU上。Futhark强烈的受到NESL英语NESL启发,但是为了确使更具进取性的编译器优化,对如何表达并行施加了约束。特别是,不支持非正规的嵌套数据并行[3]

Quick Facts 编程范型, 语言家族 ...
Futhark
编程范型阵列式, 函数式
语言家族ML
设计者Troels Henriksen, Cosmin Oancea, Martin Elsman
发行时间2014年,​10年前​(2014
当前版本
  • 0.25.23(2024年10月15日;稳定版本)[1]
编辑维基数据链接
类型系统静态, 强类型
操作系统跨平台
许可证ISC许可证
网站https://futhark-lang.org
启发语言
APL, Haskell, NESL英语NESL, Standard ML
Close

概述

Futhark是属于ML家族的语言,它具有从OCamlStandard MLHaskell派生的缩进不敏感的语法。类型系统基于了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

注意它的类型强制这个函数只能以具有兼容大小的矩阵来调用。进一步的说,这是嵌套数据并行的例子。

引用

Wikiwand in your browser!

Seamless Wikipedia browsing. On steroids.

Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.

Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.