网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
06月10日漏签0天
中国芯吧 关注:15,095贴子:282,850
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 2回复贴,共1页
<<返回中国芯吧
>0< 加载中...

聊一下龙芯的生态困境及为什么x86翻译效率低下

  • 取消只看楼主
  • 收藏

  • 回复
  • Matterhorm
  • 麒麟9000
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
LoongArch作为全新指令集面临巨大的生态挑战,龙芯主要解决思路:
1、和社区合作推进开源生态。在3a5000推出时,龙芯使用闭源系统(这里的系统不仅仅指操作系统,还包括binutils、gcc、glibc、LLVM、musl、OpenJDK、Debian、QEMU等等)+开源应用为主,但他本身的闭源系统大部分是基于开源软件适配的,而开源软件版本火车一直往前跑,龙芯官方的维护人员一定没法一直追着版本列车适配的(比如GCC龙芯适配了8.3,但是后续的12.1、12.2等等版本仍然不包含LoongArch的适配代码,龙芯想要新特性就需要适配源源不断的新版本,人力成本巨大)。唯一解是拥抱开源,适配代码合入开源主线。
但开源的平台也存在规则,比如开源系统要适配海量硬件,对新硬件的适配要考虑其他硬件的兼容性。其次开源爱好者大部分对技术追求度高,要求功能以比较优雅的方式去实现。这就必然会带来冲突,龙芯原本内部修改的代码开源界不会全盘接纳,甚至对原先功能的实现逻辑提出挑战,这也导致了龙芯新旧世界的分裂。
2、推动应用厂商做兼容改造,这条路的主要困难点在于,其他商业公司为什么要配合适配。但是毕竟LoongArch属于龙芯这家商业公司,不属于全体中国人或其他商业公司主体,作为商业公司,龙芯要考虑赚钱活下去,其他公司一样要考虑这个问题。因此会导致这种市场占有率极低的硬件软件生态适配性差。当然在新创等政策性性市场,作为吃这碗饭的软件厂商,肯定要积极适配新创支持的CPU架构(还是商业逻辑的本质,适配你会带来商业利益才能驱动其他商业公司去适配)。
当然也存在少数为爱发电的商业公司,会积极响应开源或因为情怀来投入部分适配工作,但这毕竟属于少数,也不能强求。
3、x86指令翻译,x86翻译也会遇到一些问题:
(1)、x86指令的专利问题,导致龙芯目前仍然不敢开放LoongArch指令集卷2、卷3(卷2的部分向量指令和mmx、sse等指令集过于相似,可能涉及知识产权问题,也无法公布);
(2)、翻译性能,龙芯官方也在PPT中给出了80% x86指令翻译性能。在研究近期龙芯CPU的性能时,对这个问题有一点其他看法:
讨论这个问题之前,实际上要先研究近期的6000是如何提升性能的
a、LoongArch是一种新架构,没有任何历史包袱,这就意味着龙指令集可以充分吸收目前已有架构的优点,可以对指令集做优化,删减部分效率低下的指令,同时可以使用激进的向量指令优化。LoongArch指令集比MIPS等传统指令集指令密度提升7%,并开启激进的向量优化和并行化,进一步提升LoongArch性能。
而这是传统x86、ARM指令集无法比拟的,尤其是x86,x86有极其复杂的兼容关系,再加上Windows系统极其变态的软硬件兼容性要求(比如win11可以直接运行03、04年的程序,甚至通过简单补丁,可以运行90年代的某些程序;又比如win10可以跑15年前的Q8300上。直到win11,最低指令集要求才是AVX2),这导致很多x86程序无法享受向量指令带来的性能优化,尤其是AVX/AVX2/AVX512指令。
b、3a6000使用“-mtune=la664”专属的微架构编译优化参数,可以将3a6000 spec 2006 int单核跑分从35.7(默认为-mtune=LA464)提升到40.1(-mtune=la664);除了微架构优化,龙芯官方也可以通过进一步优化GCC,来提升性能,比如3a6000使用龙芯内部未开源的GCC版本编译的spec2006进一步提高到43分。
但是在翻译x86程序时,由于x86自身指令集复杂的兼容性问题,以及LoongArch的x86翻译指令也只兼容到SSM4,无法直接翻译AVX/AVX2/AVX512指令,会直接导致LoongArch激进的向量优化策略失效。同时并且因为x86程序不可能使用“-mtune=la664”或使用龙芯专属优化的GCC编译,导致b中的优化也失效。而这也直接导致LoongArch在翻译x86指令时,实际性能会比理论性能更低。
我们可以简单计算LoongArch翻译x86的理论性能为:100*0.80*(35.7/43)*0.93=61.7%(解释一下:80%为龙芯官方PPT说明的翻译性能,35.7/43为专属微架构或专属GCC版本优化性能,0.93为向量化带来的指令密度提升性能【这里只是算一个大概,实际上7%的指令密度提升加向量化不止7%的性能提升】)。
龙芯如果真的想靠x86翻译来解决生态问题,那么就以为着自己CPU性能要打六折(当然这个是理论性能,目前实际翻译性能应该是三折或稍多一点)。当然wine实际上也不太好用,性能也有损耗。


  • Matterhorm
  • 麒麟9000
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
很多人在和龙粉对标的时候,会说龙芯对spec2006有定向优化,但是又不清楚优化细节处于被动状态:
1、loongarch指令集分普通指令、向量指令、翻译指令。由于龙指令集是全新指令集,可以对指令集做精简化删减,提升指令密度。但是传统x86、ARM,都是上个世纪70-80年代设计的,同时经过几十年打补丁,难免有局限性,并且要维持兼容关系,没法做这种精简优化。龙指令靠这种优化可以提升7%指令密度,当然这也不是龙芯自己的独立研究成果,loongarch指令在MIPS的基础上大量参考risc-v,所以龙指令很多指令和rv非常像
2、开启激进的向量优化,这也是新指令集的优势,龙指令和5000一起出来,第一个版本就带完整的向量指令,因此在默认编译参数中支持向量优化。但是龙芯向量指令有我上面说的那个问题,向量指令做的比较早,是龙芯在MIPS时代的产物,当时rv没火起来,龙芯团队对着x86向量一顿狂抄,所以他的很多向量指令和x86的mmx、sse很相似,这里存在知识产权风险,所以他们官方不敢公布向量指令手册
3、开启微架构专属优化,比如指令和数据字节对其定向优化3a6000(这种优化可能对其他微架构性能不起作用甚至副作用),可以提升3a6000取指效率
4、编译器优化,没看到源代码,从spec子项推测是优化指令重排,也导致偏分支预测型的403.gcc、473.astar等子项分数不高


2025-06-10 21:43:11
广告
  • Matterhorm
  • 麒麟9000
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
注意,我没否认你在π的事情上翻译性能确实行了一回,但是100个项目就一个行,剩下9个凑活,其他90个垃圾的不行,最终结论还是不行。
判断真行还是不行很简单,看看官方怎么做的,官方准备2025年q2换苹果的Rosetta2硬件内存一致性同步模型方案了。这已经是龙芯现有x86翻译不行的最直接证据,官方都要否认的东西吹再多也是没意义的



登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 2回复贴,共1页
<<返回中国芯吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示