首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在FPGA上实现实时运行时编译器

在FPGA上实现实时运行时编译器
EN

Stack Overflow用户
提问于 2011-06-05 20:56:59
回答 4查看 2K关注 0票数 10

我很想听听人们对在FPGA上实现编译器有多难的看法。这可能只是一个编译器后端,例如LLVM,并且实现将只接受LLVM IR和输出机器代码。

这样做的目的是允许--可以这么说--实时执行源代码(或中间表示代码),也就是说:

  1. 将FPGA配置为特定语言的编译器(例如C)
  2. 向编译器提供程序的源代码
  3. 编译器的(机器代码)输出直接进入CPU并执行。

对于给定的系统,FPGA的一个或多或少的静态部分可能是LLVM后端,即。决定输出哪种类型的机器代码的部分,例如使用SSE4的x86-64。或手臂拇指-2与霓虹灯和VFP指令。除非您有一个具有多个CPU的系统,否则这将保持不变。但是,这不应该是完全静态的,因此不应该在硬件中实现,因为对编译器的优化是不断进行的,并且需要不时地更新。更频繁的改变部分的FPGA将是前端,部分产生的LLVM IR从给定的语言: C,C++,Vala等。

这个系统的好处是,代码总是被优化到当前系统中的CPU。在当前情况下,很少有构建会利用CPU中的所有额外功能: SSE、AVX、3 3DNow!、Neon、VFP。使用这种(完全假设的)方法,可以利用CPU的全部潜力,为特定的体系结构进行实时编译,然后立即执行生成的指令。这对于基于ARM的系统尤其有用,因为我们需要从CPU中挤出所有的能量,而CPU本身在编译过程中非常缓慢。

我知道gcc可以被设置为使用线程,并且,我假设并行化编译器会比较容易。只是并行编译所有源文件。

我们还可以抛弃前端--编程语言--编译器的特定部分--只需将程序作为中间表示代码分发,比如LLVM。

这是否可行呢?

EN

回答 4

Stack Overflow用户

发布于 2011-06-05 21:00:06

我不会费心的。我将FPGA配置为LLVM并运行代码,将硬件控制委托给CPU。

票数 2
EN

Stack Overflow用户

发布于 2011-06-05 22:37:21

编译的某些部分很容易以非线程方式并行化。例如,字符串键字典非常常见,因此内容可寻址内存可以提供重要的优化。

不过,在编译的某些方面,FPGA的表现会非常糟糕。例如,过载解析必须考虑依赖于参数的查找、用户定义的转换、模板等。

通过流水线和使用FPGA和CPU的资源,您将获得最好的性能。例如,让FPGA lex源代码并创建一个令牌流,并将所有标识符替换为符号表索引,而CPU则运行稍后的编译步骤(例如,内联和循环优化)。

当然,您已经指出,如果可以对代码进行预处理并以p代码格式分发,这对每台机器的优化都没有多大帮助。不过,在开发过程中可能会成为一个很好的编译加速器。

票数 1
EN

Stack Overflow用户

发布于 2011-06-18 15:40:53

不久前我也有同样的想法。

考虑到充分的综合技术,在FPGA上实现这样一个复杂的程序是可能的。使用行为合成(又名C到HDL同步)使其可行。

有趣的是,如果编译器的输出也是HDL,那么可以想象引导行为合成器(即使其合成自身),这对于编译器来说通常是一个重要的验证步骤。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6245806

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档