写在最前
近来龙芯发布了最新的中央处理器——3A6000,我们通过各种渠道,已经了解这颗新处理器的性能和优势,于是最近又开始为 3A5000 重新安装 Gentoo 系统,准备后续作为主要办公机器进行使用。
Gentoo Linux 操作系统大家都有所了解,几乎所有软件都需要从头开始编译、安装,完整构建系统,在完成系统初步安装进入 KDE Plasma 以后,我开始关注如何优化底层系统,于是查阅了 GCC 关于 LoongArch 的优化,于是注意到这个部分:
于是我开始关注起龙芯的微架构。也促成本文。
微架构
龙芯 3A5000 的微架构是 LA464,它分别拆解开这样理解,“LA”代表了 LoongArch 的缩写,第一个“4”代表4发射,“64”代表64位;那么 3A6000 的微架构 LA664 意思就很明显了,LoongArch 6发射 64 位处理器。那么两代处理器的唯一区别,其实主要是发射数的增加,从而,处理器自 3A5000 的4核心,4线程,提升到现在的 3A6000 的4核心,8线程。
而核心的指令集并没有发生变化(个人猜测),目前 3A5000 包含的指令集有:cpucfg lam ual fpu lsx lasx crc32 complex crypto lvz lbt_x86 lbt_arm lbt_mips,其中 lsx lasx lvz lbt_* 都是扩展指令集,其它的指令集应该就是通用指令集,另外,要打开扩展指令集需要编译内核的时候打开相关选项,内核才能支持。
于是个人大胆推测,3A6000 并没有在指令集中添加或者更改,仅仅是在芯片制作工艺、封装以及缓存做了更改。之所以这样推断主要原因就是 GCC 的那个文档,如果假设 3A6000 有相关指令集的增加和优化,那么在公开给新世界 GCC 编译器的文档或者源码中会有相关更新,但目前并没有。当然,如果没有公开和开源,我们就当不存在了。
关于扩展指令集
目前 LoongArch 提到的扩展指令集,LBT, LSX, LASX, LVZ ,从相关公开文档中,我们大概知道以下内容:
- LBT 指的是:二进制转译指令集,能够转译 x86,arm和mips;
- LVZ 指的是:虚拟化指令集;
- LSX 指的是:128位向量指令集;
- LASX 指的是:256位向量指令集。
通过这四个指令集,我们来大胆脑洞一下:
- LBT 指令集用于配合没有开源的 LATX 转译非原生 LoongArch 架构的二进制程序,能够在 LoongArch 上运行;
- LVZ 用于虚拟化,是否能够配合 KVM 提升虚拟机性能?目前个人猜测,应该有相关性;
- LSX 和 LASX 类似于 x86 的 AVX,或者是 RISCV 的 RVV ,提供向量指令集魔法加成。如果应用到生产生活中,最佳应用场景就是人工智能。
回到目前的工作和生活
上面说了那么多,我们可以总结下目前的 3A6000 和 3A5000 从软件底层、从开源的角度分析,真正的价值有些什么:
- 打开扩展指令集支持完整重构的 Linux 新世界操作系统是否存在性能上的提升?
- 首先内核配置需要打开扩展指令集支持;
- 重新配置、构建 GCC 。配置时需要打开
-march=la464
,构建出支持通用指令集和扩展指令集的 GCC - 再用这样的 GCC 完全重构整个系统
- 试验对比两个系统(通用模式的系统和优化的系统),跑分对比性能是否有提升
- LBT 转译指令集对于开源新世界的意义?
- 内核支持 LBT 转译指令是一个非常好的消息,这为将来 LoongArch 新世界 Linux 各个发行版能够使用 LATX 游玩 x86 游戏,运行非原生软件提供了可能性
- LATX 并没有开源,仅存在于商业版本的 Linux 系统中,对于开源社区而言,没有开源就不存在,所以,对于新世界开源发行版,目前是无法利用转译指令集做任何事的,除非未来 LATX 开源
- LVZ 虚拟化目前还暂时没有测试,等待未来有机会测试和研究
- 向量指令集的价值。
- 首先最有价值的是具有向量指令集加成的 GCC 编译器
- 其次是未来利用向量指令集在人工智能领域发力
这些是目前我的脑洞,大家有什么想法也来聊一聊。