关于OpenCL在AMD GCN架构上的映射的一点理解

        由于所学专业的原因,最近一直在研究OpenCL。作初学者,发现网上的一些资料不够系统,看过一些入门教程之后总有一种好像懂了,但解决实际问题时却发现无法摆脱例程的思维,很多细节分不清。所以,我特地就自己查找的资料,总结了一些东西,希望对入门者有所帮助,不要像我当初一样到处去网上找资料,看的一头雾水。第一次写东西分享,写的有点仓促,不足之处在所难免,还望指正。

1. GCN架构

        言归正传,我们知道用OpenCL的人大多数都是用的AMD的GPU。这里就以我自己所用的AMD FirePro W7100为例来说明。该显卡为GCN3rd架构,设备代号Tonga,内存类型为GDDR5,总线宽度256位,显存8192MB,带宽160GB/S。这些参数可以通过GPU-Z获得。GCN架构每个CU单元结构如下:

                                            图1 GCN的CU结构

         GCN CU包含四个SIMD,每个SIMD都有一个32位VGPR(矢量通用寄存器)的64 KB寄存器文件,每个CU共有65,536个VGPR。每个CU还有一个32位SGPR(标量通用寄存器)的寄存器文件。在GCN3之前,每个SIMD包含512个SGPR,并且从GCN3开始这个数字达到800。这样每个CU产生3200个SGPRs,或12.5 KB。从图中可以看出SGPR是4个SIMD共享的,每个SIMD都有自己的64KB VGPR。

         从图2中可以看到,在GCN架构中,每个CU含有一个标量单元用于做分支、同步操作;4个独立的向量单元(SMD0、SIMDI、SIMD2、SIMD3)用于做主要的向量算术逻辑计算处理。这4个SMD单元的每一个可以同时对16个工作项执行一单次操作(每个SIMD有16个ALU,每个CU有64个ALU)。而每个SMD单元每一次只能在它自己的 wavefront上执行。在GCN架构中,其 wavefront与 Cayman架构类似,对应64个工作项。执行完整条 wavefront需要花费4个周期,每个周期执行其中连续的16个工作项。

       我们看看一个CU的执行前端。在GCN架构中,每个SMD具有其自己独立的40位程序计数器(Program Counters,PC),10条 wavefront以及用于执行这些 wavefront的指令缓存。因此,整个CU就含有40个 wavefront。每条 wavefront可以在不同的工作组或是不同的 kemel中执行。(每个SIMD可准备的wave上限为10个,实际中可能比10小,这与程序对寄存器,LDS等资源的占用有关)。

图2 GCN CU 内部结构(图中的8KB在GCN3rd中应该为12.5KB SGPR)

2. 指令执行

      在GCN中,4个CU可以合并成一个簇( cluster)共享一个32KB的四路组相联的L1指令 Cache。Cache行长度为64字节,一般可以保留8条指令(每条指令8个字节)。当 Cach

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值