转载请引用:GPU---并行计算利器

源于阿里巴巴CCO《猿来如此》分享

1 GPU是什么

如图1所示,这台PC机与普通PC机不同的是这里插了7张显卡,左下角是显卡,在中间的就是GPU芯片。显卡的处理器称为图形处理器(GPU),它是显卡的“心脏”,与CPU类似,只不过GPU是专为执行复杂的数学和几何计算而设计的。

GPU计算能力非常强悍,举个例子:现在主流的i7处理器的浮点计算能力是主流的英伟达GPU处理器浮点计算能力的1/12。

图1 显卡与GPU

2 为什么GPU计算能力如此强悍?

图2对CPU与GPU中的逻辑架构进行了对比。其中Control是控制器、ALU算术逻辑单元、Cache是cpu内部缓存、DRAM就是内存。可以看到GPU设计者将更多的晶体管用作执行单元,而不是像CPU那样用作复杂的控制单元和缓存。从实际来看,CPU芯片空间的5%是ALU,而GPU空间的40%是ALU。这也是导致GPU计算能力超强的原因。

图2 cpu和gpu硬件逻辑结构对比

那有人讲了,为什么cpu不像gpu那样设计呢,这样计算能力也强悍了!

为什么?CPU要做得很通用。CPU需要同时很好的支持并行和串行操作,需要很强的通用性来处理各种不同的数据类型,同时又要支持复杂通用的逻辑判断,这样会引入大量的分支跳转和中断的处理。这些都使得CPU的内部结构异常复杂,计算单元的比重被降低了。而GPU面对的则是类型高度统一的、相互无依赖的大规模数据和不需要被打断的纯净的计算环境。因此GPU的芯片比CPU芯片简单很多。

举个例子,假设有一堆相同的加减乘除计算任务需要处理,那把这个任务交给一堆(几十个)小学生就可以了,这里小学生类似于GPU的计算单元,而对一些复杂的逻辑推理等问题,比如公式推导、科技文章写作等高度逻辑化的任务,交给小学生显然不合适,这时大学教授更适合,这里的大学教授就是CPU的计算单元了,大学教授当然能处理加减乘除的问题,单个教授计算加减乘除比单个小学生计算速度更快,但是成本显然高很多。

3 GPU编程库

GPU计算能力这么强,被广泛使用!比如挖矿(比特币)、图形图像处理、数值模拟、机器学习算法训练等等,那我们怎么发挥GPU超强的计算能力呢?---编程!

怎么进行GPU编程呢?现在GPU形形色色,比如Nvidia、AMD、Intel都推出了自己的GPU,其中最为流行的就是Nvidia的GPU,其还推出了CUDA并行编程库。然而每个GPU生产公司都推出自己的编程库显然让学习成本上升很多,因此苹果公司就推出了标准OpenCL,说各个生产商都支持我的标准,只要有一套OpenCL的编程库就能对各类型的GPU芯片适用。当然了,OpenCL做到通用不是没有代价的,会带来一定程度的性能损失,在Nvidia的GPU上,CUDA性能明显比OpenCL高出一大截。目前CUDA和OpenCL是最主流的两个GPU编程库。

从编程语言角度看,CUDA和OpenCL都是原生支持C/C++的,其它语言想要访问还有些麻烦,比如Java,需要通过JNI来访问CUDA或者OpenCL。基于JNI,现今有各种Java版本的GPU编程库,比如JCUDA等。另一种思路就是语言还是由java来编写,通过一种工具将java转换成C。

图3 GPU编程库

