您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  要资料 文章 文库 Lib 视频 Code iProcess 课程 认证 咨询 工具 火云堂 讲座吧   成长之路  
会员   
 
   
 
  
每天15篇文章
不仅获得谋生技能
更可以追随信仰
 
 
     
   
 订阅
  捐助
AMD OpenCL大学课程(5)
 
译者:迈克老狼2012,火龙果软件 发布于:2014-11-07
来自于要资料   1022 次浏览     评价:      
 

GPU架构

1.OpenCLspec和多核硬件的对应关系

1.AMD GPU架构

2.Nvdia GPU架构

3.Cell Broadband Engine

2.一些关于OpenCL的特殊主题

1.OpenCL编译系统

2.Installable client driver

首先我们可能有疑问,既然OpenCL具有平台无关性,我们为什么还要去研究不同厂商的特殊硬件设备呢?

1.了解程序中的循环和数据怎样映射到OpenCL Kernel中,便于我们提高代码质量,获得更高的性能。

2.了解AMD和Nvdia显卡的区别。

3.了解各种硬件的区别,可以帮助我们使用基于这些硬件的一些特殊的OpenCL扩展,这些扩展在后面课程中会讲到。

3、传统的CPU架构

1.对单个线程来说,CPU优化能获得最小时延,而且CPU也适合处理控制流密集的工作,比如if、else或者跳转指令比较多的任务。

2.控制逻辑单元在芯片中占用的面积要比ALU单元多。

3.多层次的cache设计被用来隐藏时延(可以很好的利用空间和时间局部性原理)

4.有限的寄存器数量使得同时active的线程不能太多。

5.控制逻辑单元记录程序的执行、提供指令集并行(ILP)以及最小化CPU管线的空置周期(stalls,在该时钟周期,ALU没做什么事)。

4、现代的GPGPU架构

1.对于现代的GPU,通常的它的控制逻辑单元比较简单(和cpu相比),cache也比较小

2.线程切换开销比较小,都是轻量级的线程。

3.GPU的每个“核”有大量的ALU以及很小的用户可管理的cache。[这儿的核应该是指整个GPU]。

4.内存总线都是基于带宽优化的。150GB/s的带宽可以使得大量ALU同时进行内存操作。

5、AMD GPU硬件架构

现在我们简单看下AMD 5870显卡(cypress)的架构

1.20个simd引擎,每个simd引擎包含16个simd。

2.每个simd包含16个stream core

3.每个stream core都是5路的乘法-加法运算单元(VLIW processing)。

4.单精度运算可以达到 Teraflops。

5.双精度运算可以达到544Gb/s

上图为一个simd引擎的示意图,每个simd引擎由一系列的stream core组成。

1.每个stream core是一个5路的VLIW处理器,在一个VLIW指令中,可以最多发射5个标量操作。标量操作在每个pe上执行。

2.CU(8xx系列cu对应硬件的simd)内的stream core执行相同的VLIW指令。

3.在CU(或者说simd)内同时执行的work item放在一起称作一个wave,它是cu中同时执行的线程数目。在5870中wave大小是64,也就是说一个cu内,最多有64个work item在同时执行。

注:5路的运算对应(x,y,z,w),以及T(超越函数),在cayman中,已经取消了T,改成四路了。

我们现在看下AMD GPU硬件在OpenCL中的对应关系:

1.一个workitme对应一个pe,pe就是单个的VLIW core

2.一个cu对应多个pe,cu就是simd引擎。

上图是AMD GPU的内存架构(原课件中的图有点小错误,把Global memory写成了LDS)

1.对每个cu来说,它使用的内存包括onchip的LDS以及相关寄存器。在5870中,每个LDS是32K,共32个bank,每个bank 1k,读写单位4 byte。

2.对没给cu来说,有8K的L1 cache。(for 5870)

3.各个cu之间共享的L2 cache,在5870中是512K。

4.fast Path只能执行32位或32位倍数的内存操作。

5.complete path能够执行原子操作以及小于32位的内存操作。

AMD GPU的内存架构和OpenCL内存模型之间的对应关系:

1.LDS对应local memeory,主要用来在一个work group内的work times之间共享数据。steam core访问LDS的速度要比Global memory快一个数量级。

2.private memory对应每个pe的寄存器。

3.constant memory主要是利用了L1 cache

注意:对AMD CPU,constant memory的访问包括三种方式:Direct-Addressing Patterns,这种模式要求不包括行列式,它的值都是在kernel函数初始化的时候就决定了,比如传入一个固定的参数。Same Index Patterns,所有的work item都访问相同的索引地址。Globally scoped constant arrays,行列式会被初始化,如果小于16K,会使用L1 cache,从而加快访问速度。

当所有的work item访问不同的索引地址时候,不能被cache,这时要在global memory中读取。

