1.Nvidia为什么引入CUDA
最近实验室已经有不少豪在入手本本了,因为学霸居多,所以大家一般都会说对显卡要求不高,不玩大型游戏,只是CPU不能差,Intel I7、3G的主频……

其 实现在CPU的时钟频率4GHz已经基本极限了,在这个极限点上,CPU会产生大量的热量,产生热量的原因是随着时钟频率的提升,电力功耗增大。事实上, 在电压不变的情况下,一个CPU的电力功耗大约是它时钟频率的3次方,更糟糕的是,如果CPU产生的热量增加,那么即使时钟频率不变,根据硅材质的特 点,CPU的功耗也会进一步增加,这个不断增加的无效的电能消耗,意味着你要么不能充分为处理器提供电力,要么不能够有效的冷却处理器,已经达到了电子设 备或芯片封装的散热极限,即“功耗强”(Power Wall)效应。

另一方面是市场上对更快处理器的需求,于是两个主要的PC机CPU制造商,Intel和AMD采取了多核方案,从持续的提高时钟频率转移到向处理器添加更多核的发展道路。

然 而,不管什么行业,道路的转变都是很困难的,就好比马路走惯了,突然要走水路,总会有一拨人淹死,要么就得学会游泳。多核带来的问题是,串行、单线程的问 题求解方法向多线程并行执行的问题求解方法的改变。涉及到线程的分配、内存的共享等等问题,也许你的程序在双核的电脑上跑得很欢,换个四核的机器就挂掉 了,所以这个转变一直很缓慢。其实不少人用着四核的机器运行着单线程的应用程序,顶多在一个核工作时,一些设备会动态的提升时钟频率来提高性能,所以不少 的四核机器也就是空有其表,不少的硬件资源都是浪费的。

图1:CPU和GPU的峰值性能(单位:十亿次浮点操作每秒gigaflops)

多核CPU的发展路漫漫其修远兮,另一方面,如果留意GPU和CPU的计算能力,如图1所示,GPU已经开始甩开CPU几条街了,就目前CPU很难达到 4GHz的时钟频率,核数很难超过16核,计算能力约为64gigaflops(10亿次浮点操作每秒),而如图2所示的GPU计算能力都已经远超CPU 了,如果能好好动动GPU的脑子,也许会是另一条康庄大道。

图2:当前Nvidia GPU卡性能参数

2007年,Nvidia发现了一个能使GPU进入主流的契机,即推出了CUDA(Compute Unified Device Architecture计算统一设备架构),这就为GPU增加了一个易用的编程接口,CUDA是C语言的一种扩展,它允许使用标准C来进行GPU编程, 由于CUDA的规范性以及通用易用性,近年来发展相当迅速,成为首个有可能发展成为GPU开发的候选编程语言。
2. 深入了解GPU
GPU计算能力为什么这么强,这自然跟它的内部原理是密切相关的。GPU的硬件结构与CPU的硬件结构有着根本的不同,图4显示了一个位于PCI-E总线另一侧的GPU系统。

图3:core2 系列CPU的结构图

图4:GPU卡的组成模块图
GPU的硬件部分由以下几个关键模块组成:
1)内存(全局的、常量的、共享的)
2)流处理器簇SM
3)流处理器SP
关于GPU的并发性,并发性的内涵是,对于一个特定的问题,无须考虑用哪种并行计算来求解,而只需关注求解方法中的哪些操作是可以并行执行的。由于“易并 行”不需要或者只需要少许线程间或线程块间通信,所以CUDA是很理想的并行求解平台,它用基于片上资源的、显示的通信原语来支持线程间的通信。CUDA 将问题分解成线程块的网格,每块包含多个线程,块可以按任意顺序执行,不过在某个时间点上,只有一部分块处于执行中,一旦被调度到GPU包含的N个“流处 理器簇”中的一个上执行,一个块必须从开始执行到结束,图5表示基于GPU的线程示意图。

图5:基于GPU的线程试图

附录:

相关资料可以参看书籍:

《Cuda By Example》

《CUDA PROGRAMMING:A DEVELOPER'S GUIDE TO PARALLEL COMPUTING WITH GPUs》

