Skip to main content
架构/微架构
设计
- 标量寄存器和向量寄存器统一,支持自动进行转换
- 异步单元(SP-PU-L1-DMA)之间都采用异步机制,依赖转移到异步目标
- 统一的同步机制
- 静态分配同步资源
- 原生软硬件支持动态图的执行
- LD/ST 避免使用fence功能
- Launch:fork
- 资源初始化(同步资源,各种存储器,状态)
- launch/signal/wait:join
- launch pu instrution: write_back_id local_id
- write_back atomic add/sub
- wait instruction: local_id
- local_id GE LE counter
- wait remote instruction: remote_id
- local_id GE LE counter
MAC
- Vector计算单元支持乱序和并行
- 软件编译指定明确的VR寄存器依赖,RO WO属性
- 自动拆解大指令成Vector指令,并行执行
- 软件静态排布VR寄存器,生成依赖关系,申请和释放管理
- Vector指令支持标量对其进行动态配置
Software
- 使用独立的硬件仿真软件,不依赖硬件仿真运行
ISA
- 标量
- RV64i
- 向量
- VLD VST VMUL VADD REDUCE_ADD REDUCE_MAX REDUCE_MIN VMUL_REDUCE_ADD
- MLD MST
- 张量
- GEMM
- 左/右数:128个=7位 + 3位扩展矩阵 = 10位
- 输出:7位
- Opcode
- fence
- L1 cache line 计数
- VR
- 软件管理VR data hazard? VR之间的依赖?
- 增加指令的表达信息
- 软件分配VR 还是 硬件rename ing ,解决bank冲突?
- 利用 VR count?软件进行管理依赖关系?
- LD ST 计算 的三类指令之间可以并行,通道内部没有必要并行
- 因为硬件资源没有特殊性,不会因为并行而减少气泡
- 默认,GEMM指令一定要在前面LD指令之后执行
- 默认,ST指令一定要在前面计算指令之后执行
- L1
- 软件管理 cache line
- cache line硬件计数,自动异步等待
- 针对L1 CacheLine的编程?
- 软件指定Load到L1 cache line的位置和有效长度
- 向量指令按照cache line的粒度和mask来执行指定的计算
- 这整个流程都是提前编译好,从L1-L1都是提前确定的
- 针对不同MNK大小需求,可以通过标量指令来快速配置,支持动态性
- 增加到128个标量寄存器 支持RV64扩展?
- 增加指令流控制
- 增加配合/加速向量单元的定制指令? 通过兼容RiscV-V的指令来实现??