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. 动态调用webservice 接口

    1.url:http://localhost:8002/名称.asmx(asmx结尾) 2.需要引用的命名空间:System.Web.Services 3.调用代码: public class Dyn ...

  2. MYSQL - ORDER BY & LIMIT

    http://stackoverflow.com/questions/4708708/mysql-order-by-limit

  3. 请问view controller scene,该如何删除

    当要删除默认的view controller scene的时候,选中,按del键 注意点击中间的那个左侧按钮,打开scene列表,再选中scene,按del即可删除

  4. js之数组常见的方法

    主要介绍数组的一些常用的方法,方法多了,就容易混淆,结果就是方法用错,甚至不会用: 一.数组的定义: 1.字面量/直接量: var arr = [1, 2, 'js', 'java']; 2.通过内部 ...

  5. 跨平台的加密算法XXTEA 的封装

    跨平台的加密算法XXTEA 的封装 XXTEA算法的结构非常简单,只需要执行加法.异或和寄存的硬件即可,且软件实现的代码非常短小,具有可移植性. 维基百科地址:http://en.wikipedia. ...

  6. iOS:核心动画的详解介绍:CAAnimation(抽象类)及其子类

    核心动画的详解介绍:CAAnimation(抽象类)   1.核心动画基本概念 Core Animation是一组非常强大的动画处理API,使用它能做出非常炫丽的动画效果,而且往往是事半功倍! 使用它 ...

  7. SSIS ->> Data Flow Design And Tuning

    Requirements: Source and destination system impact Processing time windows and performance Destinati ...

  8. VMware VMware各版本

    VMware各版本 一.VMware  vSphere5: VMware vSphere5 取代原 VMware ESX 二.VMware ESXI/VMware Citrix/VMware XenS ...

  9. c# ffmpeg视频转换

    c#  ffmpeg视频转换 什么是ffmpeg,它有什么作用呢,怎么可以使用它呢,带着问题去找答案吧!先参考百度百科把,我觉得它很强大无奇不有,为了方便大家我就把链接提供了! http://baik ...

  10. pyhton3多线程

    from time import ctime,sleep def music(): for i in range(2): print ("I was listening to music. ...