Futhark語言
外觀
編程範型 | 陣列式, 函數式 |
---|---|
語言家族 | ML |
設計者 | Troels Henriksen, Cosmin Oancea, Martin Elsman |
面市時間 | 2014年 |
當前版本 |
|
型態系統 | 靜態, 強類型 |
操作系統 | 跨平台 |
許可證 | ISC許可證 |
網站 | https://futhark-lang.org |
啟發語言 | |
APL, Haskell, NESL, Standard ML |
Futhark是一個函數式、數據並行、陣列編程語言,最初於哥本哈根大學理學院計算機科學系(DIKU)作為HIPERFIT(財務信息技術的函數式高性能計算)計劃的一部份而開發[2]。它聚焦於確使以函數式風格書寫的數據並行程序,可以高性能的執行於大規模並行硬件上,特別是在GPU上。Futhark強烈的受到NESL啟發,但是為了確使更具進取性的編譯器優化,對如何表達並行施加了約束。特別是,不支持非正規的嵌套數據並行[3]。
概述
[編輯]Futhark是屬於ML家族的語言,它具有從OCaml、Standard ML和Haskell派生的縮進不敏感的語法。類型系統基於了Hindley–Milner類型系統,還並具有各種擴展,比如唯一類型和大小依賴類型。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.23. 2024年10月15日 [2024年10月21日].
- ^ 存档副本. [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).