目录

1. 背景知识

1.1 RISC-V设计核心:RISC-V指令集ISA

1.1.1 精简指令集

1.1.2 模块化指令集

1.2 用户自定义指令集扩展

1.3 GPU层次结构

2. Vortex RISC-V GPGPU System

2.1 设计核心:扩展了一个自定义R指令集

2.1.1 Wavefront Control(波阵面控制): wspawn

2.1.2 Thread Control(线程控制): tmc

2.1.3 Control Divergence(控制发散): split / join

2.1.4 Synchronization(同步性):bar

2.1.5 Texture Filtering(纹理滤波):tex

2.2 Vortex GPGPU结构:32bit 五级流水

2.2.1 Wavefront Scheduler

2.2.2 Threads Masks and IPDOM Stack

2.2.3 Wavefront Barriers

2.2.4 Memory System

2.3 编译环境: LLVM编译器

2.3.1 传统编译器(例如gcc)

2.3.2 LLVM编译器


1. 背景知识

1.1 RISC-V设计核心:RISC-V指令集ISA

1.1.1 精简指令集

基本的RISC-V(Reduced Instruction Set Computer)指令数目仅有47条(RV32I)

指令是处理器进行操作的最小单元(譬如加减乘除、读写寄存器数据),指令集就是一组指令的集合。有了指令集架构(ISA,Instruction Set Architecture),就可以使用不同的处理器硬件实现方案来实现不同性能的处理器。为了让软件程序员能够编写底层的软件,指令集架构不仅仅是一组指令的集合,它还要定义任何软件程序员需要了解的硬件信息,包括支持的数据类型、存储器、寄存器状态、寻址模式和存储器模型等。

目前主流架构(譬如x86)是CISC(Complex Instruction Set Computer),极为复杂和冗杂,且不开源,专利授权费昂贵。

RISC-V 架构的目标:

• 成为一种完全开放的指令集,可以被任何学术机构或商业组织所自由使用。

• 成为一种真正适合硬件实现且稳定的标准指令集。

1.1.2 模块化指令集

RISC-V指令集使用模块化的方式进行组织,每一个模块使用一个英文字母来表示,除了I指令集是设计架构时强制要求实现的指令集,其他指令集均可供客户选择。

对比x86,光加减法就有很多条指令,但在RISC-V里面只有ADD,SUB,ADDI

1.2 用户自定义指令集扩展

除了上述模块化指令子集可供客户扩展和选择(这一部分指令的功能和编码是官方定义好的,用户只需要选择要不要设计到架构里),RISC-V预留了大量指令编码空间以支持第三方扩展(自己编码自己定义功能)。目前的自定义扩展基于R-type指令。

(RISC-V稳定性体现之处:规整的指令编码—指令所需的通用寄存器的索引都放在固定的位置)

-指令的第0到6位为Opcode编码段,根据Opcode表规则,inst[1:0]=11,inst[6:2]=00010对应custom0指令组

-inst[31:25]为funct7区间,可作为额外的编码空间,因此一组custom指令组可以编码出128条指令

-xd、xs1、xs2是三个寄存器掩码,为分别代表是否读写rd、rs1、rs2寄存器

1.3 GPU层次结构

sp(streaming processor) : 最基本的处理单元,最后具体的指令和任务都是在sp上处理的。GPU进行并行计算,也就是很多个sp同时做处理。

sm(streaming multiprocessor):多个sp加上其他的一些资源组成一个sm。

warp:GPU执行程序时的调度单位,目前cuda一个warp有32个thread,同在一个warp的线程,以不同数据资源执行相同的指令。

grid、block、thread:在利用cuda进行编程时,一个grid分为多个block,而一个block分为多个thread.其中任务划分到是否影响最后的执行效果。划分的依据是任务特性和GPU本身的硬件特性。

一个sm只会执行一个block里的warp,当该block里warp执行完才会执行其他block里的warp。进行划分时,最好保证每个block里的warp比较合理,那样可以一个sm可以交替执行里面的warp,从而提高效率,此外,在分配block时,要根据GPU的sm个数,分配出合理的block数,让GPU的sm都利用起来,提利用率。分配时,也要考虑到同一个线程block的资源问题,不要出现对应的资源不够。

2. Vortex RISC-V GPGPU System

2.1 设计核心:扩展了一个自定义R指令集

2.1.1 Wavefront Control(波阵面控制): wspawn

在指定PC值到来时,启动%numW个wavefront,标志是这些wavefronts的tread0被激活。同时上一个正在进行的warp对应的src寄存器里的值会被复制到新warp对应的dst寄存器里。

我理解这里的wavefront就是其他论文里的warp,一个warp里包含32个tread

2.1.2 Thread Control(线程控制): tmc

对于每一个wavefront里的tread,有一个32位的CSR(Control and Status register状态控制寄存器),称为tread mask register,每一位代表对应tread的状态(字节掩码),1代表被激活,0代表未被激活。

