SFC2020
SFC2020 管理员

482枚
铜币

581点
威望

0个
银元

喜报!接近完整版RISC-V8开源!RISC-V生态愈加完善

2020-07-17 14:36

1740

今天,大卫·帕德森RIOS图灵奖实验室和华为科技已经开源了一个面向RISC-V(RV64GC)的V8引擎移植项目。我们完成了面向64位RISC-V后端的基本移植工作。目前我们的V8已经在RISC-V的仿真运行中通过了15,000多个V8 标准测试用例,其中包括JS和WebAssembly的测试用例。

目前这个项目还在不断完善,我们也十分乐意与社区互动。通过最初阶段的工作,我们已经建立了可持续的移植方法和开发最佳实践,我们有信心邀请更广泛的社区参与。现在RISC-V上运行高性能V8仍然有大量的工作需要完成,通过将我们的移植工作添加到riscv-software-list中也能够更好地通过基金会来宣传它。

关于项目的更多细节可以直接查看本项目的wiki和代码仓库.

移植策略
当我们在2020年一月份首次开始该项目时,我们对V8后端架构进行了深入研究,并提出了以下结论:

  • V8是一种复杂而成熟的语言VM,它已经经历了几种主要的软件架构重构。
  • 大多数特定于体系结构的代码仅占整个V8代码库的一小部分。
  • 与其他语言的VM不同,V8代码生成涉及很多汇编代码,甚至“解释器”执行也需要代码生成;
  • V8已经支持多个后端(x86,arm / arm64,mips / mips64,ppc / ppc64,s390),并且它们共享相似的结构;
  • V8提供了一组丰富的测试用例,可以在JS级别和JS级别之下(例如cctest和unittests)进行测试。

我们意识到开发RISC-V后端的主要挑战是管理复杂性,因为
  • 我们不太可能在短时间内完全了解V8;
  • 后端的汇编代码尤其难以理解;
  • 与其他编译器相比,在V8中调试生成的代码特别困难。

为了管理这种复杂性,我们在移植的每个阶段逐步定义了最小可行产品(MVP)。我们还尽可能利用现有的后端。由于MIPS对RISC-V ISA的影响很大,因此我们选择MIPS64后端作为基础,然后逐渐将其转换为RISC-V后端。最后,我们不断改进调试方法并开发工具(请参阅如何调试V8后端)。

测试策略
由于调试是在V8中开发新后端的一大挑战,因此能够在最小的测试用例中暴露错误对于开发效率特别重要。因此,我们特别注意了启用测试用例的顺序。例如,即使一个简单的JS测试也可以运行成千上万条指令,一个简单的cctest例如test-run-machop.cc里就包含了许多测试,而每个测试都可以运行一小段指令。
因此,我们启用测试案例的顺序总是mksnapshot,cctest,简单的helloworld,简单的d8控制台,unittests,wasm-tests,等等,最后才是mjsunit。

Milestones
第一阶段:在模拟版本中运行的基本RISC64后端(Simulated Build)
在这一阶段,我们旨在开发一个可以运行的RISC64后端(无代码生成优化),该后端可以通过模拟版本中的所有V8测试用例。模拟构建(Simulated Build)是V8的一项独特功能,该功能允许X86二进制形式的V8在主机(即x86)上运行,但是让V8中的代码生成器生成RISCV二进制文件。运行生成的RISCV二进制文件时,V8自动切换到内置的RISCV模拟器(请参阅参考资料src/execution/riscv64/simulator-riscv64.cc)。

这种方法为开发生产力带来了巨大的好处:
  • 整个开发生命周期(编码,测试,调试,CI)发生在x86上,比在QEMU或实际硬件中运行要快得多。
  • 内置的模拟器可以发出分解后的指令轨迹(例如--trace-sim),并结合使用--print-all-code,这是我们最有效的调试工具;
  • 它允许我们将CI作为DevOps的一部分运行,以在通用服务器上启用测试。

我们目前处于第一阶段的结尾(请参阅测试状态)。现在,大多数已知的故障都经过了分类。我们目前正在调试的测试用例之一mjsunit/asm/poppler.js,是一个运行着数百万条指令的大型js文件。

这种方法有一些已知的限制:
  • 生成的代码质量很差,并且代码大小可能很大,因为我们故意不进行任何代码生成优化,以避免在建立工作基线之前引入错误
  • 模拟的构建在x86上运行,而不是在QEMU或实际的硬件上运行,因此它还不是一个功能完备的解决方案。

第二阶段:支持64位本机构建(Native Build)
在此阶段,我们将V8构建为RISC-V二进制文件,并使V8代码源也生成RISC-V二进制文件。原则上,V8本身是由gcc或LLVM构建的。因此,移植主要是为了弥合本机ABI与模拟器的ABI之间的差距以及模拟指令语义与实际硬件指令语义之间可能的不匹配(例如,浮点NaN和kInvalid位设置的特殊情况),以及对内存的其他约束在真正的硬件上可用。

在此步骤中,我们将遵循与在第一阶段开发模拟构建所使用的测试案例启用相同的顺序。
  • 在QEMU中运行(Linux发行版:Debian)
遵循MVP方法,因为开发环境仍将在x86上,所以我们将首先在QEMU中启用本机构建。
  • 在实际板上运行(具体情况待定)
这是在QEMU中运行本机版本的又一个增量步骤。

第三阶段
  • 提供32位的支持(Simulated、Native)
  • 代码生成优化
  • 支持紧凑型指令集
  • 支持其他RISC-V ISA扩展
  • SIMD ISA支持,尤其是完善其对WebAssembly的支持

大卫·帕德森RIOS图灵奖实验室介绍:
RISC-V国际开源实验室(RISC-V  International Open Source Laboratory)于2019年11月12日在深圳正式揭牌,其依托清华-伯克利深圳学院(TBSI)的“数据科学交叉学科”项目,开展硕士研究生招生培养,预计五年内计划招生100名,第一届2020级硕士研究生将于今年秋季入学。博士生招生及博士后相关工作正在酝酿筹备中。

RISC-V国际开源实验室构建基于RISC-V开源处理器的软硬件生态体系,致力于建设以深圳为根节点的RISC-V全球创新网络、突破开源处理器前沿技术、推动全球RISC-V技术的工业化进程和软硬件生态建设、促进全人类知识共生。RISC-V国际开源实验室落户深圳,将为深圳聚集和培养面向处理器和开源硬件设计的高端急需人才,有助于深圳国际化科技生态圈建设及智能硬件产业链布局,提升粤港澳大湾区在RISC-V开源处理器的全球生态圈的影响力。

本文源自TBSI RIOS实验室 ,转载目的在于传递更多信息,版权归原作者所有。


返回顶部