0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

OpenCL编程语言可以帮助我们使用GPU或者多核处理器的并行能力

SSDFans 来源:lp 2019-04-19 17:31 次阅读

一、并行处理

所谓并行处理就是同时处理多个计算程序,应用程序处理器典型的设计是使用单线程尽可能快的去执行应用程序,这种类型的处理器通常包含标量操作单元和程序控制器GPU是被设计用来同时执行大量线程的处理器,GPU处理器的典型设计是使用多处理器并行的处理多个任务。

OpenCL编程语言可以帮助我们使用GPU或者多核处理器的并行能力。OpenCL是一种开放标准的变成语言,它能够使开发者在GPU或者其他类型的多核处理器上运行通用计算任务。

二、并行类型

1.数据并行

数据并行,任务并行和流水线(pipelines)并行是主要的并行类型。

数据并行是将数据划分为不同的数据元素或者数据块,使得处理器可以并行的处理不同的数据元素。多个处理器可以同时的读写和处理不同的数据。因此数据并行要求数据的数据结构可以满足多个处理器同时读写的要求。GPU进行通用计算,最典型的应用便是数据并行。通过OpenCL等编程语言可以很轻松的实现不同的线程以相同的方式处理不同的数据。如下图所示:可以使用9个线程,同时完成9组数据的相加。

2.任务并行

任务并行,是指一个任务被分解为多个小任务,由多个处理器同时处理。任务并行的一个简单例子便是在网页上播放一段视频,为了能够在网页上播放视频,我们的设备需要做如下几个任务:

运行一个执行通信网络堆栈

从外部服务器请求数据

分析数据

解码视频数据

解码音频数据

渲染视频帧数据

播放音频数据

下图显示了播放在线视频的时候应用程序同时操作的系统;

3.流水线并行

流水线是通过多个不同的计算阶段处理数据,在流水线上多个阶段可以同时操作,但是他们操作的是不同的数据。流水线通常拥有相当少的阶段。下面是一个关于流水线的例子,一个录像程序必须执行的几个阶段:

图像传感器捕捉图像数据,并且计算亮度级别

根据镜头效果修正图像数据

修正图像数据的对比度,色彩平衡和曝光

压缩图像数据

将图像数据添加到视频文件

将视频数据写入存储器

这些阶段必须按照顺序执行,但是他们可以同时在视频中的不同帧上执行。

我们将6个处理阶段,对应6中颜色,分别表示6个处理单元:

按照串行的处理方式,处理一帧图像需要串行的经过6个处理单元,假设需要300us的延迟,每一个处理单元消耗50us。这是一种组合逻辑的实现过程,我们只需要每300us输入一帧图像即可,不需要在处理单元内部做同步。

如果使用流水线技术,那么处理流程将完全不同,流水线技术是一种指令叠加技术,能够增加系统的吞吐量,但是同时会带来每一帧数据的处理延迟会增加。具体处理流程如下图所示:

图中给出了A、B、C三帧数据的处理流程;当A进入第二阶段的时候,B便可以进入第一阶段,当B进入第二阶段的时候,C便可以进入第一阶段,以此类推;但是需要注意的是,我们需要在每一个阶段的结束位置添加寄存器,用于数据同步。假设寄存器延迟为20us(请忽略单位,寄存器延迟不会达到us级别,为了计算方便这里做了不合实际的假设)。那么处理3帧数据,需要消耗的时间为:

8×(50 + 20) = 560 us;

而串行处理方式需要消耗300 × 3 = 900 us;但是不使用流水线获取每一帧数据输入到输出的延迟为300us,而加入流水线技术后,获取数据的延迟为420us。

不使用流水线时,系统的吞吐量为:1/300;使用流水线后,系统的吞吐量为:3/420= 1/140;可以看到系统的吞吐量增加了2.14倍(注:吞吐量的计算忽略单位,倍数的计算是准确的)。所以通过使用流水线技术可以显著增加系统的吞吐量,但是会增加系统的延迟。

但是流水线在使用过程中也存在弊端,以上的任务划分是均分的,但是在实际使用中,由于任务划分的不均匀,会造成流水线产生不同的延迟,不合理的阶段划分,很容易导致流水线阻塞,造成性能降低。

三.混合使用不同的并行方式及其并行加速限制

在具体的应用中可以综合使用不同的并行方式,例如在一个音频分析的应用中,就可以同时使用以上三种并行方式。

可以使用任务并行来独立的计算音符

使用音频生成流水线和处理模块来创造独特的音符

在流水线内部,一些处理阶段可以使用数据并行来加速计

但同时并行加速也有他的限制,假设你的应用程序能够完全并行化,那么使用10个处理器来执行,可以将程序性能提升10倍,但是很少有应用程序可以完全并行化,程序中很大可能会存在串行部分,而串行部分则会限制程序的并行化数量。

Amdahl定律描述了并行程序可以实现的最大加速,Amdahl定律的公式如下:

Speedup = 1/(s + p / n);其中,s表示应用程序中串行的部分,p表示应用程序中并行的部分,n表述处理器的数量。

