找回密码
 立即注册
搜索
查看: 7869|回复: 16

[科技] 华子好像把灵犀指令集公开了

[复制链接]
     
发表于 2026-5-12 20:08 来自手机 | 显示全部楼层 |阅读模式
不懂这些东西,有没有体系结构大手子锐评一下这个架构水平

github主页
https://github.com/LinxISA
文档下载地址
https://github.com/LinxISA/linx-isa/releases/download/v0.3.0/linxisa-isa-manual-v0.3.0.pdf





评分

参与人数 1战斗力 +1 收起 理由
偽物 + 1 好评加鹅

查看全部评分

回复

使用道具 举报

     
发表于 2026-5-12 20:18 | 显示全部楼层
这个架构的水平的优势在于是有水平的架构

评分

参与人数 2战斗力 +2 收起 理由
希望之花 + 1 欢乐多
langjoy + 1 什么小小泉语法

查看全部评分

回复

使用道具 举报

     
发表于 2026-5-12 20:20 | 显示全部楼层
好像是VLIW体系的。
回复

使用道具 举报

头像被屏蔽
     
发表于 2026-5-12 20:25 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

发表于 2026-5-12 20:31 | 显示全部楼层
喂给deepseek v4,它说的:
根据你提供的《Linx Instruction Set Architecture Manual (v0.3)》,这份文档定义了一个名为 Linx 的全新 RISC 风格指令集架构。它的设计融合了现代 CPU 的多种先进思想,同时也展现出一些非常独特的原创特性。

总的来说,Linx ISA 是一个为编译器友好、硬件实现灵活、并面向未来加速器(尤其是AI)而设计的、具有块结构化控制流的新型 RISC 架构。

下面为你梳理其核心特点:

一、最核心的创新:块结构化控制流

这是 Linx 区别于传统 RISC(如 RISC-V、ARM)最显著的特征。

· 基本块是“一等公民”:代码被明确地划分为基本块。每个块以 BSTART (或 C.BSTART/HL.BSTART) 指令开始,以 BSTOP (或下一个块的开始) 结束。
· 控制流目标必须是块头:所有的跳转、调用、返回指令,其目标地址必须指向一个块的开始(即 BSTART 指令)。跳转到块中间会被视为非法,这增强了控制流完整性。
· 显式的块间条件传递(BARG):块之间不通过通用寄存器传递条件码。块内的 SETC. 指令会设置一个内部的块参数寄存器 (Block Argument Register, BARG) ,当块结束时(遇到 BSTART 或 BSTOP),CPU 会根据 BARG 的值来决定下一个块是哪个。这使得分支预测和块提交流水线化。
· 支持“解耦块” (Decoupled Blocks):块的“头”(header,描述元数据)和“体”(body,实际指令)可以分开存放。头部在指令流中,通过 B.TEXT 指令指向位于别处的体。这种设计非常适合用来描述一个加速器任务:头部打包了任务参数,而体则是在加速器上执行的指令序列。

二、独特的暂存器设计:ClockHands

为了解决寄存器压力并减少内存访问,Linx 为每个基本块提供了两个私有的、深度为 4 的结果队列,称为 ClockHands。

