Reduceron,一种用于函数式程序的高效处理器
REDUCERON 是什么?
Reduceron 是一个高性能的 FPGA 软核,用于运行惰性函数式 程序,并配备了硬件垃圾回收机制。 Reduceron 已在各种 FPGA 上 实现,时钟频率根据 FPGA 的不同在 60 到 150 MHz 之间。 高度的并行性使 Reduceron 能够非常高效地实现图求值。
Reduceron 是 Matthew Naylor、Colin Runciman 和 Jason Reich 的成果, 他们已慷慨地将其工作公开供他人使用。 请参阅 https://mn416.github.io/reduceron-project/(原始的 http://www.cs.york.ac.uk/fp/reduceron 已不再可用)以获取支持 文章、备忘录和原始发行版。
那么,这是什么?
当前版本是原始发行版的分支,旨在 使其继续运行。 最初有更宏伟的 目标,但那些都已放弃。
虽然 Reduceron 在技术上指的是 FPGA 实现,但它由以下组件支持
- Flite:F-lite 到 Red 的翻译器。
- 用 C 编写的 Red 模拟器
- Red Lava:Reduceron 是一个 Red Lava 程序,用于生成 Verilog
- 针对各种 FPGA 开发板的 Verilog 仿真和综合支持
尽可能收集了可用的历史资料, 并将 Reduceron、Lava 和 Flite 发行版合并到一个 仓库中。
我该如何使用它?
该版本最后一次测试是在 Glasgow Haskell Compiler,Version 8.4.4 上 macOS 10.14.3 和 Linux,64-bit。
可选:只需在顶层目录中运行 make,即可启动一次大规模的回归测试。Verilog 仿真部分将需要数周才能完成。
构建方法:
make
或者运行特定的测试套件:
make -C programs $X
其中 $X 是 regress-emu、regress-flite-sim、regress-flite-comp 或
regress-red-verilog-sim 之一。
注意:Flite 的 C 后端生成的代码(用于
regress-flite-comp)依赖于 GCC 的特性,例如嵌套
函数。要在 macOS 上构建,请安装 真正的 gcc(例如通过 Mac
Homebrew 安装),并以 make CC=gcc-7 的方式调用 make(假设你安装
了 gcc 的 7 版本)。
构建给定测试的硬件版本
cd fpga; make && flite -r ../programs/$P | ./Red -v
其中 $P 是其中一个程序(.hs)。接下来,为 FPGA 板卡构建 Reduceron 系统,例如 BeMicroCV A9:
make -C Reduceron/BeMicroCV-A9
不幸的是,目前程序无法动态加载,而是被固化在 FPGA 镜像中。改变这一状况是一个高优先级的目标。
开放问题,以及来自 Matthew 的回答:
Q1: 目前似乎没有高效的方式来处理顶层 变量绑定(CAF)。约克团队在这方面有什么想法, 还是说这需要扩展?(显然可以将它们全部 视为其他函数参数,但这意味着需要传递大量参数)。
A1: “需要某种机制在程序执行开始时在堆的指定 位置构建图。初始的(未求值的)图具有恒定大小,因此可以在 编译时链接到它们。”
Q2: 为什么 Flite 将 MAXREGS 参数默认设为 0? 例如,为什么
redDefaults = CompileToRed 6 4 2 1 0
A2: (看起来是历史原因)。
Q3: Memo 24 怎么了?
A3: “我想说它是我们最保守的秘密,但现实是它 大概被弄坏了 :)”