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

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

3天内不再提示

通用计算以及OpenCL究竟是什么?

e9Zb_gh_8734352 来源:互联网 作者:佚名 2018-07-30 09:17 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

OpenCL是当前一个通用的由很多公司和组织共同发起的多CPU\GPU\其他芯片 异构计算(heterogeneous)的标准,它是跨平台的。旨在充分利用GPU或者FPGA强大的并行计算能力与CPU进行协同工作,更高效的利用硬件高效的完成大规模的(尤其是并行度高的)计算。

01

异构计算、GPGPU与OpenCL

利用GPU对图像渲染进行加速的技术非常成熟,但是GPU的芯片结构擅长大规模的并行计算,CPU则擅长逻辑和流程控制,为了不局限于图像渲染,人们希望将这种计算能力扩展到更多领域,所以这也被称为GPGPU(即通用处计算处理的GPU)。

通俗来讲,CPU并不适合计算,它是多指令单数据流(MISD)的体系结构,更加擅长的是做逻辑控制,而数据处理基本是单流水线的,所以我们的代码for(i=0;...;i++)在CPU上要重复迭代的跑很多遍,但是在GPU上则不是这样,GPU是典型的单指令多数据(SIMD)的体系结构,它不擅长逻辑控制,但是天生的向量计算机,对于for(i=0;...;i++)这样的代码有时只需要跑一遍,所以图形世界中那么多的顶点、片段才能快速、并行的在显卡中渲染处理。

另外,GPU的晶体管可以到几十亿个,而CPU通常只有几亿个.

如上图是NVidia Femi100的结构,它有着大量的并行计算单元。

所以人们就想如何将更多的计算代码搬到GPU上,让他不只做rendering,而CPU只负责逻辑控制,这种一个CPU(控制单元)+几个GPU(有时可能再加几个CPU)(计算单元)的架构就是所谓的异构编程(heterogeneous),在这里面的GPU就是GPGPU。异构编程的前景和效率是非常振奋人心的,在很多领域,尤其是高并行度的计算中,效率提升的数量级不是几倍,而是百倍千倍。

NVIDIA在很早就推出了利用其显卡的GPGPU计算 CUDA架构,当时的影响是很大的,将很多计算工作(科学计算、图像渲染、游戏)的问题提高了几个数量级的效率,CUDA是NVDIA主力推的通用计算架构,但是CUDA最大的局限就是它只能使用Nvidia自的显卡,对于广大的AMD卡用户鞭长莫及。

OpenCL则在之后应运而生,它由几大主流芯片商、操作系统、软件开发者、学术机构、中间件提供者等公司联合发起,它最初由Apple提出发起标准,随后Khronos Group成立工作组,协调这些公司共同维护这套通用的计算语言。Khronos Group听起来比较熟悉吧,图像绘制领域著名的软硬件接口API规范著名的OpenGL也是这个组织维护的,其实他们还维护了很多多媒体领域的规范,可能也是类似于Open***起名的(所以刚听到OpenCL的时候就在想它与OpenGl有啥关系),OpenCl没有一个特定的SDK,Khronos Group只是指定标准(你可以理解为他们定义头文件),而具体的实现则是由不同参与公司来做,这样你会发现NVDIA将OpenCL做了实现后集成到它的CUDA SDK中,而AMD则将其实现后放在所谓是AMD APP (Accelerated Paral Processing)SDK中,而Intel也做了实现,所以目前的主流CPU和GPU都支持OpenCL架构,虽然不同公司做了不同的SDK,但是他们都遵照同样的OpenCL规范,也就是说原则上如果你用标准OpenCl头中定义的那些接口的话,使用NVIDIA的SDK编的程序可以跑在AMD的显卡上的。但是不同的SDK会有针对他们芯片的特定扩展,这点类似于标砖OpenGL库和GL库扩展的关系。

