0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

进迭时空 V8 RISC-V 后端优化

进迭时空 ? 2025-07-31 09:02 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群


前 言

V8 是 Google 开发及开源的 JavaScript 和 WebAssembly 语言编译引擎,是 Chromium 项目的一部分,主要应用于 Chrome 浏览器 和 Node.js 等项目,在浏览器生态中发挥着至关重要的作用。自 2020 年起,中科院软件所 PLCT 实验室等团队开始为 V8 引擎开发 RISC-V 后端,并持续推动 V8 对 RISC-V 架构的支持,不断完善功能完整性,持续优化性能表现。目前,V8 引擎的 RISC-V 后端已经完成了解释器和 JIT 编译器的开发,实现了基本功能的完整支持。全球 RISC-V 生态共建者正在积极推动更多高级特性的开发与完善,持续优化 V8 在 RISC-V 平台上的性能与兼容性。


RISC-V 作为新兴的架构,其后端仍有不少优化机会。本文将介绍一些进迭时空在 V8 JavaScript 引擎 RISC-V 后端的优化工作,并说明这些优化如何提升 JavaScript 在 RISC-V 架构上的执行效率和整体性能表现。

R I S C - V 后 端 优 化



Load/Store 地址计算优化


V8 的 LoadStoreSimplificationReducer Pass 会将 LoadOp(Load Operation)和 StoreOp(Store Operation)的地址计算规约为 Base + Index 的形式,Base 表示基地址,Index 表示索引偏移,比如指令 ld t3, 8(t1) 中 Base 为 t1,Index 为 8,加载地址为 t1 + 8。


·使用 Shift And Add 指令计算 Base

RISC-V Zba Extension 提供了 shift and add 系列指令来快速完成地址计算,使用该系列指令可在地址计算过程省去 1 条指令。以如下代码为例,在计算 Base 过程中使用了 slli + add 来完成对 Base 的计算,可被 shift and add 指令替换。


07921c9a-6daa-11f0-9080-92fbcf53809c.png

·Index 立即数参数融合进 Load/Store 指令

有时候 Index 并不一定是立即数,而是一个通过 WordBinopOp::Add 节点计算得到的寄存器值,并且该 WordBinopOp::Add 节点的参数中存在符合 RISC-V Load/Store 指令索引偏移范围 [-2048, 2047] 的立即数,则可以将 Index 中的立即数参数融合进 Load/Store 指令中,从而节省 1 条指令。


079d7be4-6daa-11f0-9080-92fbcf53809c.png


更进一步地,如果上述两种优化方法的条件都符合,则可以同时使用两种优化方法,从而节省 2 条指令。


07a6cbc2-6daa-11f0-9080-92fbcf53809c.png




Comparison + Branch 优化

Comparison + Branch 一般位于 BasicBlock 结束处,用于条件分支跳转。

