《09-于芳菲.pdf》由会员分享,可在线阅读,更多相关《09-于芳菲.pdf(21页珍藏版)》请在三个皮匠报告上搜索。
1、清华大学集成电路学院“乘影”:开源通用GPU指令集架构介绍于芳菲向量处理器与GPGPU 典型向量处理器与典型SIMT架构在计算、访存、分支、任务控制、寄存器堆较为相似 动机:将向量lane与GPGPU thread一一对应*图片来自计算机体系结构 量化研究方法计算单元计算单元访存单元访存单元分支控制分支控制任务控制任务控制寄存器堆寄存器堆整体结构整体结构VectorVector LaneGather/ScatterMask RegistersControl ProcessorVector RegistersVector ProcessorGPGPUSIMD LaneGlobal load/st
2、orePredicate RegistersThread Block SchedulerSIMD Lane RegistersMultithreaded SIMD Processor“乘影”GPGPU指令集-设计概览 指令集:RISC-V+向量扩展 GPGPU与向量处理器的结构有许多相似之处 大部分GPGPU所需指令可以由RISC-V向量扩展集提供 GPGPU额外的特性和功能需求:线程束的分支和同步、多线程束执行 按OpenCL模型要求,线程在运行时能够获取自身索引号 更高的指令表达能力,以提升执行效率扩展扩展指令类型指令类型乘影乘影V(zve32f)Configuration-Setting
3、部分支持Loads and Stores支持Integer Arithmetic支持Floating-Point支持fp32Fix-Point参照需求添加Reduction、Mask、Permutation参照需求添加I支持M支持A支持zicsr支持F(zfinx)支持“乘影”GPGPU指令集-扩展方案 指令编码空间有限?官方给出的扩展空间仅包括4个opcode7 乘影GPGPU采用RISC-V 32-bit指令字作为基础 舍弃RISC-V 16-bit指令,释放低2位作为GPGPU的指令编码空间 RISC-V 32-bit指令bbb空间111之外的部分也可以作为扩展指令空间 GPGPU 64
4、-bit指令分两种实现方式:作为RISC-V 32-bit指令的前缀,实现对RISC-V现有指令的兼容 利用16-bit释放出来的00,10,01实现完全自定义的32-bit和64-bit GPGPU指令 以上方法既可以兼容RISC-V 32-bit指令字,同时可以高效的利用指令字空间构建GPGPU指令集“乘影”GPGPU指令集 标量指令 覆盖范围:RV32IMA_zicsr_zfinx RV64 I:基本指令 整数基本运算、访存、线程束整体分支、函数调用*未支持ecall和ebreak指令 M:乘法指令 A:原子指令 约束多线程对同一地址的读写操作,描述的是单个线程行为。zicsr:CSR寄
5、存器操作 线程和线程块索引在启动线程束前存入特定CSR以供读取 zfinx:单精度浮点指令 不设标量浮点寄存器,标量浮点数同样存入整数寄存器 RV64:更改了部分指令语义,支持64位操作“乘影”GPGPU指令集 向量指令 在V扩展的zve32f子集上进行裁剪与修改,使之符合SIMT编程模型:支持基本运算和访存指令,保证线程标量操作均存在向量版本指令 GPGPU计算方式特性考量:未支持元素数目和宽度的变长特性,固定元素数目32+宽度32位 未支持向量元素间数据交换(gather,scatter,shuffle等)写回数据位宽小于32时(如掩码计算、读字节),仍采用32位对齐方式写回“乘影”GPG
6、PU指令集 寄存器堆 每个warp有64个32bit sGPR,256个1024bit vGPR(num_thread=32时)。标量寄存器由同一warp内的线程共享。特殊寄存器:x0为0寄存器,x1为返回pc寄存器,x2为栈指针寄存器、x3为shared memory基址,x4为private memory基址 CSR:添加warp id、workgroup id、kernel metadata baseaddr等 ABI:约定8个sGPR和32个vGPR为函数参数,16个vGPR为返回值 不同线程层次对应不同存储层次:warp地址空间:PrivateMemory(栈)workgroup地址