tmc:%NumTread个tread会被激活(例如等于5时,tread0-4的字节掩码会被置1)

2.1.3 Control Divergence(控制发散): split / join

当同一个warp里的tread进入不同的跳转分支时,会出现控制发散现象(control divergence)

Divergence 是Warp中的一个概念,在同一个warp中有的线程走这个分支,有的线程走另外一个分支,称之为divergence。

一个Warp中的所有Thread执行同一指令。但是,由于不同Thread的数据不同,如果有基于数据的判断,就可能产生不同的结果。这时,就会产生多路径问题即发散,意味着Thread需要执行不同的指令。sm处理的方式是多次执行,每次沿着一条路径,直到所有路径都执行完毕。所以,控制发散直接关系到程序的性能。

Vortex对此的解决方式是加入了一个IPDOM Stack(下文会详细说)

当split指令来临时,代表要出现分支了,%predicate储存了预测将要执行的指令的信息。

当join指令来临时,代表要跳回出现split指令时的那个pc值继续运行。

2.1.4 Synchronization(同步性):bar

同步某一组wavefronts。可能这些wavefronts都在执行同一个操作,但是速度有快有慢。为了让这些wavefronts在某一个节点能同步,让执行快的wavefront等一等慢的,就会设置一个屏障快的wavefront,等到预设的%numW个wavefronts都达到这个屏障了,同步完成,就可以移除这个屏障,让它们进行下一步操作。

2.1.5 Texture Filtering(纹理滤波):tex

该指令用于纹理信息的查找。它有三个源操作数,即u、v、lod,用于查找源texel和纹理mipmap的规范化坐标。其他纹理状态(维度、格式、过滤模式、寻址模式和内存地址)可以通过csr进行配置。

2.2 Vortex GPGPU结构:32bit 五级流水

现有gpgpu架构的普遍特点:

规划了线程如何调度、如何同步以及如何分配内存层次结构

基础结构:取指—译码—执行—存储—写回

特征结构:在五级流水基础上新增模块:更合理高效地利用所有线程,提高计算速度

2.2.1 Wavefront Scheduler

两个组成部分:

(1)wavefront masks: 调用哪个wavefront

(2)wavefront table: 储存每个wavefront的信息

四个线程掩码:

(1)active wavefront mask: 每个bit指出对应wavefront的状态

(2)stalled wavefront mask: 指出哪些wavefronts不能够被临时调用

(3)visible wavefront mask: 支持分层调度

(4)barrier mask: 每一个wavefront都有一个掩码,指示是否在等待bariier来同步

2.2.2 Threads Masks and IPDOM Stack

当分支指令来临时,会进行分支预测,每个线程会有两个预测结果(跳转或者不跳转)。线程会先根据预测true的结果执行,但是会将现在的thread mask和预测flase后下一个指令的thread mask和pc值存储在IPDOM中。当join指令来临时,会有两种情况(1)当前分支完成了,重新回到前面跳转的地方继续运算 (2) 分支预测结果错误,即应该是走false的分支但走了true,于是需要重新走false再执行一次

这样的设计可以减少流水线冲刷,节省计算时间

2.2.3 Wavefront Barriers

用来支持不同wavefront之间的同步。包括

(1) 计数器,统计还有多少个wavefront没有到达barrier,当计数器为0时,该barrier被释放,被同步的这些wavefront开始同时继续执行

(2) barrier mask(应该和wavefront scheduler里的barrier mask是一个东西)

2.2.4 Memory System

除了常规的data cache和instruction cache,增加了一个shared memory,可根据需求作为高速缓存或者堆栈。

不同的core可以聚合成一个集群与L2 cache进行读写,不同集群可以组合成一个处理器与L3 cache进行读写,分层读写可以大大提高存储效率。

2.3 编译环境: LLVM编译器

2.3.1 传统编译器(例如gcc)

前端(Frontend)-- 优化器(Optimizer)-- 后端(Backend)

前端负责分析源代码,可以检查语法级错误,并构建针对语言的抽象语法树(AST);抽象语法树可以进一步转换为优化,最终转为新的表示方式,然后再交给让优化器和后端处理;最终由后端生成可执行的机器码。

缺点:三个阶段冗杂在一起,不能独立,牵一发而动全身。如有N种语言(C、OC、C++、Swift...)的前端,同时也有M个架构(模拟器、arm64、x86...)的target,就需要N*M个编译器。

2.3.2 LLVM编译器

LLVM拥有各个阶段都很独立的三段式结构, LLVM不同的就是它的中间表示IR(intermediate representation)编写良好,对于不同的语言它都提供了同一种中间表示,即我们在前端新增一种语言,或者在后端新增一种类似RISC-V的硬件架构,我只需要对IR部分进行优化,但不用重新设计编译器。