6、Nvdia GPU Femi架构

GTX480-Compute 2.0 capability:

1.有15个core或者说SM(Streaming Multiprocessors )。

2.每个SM,一般有32 cuda处理器。

3.共480个cuda处理器。

4.带ECC的global memory

5.每个SM内的线程按32个单位调度执行,称作warp。每个SM内有2个warp发射单元。

6.一个cuda核由一个ALU和一个FPU组成,FPU是浮点处理单元。

SIMT和SIMD

SIMT是指单指令、多线程。

1.硬件决定了多个ALU之间要共享指令。

2.通过预测来处理多个线程间的Diverage(是指同一个warp中的指令执行路径产生不同)。

3.NV把一个warp中执行的指令当作一个SIMT。SIMT指令指定了一个线程的执行以及分支行为。

SIMD指令可以得到向量的宽度,这点和X86 SSE向量指令比较类似。

SIMD的执行和管线相关

所有的ALU执行相同的指令。

根据指令可以管线分为不同的阶段。当第一条指令完成的时候(4个周期),下条指令开始执行。

Nvida GPU内存机制:

1.每个SM都有L1 cache,通过配置,它可以支持shared memory,也可以支持global memory。

2.48 KB Shared / 16 KB of L1 cache,16 KB Shared / 48 KB of L1 cache

3.work item之间数据共享通过shared memory

4.每个SM有32K的register bank

5.L2(768K)支持所有的操作,比如load,store等等

6.Unified path to global for loads and stores

和AMD GPU类似,Nv的GPU 内存模型和OpenCL内存模型的对应关系是:

shared memory对应local memory

寄存器对应private memory

7、Cell Broadband Engine

由索尼,东芝,IBM等联合开发,可用于嵌入式平台,也可用于高性能计算(SP3次世代游戏主机就用了cell处理器)。

1.Bladecenter servers提供OpenCL driver支持

2.如图所示,cell处理器由一个Power Processing Element (PPE) 和多个Synergistic Processing Elements (SPE)组成。

3.Uses the IBM XL C for OpenCL compiler 11

4.Cell Power/VMX CPU 的设备类型是CL_DEVICE_TYPE_CPU,Cell SPU 的设备类型是CL_DEVICE_TYPE_ACCELERATOR。

5.OpenCL Accelerator设备和CPU共享内存总线。

6.提供一些扩展,比如Device Fission、Migrate Objects来指定一个OpenCL对象驻留在什么位置。

7.不支持OpenCL image对象,原子操作,sampler对象以及字节内存地址。

8、OpenCL编译系统

1.LLVM-底层的虚拟机

2.Kernel首先在front-end被编译成LLVM IR

3.LLVM是一个开源的编译器,具有平台独立性,可以支持不同厂商的back_end编译,网址:http://llvm.org

9、Installable Client Driver

1.ICD支持不同厂商的OpenCL实施在系统中共存。

2.代码紧被链接接到libOpenCL.so

3.应用程序可在运行时选择不同的OpenCL实施(就是选择不同platform)

4.现在的GPU驱动还不支持跨厂商的多个GPU设备同时工作。

5.通过clGetPlatformIDs() 和clGetPlatformInfo() 来检测不同厂商的OpenCL平台。


   
 订阅
  捐助
相关文章

阻碍使用企业架构的原因及克服方法
世界级企业架构的行业挑战
企业架构和SOA架构的角色将融合
什么最适合您的组织?
相关文档

企业架构与ITIL
企业架构框架
Zachman企业架构框架简介
企业架构让SOA落地
相关课程

企业架构设计
软件架构案例分析和最佳实践
嵌入式软件架构设计—高级实践
企业级SOA架构实践
 

专家视角看IT与架构
软件架构设计
面向服务体系架构和业务组件
人人网移动开发架构
架构腐化之谜
谈平台即服务PaaS


面向应用的架构设计实践
单元测试+重构+设计模式
软件架构师—高级实践
软件架构设计方法、案例与实践
嵌入式软件架构设计—高级实践
SOA体系结构实践

相关咨询服务
应用架构设计与构建


锐安科技 软件架构设计方法
成都 嵌入式软件架构设计
上海汽车 嵌入式软件架构设计
北京 软件架构设计
上海 软件架构设计案例与实践
北京 架构设计方法案例与实践
深圳 架构设计方法案例与实践
嵌入式软件架构设计—高级实践
更多...   
 
 
实录 C语言面向对象
主讲:宋宝华
《Linux设备驱动开发详解》的作者
 
实录 基于Tensorflow进行深度学习
主讲:钱兴会
曾任联想集团大数据平台架构师
 
 
 
每天2个文档/视频
扫描微信二维码订阅
订阅技术月刊
获得每月300个技术资源
 
 

关于我们 | 联系我们 | 京ICP备10020922号 京公海网安备110108001071号