基于GPU的算法并行化
GPU计算的目的即是计算加速。相比于CPU,其具有以下三个方面的优势:
l 并行度高:GPU的Core数远远多于CPU(如G100 GPU有240个Cores),从而GPU的任务并发度也远高于CPU;
l 内存带宽高:GPU的内存系统带宽几十倍高于CPU,如CPU (DDR-400)带宽是3.2GB/秒,而GPU内存系统带宽可达147.1GB/秒;
l 运行速度快:GPU在浮点运算速度上较之CPU也具有绝对优势,如对于一般的硬件,CPU(Intel Core 2 Quad Q8200)是 37 GFLOPS,而GPU(nVIDIA Geforce 8800 Ultra(G80-450 GPU))则可达393.6 GFLOPS。
另一方面,GPU采用的SIMD(Single Instruction Multiple Data)架构,这决定了其对执行的任务具有特定的要求(如不适合判断逻辑过多的任务,数据大小不可控的任务等)。而且,应用程序在GPU上也需有特定的实现,包括算法的GPU并行化,程序的定制等。因此,针对GPU并行处理的研究成为一大研究热点。
目前,CUDA和OpenCL是GPU的两种最为流行的编程语言。它们在程序逻辑方面相似,主要直观的区别在于:
l OpenCL比CUDA灵活度高:CUDA只支持NVIDIA的设备,而OpenCL支持各种类型的协处理器,包括GPU,FPGA等;
l CUDA较之OpenCL用户友好性高:CUDA是一个更为高级的抽象,其提供的API更易于使用,而无需编程者对底层设备过多了解;
现有GPU采用SIMD方式执行,即所有线程块在同一时刻执行相同的程序,从而若这些线程块处理的数据量相差大,或计算量分布不均,便会带来线程块的负载不均,进而影响整个任务执行效率。这类问题实则常见的Skew Handling或Load Inbalance问题。
应用算法的GPU并行化之所以成为一个研究问题而不仅仅是工程问题,这其中的主要的问题在于
1)GPU不支持内存的动态分配,从而对于输出结果大小不确定的任务是一个极大的挑战;
2)GPU的SIMD特性使得很多算法不易很好实现,即如何充分利用GPU线程块的并行度;
3)共享数据的竞争读写,共享数据的锁机制带来大量的等待时间消耗。
GPU作为一种协处理器,其的执行受CPU调度。在实际应用中,GPU更多的也是配合CPU工作,从而基于CPU/GPU异构系统的统一任务调度更具实用意义,也是有关GPU的重要研究方面。
GPU采用SIMD架构,各线程块在同一时刻执行相同的Instruction,但对应的是不同的数据。但事实上,GPU线程块具有如下特征:
n 每个线程块只对应于一个的流处理器(SM),即其只能被该对应的SM执行,而一个SM可以对应多个线程块;SM在执行线程块时,线程块中的线程以Warp(每32个线程)为单位调度及并行执行;
n 线程块内的线程可同步,而不同线程块的同步则只能由CPU调用同步命令完成;
n 不同线程块的运行相互独立。
因此,为不同的线程块分配不同的任务,使得GPU做到任务并行,最大化GPU的利用成为可能并具有重要的研究意义。
基于GPU的算法并行化的更多相关文章
- [译]基于GPU的体渲染高级技术之raycasting算法
[译]基于GPU的体渲染高级技术之raycasting算法 PS:我决定翻译一下<Advanced Illumination Techniques for GPU-Based Volume Ra ...
- 2维FFT算法实现——基于GPU的基2快速二维傅里叶变换
上篇讲述了一维FFT的GPU实现(FFT算法实现——基于GPU的基2快速傅里叶变换),后来我又由于需要做了一下二维FFT,大概思路如下. 首先看的肯定是公式: 如上面公式所描述的,2维FFT只需要拆分 ...
- FFT算法实现——基于GPU的基2快速傅里叶变换
最近做一个东西,要用到快速傅里叶变换,抱着蛋疼的心态,自己尝试写了一下,遇到一些问题. 首先看一下什么叫做快速傅里叶变换(FFT)(来自Wiki): 快速傅里叶变换(英语:Fast Fourier T ...
- [信安Presentation]一种基于GPU并行计算的MD5密码解密方法
-------------------paper--------------------- 一种基于GPU并行计算的MD5密码解密方法 0.abstract1.md5算法概述2.md5安全性分析3.基 ...
- 基于GPU加速的三维空间分析【转】
基于GPU加速的三维空间分析 标签:supermap地理信息系统gisit 文:李凯 随着三维GIS 的快速发展和应用普及,三维空间分析技术以其应用中的实用性成为当前GIS技术研究的热点领域.面对日益 ...
- 基于GPU的高分一号影像正射校正的设计与实现
一 RPC正射校正的原理 影像正射校正的方法有很多,主要包含两大类:一类是严格的几何纠正模型,另一类是近似几何纠正模型.当遥感影像的成像模型和有关参数已知时,可以根据严格的成像模型来校正图像,这种方法 ...
- QT:用QSet储存自定义结构体的问题——QSet和STL的set是有本质区别的,QSet是基于哈希算法的,要求提供自定义==和qHash函数
前几天要用QSet作为储存一个自定义的结构体(就像下面这个程序一样),结果死活不成功... 后来还跑到论坛上问人了,丢脸丢大了... 事先说明:以下这个例子是错误的 #include <QtCo ...
- 基于多重信号分类算法的DOA估计
原创博文,转载请注明出处 下面的论文是我的雷达处理的作业,拿来共享,不喜勿喷.由于公式编辑器的原因,无法复制公式,全部内容请点击. 基于多重信号分类算法的DOA估计 1引言 多重信号分类(MUSIC) ...
- 基于令牌桶算法实现的SpringBoot分布式无锁限流插件
本文档不会是最新的,最新的请看Github! 1.简介 基于令牌桶算法和漏桶算法实现的纳秒级分布式无锁限流插件,完美嵌入SpringBoot.SpringCloud应用,支持接口限流.方法限流.系统限 ...
随机推荐
- 获取Url地址中参数的3种方法【华为云技术分享】
获取Url的代码如下:window.location.href; 方法一:原生js(假设已经获得了Url地址) var url = 'https://gitbook.cn/gitchat/geekbo ...
- Git更改文件名大小写,提交失败问题解决
背景:某java文件大小写写错了,一直提交不上去 例如我只是将updatePrivacySettingsTest.java变更为UpdatePrivacySettingsTest.java,但是add ...
- 【08】Jenkins:关于发布
写在前面的话 Jenkins 对于我们用户而言,可能中间会有不同的需求,比如自动构建,接口测试,代码质量检测.但其实我们的最终目的还是打包上线.当然,各个公司的项目开发语言会不一样,但是总体而言发布方 ...
- linux 搭建swoole
1安装依赖包yum -y install gcc gcc-c++ autoconf automake yum -y install zlib zlib-devel openssl openssl-de ...
- linq to js 用法
/** * 排序汇总 * */ var result = Enumerable.From(vm.productList).GroupBy("$.goods_id", null, f ...
- MYSQL GTID 复制
MySQL5.7以后都基本用GTID方式复制了,相对于binlog和position号方式,在failover时候减少很多人工切换操作 GTID,global transaction identiti ...
- ajax请求体
jquery向服务器发送一个ajax请求后,可以返回多种类型的数据格式,包括:html,xml,json,text等. $.ajax({ url:"http://www.test.com&q ...
- python基础语法17 面向对象4 多态,抽象类,鸭子类型,绑定方法classmethod与staticmethod,isinstance与issubclass,反射
多态 1.什么是多态? 多态指的是同一种类型的事物,不同的形态. 2.多态的目的: “多态” 也称之为 “多态性”,目的是为了 在不知道对象具体类型的情况下,统一对象调用方法的规范(比如:名字). 多 ...
- springboot 启动的时候报java.lang.NoClassDefFoundError: org/springframework/expression/ParserContext
解决方案:缺少spring-expression-4.1.4.RELEASE.jar包,丢进项目中就可以了 <dependency> <groupId>org.springfr ...
- Layer获取iframe的dom元素及调用iframe页的js方法
1. 父页面点击第一个按钮触发,获取子页面中的body元素,调用子页面中定义的js方法 yes : function(index,layero){ //获取iframe的body元素 var body ...