一起学CUDA(零)的更多相关文章

  1. CUDA零内存拷贝 疑问考证

    今天思考了一下CUDA零内存拷贝的问题,感觉在即将设计的程序中会派上用场,于是就查了一下相关信息. 以下是一些有帮助的链接: cuda中的零拷贝用法--针对二维指针 cuda中的零拷贝用法--针对一维 ...

  2. 从0.5开始学Java 零

    作为新世纪的码农,掌握多门语言是必须的. 我先从java学起,工作又是做c# ,现在辞职了想重新捡回java的技术,所以写一个长篇 来给自己复习 ,题目就叫做从0.5开始学java. 核心内容就是 一 ...

  3. 菜鸟学Struts2——零配置(Convention )

    又是周末,继续Struts2的学习,之前学习了,Struts的原理,Actions以及Results,今天对对Struts的Convention Plugin进行学习,如下图: Struts Conv ...

  4. 一起学CUDA(一)

    前提是电脑的显卡支持CUDA,N卡一般是支持的,如果是A卡就没办法了.主要针对Windows环境,Linux和Mac也有相应的安装包.CUDA环境搭建:Step1:安装代码环境VS2010:Step2 ...

  5. 第一个CUDA程序

    开始学CUDA 先写一个简单的 #include<iostream>__global__ void add( int a, int b, int *c ) { *c = a + b;}in ...

  6. Cuda入门笔记

    最近在学cuda ,找了好久入门的教程,感觉入门这个教程比较好,网上买的书基本都是在掌握基础后才能看懂,所以在这里记录一下.百度文库下载,所以不知道原作者是谁,向其致敬! 文章目录 1. CUDA是什 ...

  7. [CUDA] 00 - GPU Driver Installation & Concurrency Programming

    前言 对,这是一个高大上的技术,终于要做老崔当年做过的事情了,生活很传奇. 一.主流 GPU 编程接口 1. CUDA 是英伟达公司推出的,专门针对 N 卡进行 GPU 编程的接口.文档资料很齐全,几 ...

  8. pytorch下的lib库 源码阅读笔记(2)

    2017年11月22日00:25:54 对lib下面的TH的大致结构基本上理解了,我阅读pytorch底层代码的目的是为了知道 python层面那个_C模块是个什么东西,底层完全黑箱的话对于理解pyt ...

  9. 第一篇:GPU 编程技术的发展历程及现状

    前言 本文通过介绍 GPU 编程技术的发展历程,让大家初步地了解 GPU 编程,走进 GPU 编程的世界. 冯诺依曼计算机架构的瓶颈 曾经,几乎所有的处理器都是以冯诺依曼计算机架构为基础的.该系统架构 ...

随机推荐

  1. Windows Server2008+IIS7部署网站的日期格式问题

    最近部署一个ASP网站,发现网站的某个功能上的日历在原来的服务器上访问时是会根据特定日期来对该日进行加粗加红显示的,但部署到我公司机房的win2008服务器上访问时却没有这效果了. 于是通过本地部署, ...

  2. 深入浅出ES6(十二):代理 Proxies

    作者 Jason Orendorff  github主页  https://github.com/jorendorff 请看这样一段代码: var obj = new Proxy({}, { get: ...

  3. 创建CancellationTokenSource对象用于取消Task

    虽然使用线程池ThreadPool让我们使用多线程变得容易,但是因为是由系统来分配的,如果想对线程做精细的控制就不太容易了,比如某个线程结束后执行一个回调方法.恰好Task可以实现这样的需求.这篇文章 ...

  4. initWithFrame方法的理解

    initWithFrame方法的理解   有时候,知道initWithFrame方法如何用,但是么有弄明白initWithFrame方法到底是什么? 那就通过查资料弄明白.     1. initWi ...

  5. lintcode:二叉树的所有路径

    二叉树的所有路径 给一棵二叉树,找出从根节点到叶子节点的所有路径. 样例 给出下面这棵二叉树: 1 / \ 2 3 \ 5 所有根到叶子的路径为: [ "1->2->5" ...

  6. 解决IIS应用程序池DefaultAppPool关闭超时错误

    错误系统日志: 为应用程序池“DefaultAppPool”提供服务的进程关闭时间超过了限制.进程 ID 是“3060”. 有关更多信息,请参阅在http://go.microsoft.com/fwl ...

  7. iOS开发--appstore应用上架

    除了企业级的应用,一般一个应用开发完成后,都会上架App Store.其实上架流程并不繁琐,麻烦的是要耗时等待审核,如果被拒,修改后又需要等待.被拒的原因很多(真的很多…),比如程序有崩溃,适配没做好 ...

  8. 超级内存NVDIMM:下一代数据中心存储关键技术

    1.背景介绍 连接到互联网的设备数量不断增长,到2015年,将达到150亿之多.而数据中心的压力也随之增加,唯有采用新的技术才能进一步提升其效率和性能. 相比于HDD传统硬盘,固态硬盘大大增加了I/O ...

  9. J-link V8固件升级记

    http://blog.sina.com.cn/s/blog_5bdee3020101khfy.html 好久没为电子工程事业尽份力了!今天也稍微努把力!写写我是如何升级J-link的固件的吧! J- ...

  10. linux下配置QT(很全的步骤,从下载开始,配置QMAKESPEC)

    一.下载Qt源码包到本机,然后解压缩#tar zxvf qt-x11-opensource-src-4.3.2.tar.gz -C /usr/local //将qt-x11-opensource-sr ...