纵观美国芯片和软件系统的历程,可以发现,美国各大企业当初大多坚持自己的路线,开发了多套指令集,有X86,RISC等,还有其他一些不太知名或行将淘汰的。
但我国以前没有一个公司推出自己的指令集。龙芯是第一个。
以前还有很多人说,芯片像房子,指令集像砖头。没有必要再造一遍砖头。
实际上砖头也有必要重构。
当然,难,确实是难,技术上有人家的专利拦路,市场上软件开发商未必愿意兼容。但再难,总得有一个公司开始做。
如果都只考虑市场效益最大化,将来美国又耍流氓怎么办?
所以,龙芯走出这一步是对的。再难也要迈开这一步。
现在系统芯片方面,上海兆芯也搞了一套相当于i5的水平的14纳米处理器。然而长远来看仍然受制于X86授权,也非长久之计。
今天,美国对华为的制裁进一步升级,连采购联发科也被禁止。
这些年我们芯片设计发展迅速,制造的投入却远远跟不上。现在大受其害,短板暴露无遗。
还是要像龙芯这样未雨绸缪,从根上走自主道路。
摩天大厦绝不能建立在借来的地皮上。
基本思路和全美达(后来nVIDIA收购了,做了丹佛核心,用在Tegra K1上面)有点类似。
不同指令集,我都二进制翻译过来执行,硬件执行就是个效率问题。
全美达是超长指令字, LoongArch自己搞了2000多条指令,用来转换,通吃的节奏
苹果这次从X86到ARM,效率就挺高了。
从胡的报告看,他认为这样法律风险小,当年全美达也胜诉了。
但是,这个东西效率估计会很成问题,100%、90%、80%,70%这是目标,实际能不能有50%?
微软搞的X86转ARM,英特尔搞的ARM转X86,效率都很低。
就是苹果搞的似乎高一点。
胡伟武说现在芯片面积过剩,性能过剩了,可以浪费一点搞。
但是,今年的龙芯3A5000用12nm,桌面功耗限制,流片成功,也就是SPEC 2006 INT 30分。
骁龙865的A77大核心用7nm,不到2W,跑分是33分。
即使模拟成功,达到理想值,实际跑起来,性能还是弱的。
这个主要还是备胎功能,万一X86不让用了(兆芯,海光能不能继续用还是有点疑问)
ARM不让用了,还有个龙芯可以跑,各部门还能正常运转。
单从指令集的角度来谈谈我的看法,我个人其实在很多方面并不是特别喜欢RISC-V指令集。如果单纯凭借现有的信息谈我对LoongArch的看法,我想通过将他和RISCV进行对比。
一、授权方式
RISCV,成于开源,败于开源(现在说败还不准确,但是个人不看好)。
我很庆幸LoongArch把指令集的所有权利都拿在了自己手里,至少这样官方可以对指令集实现完全的控制。现在的RISCV社区,基本上没什么新特性是不需要等官方commit的。本来RISCV是为了“方便大家魔改”的,然而现在的RISCV的状态是“啥事儿都得自己魔改”。
我不得不承认RISCV的指令设计确实高超,尤其是它常规指令的设计堪称业界典范。但是对于外围的一些专用指令,由于缺乏一个强大的中心集团,整合力度非常差。就比如说RISCV的SIMD指令集,到现在也没有一个真正能用的。唯一一个稍微像样的Hwacha向量指令集,本质上还是一个协处理器,连乱序执行流水线都整合不进去,更不用说做编译器层的优化了。相比之下LoongArch一出生就带着128和256位向量指令集。
(我在这还批判过RISCV存在的另一个问题: https://www.zhihu.com/question/368938376/answer/1406936646)
LoongArch选择指令开放但是保留指令集所有权利,这是我个人认为的最完美的指令集“行政”方式。
二、TLB层的“两级虚拟地址映射”,微码级的Binary Translation,面向构架的寄存器重命名(前半部分是引用原文,后面两部分是我猜的)
LoongArch的本质就是一个面向Binary Translation的指令集
有了前面做MIPS吃过的苦,龙芯团队还是非常明白生态的重要性的。可是开发一个新指令集,生态又不可能好,于是必须得通过Binary Translation来实现。
硬件加速Binary Translation技术基本上龙芯团队可以算是目前全世界玩得最溜得了。TLB级的两级虚拟地址映射解决了qemu这类软虚拟机的巨大的内存性能损失。而我个人猜测LoongArch的内核可能会实现微码级的Binary Translation。
其实现在X86的处理器基本上也都是基于微码了。微码执行是在执行的时候动态的讲X86指令集翻译成微码来执行,而LoongArch的内核很可能会可以直接将X86,MIPS,Arm,RISCV等一系列指令集翻译成自己的微码然后一并执行。然后即使对于各个构架不对称的寄存器,也可以通过魔改寄存器重命名单元来实现。如果能做到这两点的话,发布会上宣传的实现70%的原生性能还真不是什么难事儿。
_________________________________________________________
最后,不知道是官方的LoongArch文档还没有发布还是说我没有找到,如果已经发布了是我还没找到的话还请热心网友发我一份,文档外如果有其他消息的话我一定做更细致的分析!
————————————————————————
题外话:LoongArch构架难道是“长征”构架?(顺手黑一下Bing)
现在已经可以从官网拿到正式文档了。
简单说说大致读完指令集文档之后的体会(目前只有基础构架文档)。
首先,相较于RISC-V来说,算数指令集中多了ALSL指令,算是一个小改良,几乎不增加ALU成本但是在小部分情况可以节约一个指令。其他的算数指令集包括乘除法也都是中规中矩。
需要注意的是LoongArch的基础构架本身就定义了乘除法浮点以及位操作指令,这里与RISC-V的拓展指令集不同。
跳转指令集中的BL是一个非常与众不同的设计。该指令可以理解为JIRL指令的精简版,把目标寄存器绑定在r1上。其执行起来会更快。只是在没有整体实现之前还不好评估是否值得增加这个指令带来的成本。(我其实有点担心这个指令在乱序核心中的实现,如果BL和JIRL都被解释成微码并且通过register renaming之后BL是否还会带来性能上的提升呢?)
原子指令集在精简版中和完整版中是不同的,精简版中原子操作通过原子访存实现,性能很低而且几乎无法乱序化。完整版中的原子操作和传统实现方法基本一致。
内存模型是WC(Weakly Consistent),无可厚非。
比较有趣的是官方预留了Barrier的hint实现。缓存也提供了显在的preload操作(这个也可以看作是一个hint指令)。RISC-V目前对于HINT指令的document基本上还是一片空白,至少正式文档中还未曾出现。于是我非常期待LoongArch对Hint的实现,毕竟等RISC-V出文档可谓是三年之后又三年。。。
浮点指令没有支持BFloat16或者其他深度学习专用的数据类型,稍微有些遗憾。
还有一点就是文档中的这一句话让我十分不解。希望这句话背后是个天大的秘密,目前我盲猜LoongArch想把Binary Translation做到指令Cache的层面。也就是说想显在的控制指令Cache去加速Binary Translation和执行的过程。如果真的做到这一点就牛逼了。
总体来说,LoongArch的大部分设计都中规中矩,与此同时预留了一些可以结合自己生态进行发挥的空间。话说回来,对于设计指令集来说,中规中矩本身就是优点。
毕竟,回头看看历史上设计最风骚的那些指令集到最后:都!!死!!了!!
本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度,google,bing,sogou 等
© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有