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的算法并行化的更多相关文章

  1. [译]基于GPU的体渲染高级技术之raycasting算法

    [译]基于GPU的体渲染高级技术之raycasting算法 PS:我决定翻译一下<Advanced Illumination Techniques for GPU-Based Volume Ra ...

  2. 2维FFT算法实现——基于GPU的基2快速二维傅里叶变换

    上篇讲述了一维FFT的GPU实现(FFT算法实现——基于GPU的基2快速傅里叶变换),后来我又由于需要做了一下二维FFT,大概思路如下. 首先看的肯定是公式: 如上面公式所描述的,2维FFT只需要拆分 ...

  3. FFT算法实现——基于GPU的基2快速傅里叶变换

    最近做一个东西,要用到快速傅里叶变换,抱着蛋疼的心态,自己尝试写了一下,遇到一些问题. 首先看一下什么叫做快速傅里叶变换(FFT)(来自Wiki): 快速傅里叶变换(英语:Fast Fourier T ...

  4. [信安Presentation]一种基于GPU并行计算的MD5密码解密方法

    -------------------paper--------------------- 一种基于GPU并行计算的MD5密码解密方法 0.abstract1.md5算法概述2.md5安全性分析3.基 ...

  5. 基于GPU加速的三维空间分析【转】

    基于GPU加速的三维空间分析 标签:supermap地理信息系统gisit 文:李凯 随着三维GIS 的快速发展和应用普及,三维空间分析技术以其应用中的实用性成为当前GIS技术研究的热点领域.面对日益 ...

  6. 基于GPU的高分一号影像正射校正的设计与实现

    一 RPC正射校正的原理 影像正射校正的方法有很多,主要包含两大类:一类是严格的几何纠正模型,另一类是近似几何纠正模型.当遥感影像的成像模型和有关参数已知时,可以根据严格的成像模型来校正图像,这种方法 ...

  7. QT:用QSet储存自定义结构体的问题——QSet和STL的set是有本质区别的,QSet是基于哈希算法的,要求提供自定义==和qHash函数

    前几天要用QSet作为储存一个自定义的结构体(就像下面这个程序一样),结果死活不成功... 后来还跑到论坛上问人了,丢脸丢大了... 事先说明:以下这个例子是错误的 #include <QtCo ...

  8. 基于多重信号分类算法的DOA估计

    原创博文,转载请注明出处 下面的论文是我的雷达处理的作业,拿来共享,不喜勿喷.由于公式编辑器的原因,无法复制公式,全部内容请点击. 基于多重信号分类算法的DOA估计 1引言 多重信号分类(MUSIC) ...

  9. 基于令牌桶算法实现的SpringBoot分布式无锁限流插件

    本文档不会是最新的,最新的请看Github! 1.简介 基于令牌桶算法和漏桶算法实现的纳秒级分布式无锁限流插件,完美嵌入SpringBoot.SpringCloud应用,支持接口限流.方法限流.系统限 ...

随机推荐

  1. Window与Document

    Window 表示一个包含DOM文档的窗口,其 document 属性指向窗口中载入的 DOM文档.使用 document.defaultView 属性可以获取指定文档所在窗口.window作为全局变 ...

  2. Python爬虫实战之爬取糗事百科段子【华为云技术分享】

    首先,糗事百科大家都听说过吧?糗友们发的搞笑的段子一抓一大把,这次我们尝试一下用爬虫把他们抓取下来. 友情提示 糗事百科在前一段时间进行了改版,导致之前的代码没法用了,会导致无法输出和CPU占用过高的 ...

  3. 解密“CDO-首席数据官”的价值、挑战及发展

    数据,不论形态.格式和类型,已经迅速成为企业最有战略意义的资产:数据资产已经成为了可以形成业务洞察及优势的战略资源,数据的体量.多样性和复杂性也正以指数级增长.就像其他重要的企业资产,数据需要适当的管 ...

  4. .net Core 学习笔记(实体字段映射,IOC注入)

    https://github.com/wj1034184751/ADO.NetCore.git 先简单的做一个学习架子, EF层用的是 EFCore(2.1.0)+ Pomelo.EntityFram ...

  5. SQLServer之Case用法

    定义 计算条件列表,并返回多个可能的结果表达式之一. 表达式类型 case具有两种格式: 简单case表达式,它通过将表达式与一组简单的表达式进行比较来确定结果. case搜索表达式,它通过计算一组布 ...

  6. Windows git和cmd代理设置

    linux的比较简单,直接修改配置文件即可,这里就不再赘述 设置Git代理 http代理: 临时代理: export http_proxy=http://127.0.0.1:7777 export h ...

  7. 我是如何一步步编码完成万仓网ERP系统的(十)产品库设计 6.属性项和类别关联

    https://www.cnblogs.com/smh188/p/11533668.html(我是如何一步步编码完成万仓网ERP系统的(一)系统架构) https://www.cnblogs.com/ ...

  8. css+js实现自动伸缩导航栏

    用css+js实现自动伸缩导航栏 需要达到的效果: 默认首页选中样式 设置鼠标滑过效果:颜色变化(#f60),宽度变化,字体变化 所涉及的知识点: 布局:float css: 元素状态切换(displ ...

  9. Django2.0版本以上与pymsql 不匹配问题以及解决方法

    Django2.0版本以上与pymsql 不匹配问题以及解决方法 Django 2.0 以上 如果使用pymysql0.93,需要一下两步操作: # 1 第一次报错信息: File "D:\ ...

  10. JDK10、JDK11、JDK12新特性

    JDK10新特性 1.var声明变量 很多人抱怨Java是一种强类型,需要引入大量的样板代码.甚至在这些情况下,给定好变量名,通常很清楚发生了什么,明显类型声明往往被认为是不必要的.许多流行的编程语言 ...