MERGEB3<-?B2,B1? 21:Phi(#16,#19)[Tagged]? 22:Constant()[heap?object:?0x00ec00000011?? 23:Comparison(#4,#22)[Equal, Tagged]? 24:Branch(#23)[B319,B4,False]


如果 ComparisonOp 的 RegisterRepresentation 是 Tagged 类型,则可以将 Tagged 类型映射为 Word32 或者 Word64 类型,如此便可在对 Branch 节点做指令选择时,选择 kRiscvCmp 虚拟指令而不是选择 kRiscvCmpZero 虚拟指令,同时会将 ComparisonOp 的参数和 FlagsCondition(表示判断条件)融合进 kRiscvCmp 虚拟指令中。因此 ComparisonOp 节点计算结果不再被直接使用,所以不会对 ComparisonOp 生成指令,从而达到节省指令的目的。



原来使用 kRiscvCmpZero 节点时,需要使用 xor + slt 指令来计算 ComparisonOp 的结果然后再传给 Branch 指令。切换为 kRiscvCmp 节点后,可以将 ComparisonOp 操作融合进 Branch 指令中,从而省去 xor 和 slt 指令。


07b13788-6daa-11f0-9080-92fbcf53809c.png





Load + ChangeUint32ToUint64 优化

在 Load + ChangeUint32ToUint64 匹配模式下,ChangeUint32ToUint64 用于将 LoadOp 加载出来的 uint32 类型数据转化为 uint64 类型。


但当 LoadOp 需要加载的数据其符号类型为 unsigned,MachineRepresentation 类型为 Word32 时,会选择 lwu 指令来进行加载,该指令加载数据时自身会进行零扩展,故不需要再额外使用 zext.w 指令来进行零扩展,从而省去 zext.w 指令。


07c100aa-6daa-11f0-9080-92fbcf53809c.png




IsNumeric 优化

IsNumeric(value) 用于判断给定的 JavaScript 值是否是一个 Number 类型或 BigInt 类型:


Number:表示浮点数和整数(如 42,3.14)

BigInt:表示任意精度的大整数(如 123456789012345678901234567890n)

在 IsNumberic 函数实现中,需要对 IsHeapNumber 和 IsBigInt 函数返回值进行 or 运算,而因为 IsBigInt 函数需要数条指令完成,所以如果 IsHeapNumber 返回值为 1,则两者 or 运算的结果可以直接用 1 来表示,避免通过 IsBigInt 函数引入较多的指令。


07ca0786-6daa-11f0-9080-92fbcf53809c.png


同理,IsSharedStringInstanceType 函数也可以照此修改优化。




DecompressTagged 优化

RISC-V Zba Extension 中提供了 zext.w 伪指令可用于零扩展。当使能 V8 Compress pointer 机制时,需要通过DecompressTagged 函数对 Tagged 类型数据进行解压缩。DecompressTagged 函数实现中,存在对 source register 上的数据执行 And 0xFFFFFFFF 的操作,而 0xFFFFFFFF 需要使用 3 条 RISC-V 基础指令来构造。当存在 RISC-V Zba Extension 时,可以使用 zext.w 指令来替换 And 0xFFFFFFFF 操作,从而节省 3 条指令。


07d7116a-6daa-11f0-9080-92fbcf53809c.png





AssembleReturn 优化

V8 中 AssembleReturn 用于对 ArchRet 节点生成指令,当符合下列条件时:


frame_access_state()->has_frame(),即表示当前是否正在使用栈帧。

call_descriptor->IsJSFunctionCall(),即表示当前是否为 JavaScript 函数调用。

parameter_slots != 0,即表示当前被调用函数的函数定义中参数数量不为 0


则需要将 JavaScript 函数参数从栈帧中移出。因实际传入参数的数量和函数定义中参数的数量不一定相同,因此需要取两者之中较大值来进行栈帧调整。


RISC-V Zbb Extension 提供了 max 指令来获取两个参数的较大值,既减少 1 条指令,又能避免产生分支指令导致分支预测失败时需要清空流水线。



07e758e0-6daa-11f0-9080-92fbcf53809c.jpg





TaggedIsSmi 优化

在 V8 中,为了提高性能和减少内存使用,小整数被直接编码到 Tagged 类型值中,这种编码方式使得小整数无需分配额外的内存即可存储,并且可以直接在寄存器中传递,从而提高了运算速度。


TaggedIsSmi 函数用于判断 Tagged 类型值是否为 Smi(Small Integer)数据,在 V8 中属于高频使用函数。对于 Smi 类型,最低位通常设置为 0;而对于指向堆对象的 Tagged 类型值,最低位则设置为 1。TaggedIsSmi 源码如下:

TNodeCodeStubAssembler::TaggedIsSmi(TNode a) { staticassert(kSmiTagMask


对应的 IR 节点则如下图所示:


25:TaggedBitcast(#0)[Compressed, Word32, TagAndsmiBits]26:Constant()[word32:1]27:Change(#25)[Truncate, NoAssumption, Word64, Word32]28:WordBinop(#27,#26)[BitwiseAnd,Word32]29:Branch(#28)[B5,B4,None]


此处的 BitwiseAnd 运算是与常数 1 进行 And 运算,必然是在 Word32 数据表示范围内,故并不需要进行扩展操作。经过优化后,TaggedIsSmi 函数生成的指令序列可节省 2 条指令。


07f02574-6daa-11f0-9080-92fbcf53809c.png



SwitchTable 二分查找优化

AssembleArchBinarySearchSwitch 是用于为 switch-case 语句(特别是 case 值为整数时)生成高效汇编代码的方法。它通过使用二分查找算法来优化 switch-case 结构的执行效率,从而减少条件分支的数量,提高性能。当使能 Compress pointer 时,会在二分查找比较时将输入值进行符号扩展操作,然而实际上,输入值在整个二分查找阶段并不会发生变化,可以对其做循环不变量提升,减少符号扩展操作的数量。


08092470-6daa-11f0-9080-92fbcf53809c.jpg




CompareTaggedAndBranch 优化

CompareTaggedAndBranch 是用于比较两个值,并根据比较结果执行条件跳转的函数。当使能 Compress pointer 时,两个值需要进行符号扩展之后才能比较。但是如果一个参数为立即数并在 [0, 0x7FFFFFFF] 范围内,实际上并不需要进行符号扩展。

0821ddc6-6daa-11f0-9080-92fbcf53809c.jpg




性 能 测 试

经过进迭时空的多项优化,包括但不限于上述改进,V8 基准性能测试的各项指标均取得了不同程度的提升。

082b5838-6daa-11f0-9080-92fbcf53809c.png



结 束 语

秉承着以 RISC-V 架构数智未来的使命,进迭时空将持续关注和支持 RISC-V 生态的发展,下一步会陆续将优化成果向 V8 开源社区贡献,并与开源社区伙伴一起继续努力,共建 RISC-V 生态。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 开源
    +关注

    关注

    3

    文章

    3754

    浏览量

    43968
  • RISC-V
    +关注

    关注

    46

    文章

    2608

    浏览量

    49032
  • 进迭时空
    +关注

    关注

    0

    文章

    33

    浏览量

    158
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    2025RISC-V中国峰会|时空RISC-V AI CPU驱动智能化应用发展

    2025RISC-V中国峰会在上海张江科学会堂隆重召开。作为全球三大RISC-V峰会之一和中国规模最大的RISC-V年度盛会,本次峰会由来自政府、学术和产业界数千名代表和与会嘉宾围绕“开放、协同
    的头像 发表于 07-18 22:03 ?351次阅读
    2025<b class='flag-5'>RISC-V</b>中国峰会|<b class='flag-5'>进</b><b class='flag-5'>迭</b><b class='flag-5'>时空</b><b class='flag-5'>RISC-V</b> AI CPU驱动智能化应用发展

    迎接泛机器人时代:时空如何以RISC-V架构数智未来

    21世纪经济报道记者赵娜杭州报道“这是我们的时代。”今年8月的一天,21世纪经济报道记者来到时空杭州总部。
    的头像 发表于 06-06 17:00 ?486次阅读
    迎接泛机器人时代:<b class='flag-5'>进</b><b class='flag-5'>迭</b><b class='flag-5'>时空</b>如何以<b class='flag-5'>RISC-V</b>架构数智未来

    RISC-V架构下的编译器自动向量化

    时空专注于研发基于RISC-V的高性能新AICPU,对于充分发挥CPU核的性能而言,编译器是不可或缺的一环,而在AI时代,毫无疑问向量算力将发挥越来越重要的作用。
    的头像 发表于 06-06 16:59 ?481次阅读
    <b class='flag-5'>RISC-V</b>架构下的编译器自动向量化

    大象机器人携手时空推出 RISC-V 全栈开源六轴机械臂产品

    全球80多个国家和地区。近日,大象机器人联合时空推出全球首款RISC-V全栈开源六轴机器臂“myCobot280RISC-V”,为开发者
    的头像 发表于 06-06 16:55 ?594次阅读
    大象机器人携手<b class='flag-5'>进</b><b class='flag-5'>迭</b><b class='flag-5'>时空</b>推出 <b class='flag-5'>RISC-V</b> 全栈开源六轴机械臂产品

    时空携手珠海共建RISC-V生态应用中心

    该中心的成立标志着珠海在集成电路产业创新发展上迈出重要一步,将为区域产业生态注入新动能,推动珠海高新区集成电路产业高质量发展。01珠海市RISC-V生态应用创新中心落子珠海高新区现场,珠海市政府副秘书长林日团、珠海高新区党工委副书记、区管委会主任高磊、
    的头像 发表于 06-06 16:55 ?531次阅读
    <b class='flag-5'>进</b><b class='flag-5'>迭</b><b class='flag-5'>时空</b>携手珠海共建<b class='flag-5'>RISC-V</b>生态应用中心

    高校赛事 | 时空携手蓝桥杯,诚邀全国高校学子共启RISC-V人工智能应用创新赛道

    以下文章来源于RISC-V先锋,作者时空2025年5月12日,第十六届蓝桥杯数字科技创新(RISC-V应用创新)命题赛正式启动。本次大赛
    的头像 发表于 06-06 16:55 ?1038次阅读
    高校赛事 | <b class='flag-5'>进</b><b class='flag-5'>迭</b><b class='flag-5'>时空</b>携手蓝桥杯,诚邀全国高校学子共启<b class='flag-5'>RISC-V</b>人工智能应用创新赛道

    大象机器人携手时空推出 RISC-V 全栈开源六轴机械臂产品

    识别联调。 时空致力于为智能机器人提供完整全栈优化RISC-V AI软硬件解决方案,第一代RIS
    发表于 04-25 17:59

    大象机器人×时空联合发布全球首款RISC-V全栈开源小六轴机械臂

    ? ? 在全球AI与机器人技术高速发展的浪潮中,中国公司始终坚定走在自研创新的道路上。 ? ? 4月25日,大象机器人与 国内RISC-V AI CPU芯片领军企业【时空】 强强联
    的头像 发表于 04-25 14:19 ?858次阅读
    大象机器人×<b class='flag-5'>进</b><b class='flag-5'>迭</b><b class='flag-5'>时空</b>联合发布全球首款<b class='flag-5'>RISC-V</b>全栈开源小六轴机械臂

    香蕉派 BPI-CM6 工业级核心板采用时空K1 8RISC-V 芯片开发

    。 SpacemiT K1主要用于单板计算机、网络存储、云计算机、智能机器人、工业控制、边缘计算机等。 主要特点 时空8RISC-V
    发表于 03-25 14:40

    RISC-V+OpenHarmony5.0:时空与中科院共筑数字世界新基石

    解决方案的推出,标志着RISC-V架构与OpenHarmony操作系统的深度融合,为数字世界的未来发展奠定了坚实的基础。RISC-V以其灵活、开源的特性,为芯片设计提供了全新的思路;而OpenHarmony5.0则以其开放、可裁剪的优势,为物联网、智能终端等领域带来了全新
    的头像 发表于 02-19 11:30 ?797次阅读

    时空完成A+轮数亿元融资 加速RISC-V AI CPU产品迭代

    近日,时空完成A+轮数亿元人民币的融资。本轮融资由香港BrizanIII期基金领投,将主要用于高性能RISC-VAICPU、服务器AICPU产品的研发及市场拓展,加速
    的头像 发表于 02-18 14:22 ?512次阅读
    <b class='flag-5'>进</b><b class='flag-5'>迭</b><b class='flag-5'>时空</b>完成A+轮数亿元融资 加速<b class='flag-5'>RISC-V</b> AI CPU产品迭代

    时空亮相RISC-V产业发展大会:新AI CPU引领大模型时代

    12月28日,以“发挥标准优势,繁荣产业发展”为主题的RISC-V产业发展大会在北京亦庄经开区通明湖会展中心举行。作为基于新一代RISC-V架构的计算生态企业,
    的头像 发表于 12-31 17:32 ?856次阅读
    <b class='flag-5'>进</b><b class='flag-5'>迭</b><b class='flag-5'>时空</b>亮相<b class='flag-5'>RISC-V</b>产业发展大会:新AI CPU引领大模型时代

    Banana Pi BPI-F3 时空RISC-V架构下,AI融合算力及其软件栈实践

    面对未来大模型(LLM)、AIGC等智能化浪潮的挑战,时空RISC-V方向全面布局,通过精心设计的RISC-V DSA架构以及软硬一体
    的头像 发表于 09-07 14:01 ?2032次阅读
    Banana Pi BPI-F3 <b class='flag-5'>进</b><b class='flag-5'>迭</b><b class='flag-5'>时空</b><b class='flag-5'>RISC-V</b>架构下,AI融合算力及其软件栈实践

    RISC-V架构下DSA-AI算力的更多可能性:Banana Pi BPI-F3时空

    Banana Pi BPI-F3 时空 K1开发板AI人工智能应用:四路视频同时推理演示:香蕉派BPI-F3是一款工业级 8RISC-V
    的头像 发表于 09-07 10:30 ?3386次阅读
    <b class='flag-5'>RISC-V</b>架构下DSA-AI算力的更多可能性:Banana Pi BPI-F3<b class='flag-5'>进</b><b class='flag-5'>迭</b><b class='flag-5'>时空</b>

    RT-Thread携手时空:共建RISC-V实时计算生态

    日益高涨。基于新一代精简指令集架构RISC-V开发的高性能计算芯片,可极大提升计算效能,提供更多优质算力。近日,RT-Thread与时空(杭州)科技有限公司宣布
    的头像 发表于 08-06 08:35 ?875次阅读
    RT-Thread携手<b class='flag-5'>进</b><b class='flag-5'>迭</b><b class='flag-5'>时空</b>:共建<b class='flag-5'>RISC-V</b>实时计算生态