OpenGL的出现使得AMD在GPGPU领域终于迎头赶上的NVIDIA,但是NVIDIA虽为OpenCL的一员,但是他们似乎更加看重自己的独门武器CUDA,所以N家对OpenCL实现的扩展也要比AMD少,AMD由于同时做CPU和GPU,还有他们的APU,似乎对OpenCL更来劲一些。

02

OpenCL的诞生

OpenCL也是通过在GPU上写代码来加速,只不过他把CPU、GPU、其他什么芯片给统一封装了起来,更高了一层,对开发者也更友好。

其实最开始显卡是不存在的,最早的图形处理是放在CPU上,后来发现可以再主板上放一个单独的芯片来加速图形绘制,那时还叫图像处理单元,直到NVIDIA把这东西做强做大,并且第一给它改了个NB的称呼,叫做GPU,也叫图像处理器,后来GPU就以比CPU高几倍的速度增长性能。

开始的时候GPU不能编程,也叫固定管线的,就是把数据按照固定的通路走完和CPU同样作为计算处理器,顺理成章就出来了可编程的GPU,但是那时候想在GPU上编程可不是容易的事,你只能使用GPU汇编来写GPU程序,GPU汇编?听起来就是很高级的玩意儿,所以那时使用GPU绘制很多特殊效果的技能只掌握在少数图形工程师身上,这种方式叫可编程管线。

很快这种桎桍被打破,GPU上的高级编程语言诞生,在当时更先进的一些显卡上,像C一样的高级语言可以使程序员更加容易的往GPU写代码,这些语言代表有nvidia和微软一起创作的CG,微软的HLSL,openGl的GLSL等等,现在它们也通常被称为高级着色语言(Shading Language),这些shader目前已经被广泛应用于我们的各种游戏中。

在使用shading language的过程中,一些科研人员发现很多非图形计算的问题(如数学、物理领域的并行计算)可以伪装成图形问题利用Shading Language实现在GPU上计算,而这结果是在CPU上跑速度的N倍,人们又有了新的想法,想着利用GPU这种性能去解决所有大量并行计算的问题(不只图形领域),这也叫做通用处理的GPU(GPGPU),很多人尝试这样做了,一段时间很多论文在写怎样怎样利用GPU算了哪个东东。。。但是这种工作都是伪装成图形处理的形式做的,还没有一种天然的语言来让我们在GPU上做通用计算。这时又是NVIDIA带来了革新,09年前后推出的GUDA架构,可以让开发者在他们的显卡上用高级语言编写通用计算程序,一时CUDA热了起来,直到现在N卡都印着大大的CUDA logo,不过它的局限就是硬件的限制。

OpenCL则突破了硬件的壁垒,试图在所有支持的硬件上搭建起通用计算的协同平台,不管你是cpu还是gpu通通一视同仁,都能进行计算,可以说OpenCL的意义在于模糊了主板上那两种重要处理器的界限,并使在GPU上跑代码变得更容易。

01

OpenCL架构

上面说的都是关于通用计算以及OpenCL是什么,下面就提纲挈领的把OpenCL的架构总结一下:以下是OpenCL硬件层的抽象

它是一个Host(控制处理单元,通常由一个CPU担任)和一堆Computer Device(计算处理单元,通常由一些GPU、CPU其他支持的芯片担任),其中Compute Device切分成很多Processing Element(这是独立参与单数据计算的最小单元,这个不同硬件实现都不一样,如GPU可能就是其中一个Processor,而CPU可能是一个Core),其中很多个Processing Element可以组成组为一个Computer Unit,一个Unit内的element之间可以方便的共享memory,也只有一个Unit内的element可以实现同步等操作

02

内存架构

其中Host有自己的内存,而在compute Device上则比较复杂,首先有个常量内存,是所有人能用的,通常也是访问最快的但是最稀少的,然后每个element有自己的memory,这是private的,一个组内的element有他们共用的一个local memery。仔细分析,这是一个高效优雅的内存组织方式。数据可以沿着Host-》gloabal-》local-》private的通道流动(这其中可能跨越了很多个硬件)

03

软件层面的组成

