ITADN
tommythorn/Reduceron
tommythorn/Reduceron · 文件 下载 ZIP
文件最后提交记录最后更新时间
README.md
以下内容由 AI 翻译,如有问题请点此提交 issue 反馈

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-emuregress-flite-simregress-flite-compregress-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: “我想说它是我们最保守的秘密,但现实是它 大概被弄坏了 :)”

tip for next commit