RVA23为何重要?解析RISC-V Profiles新标杆

一、引言:从定制化到标准化

RISC-V指令集架构(ISA)的一大特色在于允许对基础指令集进行自定义和扩展。然而,这种灵活性也引发了担忧:如果每款RISC-V处理器都采用不同的指令集组合,软件的可移植性与兼容性将面临挑战。定制化若失控,便会沦为碎片化——这正是RISC-V提供标准化扩展集的原因。

这些扩展通过字母或字符串标识,例如“F”代表浮点运算,“V”代表向量运算。此外,数字表示设备位宽(32位或64位)。因此,一个标注为“RV64IMAC”的CPU表示64位架构,支持整数(I)、乘法(M)、原子操作(A)和压缩(C)扩展。

为了正确运行,软件必须针对硬件(或硬件子集)进行编译。例如,针对RV64IMA编译的代码无需硬件支持“C”扩展,但硬件必须至少支持RV64IMA。要实现大规模的二进制兼容性(即编译后的二进制文件能在不同硬件上运行),有两种方案:一是所有软件都基于最小扩展集编写,但这会牺牲性能和代码密度;二是生态系统共同约定一组通用扩展集,作为所有软件的目标平台——RISC-V国际组织将其称为“profiles”(配置文件)。

RISC-V最初推出了RVI20和RVA20配置文件,随后又批准了RVA22和RVA23。本文重点分析RVA23配置文件的特点及其对Ubuntu的重要性,并探讨它们如何支撑RISC-V生态的规模化发展。后续文章还将讨论如何在Ubuntu中支持自定义指令。

二、什么是配置文件?

如上所述,配置文件是一组已批准的扩展。每个扩展都有一个标识代码,可以是单个字母(如I、M、A、C),也可以是字符串(如“zicsr”)。这些代码拼接在一起可描述实现细节,但会变得冗长难用。配置文件则提供了一种更简洁的描述方式。例如,RVA23的完整展开形式为:

rv64gc_zicsr_zicntr_zihpm_zicbom_zicbop_zicboz_zicond_zimop_zcmop_zfh_zfa_zawrs_zbc_zvfh_zvfhmin_zvbc_zvkg_zvkned_zvknha_zvknhb_zvksed_zvksh_zvkn_zvknc_zvknf_zvkng_zvks_zvksc_zvksf_zvksg_zvl128b_zihintpause_zihintntl_svpbmt_svinval_svade_sstc_sscofpmf_ssccptr_sscounterenw_shvstvecd_shvswatpa_shgatpa_shcounterenw_shvsvinval_shvstvala_shvsvpbmt_shvsvade

这么长的字符串显然不便重复使用!配置文件解决了这一问题:它为CPU实现设定了统一标准。上述所有扩展在“RVA23”中默认包含,无需逐一列出。

配置文件由RISC-V配置文件任务组(Profiles Task Group)定义,该工作组汇集了来自行业各方的专家,根据目标应用场景协商确定应包含哪些功能。

三、配置文件对生态发展的重要性

RISC-V要繁荣成长,离不开强大的软件生态。虽然开发者和爱好者可能愿意为每款不同CPU重新编译代码,但对于大型组织而言,这种做法很快会变得不可持续。配置文件为软硬件开发者提供了共同的目标,确保针对RVA23编译的软件在不同实现之间具有可移植性。也就是说,一个兼容RVA23的二进制文件应能在任何RVA23 CPU上运行。

四、配置文件的局限性

尽管配置文件保证了某种程度的二进制兼容性,但仍有一些系统行为不在其覆盖范围内,例如初始启动、设备发现和外设驱动。虽然这些代码依然符合RVA23规范,但在不同实现之间可能无法直接移植。RISC-V国际组织的技术工作组对此有清醒认识,正在制定诸如服务器平台规范等规范,以解决中断控制器、安全启动等ISA配置文件规范之外的问题。对于最终用户开发应用程序而言,这通常不是问题,但操作系统开发者或裸机开发者需要特别关注。

五、现代Linux的关键特性

RVA23引入了两个此前配置文件缺失的关键特性:

  • 虚拟化(Hypervisor)
  • 向量运算(Vectors)

虽然早期的RISC-V实现可以可选地包含这些扩展,但它们并非强制要求,因此软件无法默认依赖它们。通过将这两项特性纳入RVA23配置文件规范,软件得以针对它们进行优化。下面详细分析每项特性的好处。

5.1 虚拟化技术

虚拟化广泛应用于各类场景:它允许单一物理CPU模拟多个虚拟机(VM),并在虚拟机之间提供隔离。许多应用并不需要独占整个物理CPU,因此虚拟化能够提高物理CPU的利用率,同时保障不同虚拟机之间的安全性。在拥有数十个处理器核心的数据中心中,虚拟化是实现高效扩展的关键。即便在小型机器集群中,虚拟机和虚拟化技术也能支持机器迁移、快照和隔离等功能。Canonical的多款产品都使用了虚拟化技术,我们认为成熟的虚拟化支持是RISC-V从嵌入式设备向更大规模应用扩展的必要条件。

5.2 向量运算

虚拟化对于大规模工作负载的扩展至关重要,而向量指令则专注于加速单个工作负载,尤其是计算密集型任务。为CPU添加向量单元会显著增加芯片面积,但对于能利用它的工作负载,性能提升同样巨大。虽然向量通常与机器学习、图像处理等重型计算任务相关联,但就连操作系统本身也会用它们执行内存复制等基础操作。为了在用户空间使用向量,内核必须了解寄存器文件及其相关状态以管理上下文切换,因此操作系统层面也需要支持。

RISC-V有意设计为可扩展的向量扩展:实现可以选择合适的向量长度,而软件无需修改或重新编译即可运行。这意味着,一个小型顺序CPU可能使用64位或128位向量,而服务器级CPU则可使用256位甚至更宽的向量,无需重新编译代码。与虚拟化一样,我们认为向量是现代高性能处理器(从桌面到服务器)的必备特性。对于小型嵌入式系统,功耗通常至关重要,即使微小的向量实现也可能占用较大面积和功耗。为此,RISC-V正在开发RVB23配置文件,它将移除RVA23中的部分强制特性。

六、为何是现在?

硬件与软件相互依存。对于任何新技术,都需要找到恰当的时机推动标准化。RVA23的推出标志着RISC-V生态迈向成熟:虚拟化和向量这两项过去属于“可选”的特性如今成为强制要求,为操作系统和应用程序提供了确定的底层能力。这不仅降低了开发者的适配成本,也为RISC-V进军服务器、数据中心等高性能领域铺平了道路。


关注微信号:智享开源 ,及时了解更新信息。

原文链接:https://ubuntu.com//blog/risc-v-profiles-why-is-rva23-significant

评论列表

发表评论

你必须 登录 才能发表评论.

为您推荐


请支持IMCN发展!

谁在捐赠

微信捐赠 支付宝捐赠
微信捐赠 支付宝捐赠
ta的个人站点

发表文章4324篇

关注我的头条 不要放弃,百折不挠,坚强、自信。


扫码关注公众号:智享开源

最新科技信息


[blog_mailer_subscribe]

归档

近期评论

💬 和我聊聊