下图展示了不同数量的处理器对串行比例不同的应用程序所能提供的加速比率变化曲线:

在后续的文章中会更加细致的介绍如何使用OpenCL在移动端GPU上对应用程序进行并行化。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 处理器
    +关注

    关注

    68

    文章

    18250

    浏览量

    222055
  • gpu
    gpu
    +关注

    关注

    27

    文章

    4413

    浏览量

    126640
  • 编程语言
    +关注

    关注

    9

    文章

    1878

    浏览量

    33060

原文标题:原来GPU这么简单,一定要看!

文章出处:【微信号:SSDFans,微信公众号:SSDFans】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    面向多核处理器的低级并行程序验证

    指令的操作语义和所需要的安全策略,使得在该框架下可以验证多核并行程序的部分正确性。关键词 多核处理器,自旋锁,程序验证,汇编级,部分正确性A
    发表于 10-06 09:56

    每日一教labview视频教程【1.10】labview多核并行运行编程

    随着多核成为处理器的发展主流,对于并行编程(多线程编程)也成为了开发人员最大的难题,而LabVIEW凭借自身的
    发表于 01-10 13:48

    GPU

    ,也是一个统一的编程环境,便于软件开发人员为高性能计算服务、桌面计算系统、手持设备编写高效轻便的代码,而且广泛适用于多核处理器(CPU)、图形
    发表于 01-16 08:59

    探讨采用C6000系列多核DSP的并行计算(OpenCL、OpenMP)实现大规模电磁系统的暂态仿真及其控制系统

    的运算,实现物理时间和仿真时间的同步更新。第二是大规模,即整个系统在各部分各个时间尺度上都能覆盖,而不是被简化。在此要求下,必须对系统进行划分,对每一个划分出来的小型子系统采用多核处理器进行并行计算仿真
    发表于 12-03 20:42

    多核处理器的优点

    处理器。通过在两个执行内核之间划分任务,多核处理器可在特定的时钟周期内执行更多任务。 多核技术能够使服务
    发表于 06-20 06:47

    多核处理器启动的基本原理是什么?如何实现呢

    一个程序(前提是这个程序可拆解)。对于并行执行的性能提升,定量分析可以参考Amdahl定律。不管单核处理器还是多核处理器设计,都是一个非常宏
    发表于 06-07 16:41

    看看一个多核处理器系统是如何启动的

    一个程序(前提是这个程序可拆解)。对于并行执行的性能提升,定量分析可以参考Amdahl定律。不管单核处理器还是多核处理器设计,都是一个非常宏
    发表于 07-19 15:00

    怎么使用ARM处理器上的GPU进行编程工作呢

    怎么使用ARM处理器上的GPU进行编程工作呢?有哪位大神可以解释一下
    发表于 08-04 14:17

    Arm Mali™ GPU OpenCL开发者指南

    多得多的处理单元。这使马里™ GPU可以在不使用更多功率的情况下以比应用程序处理器更高的速率进行计算。 马里™ GPU
    发表于 08-10 07:47

    ARM Mali-T600系列GPU OpenCL开发人员指南

    GPU被设计为同时执行多个线程。 它们并行运行包含相对较少控制代码的计算密集型数据处理任务。 GPU通常包含比应用程序处理器多得多的
    发表于 08-24 07:07

    基于FPGA的嵌入式多核处理器及SUSAN算法并行

    基于FPGA的嵌入式多核处理器及SUSAN算法并行
    发表于 08-30 18:11 24次下载

    多核处理器会取代FPGA吗?

    有人认为诸如图形处理器GPU)和Tilera处理器多核处理器在某些应用中正逐步替代现场可编程
    发表于 02-11 11:15 913次阅读
    <b class='flag-5'>多核</b><b class='flag-5'>处理器</b>会取代FPGA吗?

    嵌入式ARM多核处理器并行化优化探究

    目前,嵌入式多核处理器已经在嵌入式设备领域得到广泛运用,但嵌人式系统软件开发技术还停留在传统单核模式,并没有充分发挥多核处理器的性能。程序并行
    发表于 10-16 10:01 1次下载
    嵌入式ARM<b class='flag-5'>多核</b><b class='flag-5'>处理器</b><b class='flag-5'>并行</b>化优化探究

    基于NI LabVIEW图形化编程多核处理器和其他并行硬件进行编程

    NI LabVIEW图形化编程方法不仅省时,还很适合对多核处理器和其他并行硬件[如:现场可编程门阵列(FPGA)]进行
    发表于 11-16 19:30 1320次阅读
    基于NI LabVIEW图形化<b class='flag-5'>编程</b>对<b class='flag-5'>多核</b><b class='flag-5'>处理器</b>和其他<b class='flag-5'>并行</b>硬件进行<b class='flag-5'>编程</b>

    基于图形处理器GPU并行化解决方法

    目前目标识别领域,在人体检测中精确度最高的算法就是可变形部件模型( DPM)算法,针对DPM算法计算量大的缺点,提出了一种基于图形处理器GPU)的并行化解决方法。采用GPU
    发表于 12-28 11:16 1次下载