GPU---并行计算利器
转载请引用: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编程库
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---并行计算利器相关推荐
- matlab中如何调用gpu进行并行计算_极致安卓-Termux/Aid learning开启WebGL手机GPU并行计算...
在我的之前的测评中,我利用Termux和Aid Learning测试过基于C/C++的openmp并行程序,基于Java的并行程序,还有基于MPI以及基于Java的分布式集群并行.但是很遗憾,一直无法 ...
- GPU并行计算OpenCL(3)——图像处理
GPU并行计算OpenCL(3)--图像处理 我们这一章来实现一下利用OpenCL完成一个简单的高斯过滤器处理图像,在实现图像处理之前,我们需要了解OpenCL中的图像对象和采样器对象. 图像对象 图 ...
- GPU并行计算OpenCL(2)——矩阵卷积
GPU并行计算OpenCL(2)--矩阵卷积 我们完成了helloworld之后,会感慨一个helloworld就要2-3百行代码.但由于OpenCL需要完成一系列启用GPU并行计算的过程,所以我们之 ...
- GPU并行计算OpenCL(1)——helloworld
GPU并行计算OpenCL(1)--helloworld 随着现在GPU越来越强大,我们看论文的时候经常听到GPU加速的某某某算法,但是到底如何进行加速呢?CUDA可能大家更加熟悉(奈何电脑是MAC) ...
- 科学计算 | Matlab 使用 GPU 并行计算
科学计算 | Matlab 使用 GPU 并行计算 本文转载自: https://sanwen8.cn/p/14bJc10.html Matlab下直接使用GPU并行计算(预告)<-- 这预 ...
- torch+cuda gpu并行计算
torch+ CUDA gpu 并行计算环境配置 需要注意 GPU算力值 cuda版本 显卡驱动版本 torch版本 之间的匹配 torch版本可以根据cuda版本来 先根据驱动版本和显卡算力(显卡算 ...
- 一文了解GPU并行计算CUDA
了解GPU并行计算CUDA 一.CUDA和GPU简介 二.GPU工作原理与结构 2.1.基础GPU架构 2.2.GPU编程模型 2.3.软件和硬件的对应关系 三.GPU应用领域 四.GPU+CPU异构 ...
- GPU并行计算基础知识科普
1.什么是异构架构? 使用CPU,GPU等两种或多种不同的硬件架构结合在一起完成计算任务. 说白了就是CPU内部组织 和 GPU内部组织不一样,即"异构". 2.什么叫GPU通用计 ...
- pytorch 多GPU并行计算
并行计算分为两类: https://baijiahao.baidu.com/s?id=1632494497660364845&wfr=spider&for=pc 模型并行:将模型的多个 ...
- 交替隐式方法matlab求解,交替方向隐式CFD解法器的GPU并行计算及其优化
0引言GPU作为一类典型的众核计算加速部件,已被广泛应用于构建高性能计算系统[1].充分发挥GPU性能,需要针对问题模型和计算方法特点,设计细粒度并行算法.对计算流体力学(ComputationalF ...
最新文章
- 不容错过的灰度发布系统架构设计
- 【VMCloud云平台】SCCM(三)初始配置
- Oracle rollup 关键字用法简介.
- 为什么焊锡老是粘在烙铁头上_自动焊锡机常见问题及解决方案「由力自动化」...
- 2017甲骨文JavaOne参会感想
- C语言中,全局变量滥用的后果竟如此严重?
- Spring主要用到两种设计模式
- Hadoop之Flume详解
- Spring中DispacherServlet、WebApplicationContext、ServletContext的关系
- linux跑程序内存不够,linux 未跑程序 内存 cache使用过大(示例代码)
- 80后开网店卖故事:1500多位为感觉而埋单
- OSS SSL 访问异常
- spring注解 annotation
- 对于DEMATEL法的部分理解
- postgresql数据库进行等保测评(审计) 需要修改的参数
- 计算机管理格式化硬盘,电脑格式化磁盘的方法步骤图
- php开发工具ps,小蚂蚁学习PS切图之基础操作(2)——工具栏的介绍
- Linux入门系列课程一
- Qt显示调用dll库失败
- LaTeX技巧353:图片标题的字体大小怎么设定呢?
热门文章
- php中mysqli_query,在PHP中如何使用mysqli_query()函数
- html文件div盒子浮动,css基础03-盒模型、网站布局思想、浮动以及浮动带来的影响...
- html怎么使用伪类清除浮动,JS中使用 after 伪类清除浮动实例
- html制作棋盘,棋盘的制作方法
- redis的持久化方式有哪些?
- 汉字在屏幕上的显示过程以及乱码的原因
- cf不能全屏win7的解决方法_win7电脑输入法不能打字的解决方法
- layer output 激活函数_深入理解YOLO v3实现细节 - 第3篇 构建v3的Loss_layer
- 阐述Spring security实现用户认证授权的原理----基于session实现认证的方式
- stm32 hal uart_STM32 非阻塞HAL_UART_Receive_IT解析与实际应用