Gem5 gpu

针对gem5的GPU进行总结。

原文出处:http://gpgpu-sim.org/manual/index.php/Main_Page

Introduction:

本手册提供GPGPU SIM 3.x的文档,GPU SIM 3.x是一个cycle-level GPU性能模拟器,主要关注“GPU计算”(GPU上的通用计算)。.GPGPU-Sim 3.x是最后的版本。

Microarchitecture Model

本节描述由gpgpu-sim 3.x建模的微体系结构。该模型比gpgpu sim 2.x中的计时模型更为详细。一些新的细节来自于对nvidia各种专利的审查。这包括指令获取、记分板逻辑和寄存器文件访问的建模。3.x中的其他改进包括基于预取纹理缓存架构的更详细的纹理缓存模型。首先描述了整个微体系结构,然后介绍了各个组件,包括simt核和集群、互连网络和内存分区。

Overview

GPGPUSim3.x运行由CPU部分和GPU部分组成的程序二进制文件。然而,GPGPUSim3.x中的微体系结构(计时)模型报告了GPU繁忙的周期——它既不模拟CPU计时,也不模拟PCI Express计时(即CPU和GPU之间的内存传输时间)。目前正在努力提供CPU+GPU组合模拟器,其中GPU部分由GPGPU SIM建模。例如,see http://www.fusionsim.ca/.(https://download.csdn.net/download/u014333658/7098005)。 https://sites.google.com/site/fusionsimulator/home。

GPU-SIM 3.X模型GPU微观结构类似于NVIDIA GEFROS 8X、9X和Fermi系列。gpgpu-sim的目的是为架构研究提供一个基础,而不是精确地模拟任何特定的商业gpu。也就是说,gpgpu sim 3.x已经根据nvidia gt 200和nvidia fermi的gpu架构进行了校准。

Accuracy

我们计算了ipc(每个时钟的指令数)与真实nvidia gpu的相关性。当配置为使用本机硬件指令集时(ptxplus,使用-gpgpu-ptx-u convert-u-ptxplus选项),GPGPUSim3.1.0在Rodinia基准套件的缩小版本(大约260个内核启动)上分别获得98.3%(图1)和97.3%(图2)的IPC相关性。[Che等人2009年]在我们的测试中加入了Rodinia的其他一些基准测试。图1和图2中的每个数据点代表一个单独的内核启动。由于一些异常值,平均绝对误差分别为35%和62%。

我们提供了用于计算这些相关性的电子表格,以演示如何计算相关系数:

顶层架构:

由gpgpu sim建模的gpu由单指令多线程(simt)核组成,这些核通过片上连接网络连接到与图形gddr-dram接口的内存分区。

simt核心为高度多线程流水线simd处理器建模,大致相当于nvidia所称的流式多处理器(sm)或amd所称的计算单元(cu)。下面的图3描述了simt核心的组织。

时钟域:

gpgpu-sim支持四个独立的时钟域:(1)simt核心集群时钟域(2)互连网络时钟域(3)二级缓存时钟域,适用于除dram以外的存储器分区单元中的所有逻辑;(4)dram时钟域。

时钟频率可以有任意值(它们不需要是彼此的倍数),换句话说,我们假设时钟域之间存在同步器。在gpgpu sim 3.x仿真模型中,相邻时钟域中的单元通过时钟交叉缓冲区进行通信,这些缓冲区以源域的时钟速率填充,以目标域的时钟速率排出。

源码中,这种时钟域是如何体现出来?

SIMT Core Clusters

SIMT核心被分为SIMT核心集群。SIMT核心集群中的SIMT核心共享到互连网络的公共端口,如图4所示

如图4所示,每个SIMT核心集群都有一个响应fifo,它保存从互连网络弹出的数据包。数据包被定向到SIMT核心的指令缓存(如果是为指令获取未命中提供服务的内存响应)或其内存管道(ldst单元)。数据包以fifo方式退出。如果核心无法接受fifo头部的数据包,则响应fifo将暂停。为了在ldst单元上生成内存请求,每个SIMT核在互连网络中都有自己的注入端口。但是,注入端口缓冲区由集群中的所有SIMT核心共享。

