GPU发展及CUDA编程介绍

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。



一种异构多核的并行编程模型
CPU的控制流程
CPU控制整个程序的运行过程 在需要并行计算时候将数据传入GPU 从GPU得到计算结果继续执行程序
GPU的计算流程
GPU接受来自主机的数据 并行计算 将结果返回给主机


CPU控制整个程序的 主流程,GPU为协处 理器 主存(Host Memory)↔ 显存(Device Memory)
void main() { ….. dim3 dimBlock (256); dim3 dimGrid( ceil( N / 256 ); add_gpu<<<dimGrid, dimBlock>>>(a, b, N); }
矩阵乘法: A×B=C

CPU中利用三层循环实现矩阵乘法代码



GPU中利用每个线程计 算一个元素 每个线程每次计算的数 据直接从全局存储器读 取 无分块矩阵乘法代码, 不使用共享存储器

处理程序中的并行计算部分 核函数(kernel function)
//CUDA program //sum of two vectors a and b __global__ void add_gpu(float *a, float *b, int N) { int idx =blockIdx.x* blockDim.x+ threadIdx.x; if (idx < N) a[idx] += b[idx]; }
Geforce 256之所以被称作GPU原因就在于Geforce 256划 时代的在图形芯片内部集成了T&L(几何光照转换)功能, 使得GPU拥有初步的几何处理能力,彻底解决了当时众多 游戏瓶颈发生在CPU几何吞吐量不够的瓶颈。


第一代GPU(1999年之前):
部分功能从CPU分离,实现硬件加速, GE(Geometry Engine)为代表,只能起到3D图像处理的加速作用,不具有软件编程特 性
——林英展
• • • • • •
GPU是什么? 为什么使用GPU? GPU在通用计算上的应用 GPU的整体架构 GPU编程的优缺点 GPU的未来

Graphic Processing Unit:图形处理器,显卡的处理核 心

NVIDIA公司在1999年发布Geforce 256图形处理芯片时首 先提出GPU的概念,随后大量复杂的应用需求促使整个产 业蓬勃发展至今。
CUDA是什么? CUDA的使用 CUDA编程算法实例 CUDA编程的优缺点 CUDA的未来

Compute Unified Device Architecture:统一计算设备架构,是由 NVIDIA推出的通用并行计算架构(2006年11月第一颗基于CUDA架构 的GPU,2007年CUDA C语言发布)

程序优化
程序调试


融合?
整合?
Intel和AMD都计划在未来的CPU中集成北桥功能和GPU模块,这会给NVIDIA带来什么影响?
GPU生来就是做图形计算的,不是和CPU竞争的,二者应当肩并肩生存。CUDA技术不是让GPU 取代CPU的。我相信GPU不需要集成不同类型的核心。





基本硬件架构: 流多处理器(Stream Multiprocessor) 流处理器(Stream Processor) 共享内存(Shared Memory) 板载显存(Device Memory)

Tesla

Fermi

高度并行 处理速度

算法设计 编程实现



传输带宽
可扩展性

第二代GPU(1999-2002年):
进一步硬件加速和有限的编程性 1999年NVIDIA GeForce 256将T&L(Transform and Lighting)等功能从 CPU分离出来, 实现了快速变换 2001年NVIDIA和ATI分别推出的GeForce3和Radeon 8500,图形硬件的流水线被定义 为流处理器,出现了顶点级可编程性,同时像素级也具有有限的编程性,但GPU的 编程性仍然比较有限

第三代GPU(2002年之后):
2006年NVIDIA推出了CUDA(Computer Unified Device Architecture,统一计算架构)编 程环境 GPU通用计算编程的复杂性大幅度降低 GPU已演化为一个新型可编程高性能并行计算资源,全面开启面向通用计算的新时 代
//CPU program //sum of two vectors a and b void add_cpu(float *a, float *b, int N) { for (int idx = 0; idx<N; idx++) a[idx] += b[idx]; } void main() { ..... add_cpu(a, b, N); }

GPU中实现矩阵乘法的核函数代码:

CPU与GPU的矩阵乘法时间比较 CPU:Quad2 Q8400 GPU:GeForce GTX460

易学 易用

数据传输 与CPU交互



高度并行化
可扩展

ቤተ መጻሕፍቲ ባይዱ
优化及调试
仅限于N卡



CUDA?

OpenCL?
谢谢!



http://wiki.dzsc.com/info/4259.html http://www.blogjava.net/chinqt/archive/2007/05/17/118 027.html http://vga.zol.com.cn/170/1705887.html http://www.top500.org/ http://www.samss.org.cn/sites/shuxue/pcC.jsp?contentI d=2574650376854

一种可扩展的 编程模型

GPU中的并行层次
网格中块的并行, blockIdx,全局存储 器通信;


同一块里的线程的并 行,threadIdx,全局 存储器、共享存储器 通信。

GPU内线程分布结构
在CUDA中,采用 SIMT(Single Instruction,Multiple Thread)的执行方式
1:强大的处理能力
2:高显存带宽
HPC
Top500 List
中国
HPC Top100 List
工业设计 医学研究 石油勘探 物理学研



与CPU相比,GPU具有更多的计算单元,但对于 复杂控制过程的处理能力则比CPU差→GPU更适 用于同时进行大量简单的统一操作
相关文档
最新文档