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

    文章

    5266

    浏览量

    136040
  • OpenCL
    +关注

    关注

    2

    文章

    48

    浏览量

    34607
  • 异构计算
    +关注

    关注

    2

    文章

    112

    浏览量

    17233

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

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

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    工业级智能移动终端究竟是什么?其作用和用途?

    工业级智能移动终端:它不仅仅是“加了壳”的手机,行业内常简称为工业手持PDA或加固型移动设备。从本质上讲,它是一种集成了条码扫描、RFID识读、图像采集、数据处理与无线通信(5G/Wi-Fi 6E/卫星通信)于一体的专用计算机设备。
    的头像 发表于 02-27 11:59 175次阅读
    工业级智能移动终端<b class='flag-5'>究竟是</b>什么?其作用和用途?

    UV胶表面发粘的原因

    uv胶表面发粘究竟是什么原因造成的?我们又该如何解决和预防呢?本文将深入分析其背后其实涉及的化学反应、光照条件、材料特性以及操作环境等多个科学因素。
    的头像 发表于 01-22 16:17 1921次阅读
    UV胶表面发粘的原因

    分布式光伏”四可“,究竟是什么?

    什么是光伏“四可”? 光伏“四可”是指光伏发电系统的可观、可控、可测、可调。可以对光伏发电的出力进行柔性与刚性控制,实现光伏消纳能力的协同优化,有效解决台区反向重过载和就地消纳不平衡问题。 在《分布式光伏发电开发建设管理办法(征求意见稿)》第六章运行管理第三十三条【调度运行】中也提到了“四可”问题。 程瑜 18 7 0211 2087 “四可”的相关政策有哪些? A:据不完全统计,目前,江苏、陕西、江西、河南、安徽、山东等多个
    的头像 发表于 01-13 16:26 344次阅读
    分布式光伏”四可“,<b class='flag-5'>究竟是</b>什么?

    Imagination中国区董事长兼亚太区总裁白农:通用计算GPU驱动端侧AI发展

    通用计算GPU正成为驱动端侧AI发展的重要引擎。当前,端侧AI算力迎来爆发式增长,端侧芯片需承载感知数据处理、图像渲染、AI大模型计算、安全、通信等多元需求,面临硅
    的头像 发表于 11-26 13:56 685次阅读
    Imagination中国区董事长兼亚太区总裁白农:<b class='flag-5'>通用计算</b>GPU驱动端侧AI发展

    信号在传输线路上的传播机制

    在第二期的特性阻抗讲解中,我们提到了传输线路。虽然将传输线比作水路,但它究竟是通过什么原理传输信号和电力的呢?
    的头像 发表于 10-09 13:49 2486次阅读
    信号在传输线路上的传播机制

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

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

    qkey软件包在内核V5.02下运行出错是哪里的问题?

    ) == RT_Object_Class_Memory) assertion failed at function:rt_smem_alloc, line number:290 ; 然后内核改成V4.1.1就没任何问题。 因为v5.0.2下引入backtrace也始终有编译问题,所以不好跟踪究竟是为何。
    发表于 09-15 07:46

    标准化考场是什么?

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

    无人机为什么能稳定飞行?IMU功不可没

    无人机在天空中自由穿梭、稳稳悬停,背后究竟是什么在发挥关键作用呢?这就不得不提到一个重要部件 ——IMU。
    的头像 发表于 08-12 14:27 1658次阅读

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

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

    功率半导体究竟是什么

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

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

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

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

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

    单片机内置ADC和外部ADC的对比

    ADC 江湖风云变幻,局势不断升级,紧张刺激!究竟是内置 ADC 更胜一筹还是外置 ADC 棋高一着?
    的头像 发表于 05-14 15:24 1816次阅读

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

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