SIMT

SIMT中文译为单指令多线程,英文全称为Single Instruction Multiple Threads。

GPU中的SIMT体系结构相对于CPU的SIMD中的概念。多处理器采用了SIMT架构。此架构在第一个unified computing GPU中由NVIDIA公司生产的GPU引入。

不同于CPU中通过SIMD(单指令多数据)来处理矢量数据;GPU则使用SIMT,SIMT的好处是无需开发者费力把数据凑成合适的矢量长度,并且SIMT允许每个线程有不同的分支。 纯粹使用SIMD不能并行的执行有条件跳转的函数,很显然条件跳转会根据输入数据不同在不同的线程中有不同表现,这个只有利用SIMT才能做到。(这里有段历史,可以看看nvidia的发展)

<Thread block compaction for efficient SIMT control flow>,比较详细地介绍 SIMT

https://www.slideshare.net/ugurcandan/gpu-and-the-brick-wall

SIMT对比SIMD:

SIMT与SIMD本质相同:都是单指令多数据。

SIMT比SIMD更灵活,允许一条指令的多数据分开寻址;SIMD是必须连续在一起的片段。

SIMT形式上是多线程,本质上还是一个线程,只不过数据可以零散的分散开。但是如果你真的将数据分散开的话,执行效率上又会大打折扣,因为不满足并行访问的要求。

SIMT Cores

下面的图5展示了由GPGPUSim3.x模拟的SIMT核心微体系结构。一个SIMT核心为一个高度多线程并行的流水线SIMD处理器,大致相当于NVIDIA所称的流式多处理器(SM)或AMD所称的计算单元(CU)。流处理器(sp)或一个cuda核 将对应于SIMT核心中alu管道内的一个通道。

图5,SIMT core 的详细微架构模型

此微体系结构模型包含许多在早期版本的gpgpu sim中找不到的详细信息。主要区别包括:


  • 一种新的前端,它对指令缓存进行建模,并将warp调度(warp schedule)(issue)阶段与获取(fetch)和解码(decode)阶段分离;
  • 记分板逻辑允许来自一个封装(warp)的多个指令同时在管道中;
  • 一种操作数收集器的详细模型,它将操作数访问调度到单端口寄存器文件组(用于减少寄存器文件的面积和功耗)
  • 支持多个simd功能单元的灵活模型。这允许内存指令和ALU指令在不同的管道中操作。

下面的小节通过遍历管道的每个阶段来描述图5中的细节。

Front End

如下所述,前端的主要阶段包括指令缓存访问和指令缓冲逻辑、记分板和调度逻辑、SIMT堆栈。

Fetch and Decode

图5中的指令缓冲区(I-Buffer)块用于从指令缓存提取指令后缓冲指令。它是静态分区的,因此在simt核心上运行的所有warp都有专门的存储空间来放置指令。在当前模型中,每个warp有两个i-buffer条目。

Instruction Issue

SIMT Stack

Scoreboard

 

Warp

关于线程的调度,首先介绍一个概念,AMD的 wavefront 或者 NIVIDIA 的warp,这是指线程调度的最小单位,也就是说,在GPU中每次执行一个warp,一般一个warp包含32个线程;对于AMD显卡则是一个wavefront包含64个work-item。下文中对这一概念统称为warp,线程和work-item通用。在Rogue架构中每个warp也是包含32个线程。

如下图所示,是Rogue架构的示意图,GPU中包含有多个USC(个数与产品型号有关),每个USC包含着色器,驻留槽,执行单元,存储器,纹理单元等等等。这样每个work-item在自己的生命周期中都包含自己的片上存储在Unified store中,shared local memory隐藏在common store中,这样每个USC都可以在warp之间进行零开销的上下文切换。

https://www.sohu.com/a/252890063_505795

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值