每周一龙:第 22 期
每周一都为大家报道 LoongArch 社区最前线的第一手新鲜资讯! 本期的主要内容有:LoongArch v1.10,工具链的进展,以及杂七杂八的上游活动。 详情点进来看!
如无特别说明,文中提及的日期、时间都为北京时间(UTC+8)。
要闻速递:千呼万唤始出来,龙架构上新了!
10 月 23 日,龙芯中科将《龙芯架构参考手册》更新到了 LoongArch v1.101 版本。 这一修订版主要是将 LA664 微架构(对应 3A6000 型号)的新增、变更特性落成文档了。
变更内容
为方便阅读,现摘录《龙芯架构参考手册》卷一 1.5.1 节(LoongArch V1.11 版本新增内容)如下:
- 新增近似求解浮点数开根和浮点数开根求倒数指令,
包括标量运算的
FRECIPE.S
、FRECIPE.D
、FRSQRTE.S
、FRSQRTE.D
指令,128 位 SIMD 运算的VFRECIPE.S
、VFRECIPE.D
、VFRSQRTE.S
、VFRSQRTE.D
指令 和 256 位 SIMD 运算的XVFRECIPE.S
、XVFRECIPE.D
、XVFRSQRTE.S
、XVFRSQRTE.D
指令。 - 新增
SC.Q
指令。 - 新增
LLACQ.W
、SCREL.W
、LLACQ.D
、SCREL.D
指令。 - 新增
AMCAS.B
、AMCAS.H
、AMCAS.W
、AMCAS.D
、AMCAS_DB.B
、AMCAS_DB.H
、AMCAS_DB.W
、AMCAS_DB.D
、AMSWAP.B
、AMSWAP.H
指令。 - 新增
AMADD.B
、AMADD.H
、AMSWAP_DB.B
、AMSWAP_DB.H
、AMADD_DB.B
、AMADD_DB.H
指令。 - 增加
dbar
指令部分非零 hint 值的功能定义。 - 新增 64 位机器上执行 32 位整数除法指令是否受源操作数寄存器高 32 位值影响的判定方式。
- 规范相同地址 load 访存操作顺序执行行为判定方式。
- 增加消息中断的定义。
- 允许实现硬件页表遍历。
《手册》明确保留所有权利且禁止非经书面许可的转载。 但根据《中华人民共和国著作权法》第二十四条第一款第一项、第二项, 我们确信以上对《手册》内容的摘抄属于合理使用范畴,不受《手册》版权声明约束。
主编点评
按照原文列表编号看,说是 10 条变更,其实分类有点太过扁平了: 比方说其中 6 条都与原子操作有关,且 2、3 两条都属于 LL/SC 操作范畴,5 中的原子交换操作也不知为何没放入 4。 那么先抛开这些行文细节,宏观来看,大的变更主要有以下几个方面:
- 同步/原子操作能力,得到了一轮相当的迭代、优化(第 2、3、4、5、6、8 条);
- 以正式文字形式,变相承认了初代 LoongArch 硬件事实上的奇葩坑点,及如何方便判断该坑是否存在(第 7 条);
- 在特权架构方面,做了更多性能优化的尝试(第 9、10 条);
- 可能出于特定应用场景需要,新增了一套更快的开根号、开根号同时求倒数的操作(第 1 条)。
说到原子操作:当代软件已经深度依赖多核、并行操作,
而每个处理器核往往也深度乱序执行以保证单线程性能;
为在这样恶劣的环境下保持程序语义正确,
内存模型——可以简单理解为具体系统上所有处理器核访存副作用的精确描述——其重要性勿庸赘言。
这些优化当然是 LA664 相比前代微架构能够取得整体两位数百分比性能提升的重要基础:
印象中单纯上文第 6 条的细粒度 dbar
改进,在内核适配后,就达成了 10% 还是 20% 的提升。
实际上,目前这方面应该也只有第 6 条被实现了:因为只有它能够向下兼容较早的处理器型号。
如果在具体场景能够不考虑旧处理器型号而生成机器语言的话,优化程度只会更高。
说到第 7 条的坑:考虑到龙芯公司的团队规模、投入资金之可怜,以及初代
LoongArch 推出之仓促,
多少捏出几个 bugs 其实也无可厚非,没什么喷点:没 bug 才不对劲呢!
这 div.w
系列指令(卷一第 2.2.1.13 节),作为一套 32 位操作,却与整个 LoongArch
其余 32 位操作行为都不同:
居然仍然会看入参的高 32 位,不是符号扩展就输出垃圾结果——虽然不做 64 位运算,但还得照 64 位准备!
这估计是源自最早期 MIPS 乘除法器与流水线分离的历史包袱:MIPS 的 32 位乘除法指令都有相同限制。
龙架构的 32 位乘法未受影响,但除法、取余的具体实现不幸与 MIPS 行为一致了。
显然设计师们并不认为这很合理——要不然也不会在 LA664 就改掉了;
但旧的型号才发售没多久,还得继续支持,于是新版手册并没有修改第 2.2.1.13 节的内容,
而是在第 2.2.10.5 节 CPUCFG 数据的介绍中提了一嘴:
可以看 CPUCFG.0x2.DIV32[bit26]
来确定当前处理器是否受此坑影响。
笔者预计相当长的一段时间里,估计都只有 JIT 运行时能从中受益: 和上文的原子操作新指令一样,想要整个系统都用上这几个操作的正常、宽松语义, 就意味着失去前代产品的兼容性。 因为 32 位除法、取余操作是如此的基础,如果每用一次之前都要动态检查 CPU 特性, 那性能不堪设想。 但 JIT 编译器不一样:它动态生成的代码并不受它自身限制,因此完全可以做到动态探查一次 CPU 特性,后续据此生成、运行对当前系统最优化的机器语言,而自身则保持与最兼容的基线对齐。
既然提到了硬件的坑,那么其实也不得不吐槽下第 10 条这个硬件页表遍历机构: 至少在笔者拿到的第一批 3A6000 板子上,这个功能估计被固件禁用了; 相应的 CPUCFG 标志位读出来是 0,内核实际也没用上。 不清楚前几天发售的量产批次还有没有这问题: 如果这些板子上这标志位也是 0, 那估计 3A6000 这个机构就是有什么坑,导致用不起来了。 不过也无伤大雅:其他方面的改进实在太大了,瑕不掩瑜——等下个批次或者下一代产品吧!
说回第 9 条,这个应该没坑了——也不一定;因为目前 Linux 内核并没有加入相关支持。 不过手册既然放出了,内核层面这个特性也能做到向后兼容,那么就期待接下来一两个周期它能得到支持吧。
最后是第 1 条这一套浮点运算优化:
笔者实测了 frsqrte.s
指令比著名的 Quake III Arena 快速平方倒数算法精确,
且不是单纯将这个经典算法最后一步的 Newton 迭代多跑一两轮那么简单。
具体用的啥算法目前不知道,毕竟笔者没精力对处理器设计领域的前沿论文保持关注;
快就完事了!
这些操作虽然不如 IEEE 754 规范上要求的那么精确,但胜在执行快:这对 3D 渲染、
物理引擎、粗浅的数值模拟,之类精度要求不那么高的场景都是好事。
不过龙架构这个发明比较有开创性,以至于从目前的编程语言都不太容易调用它们,
非得手写点汇编不可;
有兴趣的同学可以看看能不能给你爱用的数学、图形学软件提 PR 加支持了!
总之,这次更新对性能提升行之有效,对群众折腾十分友好,相信它能成为众发烧友多年后的美好回忆(也可能不 😈)。
先「马」再看
本栏目的内容具有一定延续性,将持续追踪报道 LoongArch 领域的重要或长期项目(坑)。
Linux
Linux 6.6 正式版已经发布。 本周和下周是 Linux 6.7 的合并窗口; 目前龙架构分支仍然保持在只有 KVM 补丁的状态,等待 KVM 维护者的拉取。 不用急:有两周时间,并且本身龙芯也习惯在第二周的周五发出 PR,争取多点完善代码的时间。
工具链
binutils
Jiajie Chen 研究完 3A6000 彼时尚未公开的指令之后, 一看到 LoongArch v1.10 正式公布, 两天后的 10 月 25 号就掏出了给 binutils 新增这些指令汇编、反汇编支持的补丁(当然只做了正式见诸文档的那部分)。 杰哥威武! 感谢 xry111 提供新闻线索。
gcc
正在笔者龟速赶稿之际,Xi Ruoyao 修复了交叉汇编器就绪前, 构建交叉编译器会失败的问题。
LLVM
上期报道过的 FCC 搬运支持补丁, 10 月 27 日被移植回了 LLVM 17 分支。
看评论区,这个 bug 是下游有人编译 UE4(大名鼎鼎的虚幻四游戏引擎)发现的; 而 LLVM 17 系列的发版管理员在 Ubisoft(育碧)的工具链部门工作。 游戏推动先进生产力!
杂闻播报
应微信「龙芯读者俱乐部」群的「啊哈哈」群友反馈,从本期《每周一龙》开始, 略微扩充了前言部分。感谢这位读者的建议!
来自安同开源社区(AOSC)的朋友王江津为 Google 的 OpenSSL fork BoringSSL 提交了适配任意非官方支持的小端 (little-endian)32 位或 64 位平台的补丁。
xen0n 在给 Debian loong64 port 监工的过程中,发现 buildd.debian.org 的统计图表页面一直缺龙架构, 于是顺手帮忙加上了。 虽然历史数据没法补,但也无伤大雅——这 port 出生都没几天哪!
xen0n 选取了 R 语言的番茄色 tomato
为龙架构配色,原因写在了提交说明:
- 跟龙芯的 logo 配色差不多,都红不溜秋的,以及
- 番茄 🍅 基本上也好吃!
(其实当然首要考虑是区分度;这点倒是忘记在提交说明写上了。😂)
张贴栏
本栏目可供张贴公益性质的各种信息。
- 友情扩散:安同开源社区(AOSC)的龙架构移植主线化工作「合龙」仍在如火如荼进行中, 此工作完成后龙架构将升格为 AOSC OS 的 Tier 1 架构。 欢迎同学们试用、反馈,也欢迎有志之士一同加入(沟通渠道详见 AOSC 网站相关栏目)。
- 站务公告:应广大沉默读者群体的需求(你们的沉默震耳欲聋;lóng 没有双关), 我们已为本站取得了中国大陆 ICP 备案, 以便为中国大陆地区读者提供其境内的 CDN 加速: 您打开本站应该不卡了。 详见本站动态。
- 本周报持续接受网友投稿。欢迎来上游坐坐!