这些在SDK中都有对应的数据类型

  1. setup相关:

    Device:对应一个硬件(标准中特别说明多core的CPU是一个整个Device)

    Context:环境上下文,一个Context包含几个device(单个Cpu或GPU),一个Context就是这些device的一个联系纽带,只有在一个Context上的那些Device才能彼此交流工作,你的机器上可以同时存在很多Context。你可以用一个CPu创建context,也可以用一个CPU和一个GPU创建一个。

    Command queue:这是个给每个Device提交的指令序列

  2. 内存相关:

    Buffers:这个好理解,一块内存

    Images:毕竟并行计算大多数的应用前景在图形图像上,所以原生带有几个类型,表示各种维度的图像。

    gpu代码执行相关:

    Program:这是所有代码的集合,可能包含Kernel是和其他库,OpenCl是一个动态编译的语言,代码编译后生成一个中间文件(可实现为虚拟机代码或者汇编代码,看不同实现),在使用时连接进入程序读入处理器。

    Kernel:这是在element跑的核函数及其参数组和,如果把计算设备看做好多人同时为你做一个事情,那么Kernel就是他们每个人做的那个事情,这个事情每个人都是同样的做,但是参数可能是不同的,这就是所谓的单指令多数据体系。

    WorkI tem:这就是代表硬件上的一个Processing Element,最基本的计算单元

  3. 同步相关:

    Events:在这样一个分布式计算的环境中,不同单元之间的同步是一个大问题,event是用来同步的

他们的关系如下图

上面就是OpenCL的入门介绍, 在游戏领域,OpenCL已经有了很多成功的实践,好像EA的F1就已经应用了OpenCL,还有一些做海洋的lib应用OpenCL(海面水波的FFT运算在过去是非常慢的),另外还有的库干脆利用OpenCL去直接修改现有的C代码,加速for循环等,甚至还有OpenCl版本的C++ STL,叫thrust,所以我觉得OpenCL可能会真正的给我们带来些什么

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

    关注

    28

    文章

    5099

    浏览量

    134445
  • OpenCL
    +关注

    关注

    2

    文章

    48

    浏览量

    34121
  • 异构计算
    +关注

    关注

    2

    文章

    110

    浏览量

    17022

原文标题:异构计算以及OpenCL介绍