LWJGL (http://www.lwjgl.org/)
JOCL (http://www.jocl.org/)
JCUDA (http://www.jcuda.de/)
Aparapi (http://code.google.com/p/aparapi/)
JavaCL (http://code.google.com/p/javacl/)

4 CUDA程序流程

图4 CUDA程序流程

5 实践---以图像处理为例

假设我们有如下图像处理任务,给每个像素值加1。并行方式很简单,为每个像素开一个GPU线程,由其进行加1操作。

图5 例子

图6 核函数

图7 主流程函数

6 GPU加速效果

下图是我实现的基于CUDA的P&D DEM图像预处理算法使用GPU的加速效果,GeForce GT 330是块普通台式机上的显卡,现在价格也就500人民币左右,用它达到了20倍的加速比,Tesla M2075是比较专业的显卡,价格一万左右,用它达到了将近百倍的加速比,这个程序i7 CPU单进程单线程要跑2个小时,而用Tesla M2075 GPU只花了一分多钟就完成计算。

图8 P&D DEM图像预处理算法加速效果

 

转载于:https://www.cnblogs.com/LBSer/p/4592862.html

GPU---并行计算利器相关推荐

  1. matlab中如何调用gpu进行并行计算_极致安卓-Termux/Aid learning开启WebGL手机GPU并行计算...

    在我的之前的测评中,我利用Termux和Aid Learning测试过基于C/C++的openmp并行程序,基于Java的并行程序,还有基于MPI以及基于Java的分布式集群并行.但是很遗憾,一直无法 ...

  2. GPU并行计算OpenCL(3)——图像处理

    GPU并行计算OpenCL(3)--图像处理 我们这一章来实现一下利用OpenCL完成一个简单的高斯过滤器处理图像,在实现图像处理之前,我们需要了解OpenCL中的图像对象和采样器对象. 图像对象 图 ...

  3. GPU并行计算OpenCL(2)——矩阵卷积

    GPU并行计算OpenCL(2)--矩阵卷积 我们完成了helloworld之后,会感慨一个helloworld就要2-3百行代码.但由于OpenCL需要完成一系列启用GPU并行计算的过程,所以我们之 ...

  4. GPU并行计算OpenCL(1)——helloworld

    GPU并行计算OpenCL(1)--helloworld 随着现在GPU越来越强大,我们看论文的时候经常听到GPU加速的某某某算法,但是到底如何进行加速呢?CUDA可能大家更加熟悉(奈何电脑是MAC) ...

  5. 科学计算 | Matlab 使用 GPU 并行计算

    科学计算 | Matlab 使用 GPU 并行计算 本文转载自:   https://sanwen8.cn/p/14bJc10.html Matlab下直接使用GPU并行计算(预告)<-- 这预 ...

  6. torch+cuda gpu并行计算

    torch+ CUDA gpu 并行计算环境配置 需要注意 GPU算力值 cuda版本 显卡驱动版本 torch版本 之间的匹配 torch版本可以根据cuda版本来 先根据驱动版本和显卡算力(显卡算 ...

  7. 一文了解GPU并行计算CUDA

    了解GPU并行计算CUDA 一.CUDA和GPU简介 二.GPU工作原理与结构 2.1.基础GPU架构 2.2.GPU编程模型 2.3.软件和硬件的对应关系 三.GPU应用领域 四.GPU+CPU异构 ...

  8. GPU并行计算基础知识科普

    1.什么是异构架构? 使用CPU,GPU等两种或多种不同的硬件架构结合在一起完成计算任务. 说白了就是CPU内部组织 和 GPU内部组织不一样,即"异构". 2.什么叫GPU通用计 ...

  9. pytorch 多GPU并行计算

    并行计算分为两类: https://baijiahao.baidu.com/s?id=1632494497660364845&wfr=spider&for=pc 模型并行:将模型的多个 ...

  10. 交替隐式方法matlab求解,交替方向隐式CFD解法器的GPU并行计算及其优化

    0引言GPU作为一类典型的众核计算加速部件,已被广泛应用于构建高性能计算系统[1].充分发挥GPU性能,需要针对问题模型和计算方法特点,设计细粒度并行算法.对计算流体力学(ComputationalF ...

最新文章

  1. 不容错过的灰度发布系统架构设计
  2. 【VMCloud云平台】SCCM(三)初始配置
  3. Oracle rollup 关键字用法简介.
  4. 为什么焊锡老是粘在烙铁头上_自动焊锡机常见问题及解决方案「由力自动化」...
  5. 2017甲骨文JavaOne参会感想
  6. C语言中,全局变量滥用的后果竟如此严重?
  7. Spring主要用到两种设计模式
  8. Hadoop之Flume详解
  9. Spring中DispacherServlet、WebApplicationContext、ServletContext的关系
  10. linux跑程序内存不够,linux 未跑程序 内存 cache使用过大(示例代码)
  11. 80后开网店卖故事:1500多位为感觉而埋单
  12. OSS SSL 访问异常
  13. spring注解 annotation
  14. 对于DEMATEL法的部分理解
  15. postgresql数据库进行等保测评(审计) 需要修改的参数
  16. 计算机管理格式化硬盘,电脑格式化磁盘的方法步骤图
  17. php开发工具ps,小蚂蚁学习PS切图之基础操作(2)——工具栏的介绍
  18. Linux入门系列课程一
  19. Qt显示调用dll库失败
  20. LaTeX技巧353:图片标题的字体大小怎么设定呢?

热门文章

  1. php中mysqli_query,在PHP中如何使用mysqli_query()函数
  2. html文件div盒子浮动,css基础03-盒模型、网站布局思想、浮动以及浮动带来的影响...
  3. html怎么使用伪类清除浮动,JS中使用 after 伪类清除浮动实例
  4. html制作棋盘,棋盘的制作方法
  5. redis的持久化方式有哪些?
  6. 汉字在屏幕上的显示过程以及乱码的原因
  7. cf不能全屏win7的解决方法_win7电脑输入法不能打字的解决方法
  8. layer output 激活函数_深入理解YOLO v3实现细节 - 第3篇 构建v3的Loss_layer
  9. 阐述Spring security实现用户认证授权的原理----基于session实现认证的方式
  10. stm32 hal uart_STM32 非阻塞HAL_UART_Receive_IT解析与实际应用