【CUDA并行程序设计系列(1)】GPU技术简介
2015-10-23 17:59
288 查看
前言
CUDA并行程序设计系列是本人在学习CUDA时整理的资料,内容大都来源于对《CUDA并行程序设计:GPU编程指南》、《GPU高性能编程CUDA实战》和CUDA Toolkit Documentation的整理。通过本系列整体介绍CUDA并行程序设计。内容包括GPU简介、CUDA简介、环境搭建、线程模型、内存、原子操作、同步、流和多GPU架构等。本系列目录:
【CUDA并行程序设计系列(1)】GPU技术简介
【CUDA并行程序设计系列(2)】CUDA简介及CUDA初步编程
【CUDA并行程序设计系列(3)】CUDA线程模型
【CUDA并行程序设计系列(4)】CUDA内存
【CUDA并行程序设计系列(5)】CUDA原子操作与同步
【CUDA并行程序设计系列(6)】CUDA流与多GPU
关于CUDA的一些学习资料
CPU的发展
在早期,计算机的性能随着中处理器(CPU)的发展得到了很大的提升,在摩尔定律的驱使下,CPU的时钟频率从30年前的1MHz发展到现在的1GHz~4GHz。但是,靠提高CPU时钟频率来提升计算机性能在现在已经不是一个好的方法了,随着功耗的急剧升高和晶体管的大小已经接近极限,硬件厂商需要需求其它的方案。其中一个方案就是增加处理器的数量,现在所见到的大部分PC机都使用了多核处理器,像Intel的I3、I5、I7系列都是多核CPU。但是,受体积和功耗的现在,CPU的核心数量也不能增加的太多。可以说,近几年CPU并没有得到突破性的发展,连知名程序员Jeff Atwood上次升级PC也是2011年的事了。GPU的发展
在CPU发展的同时,图形处理技术同样经历了巨大的变革,早期的GPU主要用于图形显示,以游戏居多,在那时几乎每一款新的大型游戏推出都会引发显卡更换热潮。图形处理器直接运行图形流水线功能,通过硬件加速渲染图形,使得应用程序能实现更强的视觉效果。GPGPU
GPU的计算能力以及并行性吸引了很多研究人员对把GPU应用于图形之外的兴趣,后来就出现了GPU通用计算(GPGPU)。2007年NVIDIA率先倡导使用GPU加速计算性能。使用GPU加速,最主要的是让程序并行运行,这点和PC集群技术是一样的。一个程序的大部分串行代码依然在CPU上运行,而少部分可并行的(往往也是最耗时间的,如for循环)代码在GPU上运行,如下图。在这种方式下,程序的运行速度得到了很大的提升。
![](https://images2015.cnblogs.com/blog/442359/201510/442359-20151023175540895-1716583693.png)
现代的GPU使用了类似于集群技术,一个GPU内有许多流处理器簇(Streaming Multiprocessor, SM),它们类似CPU的核。一个GPU可能有成千上万个核,因此就可以使程序在GPU上并行运行。对比CPU和GPU如下图。
![](https://images2015.cnblogs.com/blog/442359/201510/442359-20151023175601708-2110912098.png)
下面是NVIDIA官方给出的对比不同CPU和GPU在浮点型运算的性能:
![](https://images2015.cnblogs.com/blog/442359/201510/442359-20151023175621895-1005230207.png)
如果上面的图表还不能明白GPU到底能加速到多块,那么下面这个视频能更直观地说明GPU加速的效果。(看不到视频的话直接转至 优酷链接 | Youtube)
参考文献
《CUDA并行程序设计:GPU编程指南》
《GPU高性能编程CUDA实战》
http://blog.codinghorror.com/building-a-pc-part-viii-iterating/
WHAT IS GPU ACCELERATED COMPUTING?
CUDA C Programming Guide
相关文章推荐
- js面向对象编程(二)构造函数的继承
- tamcat7.0(安装文件下载)
- 简单几何(线段与直线的位置) POJ 3304 Segments
- 在终端输入多行信息,找出包含“ould”的行,并打印该行
- bind相关
- VM虚拟机添加磁盘不重启系统,识别磁盘,添加到分区
- Struts2 ModelDriven和FieldDriven
- 异常处理的原则
- 数据库类型与java数据类型的对应关系
- Strace诊断CPU跑高问题
- android studio 更改背景和设置字体大小
- MySQL 可以用localhost 连接,但不能用IP连接的问题,局域网192.168.*.* 无法连接mysql
- iOS UIEvent 事件传递 流程
- linux内核调试技巧之一 dump_stack
- 单链表的创建删除排序插入逆向打印各种操作
- 数据持久化之CoreData
- Spark1.5.1学习笔记(二)IDE开发环境配置
- SQL编程题 数据库开发工程师
- Java中使用log4j记录日志
- Paint对象使用解析【不断更新中】