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

1元 10元 50元





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



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

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平台。


   
1166 次浏览  评价: 差  订阅 捐助
相关文章

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

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

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

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


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

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


锐安科技 软件架构设计方法
成都 嵌入式软件架构设计
上海汽车 嵌入式软件架构设计
北京 软件架构设计
上海 软件架构设计案例与实践
北京 架构设计方法案例与实践
深圳 架构设计方法案例与实践
嵌入式软件架构设计—高级实践
更多...   
 
 
实录 京东勇敢者的变革
主讲:杜伟忠
京东首席教练
 
实录 MySQL可扩展架构设计
主讲:吴炳锡
MySQL 中国用户组主席
 
 
 
每天2个文档/视频
扫描微信二维码订阅
订阅技术月刊
获得每月300个技术资源
 
 

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