· T-hand 和 U-hand:每个块拥有 T 和 U 两个独立队列。
· “推入即用”:算术或加载指令的结果可以直接“推入”(->t 或 ->u)到队列头部,成为 t#1 或 u#1。
· 自动过期:队列是固定深度的。每次新的推入,最旧的值(t#4)会被“挤掉”并丢失。
· 编译器友好的短期临时值存放地:非常适合存放那些生命周期仅限于当前基本块的临时变量,从而减少对通用寄存器(GPR)的压力。如果一个值需要跨块使用,则必须将其从队列中移到 GPR。

三、丰富的指令编码与可变长度

· 16/32/48/64 位可变长度指令:提供 16 位的压缩指令(C. 前缀)用于高代码密度,32 位指令用作基础,48 位(HL. 前缀)用于更大的立即数或偏移,64 位(V. 前缀)用于向量操作。
· 前缀/后缀组合:48位和64位指令通常由一个16位或32位的前缀和一个32位的主指令组成,在逻辑上视为一条指令。

四、为 AI 和向量计算深度优化(v0.3 阶段)

文档的 v0.3 版本明确引入了对 AI 工作负载的支持。

· SIMT 执行模型:向量块(VSEQ/VPAR)采用单指令多线程(SIMT)模型,即一个块体描述单条 lane 的操作,硬件在由循环边界寄存器(LB0-LB2)定义的多维空间上自动重复执行。
· Tile 寄存器 (TAU):定义了 32 个架构性的 Tile 寄存器,每个大小可达 4KB,总容量 128KB。这些是用于硬件加速器(如矩阵乘法引擎)操作的大型数据块。
· 专门的块类型:有多种块类型用于不同场景,例如 BSTART.TMA (Tile Memory Access,用于加载/存储 tile)、BSTART.CUBE (用于矩阵乘法)、BSTART.MPAR/MSEQ (用于内存并行/顺序操作)。
· 向量规约操作:V.RD* 指令族用于在向量块内部将多个 lane 的值规约(如求和、求最大值)到一个标量结果。

五、现代且灵活的特权架构

· 访问控制环 (Access Control Rings, ACR):类似 ARM 的异常级别(EL),最多支持 16 个环,形成树状特权级结构。ACR0 权限最高(固件),ACR1 为操作系统,ACR2 为用户态。
· 系统寄存器 (SSR):拥有庞大的系统寄存器空间,使用 SSRGET/SSRSET 等指令访问。许多 SSR 是“banked”的,即为每个 ACR 都有一份独立副本。
· 基于 MMU 的内存管理:实现了类似 ARMv8 的页表格式(4 级,4KB 页),支持虚拟内存,并可选择启用 IOMMU。

六、内存模型与原子操作

· TSO (Total Store Order):采用总存储顺序内存模型,与 x86 的强一致性模型类似。这对移植现有软件和硬件设计都比较友好。
· 丰富的原子操作:支持 lr/sc(加载保留/条件存储)和 ld.add/sw.max 等多种读-改-写原子操作,并带有 .aq (acquire) 和 .rl (release) 语义,支持同步原语。

总结:与主流 ISA(RISC-V, ARM)的异同

特性 Linx ISA RISC-V ARM (AArch64)
控制流 块结构化 (Block-structured) 分支和跳转 分支和跳转
临时值处理 ClockHands 队列 通用寄存器、栈 通用寄存器、栈
指令长度 16/32/48/64 位可变长 32 位基础,16 位压缩扩展 32 位固定长 (A64)
向量/SIMD 通过 SIMT 模型 + Tile 寄存器 实现 V 向量扩展 SVE/SVE2, Neon
特权级 ACR 环 (最多16个) 3 种模式 (M/S/U) 4 个异常级别 (EL0-EL3)
设计哲学 加速器/编译器的垂直集成 简洁、模块化、社区驱动 高性能、后向兼容、生态庞大

总而言之,Linx v0.3 是一个野心勃勃的设计。它并不是简单地模仿某个现有架构,而是试图通过块结构化和ClockHands等独特机制,从根本上解决现代处理器(尤其是异构计算和AI加速)中控制流和数据流管理的痛点。它看起来像一个为高性能计算、AI 训练/推理、以及需要紧密耦合专用加速器的场景而“量身定制”的架构。当然,其成功与否将极大程度上取决于后续的软件栈(编译器、模拟器、操作系统)的成熟度以及硬件实现的效率。    Re:Source
回复

使用道具 举报

     
发表于 2026-5-12 22:38 来自手机 | 显示全部楼层
灵犀指令集(LinxISA)综述

1. 引言:软件定义硬件的新篇章

计算机体系结构始终围绕着“软件”与“硬件”之间复杂而动态的分工展开。从复杂指令集(CISC)到精简指令集(RISC),再到超长指令字(VLIW)和显式并行指令计算(EPIC),每一次范式的演进,本质上都是对“由谁(硬件还是编译器)来挖掘并行性”这一根本问题的不同回答。

在当今这个摩尔定律放缓、能效比至上的时代,我们面临着传统超标量(Superscalar)乱序执行内核功耗过高、VLIW架构编译器脆弱且二进制不兼容的双重困境。灵犀指令集(LinxISA)的出现,为解决这一困境提供了全新的思路。LinxISA的核心设计哲学是“软件定义硬件”:它将指令调度和并行优化的重任从复杂的硬件逻辑转移到编译器,但同时为这种静态调度提供了前所未有的灵活性和安全性保障。
2. 核心设计特征概览

LinxISA在技术手册中被定义为一种“RISC风格的指令集架构,但其控制流契约和临时值模型与经典RISC设计有本质不同”。其核心创新点可以概括为:

    块结构化的控制流:程序由显式的BSTART/BSTOP标记划分为原子性的“指令块”,所有控制流转移的目标必须是合法的块入口。

    松散的块内指令语义:块内指令序列本质上是线性的,无内嵌的控制流,这使编译器可以在更大范围内进行调度,硬件也可以在块内安全地进行乱序发射。

    可移植的显式数据依赖:通过B.IOR, B.IOT, B.DIM, B.ARG等丰富的B族描述符,块可以向硬件清晰地声明其输入/输出合同、数据布局和循环边界,使计算意图对硬件透明。

    解耦的架构状态:ISA将状态显式划分为全局状态(GSTATE)和块本地的临时状态(BSTATE),后者如同一个执行时的“沙盒”。

    可变长编码:支持16/32/48/64位指令,兼顾了代码密度与编码空间的扩展性。

上述所有特征都服务于一个核心抽象——“块”。理解块的设计,是理解LinxISA优越性的核心。
3. “块”:超越传统乱序与VLIW的并行抽象

传统计算模型将程序视为一个线性的指令序列,硬件必须从这个一维的序列中“猜测”并行的可能性。无论是现代超标量处理器的乱序执行,还是VLIW的静态调度,都在这个底层模型上挣扎。LinxISA的“块”本质上是一个更高维度的、以数据流图为中心的原子执行单元,从而带来了革命性的变化。
3.1 对传统乱序执行的降维打击

现代高性能CPU核心之所以昂贵且耗电,很大一部分源于其庞大的前端设计:分支预测器、指令预取器、解码后的uop缓存等。它们存在的目的,都是为了解决一个根本问题:指令流在本质上是碎片化的、充满不可预测的分支。

LinxISA则通过块的四大特征,使这一问题从架构层面彻底消失:

    明确的出入口(BSTART/BSTOP):所有控制流转移都以块为最小单位,且目标必须是BSTART标记的合法入口。这意味着,硬件前端不再需要在连续的指令流中“猜测”下一个分支目标,而是可以确定性地、一次性抓取一个完整的“块体”。分支预测器被降级为一个简单的、用于选择下一个块地址的多路选择器,其复杂度和功耗呈指数级下降。

    内部无控制流:块体内部是由编译器保证的线性指令序列,不含任何条件或无条件跳转。这消除了指令流中所有的“气泡”和“碎片”。硬件在块内取指时,面对的是一个确定的、连续的、高密度的“计算载荷”。取指带宽的效率得到最大化的利用。

    内部数据依赖为显式:传统超标量处理器必须通过复杂的寄存器重命名和指令发射窗口,动态地“发现”指令间的数据依赖关系。在LinxISA中,编译器已经完成了这项工作。编译器通过指令的排布和块内临时寄存器的使用,隐含但清晰地表达了数据流图。同时,B族描述符更是在更高层面向硬件传达了任务的数据“脚印”。这大幅简化了硬件发射逻辑的复杂度。

    天然的原子性(状态解耦):LinxISA最精妙的设计之一,便是将架构状态区分为全局状态(GSTATE) 与块本地状态(BSTATE)。块体中的所有计算只在BSTATE沙盒中产生中间结果,仅在块边界(BSTOP)提交时,才原子性地更新对全局状态(GSTATE)可见的寄存器或内存。

正是这一特性,构成了LinxISA对传统乱序执行的终极优势。它意味着,块内乱序执行可以在没有昂贵的重排序缓冲区(ROB)和复杂异常恢复逻辑的情况下安全实现。如果块内发生异常或中断,硬件无需精确回滚到某条指令,而只需简单地丢弃整个BSTATE沙盒,然后从块头(BSTART)重新执行即可。这种设计用极低的硬件成本,换来了激进的块内乱序执行能力。
3.2 对经典VLIW困境的优雅解答

VLIW架构的初衷与LinxISA相似:“让编译器去做复杂的工作”。编译器通过静态调度,将多条无依赖的指令打包成一条“超长指令字”(VLIW),而硬件只需简单地按顺序执行这些指令包。然而,实践证明这种纯粹的静态调度存在两个致命缺陷:

    代码膨胀与脆弱性:由于指令包是定长的,编译器必须插入大量NOP来填充空闲的功能单元,导致代码体积急剧膨胀。而且,不同代的硬件拥有不同的单元数量和延迟,为一款芯片编译的代码在下一代芯片上往往性能不佳,甚至无法运行,导致二进制兼容性问题。

    中断与异常处理困难:一个VLIW指令包可能会同时更新多个寄存器。如果在包的执行中途发生外部中断,硬件面临一个灾难性的状态恢复问题:如何回退到执行该包之前的精确状态?

LinxISA的“块”则从底层哲学上回答了这些问题:

    彻底消灭了NOP:LinxISA从指令集层面就是可变长的,且没有指令槽的概念。编译器不再被迫将指令对齐到固定的模板中,它只需生成一段逻辑正确的、松散的指令序列。代码密度问题得到了完满的解决,实现了真正的微架构弹性——同一段代码,在简单的单发射核上可以顺序执行,在宽发射的高端核上则可以利用块内乱序窗口充分并行,无需任何修改。

    用“事务”替代“指令包”:VLIW的中断难题,源于其“指令包”这一脆弱的原子性边界。而LinxISA的“块”是一个更健壮的事务边界。中断恢复的粒度从“一条复杂的超长指令”变成了“一个由BSTATE沙盒保护的原子任务”。恢复时只需丢弃沙盒,从明确的块头重来,其逻辑清晰性和硬件成本远低于VLIW。

简而言之,LinxISA通过“块”和“状态解耦”,成功地将VLIW“编译器驱动并行”的哲学,从脆弱的“静态指令打包”进化为了稳健的 “数据流驱动的事务性计算”。
4. 总结与展望:迈向空间计算的基石

LinxISA已不仅仅是一个指令集,它为编译器向硬件传达一个计算任务的高阶意图提供了统一的接口。块的四大核心特征——明确的出入口、内部无控制流、显式的数据依赖和天然的原子性——正是任何超大规模并行硬件抽象层所必须具备的基本属性。

这些属性天然地指向一种革命性的实现方式:空间计算。

在FPGA或CGRA(粗粒度可重构阵列)这类空间计算架构中,算法的执行不是在功能单元上的时分复用,而是直接在硅片上“铺开”为一条物理的逻辑电路链。一个LinxISA的“块”正好构成了这条电路的完美、天然的边界:

    明确的出入口定义了一个逻辑电路的输入输出端口。

    内部无控制流确保它是一条无反馈的、可流水的纯数据流路径。

    显式的数据依赖使得编译器后端可以直接将一个块翻译成一个数据流图,再映射、布局、布线到逻辑单元中。

    天然的原子性则保证了这条瞬态电路可以像调用一次函数一样被调用,其内部状态在计算完成后即完全消失,或安全上报异常。

因此,我们可以展望这样一个未来:在一个异构的LinxISA处理器中,一个由BSTART.TMA或BSTART.TEPL描述的、包含大量数据并行性的块,将不再被编译为一系列标量或向量指令,而是被一个轻量级的JIT编译器动态综合成一个用于CGRA/FPGA的配置位流。

当这个“硬件化”的块被调度执行时,计算的载体将从“时间上的指令序列”变成“空间上的逻辑电路”,完成一次计算范式的飞跃。这正是LinxISA超越RISC-V、ARM乃至现有所有架构的最深刻潜力:它不仅定义了“如何计算”,更为我们描绘了“计算本身可以被编译为硬件”的蓝图。 它是软件定义硬件的终极体现,是为明天和后天的计算范式而设计的基石。

我跟deepseek聊后叫他写的总结。
回复

使用道具 举报

     
发表于 2026-5-12 23:02 | 显示全部楼层
替代ARM指令集的系统?还是变长指令集?看起来编译器架构和编程接口上有突破?
单单从上面向量指令名称上看有RVV风格。但是这个说明不了任何问题。

评分

参与人数 1战斗力 +1 收起 理由
偽物 + 1 好评加鹅

查看全部评分

回复

使用道具 举报

发表于 2026-5-13 03:37 | 显示全部楼层
本帖最后由 睡耘居主 于 2026-5-13 04:31 编辑

首先这不是VLIW,多指令长度不意味着VLIW,VLIW的设计初衷不是指令有多长,而是多个指令在当时架构的设计哲学中怎么最大化的并行,而VLIW的特征或者主要克服的问题就是并发造成的复杂分支预测问题,所以在指令设计上会有大量的分支预测兜底设计(每一个指令都分配一个预测值orz),也因为此即使在硬件和架构的设计上并没有大的问题,但是在软件生态上遭遇了比较大的难度,所以才从历史上退场,当然主要它当时处在多核早期多线程中期,所以这个扩宽河道的魔改在简单堆叠的多条河道成为主流后也就不可能被重视了。

从基本的风格和结构来讲,这是RISC不能再RISC的架构体系了。虽然我还没仔细看文档,从5楼的概述来看,3/4/5/6都是没有什么特别的业界标配,现在很多人都学ARM的5,唉怎么说呢,从开发来讲是真糟粕,但是从设计上来讲,确实是有必要性的,从软件生态的角度来讲,但是就是让硬件设计硬要去更加的去假想软件的需求,这在以前的架构设计哲学中恰恰的需要避免的,但是现代的虚拟技术的广泛应用和云部署,让硬件和架构设计不得不如此也是时代叹号了。

一和二点有点意思,但是具体要下班再仔细看看文档,甚至跑跑QEMU结果。至于水平。。。唉,你们说别人赢学,反正咱自己也不能免俗是吧。这么说吧,水平不见得高,甚至还大体在复现业界已有的标准设计(能成熟话的话已经不容易了,至少这里挑的几个点都是比较重点需要支持的现代标准),然后有些也许是博士生研究的新架构点子的结果的应用。但是话说回来,你做指令集要考虑软件生态和硬件开发甚至制造的落地水平,重新高水平的发明轮子其实也不是好主意,比如VLIW的点子当时不可谓不高,在学界都有赞许,但是工业界的部署就碰壁了,就是这个道理。

我估计文档大概还是写的比较简陋的,整体的设计估计也是起步阶段,但是要点是一,到底能不能坚持做下去,硬件就是迭代积累,不管现在的硬件和架构有多粗糙,但是只要有个像样的起点就不错,剩下要靠迭代,所有的成熟甚至成功的架构都是几十年的工程经验积累下来的,重走工业经验是必然的,然后才能谈有多创新甚至有没有实际拿下创新的落地的能力,所以是不是会夭折才是致命问题,而不是现在是什么状态。

二,还需要类似第一点谈时间的空间变体,就是光谈架构毫无意义,就跟谈一个哲学流派的概念有多牛逼一样,架构是为了软硬件设计服务的,架构牛逼还是不牛逼,还是要看是否能诞生可用芯片,然后有一定的软件生态支撑,否则说个难听的,任何一个这方向的博士生想生写一个架构指令集,都可以随便写。所以先一步一步走,成体系成惯性的走才是重点,在我国正儿八经的稳定的形成这个行业和稳定的从业人员,而这首先离不开成熟可行的商业市场的支撑,而这个离不开整个成熟产品线的供给,可以说计算机产品就是汽车集成工业的变种,虽然发动机是金苹果,但是也不可能只卖发动机,虽然你是最有技术含量的零件或者技术供应商,但是还是需要终端产品和市场整体反哺。

评分

参与人数 3战斗力 +4 收起 理由
destroyworlder + 1
Vaporize + 1 好评加鹅
Sza + 2 好评加鹅

查看全部评分

回复

使用道具 举报

发表于 2026-5-13 09:25 来自手机 | 显示全部楼层
还以为说天线,现在又有新的?有啥芯片实际用这个?

—— 来自 HUAWEI ALT-AL10, Android 12, 鹅球 v3.5.99
回复

使用道具 举报

     
 楼主| 发表于 2026-5-13 11:45 来自手机 | 显示全部楼层
睡耘居主 发表于 2026-5-13 03:37
首先这不是VLIW,多指令长度不意味着VLIW,VLIW的设计初衷不是指令有多长,而是多个指令在当时架构的设计哲 ...

二确实,RISC-V到现在都拿不出一个稳定的,主流性能的芯片

—— 来自 Xiaomi 23127PN0CC, Android 16, 鹅球 v3.5.99
回复

使用道具 举报

发表于 2026-5-13 12:29 | 显示全部楼层
这种变长和复杂度,构建算术电路约束是灾难
回复

使用道具 举报

     
发表于 2026-5-13 13:20 | 显示全部楼层
每个块有三条指令的overhead?听起来像是给大量数据计算的应用设计的,hot loop里计算很多,分支很少。但是感觉对于比如网卡驱动这种hot loop里一大堆复杂分支的应用overhead好大。

评分

参与人数 1战斗力 +1 收起 理由
睡耘居主 + 1 没错对于体大loop是好事对于秀珍loop是灾难.

查看全部评分

回复

使用道具 举报

     
发表于 2026-5-13 13:24 来自手机 | 显示全部楼层
谁想看你和 AI 聊出来的垃圾啊,别人是不会自己复制粘贴么

—— 来自 鹅球 v3.5.99

评分

参与人数 3战斗力 +3 收起 理由
空き地卯木 + 1
笑为谁而生 + 1 想跳过都嫌长篇大论翻着费劲
sunix + 1 论坛一大怪

查看全部评分

回复

使用道具 举报

     
发表于 2026-5-13 23:31 来自手机 | 显示全部楼层
谁设计的图标啊太土了

设计初衷是在指令和函数之间找一个中间位置,称作块,给硬件更好地提供软件流hint。 指令集设计成了两层,块间和块内, 块内状态干净,执行单元可以做得比较简单。
还有个隐含的好处, 块内的指令集如果要拓展,是可以换的(甚至可以用RISCV),给对接不同异构计算单元、加速器留下了很大的空间, 目前是和昇腾的PTO ISA配合的。
回复

使用道具 举报

     
发表于 2026-5-14 09:12 | 显示全部楼层
这玩意只能华为自己先玩了
isa设计的好不好没啥意义,最主要还是社区生态和整个链条齐全,rv国内的目标都是30年结算。要是还想着守株待兔等开源和社区尽孝肯定是不行的,得自己下大力气做生态
要是设计好就是文明进步,落后就瞬间暴毙就好了,x86/64早死咯    Re:Source
回复

使用道具 举报

     
发表于 2026-5-14 10:56 | 显示全部楼层
明显不是给通用CPU用的, 而是 给 专用加速器(GPGPU/LLM) 用的
回复

使用道具 举报

发表于 2026-5-14 11:09 | 显示全部楼层
ov_efly 发表于 2026-5-13 12:29
这种变长和复杂度,构建算术电路约束是灾难

没事,前端加解码器就行了,脱裤子放屁虽然对性能没帮助,但是对kpi有啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|上海互联网违法和不良信息举报中心|网上有害信息举报专区|962110 反电信诈骗|举报电话 021-62035905|Stage1st ( 沪ICP备13020230号-1|沪公网安备 31010702007642号 )

GMT+8, 2026-6-24 17:53 , Processed in 0.217387 second(s), 14 queries , Gzip On, Redis On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表