Full flattening of nested data parallelism2 months agohttps://futhark-lang.org/blog/2026-07-31-full-flattening.html全扁平化使Futhark能够将任何具有嵌套并行性的程序编译为GPU代码。不规则数组通过分段表示和分段扫描等操作来处理。通过避免向量化、利用均匀性和增量扁平化来保持性能。
Rewriting the Futhark Type Checker2 months agohttps://futhark-lang.org/blog/2026-07-21-rewriting-the-type-checker.htmlFuthark 类型检查器最初设计简单,支持标量、数组、元组、一阶单态函数,没有类型推断,但已包含用于原地更新的唯一性类型。随着记录、模块、高阶函数、Hindley-Milner 推断和大小类型等特性的加入,单遍类型检查器变得越来越复杂且难以维护。类型检查器最终被拆分为多个阶段:名称解析、别名检查(后类型检查)和核心项类型检查。引入了一种新的基于约束的无大小类型检查器来处理像 AUTOMAP 这样的复杂特性,约束被离线求解而非即时处理。当前的新类型检查器对每个函数执行四个阶段:名称解析、无大小类型检查(基础类型)、大小推断和原地更新违规检查。这种分层设计通过提供前一阶段的完整信息来改进错误消息,并允许在主要类型检查后将许多检查移至单独的阶段。尽管多遍处理可能效率较低,但优化后相比旧单遍检查器实现了约 4% 的速度提升。类型检查器现在还通过环境变量支持递归,尽管这属于另一个话题。