Vortex: 一种基于RISC-V指令集自定义扩展的开源GPGPU架构相关推荐

  1. ios跨线程通知_一种基于Metal、Vulkan多线程渲染能力的渲染架构

    快手Y-tech  原创最新技术干货分享 随着3D渲染场景规模越来越复杂,单线程渲染架构在满足业务性能要求时已经捉襟见肘,因此,多线程渲染显得愈发重要.本文首先介绍了新一代图形渲染接口Metal.Vu ...

  2. Hango Rider:网易数帆开源 Envoy 企业级自定义扩展框架

    可扩展性是网络代理软件最为关键的特性之一,灵活强大的可扩展性可以大大拓展网络代理软件的能力边界.作为新兴的开源高性能网络代理软件,Envoy 本身提供了相对丰富的可扩展能力,如基于 C++ 的原生扩展 ...

  3. java 基于类路径搜索_一种基于ClassLoader的自定义类查找方法与流程

    本发明涉及IT技术领域,特别是指一种基于ClassLoader的自定义类查找方法. 背景技术: 随着信息系统的复杂性日益增大,使用反射机制设计的系统越来越多.根据不同的业务需要通过反射去获得相应的处理 ...

  4. RISC V (RV32+RV64) 架构 整体介绍

    文章目录 riscv 市场 芯片介绍 软件介绍 开发板介绍 PC介绍 riscv 架构 编程模型(指令集/寄存器/ABI/SBI) 运行状态 指令集 寄存器 riscv32和riscv64两者的区别 ...

  5. 计组学习笔记2(RISC v版)

    指令集解释 (规定:R[r]表示通用寄存器r的内容,M[addr]表示存储单元addr的内容,SEXT[imm]表示对imm进行符号扩展,ZEXT[imm]表示对imm进行零扩展) 整数运算类 -U型 ...

  6. 空间注意力机制sam_一种基于注意力机制的神经网络的人体动作识别方法与流程...

    本发明属于计算机视觉领域,具体来说是一种基于注意力机制的神经网络的人体动作识别的方法. 背景技术: 人体动作识别,具有着非常广阔的应用前景,如人机交互,视频监控.视频理解等方面.按目前的主流方法,可主 ...

  7. 一种基于边缘Bloom的溶解shader的实现

    此文章为转载: 作者:胡说ba道 原文:https://blog.csdn.net/qq_37925032/article/details/80146256 溶解效果在游戏中十分常见,然而普通的溶解效 ...

  8. 十三种基于直方图的图像全局二值化算法原理、实现、代码及效果

    十三种基于直方图的图像全局二值化算法实现 1. 什么是基于直方图的图像全局二值化算法 2. 灰度平均值 3. 百分比阈值(P-Tile法) 3. 基于双峰的阈值 3.1 基于平均值的阈值 3.2 基于 ...

  9. MULLS:一种基于多尺度线性最小二乘的激光SLAM算法

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨paopaoslam 来源丨 泡泡机器人SLAM 标题:MULLS: Versatile LiD ...

最新文章

  1. BZOJ 1412 [ZJOI2009]狼和羊的故事(最小割)
  2. 7-36 旅游规划 (25 分(Dijkstra)
  3. 树莓派 红灯不亮_请问我的树莓派烧了系统后板子只有红灯亮,而act绿灯不亮,并且网口不插网线两个灯都是微微亮,请问?...
  4. a byte of python图书购买_A Byte of Python
  5. 上一篇的改进!!!!!
  6. [转载]spring使用PropertyPlaceholderConfigurer加载properties文件处理中文乱码
  7. Oracle操作管理之用户和角色
  8. VMware安装windows2003操作系统
  9. 卸载symantec 找不到vpshellres.dll 解决方案
  10. 网页前端培训笔记(JavaScript基础语法篇一)
  11. 百度地图 android 圈区域,Android 百度地图定位半径圈范围自定义
  12. 黑马python培训视频网盘下载
  13. access vba代码大全_VBA编程在翻译中的应用
  14. 读书笔记《TAOCP》 V1 S1.1
  15. 深度学习系列资料总结
  16. 安全文章研读:深度学习对抗攻击防御策略的一些实现
  17. alpine日志中文乱码的问题解决方案
  18. Python爬虫-爬取豆瓣TOP250
  19. upc 9367 雷涛的小猫
  20. 倒计时,距离活动还有0天0时0分0秒

热门文章

  1. 将三维模型(obj)导出js格式供threeJS中调用
  2. Linux 使用curl认证深信服上网行为管理
  3. LightGBM算法详解(教你一文掌握LightGBM所有知识点)
  4. 测试点赞功能。(抖音点赞,微信点赞)
  5. 《牛客刷verilog》Part III Verilog企业真题
  6. Workspace Cannot Be Created
  7. Opencv4学习-2、小案例之绿布抠图-视频背景图替换
  8. 英语美文阅读:当爱向你们挥手
  9. 吉尔电子烟获1200万天使轮融资
  10. 软件工程作业之CSDN测评