一起学CUDA(零)

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的线程试图

时间: 2024-10-12 12:31:56

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

CUDA零内存拷贝 疑问考证

今天思考了一下CUDA零内存拷贝的问题,感觉在即将设计的程序中会派上用场,于是就查了一下相关信息. 以下是一些有帮助的链接: cuda中的零拷贝用法--针对二维指针 cuda中的零拷贝用法--针对一维指针 cuda零拷贝用法-二维结构体指针 浅谈CUDA零拷贝内存 经过调查发现,零拷贝技术适用于集中计算.较少内存拷贝次数的问题.比如向量点积.求和运算等问题. 既然零拷贝技术是在CPU上开辟内存空间,GPU可以直接访问该空间,那么我就产生了一个疑问:"如果CPU上开辟的空间大于GPU的可用空间的时

3.5星|《行为设计学:零成本改变》:明确的、可操作的、短期的、可以引起情感共鸣的目标,更有助于个人或组织做出改变

行为设计学:零成本改变 主要内容讲如何推动个人.公司.组织.社群做出改变.比如如何减肥.戒烟,石油公司如何提高勘探效率,如何推动社群保护野生动物,如何推广新的手术方案等.有案例有理论. 作者的理论基于大象和骑象人的比喻.大象是理性部分,骑象人是感性部分,骑象人可以有长远的视角和愿景,大象则只有短期视角,只接受感性的说服.骑象人必须用短期利益来驱动大象.大象可能很难驱动和驾驭. 作者的理论稍复杂,我对这些案例的总结如下:想让人做出改进,除了理性的说服外,还需要给出明确的.可操作的.短期的.可以引起

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

又是周末,继续Struts2的学习,之前学习了,Struts的原理,Actions以及Results,今天对对Struts的Convention Plugin进行学习,如下图: Struts Convention支持零配置进行开发,也就是约定约定优于配置的方式. (1)环境准备 使用Convention Plugin进行开发,需要引入struts2-convention-plugin,完整的pom.xml依赖如下: 1 <dependency> 2 <groupId>org.apa

一起学CUDA(一)

前提是电脑的显卡支持CUDA,N卡一般是支持的,如果是A卡就没办法了.主要针对Windows环境,Linux和Mac也有相应的安装包.CUDA环境搭建:Step1:安装代码环境VS2010:Step2:更新Nvidia驱动:Step3:安装CUDA toolkit:Step3:安装gpu computing sdk;Step1~Step3相关软件包可以在NVIDIA社区下载,Step4:检测是否安装成功Step4.1:进入安装路径:C:\ProgramData\NVIDIA Corporatio

Cuda beginning

前言: 由于一直在学习图形学,很多时候,图形学中的计算,如最近碰到的问题,计算随机点的中垂面,每个点的计算K近邻树,都是独立的.如果用GPU并行加速,可能会有好的提速效果. 再加上实验室已有学长对这个领域有比较深入的了解,故想开始学CUDA. CPU 可以类比于一个强壮的男人,而GPU则是一群小孩,每一个能力不大,但是却可以同时做很多事情,这就是并行的好处. GPU是不适合做太多的逻辑判断的.它更希望能做一些简单的计算工作. 本笔记的主要来源是 GUDA_C_Programming_Guide 

零基础如何自学软件编程

随着科技的发展,越来越多的人学习软件编程.有人甚至辞职到培训机构去学习软件编程,也有人害怕是浪费时间,最后工作也没了,也没有学好软件编程.所以在看到网上说软件编程是可以自学的,就想一边工作一边自学软件编程.那么小编就来说说,自学软件编程有什么好的方法.2017零基础如何自学软件编程 1. 零基础能学软件编程吗? 很多人在看到it行业的发展前景一片大好,就想也转行去it行业,但是有很多都在担心同一个问题,就是零基础可以学软件编程吗?其实零基础是可以学软件编程的,也没有谁是天生就会的,不会就学,是可

CUDA学习

因为老师要求,现在开始学习CUDA的相关知识.开始在网上找了很多教程,都在一点一点看,后来同学推荐了一本书,是<GPU高性能编CUDA实战>,觉得挺不错的,书上的实例代码我都有码,对CUDA的理解也越来越深了,打算把这些记下来,以后可以复习,也给后来学习的人一点参考,少走弯路. 来老师实验室三周了,每天就是呆在实验室里学习CUDA,我开始以为是用CUDA做图形图像呢,后来才知道老师让我学CUDA是做信号处理的,这个就比较蛋疼了,苦日子在后头呢.本来九月开学呢,我暑假就过来了,想着人丑还不好好学

一 GPU 编程技术的发展历程及现状

前言 本文通过介绍 GPU 编程技术的发展历程,让大家初步地了解 GPU 编程,走进 GPU 编程的世界. 冯诺依曼计算机架构的瓶颈 曾经,几乎所有的处理器都是以冯诺依曼计算机架构为基础工作的. 该系统架构简单来说就是处理器从存储器中不断取指,解码,执行. 但如今,这种系统架构遇到了瓶颈:内存的读写速度已经跟不上 CPU 的时钟频率了.具有此特征的系统被称为内存受限型系统,目前的绝大多数计算机系统都属于此类型. 为了解决这个问题,传统的解决方案是使用缓存技术.通过给 CPU 设立多级缓存,能够大

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

前言 本文通过介绍 GPU 编程技术的发展历程,让大家初步地了解 GPU 编程,走进 GPU 编程的世界. 冯诺依曼计算机架构的瓶颈 曾经,几乎所有的处理器都是以冯诺依曼计算机架构为基础的.该系统架构简单来说就是处理器从存储器中不断取指,解码,执行. 但如今这种系统架构遇到了瓶颈:内存的读写速度跟不上 CPU 时钟频率.具有此特征的系统被称为内存受限型系统,目前的绝大多数计算机系统都属于此类型. 为了解决此问题,传统解决方案是使用缓存技术.通过给 CPU 设立多级缓存,能大大地降低存储系统的压力