当前位置: 首页 > news >正文

【RISCV指令集手册】向量扩展v1.0

概述

从rvv 0.9说起

此前写过向量扩展0.9的阅读记录,三年已过,本以为不再参与RVV的相关开发,奈何造化弄人,旧业重操,真就世事难料呀。

总的来说1.0版本相比0.9版本的扩充了较多内容,但大部分为指令功能的扩充,指令编码、向量的运行机制等几乎没有变化,也就是说0.9版本的工具链可以兼容1.0的共性的指令。
KGback:RSIC-V——指令集spec阅读笔记——向量扩展0.9

本文主要针对1.0新的版本作阅读记录,与0.9相同功能将不再赘述,若有所区别将在下文中体现。

指令集理解Tricks

指令集手册中部分指令功能晦涩难懂,此时可参考指令集模拟器Spike中对于该指令的实现,该模拟器是riscv官方发布的golden模型。
Spike Github仓库

CPU RVV计算核实现一览

对于 RISC-V Vector 指令的应用现有 NX27V 芯片、C906 芯片、SG2042 芯片、siFive Performance 系列芯片等,其中 NX27V 芯片、siFive Performance 系列芯片支持 RISC-V Vector 1.0 版本。

玄铁C906

C906、SG2042 芯片支持的是 RISC-V Vector SPEC 0.7.1版本,与现在上游编译器 RISC-V Vector SPEC 1.0 版本不兼容。现社区有 RISC-V Vector rollback 脚本,可将 RISC-V Vector Extension v1.0 的汇编代码转换为 v0.7.1,因此上游编译器代码编出的 .s 中的 RVV SPEC v1.0 版本指令可通过此脚本转换成 RISC-V Vector SPEC v0.7.1 标准指令,这样就可以将代码最终执行在 C906、SG2042 芯片上1

玄铁C920

C920是玄铁首次加入v1.0内容的处理器。

RVV编译器进展

指令编译和自动矢量化参考该文1

应用程序的支持

参考链接
How are vector instructions implemented in RISC-V

机器学习库的支持

GGML

GGML由C语言编写,相当于python中pytorch、tensorflow库等

GGML@Github

图像处理的支持

Transformer模型的支持

llama.cpp利用rvv在Sifive和Qemu模拟器上的运行

KGback:llama.cpp在Qemu-riscv64向量扩展指令下的部署

在TH1520上运行llama-7b

Run LLaMA 7B int4 model onLicheePi4A (TH1520, 4xC910@2.0G), 6s/token
Github上该实验的讨论:RISC-V (TH1520&D1) benchmark and hack for <1GB DDR device

Permutation指令

排列指令,用于在向量寄存器中移动元素

上划下划指令

压缩排列指令

vcompress指令根据vs1的值作为掩码,将vs2中的数据复制到vd中。
一般用于数据压缩,将非零数据重新整合排列。
在这里插入图片描述

在这里插入图片描述

vcompress硬件实现的难点

vd中除第一个元素外所有元素的位置都可能被其他元素位置影响,所以执行单元设计的会变得比较复杂2

当LMUL>1时,执行单元不能提前知道具体压缩位置,但却需要支持跨越向量寄存器的所有元素指向结果元素的移动,执行部件会更加复杂

vcompress的硬件实现方法

参考链接:
积小流哥@CSDN:<RVV设计的艺术> vcompress指令实现电路

遍历法

通过对源操作数最低位置一个一个的判断是否有效,来将源元素压缩堆放在结果向量的最低元素位置,依赖的就是压缩的顺序性。

参考文献


  1. 【精华文章系列】第一期:RISC-V Vector概述 ↩︎ ↩︎

  2. 专利:Risc-v向量压缩乱序执行的实现方法及装置 ↩︎


http://www.mrgr.cn/news/43289.html

相关文章:

  • 视频剪辑软件哪个好?四大视频剪辑软件揭秘
  • 瓶颈ing
  • MySQL--聚合查询、联合查询、子查询、合并查询(上万字超详解!!!)
  • 什么是编译型语言,什么是解释性语言?java属于哪种?
  • 第3篇:Linux权限维持----应急响应之权限维持篇
  • 我的创作纪念日一年
  • qt 使用svg 图标的使用
  • 二叉树深度学习——将二叉搜索树转化为排序的双向链表
  • TypeScript面向对象 02
  • 特别节目————集训总结
  • AQS原理(AbstractQueuedSynchronizer)
  • 若依使用(二次开发)
  • 152. 乘积最大子数组
  • 国外电商系统开发-运维系统添加拓扑节点
  • 知识图谱入门——10:使用 spaCy 进行命名实体识别(NER)的进阶应用:基于词袋的实体识别与知识抽取
  • (Linux驱动学习 - 6).Linux中断
  • 【ECMAScript 从入门到进阶教程】第二部分:中级概念(面向对象编程,异步编程,模块化,try/catch 语句)
  • visual studio使用ssh连接linux虚拟机运行程序
  • 【OAuth 2.0】使用与更新
  • 引领5G驱动的全球数字营销革新:章鱼移动广告全球平台的崛起