关注RISC-V和Chisel以及开源IC和EDA在中国的发展
要点新闻:
上周在加州西部数据总部举办的第七届RISC-V Workshop非常成功,为期两天的研讨会包含了47个session,以及26个poster/demo session。总共有近500人参加,因为安排紧凑,这次甚至取消了提问环节。
下一届Workshop将于明年5月在巴塞罗那的超算中心举行,有机会前往的千万不要错过。
目前基金会有100个左右会员,其中个人会员在过去半年增长了一倍左右。
更多Workshop的详细信息在正式的Video在Youtube上公布之前,可以参看lowRISC的Alex写的Blog文章,接下来的简报也会有更多信息。
Link:
西部数据,一家老牌的数据存储公司,正在努力的将自身转变为一家以数据为中心并且提供开放计算平台和环境的公司。
在Workshop上西数的CTO Martin Fink发表了令人激动的演讲,他首先阐明了公司的愿景,同时表明在其每年出货的产品中包含了10亿个处理器核心。西部数据希望在未来将这 些处理器都替换为RISC-V架构的CPU。编者表示这绝对能让西部数据省下一大笔授权费和版税。为了实现这个目标,西部数据将全力支持RISC-V标准的发展,且积极的采用相关的技术和产品或者投资相关领域的公司。Esperanto这家做高端RISC-V处理器的公司就是西部数据投资的对象之一。
编者认为这个新闻所带来的传播价值远大于其本身,这向所有对RISC-V持怀疑态度的人们传达了一个更加积极的信息,相信能够让更多的伙伴加入到RISC-V的这场革命中来。
相关报道见西部数据官文以及福布斯的报道。
Link:
这次研讨会上,向量扩展指令级是大家所非常期待和关心的。
Roger Espasa代表基金会的V-ext工作组汇报了当前最新的进展。
他首先谈到了V-ext的目标是为了达到更好的能效并且减少指令和内存访问的带宽,也希望能够有很强的扩展性以支持各类规模的实现,当然深度学习和人工智能也和这有一定的关系。
工作组希望充分吸取过去的教训,来定义一种史上最好的向量指令集。这包括充分的可扩展性和灵活性,不仅支持标量和向量运算也希望可选的支持矩阵(2D)运算。
当前的草案中包含(最多)32个向量寄存器,数量是可动态变化的。同时每个寄存器的大小也是可变的,甚至可以是一个Matrix,而且有自己的类型定义。
而向量指令则包含一系列的向量运算和内存相关操作,很多操作都支持Mask,来使得部分计算变得可能。
工作组希望在下次Workshop前ratified这个扩展,同时更加重要的是,他们期待能有志愿者来帮助完成LLVM和GCC auto-vectorizer的支持,这里目前可能还是个空白,并且相信极具挑战性。如果你有兴趣,可以加入基金会和工作组贡献你的力量。
研讨会上紧随着V-ext,安全扩展工作组也报告了其进展,安全这个议题主要包含隔离和加密两部分,这次的报告更多的是阐述其加密扩展。
值得一提的是,安全扩展严重依赖正在定制中的V-ext来实现高效的crypto加速,安全扩展额外增加了一些如GF操作的指令,配合v-ext来高效的实现加密功能。
BOOM的作者Chris Celio临近博士毕业,这一次他在另一个同事的帮助下,共同完成了BOOM的改进工作。
BOOM已经去tape-out,整个tapeout的工作仅用了两个人4个月的时间。这也一定程度上体现了chisel的优势,当需要对一个复杂的CPU体系架构做优化时,更高级的抽象和优化有效的减少了开发的时间,而且chisel这种开放的平台可以允许开发者生成各种不同的实现组合,然后通过后期的仿真和评估结果选择最好的那个。
Chris表示这四个月中大部分的时间都花在物理设计相关的工作上,真正重写chisel并没太花时间。
另外Chris Celio已经被Esperanto收入麾下。
Esperanto这家公司似乎已经低调了数年,在这次Workshop上其决定要更多的出现在公众视野中。
这家公司希望能够补足RISC-V目前没有高性能处理器的这个缺口,并且表示它SiFive并不是他们的竞争对手而更多的是伙伴。
Esperanto发布了数个处理器开发计划,并且很多应用涉及了人工智能等火爆的领域。
ET-Maxion是基于BOOMv2的,并且会为7nm CMOS工艺做优化。
编者评:理想很美丽,现实很骨感,活下去或许最重要!我看好你们!
在这次Workshop上,有一个来自AndesTech和两个来子中科院计算所的演讲,分别是:
希望未来能在RISC-V领域听到更多来自中国的声音。
David Chisnall 在isa-dev上公开了J Extension Group的计划,并征求夥伴加入。这个 workgroup 将针对 managed, interpreted 和 JITed 的语言,像是 C#, Go, Haskell, Java, JavaScript, OCaml, PHP, Python, R, Ruby, Scala or WebAssembly等,提出扩展。
可能的方式包括针对GC(垃圾收集器)和动态内存分配的硬件加速,以及对数学运算的overflow处理等。
详情请参考:连结
P扩展 (Packed SIMD) 一直是大家关注的焦点,可惜一直没有一个 workgroup 专门的推动它。最近,Andes在isa-dev上提出了他们的proposal,计划用他们在AndesStar V3 ISA中针对 DSP和 SIMD 所开发的指令当基础,来推动P extension。Andes所提出的指令,包括SIMD add,shift, compare等,以及非SIMD的部份,像是packing instruction及HW loop。
更多细节可参考mailing list及Andes提出的proposal:连结
nVidia的Daniel Lustig在月初公布了RISC-V内存模型的最新版草案并征求意见。 计划在意见反馈之后,将内存模型草案提交RISC-V基金会讨论,并融入正式标准。 关心内存模型的同学请阅读草案(见下面链接邮件的附件)并在isa-dev邮件列表上提出意见。
这次的草案进一步细化了RISC-V内存模型的定义,包括支持的种类,各种内存模型中具体内存操作的顺序(即硬件必须遵守而不能调整的内存访问顺序)。 RISC-V内存模型支持两种模式:类似ARM和PowerPC的弱内存模型RVWMO和类似Intel x86的强内存模型RVTSO。 一个架构支持两种内存模型是比较奇怪的,大多数的架构只支持一种内存模型。 RISC-V的部分使用者(包括nvidia,SiFive和部分ARM处理器的使用者)其实更支持使用类似ARM的弱内存模型RVWMO,即使用fence来显式地强制需要按序执行的内存操作,而让处理器和微架构确定其他的内存访问顺序以提高性能和降低功耗。 然而,有一部分地x86使用者希望能通过简单重编译地方式将原有跑在x86处理器地程序移植到RISC-V处理器。 软件上修改内存模型需要手动修改代码,现在还不能由编译器自动完成。 这就导致了重编译地程序默认硬件使用TSO地内存模型。 作为折衷,RISC-V内存模型草案规定:
具体软件硬件可组合的方式:
RVWMO的处理器 | RVTSO的处理器 | |
---|---|---|
RVWMO的程序 | 正常高效执行 | 正常低效执行 |
RVTSO的程序 | 执行出错 | 正常执行 |
讨论还在继续中:RISC-V isa-dev 邮件列表 https://goo.gl/5o8rpk
(小编:这个讨论有点发散,不得不惊叹于体系结构还是有那么多令人纠结的惊人的细节) RISC-V priv spec在页表的叶子节点(也就是具体内存页的页表项)上有A(已访问)和D(已修改)两个标志位。 RISC-V可以支持硬件或者软件管理的A/D控制。 现在大部分的处理器和操作系统都使用软件方式,即:出现访问一个页而A==0的时候或修改一个页而D==0的时候,TLB引发页错误要求软件修改标志位。 鉴于该操作可能会很频繁并影响新能,处理器可以选择使用硬件处理,即TLB直接修改页表。这里就引出了好几个问题:
如果操作系统不知道怎么办?操作系统有可能会软件缓存页表标志位,完全硬件处理则导致软件硬件不一致。这个问题还算好解决,硬件处理A/D标志位的处理器需要在device tree中说明。
为什么只有叶子节点才有A/D标志位?中间页表项也可以设置A/D标志位。这样很可能可以在页表的第二级就发现缺页。但是维护非叶子节点的A/D标志位很复杂!
如果硬件修改标志位,TLB会不会误改?比如说ITLB的预取指和深流水线。如果解决该问题,那么所有TLB修改就是个fence了。如果是fence,hypervisor(虚拟层)的行为就不确定了,就不能严格重跑了(hypervisor的一个重要功能)。(小编:这些问题,现在看起来,还是很无解)
isa-dev上的讨论:https://goo.gl/TywzWt
这是一个有趣的问题。
举个例子,SC rd, rs1, rs2
,该指令会检查之前LR
指令加上的锁是否完好,如果完好,则将rs2
的值写入rs1
所指向的内存,用rd
返回1,
否则返回0并不执行写操作。
可是,如果rd
是常置0的寄存器x0
呢?按标准定义,如果锁完好,那么写操作将会执行,但是x0
不能被赋值,所以返回值仍然是0,软件看见的原子操作失败。
显然,一个正常的编译器不会生成这样的代码。
于是,有人提问:
应该把这条指令定义为非法指令吗?这样该指令就可以以后被扩展为其他指令了啊。
的确啊,该指令没有什么合法用途,完全浪费指令空间啊。 可是,RISC-V的产生就是为了设计一个对硬件高效同时软件也高性能的指令集。 指令集的一个基本设计思路就是避免将RISC逐步变成一个CISC。 这也是为什么条件执行、多寄存器压栈等等指令都没有被标准指令级采纳的原因。 如果定义该指令为非法指令,硬件上就必须把它当作一个特殊情况处理。 这样的特殊情况多了,RISC-V就变成”CISC-V”了。
Rocket-Chip提供了一个叫做AXI4Deinterleaver模块。该模块用于重排从AXI总线到TileLink总线的突发报文。 AXI总线允许两个多传输周期的突发报文互相交叠子周期的传输(利用报文的id区分),但是TileLink则不允许一个突发报文被其他报文打断。 为了解决该协议冲突,AXI4Deinterleaver则对多个并发的突发报文经行缓冲再串行传输。
Chisel3终于正式发布了。
相比之前的预发布版本,正式版有一些较明显的语法变动:
value.U(width), value.asUInt(width) /* explicit width */
RegInit()
和RegNext()
方法Reg(init=...) -> RegInit(...)
Reg(next=...) -> RegNext(...)
DontCare
对象来代表可以不连接的信号io.out.debug := true.B
io.out.debugOption := DontCare // explicit undriven input
{
...
val nElements = 5
val io = IO(new Bundle {
val outs = Output(Vec(nElements, Bool()))
})
io.outs <> DontCare // unload output
...
}
clk
更名为clock
。IrrevocableIO
类型。该类型类似于ReadyValidIO
,但是valid
信号一旦被置高,在ready
为高之前,不能撤回。Module
类型,比如支持用户自定义时钟复位端口的RawModule
类型。更详细的说明,请参看Chisel3的发布声明
Michael Clark 最近帮 QEMU 的risc-v port 加上了不少功能,包括针对 priv 1.10 丶SMP丶及PLIC的支援。为了支援还未升级的软件,旧有针对 priv 1.9.1 的部份仍被保存。
更多细节可参考 pull request 71
FOSDEM’18 2018年2月3-4日,FOSDEM (Free and Open Source Developers’ European Meeting)将在比利时的布鲁塞尔举行。
PULP WORKSHOP AT HPCA2018 2018年2月25日,在维也纳的HPCA中,会有一场跟Pulp 有关的workshop。PULP小组会介绍PULP最新的发展,和他们未来的走向,包括 PULP-CAPI (Coherent Accelerator Processor Interface) 和 Ariane (Next generation of 64-bit RISC-V implementations)等。详情可参考 pulpino mailing list 中的 < PULP newsletter - 4Q2017 >。
CNRV提供为行业公司提供公益性质的一句话的招聘信息发布,若有任何体系结构、IC设计、软件开发的招聘信息,欢迎联系我们!
整理编集: 宋威、黄柏玮、郭雄飞
欢迎关注微信公众号CNRV,接收最新最时尚的RISC-V讯息!
本作品采用知识共享署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议进行许可。