文章出处:【微信号:gh_873435264fd4,微信公众号:FPGA技术联盟】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    MOS管的连续电流ID计算示例

    在电子电路的设计中,MOS管是一种极为重要的分立器件,它广泛应用于电源管理、电机驱动等众多领域。而在MOS管的规格书中,连续电流ID这个参数备受关注。那么,MOS的规格书上的连续电流ID究竟是怎么计算出来的呢?今天我们就来解析其背后的
    的头像 发表于 09-22 11:04 887次阅读
    MOS管的连续电流ID<b class='flag-5'>计算</b>示例

    标准化考场是什么?

    很多现在都在建设标准化考场,标准化考场究竟是什么呢?
    的头像 发表于 09-05 16:45 1035次阅读
    标准化考场是什么?

    多摩川高分辨率编码器:究竟如何赋能数控机床超精密运动控制?

    在现代制造业中,数控机床的应用极为广泛,其加工精度直接影响着产品的质量和性能。而多摩川高分辨率编码器的出现,为数控机床的超精密运动控制带来了新的突破。那么,它究竟是如何实现这一赋能的呢?让我们一探究竟
    的头像 发表于 08-04 17:59 806次阅读

    功率半导体究竟是什么

    站在战略升级的关键节点,闻泰科技正在全力聚焦半导体业务,开启全新发展阶段。值此之际,公司特别推出 《探秘“芯”世界》系列专题,邀您一同探索半导体的奥秘,见证闻泰科技以创新引领行业的 "芯" 力量。
    的头像 发表于 07-09 11:42 1014次阅读

    国产化FMC接口通用计算平台设计原理图:2367-基于FMQL45T900 FMC接口通用计算平台

    , 数字信号处理卡, FMC接口通用计算平台, FMQL45T900I, 前端信号处理
    的头像 发表于 07-03 11:23 414次阅读
    国产化FMC接口<b class='flag-5'>通用计算</b>平台设计原理图:2367-基于FMQL45T900 FMC接口<b class='flag-5'>通用计算</b>平台

    超声波液位计究竟是什么?

    液位计
    jzyb
    发布于 :2025年06月03日 16:10:12

    FOC电机控制究竟该如何学?

    学习FOC电机控制究竟是学哪些内容? 电机知识 软件知识 纯分享贴,有需要可以直接下载附件获取完整资料! (如果内容有帮助可以关注、点赞、评论支持一下哦~)
    发表于 05-09 14:09

    工程师在产品选型的时究竟是选CAN还是CANFD接口卡呢?

    很多工程师在产品选型的时候会疑惑,究竟是选CAN接口卡还是CANFD接口卡呢?两者之间有什么区别呢?影响选择的关键因素又是什么?我们今天一个一个来拆解。1.波特率传统的CAN接口卡仅有一个波特率,即
    的头像 发表于 03-21 11:37 709次阅读
    工程师在产品选型的时<b class='flag-5'>究竟是</b>选CAN还是CANFD接口卡呢?

    揭秘云计算架构的分层奥秘

    的重要基石。那么,云计算架构究竟是如何构建的呢?今天,我们带您揭秘云计算架构的分层奥秘——边缘层、IaaS、PaaS、SaaS。
    的头像 发表于 02-26 17:41 969次阅读

    云骥智行借助NVIDIA Jetson打造“域脑”通用计算平台

    本案例中,云骥智行(Pegasus Technology)借助 NVIDIA Jetson 打造“域脑”通用计算平台,实现了在人形机器人、智能新终端等具身智能场景的部署应用,满足多场景算力需求,保障系统安全稳定运行并推动功能拓展。
    的头像 发表于 02-21 11:41 1469次阅读

    室内导航究竟是如何实现的

    作为物联网智能硬件的引领者,云里物里当然不是来聊电影的,而是想借此机会,和大家探讨一下:室内导航究竟是如何实现的?它背后的技术原理是什么?接下来,让我们一起揭开室内导航的神秘面纱。
    的头像 发表于 02-12 13:50 883次阅读

    ADS1298R PACE_OUT1和PACE_OUT2这两条引腿究竟是输入还是输出?有什么用?怎样使用?

    PACE_OUT1和PACE_OUT2这两条引腿究竟是输入还是输出?有什么用?怎样使用?
    发表于 02-12 07:56

    ADS1281EVM-PDK板子无法使用怎么解决?

    板子上正负10V电压已加,USBStyx driver 已经安装,通过母板供电,但最后 软件界面上的Acquire 按键呈现灰白色,无法按下,如下图红圈区域所示: 有哪位能告诉我究竟是哪里出了问题?该不会是硬件坏了吧?
    发表于 01-22 07:54

    【一文看懂】什么是量子计算

    量子计算代表了一种突破性的计算方法,它利用量子力学的基本原理,能够在某些复杂问题上实现超越传统计算机的计算能力。从药物研发到气候模拟,量子计算
    的头像 发表于 01-02 14:08 2125次阅读
    【一文看懂】什么是量子<b class='flag-5'>计算</b>?

    LoRa数据究竟是如何传输的?

    一概述在物联网(IoT)的浪潮中,LoRa(LongRange)技术凭借其远距离通信、低功耗和低成本的优势,成为了众多应用场景中的佼佼者。那么,LoRa数据是如何在空中传输的呢?让我们一起揭开这个神秘的面纱。二简介LoRa,即长距离无线电技术,是一种专为物联网设计的无线通信技术。它通过扩频调制技术,将信号扩展到更宽的频带,从而降低信号的功率谱密度,提高抗干扰
    的头像 发表于 12-19 19:33 1572次阅读
    LoRa数据<b class='flag-5'>究竟是</b>如何传输的?