网站流量10g,高端h5网站建设 上海,符合seo的网站,莒县住房和城乡规划建设局网站作者#xff1a;蒋志强 本人同意他人对我的文章引用#xff0c;但请在引用时注明出处#xff0c;谢谢#xff0e;作者#xff1a;蒋志强
0.前言
2007年作为GPGPU的工程界元年至今#xff0c;已经发展了接近小二十年了。这个领域是如此的重要#xff0c;几乎影响了工业…作者蒋志强 本人同意他人对我的文章引用但请在引用时注明出处谢谢作者蒋志强
0.前言
2007年作为GPGPU的工程界元年至今已经发展了接近小二十年了。这个领域是如此的重要几乎影响了工业界各个领域从科学数值计算 到 金融领域医疗领域人工智能等凡是日常生活中直接间接与计算机相关的领域几乎都在其中。
我读研时是2006年正好赶上这个变化的最开始亲历了其从无到有一直到现在蓬勃发展。这是对工程师而言最好的时期也是最糟的时期。时至今日2024年了工程师面对GPGPU时既很欣喜也很痛苦。
为何会痛苦呢你面临的选择究竟是选CUDA绑定Nvidia的硬件还是选择OpenCL“跨平台”似乎选择很容易但OpenCL真的在产品上能帮助企业跨硬件平台吗还是OpenCL跨平台只是软件生态之争的一个伪命题OpenCL3.0是重大的进步还是巨大的倒退IOS上还能跑CL吗为了苹果企业需要重新做一套Metal的应用吗ARM平台上我们该怎么做
带着这些问题我们就来梳理一下GPGPU下的各种纷争帮助工程师剥掉迷雾和厂商的“善意谎言”不要作出糊涂的选择。内容分为以下4个部分帮助大家了解来龙去脉知其然且知其所以然。 目录
1.背景介绍
2.历史由来与公司选择
3.软件生态圈的明争暗斗
4.未来猜想与展望 1.背景介绍
GPGPU大家都很熟悉了也就是General Purpose GPU通用计算GPU技术。其实GPU芯片的设计初衷完全是为了图形渲染而生的Graphics Process Unit本不是为了通用计算。但研究过渲染的工程师都知道硬件渲染链路中的几何坐标计算颜色计算等硬件单元非常机缘巧合的满足并行通用计算的某些重要特征特别是在XBOX的GPU芯片以后在硬件层面上着色器的重新定义导致了把GPU的硬件用来作高效的通用计算变成了现实可能。更具体的技术细节感兴趣的小伙伴请查看我以前的文章 https://blog.csdn.net/gamer_gerald/article/details/102647300 中第一节3D渲染软硬件历史。
简单而言只要在GPU硬件层做成了统一着色器所有的显卡都可以用来做GPGPU。而现代GPU的发展技术上本来就需要统一着色器所以目前任何显卡都可以做GPGPU无论你是X86的还是ARM的。
既然大家都可以的前提下最重要的事情就是打造对应的软件生态体系。这对各个厂商而言不是做得到或做不到的区别而是你选择做还是不做你花多少资源去做你有多少资源去做你什么时候去做的问题。XBOX的发布是在2001年那个时候技术前期障碍已经扫除极客工程师背景的 黄仁勋 是看得很清楚的但毕竟前期投入巨大后期产出不明这是一个依赖技术直觉的重大选择。 现在我们以上帝视角回看历史似乎觉得这非常值得但在当时对任何一个CEO来说绝对是一个及其艰难的决定和豪赌。如果 NVIDIA的CEO不是 工程技术出身绝对没有勇气做出选择把公司几乎大部分资源投入到CUDA的开发中。 2.历史由来与公司选择
后来如大家所了解的2007年NVIDIA发布了CUDA 1.0。这是所有GPU厂商中第一个发布GPGPU软件开发框架的并且NVIDIA投入了大量的资源进行宣传包括烧钱搭建开发社区烧钱在全球各个高校组织CUDA编程赛事并投入大量资源改进更新CUDA这些至少在若干年内都是纯投入没有利润产出的。大家都不确定几年后的产出会是怎样。什么是ALL IN?当时的Nvidia的行为就是ALL IN。当然后面的收获期也是All Yours
同期ATI见NVIDIA做得那么果敢也害怕被拉下按风投界的说法就是FOMO(Fear of Missing Out)害怕错过了。所以ATI晚了一些但也跟进了分了一些资源这就是ATI 的Stream框架但不是太多完全不能跟Nvidia的投入相提并论。 我相信不少人都没听过吧因为ATI投入还不到Nvidia的零头Nvidia正在全力以赴进行战略级的重大投资。后来ATI被AMD高价收购AMD为此背上了巨额债务为了度过财务危机连晶圆厂都卖掉公司总部大楼都卖了那些年里根本没有资源投入StreamStream已经被放弃。而Intel的显卡业务当时还是边缘部门即使现在也不是核心基本上是看客。就这样几年过去GPGPU的软件生态变成了Nvidia一家的CUDA软件生态。上帝视角回看AMD收购ATI绝对是Nvidia CUDA发展的神助攻
Nvidia在那几年的CUDA也是净亏损但换来了GPGPU软件生态的垄断位置构建了又宽又深的护城河幸好Nvidia游戏显卡业务财务良好。坚持了好几年后人工智能的爆发Nvidia终于来到收获期赚的盆满钵满alpha Go的火热再到今年来GPT的巨大成功大家才感受到GPGPU的巨大商业前景。
ATI这会儿才回过神早已回天无力了。同一时期苹果其实在自己的封闭生态里也有做自己GPGPU也就是后来为大家熟知的OpenCL这也是为什么苹果手机在硬件差距不大的情况明显比安卓流畅的原因之一。苹果当时决定把OpenCL的GPGPU开放出去与Nvidia掰一掰手腕但鉴于苹果向来是打造封闭体系的自己肯定无法推动于是把整体技术体系免费交给了第三方非盈利标准化组织KHRONOS group。该组织是非常有名的推动软件标准的机构最成功的案例就是当年的OpenGL。于是它们接收了OpenCL的标准负责推动各个厂商的GPGPU统一标准化。 从技术层面来说一旦成功这对CUDA来说是致命的有可能会摧毁Nvidia重金打造的企业护城河因为GPGPU的关键在软件生态体系。想想OpenGL对微软DirectX商业垄断的破坏这让Nvidia后背发凉。
3.软件生态圈的明争暗斗
我们需要思考一下为什么当年Nvidia非常忌惮OpenCL呢因为有OpenGL的前车之鉴当年OpenGL发布以后由于对微软的DirectX生态体系构成直接冲击微软公开怼OpenGL的发展不符合计算机图形学的趋势然后愤然退群离开了OpenGL标准委员会。几年后OpenGL发展一片欣欣向荣拿下了微软想要又得不到的Linux平台垄断在移动手机端拿下了微软渴望又拿不到的应用也就是OpenGL ES(Enbeded System),还在网络时代发展出了网页版的OpenGL版本也就是WebGL事实证明没有微软的干扰OpenGL发展得更好。于是微软厚着脸皮夸OpenGL是极其重要的代表了图形学的未来要求重新加入OpenGL标准。于是在微软重新加入OpenGL委员会扮演内奸搅屎棍的角色通过不同的技术意见为伪装明里暗里的阻碍OpenGL的进一步发展。但为时已晚图形学的软件生态早已不是微软能一家独大了。 说回ATI或者是应该被收购后应该叫AMD了自己没资源和能力构建Stream生态体系唯一的选择就只有跟进KHRONOS group的OpenCL了。但OpenCL内部标准的推进并不顺利与OpenGL的推进相比内部利益斗争非常复杂。 原因在于IntelIntel本来在GPU领域存在感不强不赚钱的部门给自家的CPU当绿叶的存在但由于集成显卡HD/UHD都是搭配在CPU里装机量巨大话语权也很重。GPGPU在某种程度上对它的核心业务有影响也就是Intel的Xeon至强级服务器处理器。因为以前的高端服务器靠的是高性能CPUGPU的发展会让Intel的服务器业务受到冲击。而且Intel还要考虑自身的FPGA业务也就是FPGA上OpenCL的支持。由于FPGA与GPU在硬件上的差异不同于GPU之间的差异那么小导致OpenCL的标准设计平添若干障碍。
因此OpenCL内部标准制定推进非常不顺当年OpenGL那种大家齐心协力不可同日而语。而且Nvidia有了OpenGL的历史经验教训早早的就“宣称”大力支持在OpenCL委员会里也是各种搅屎棍不同于微软看大势已去了才来搅已经太晚了Nvidia从最开始就积极介入OpenCL标准。
所以OpenCL的发展道路比OpenGL要坎坷不少我们工程师千万不要从技术上来看问题一定要关注背后的商业利益博弈。
我们来看一下OpenCL内部博弈导致的技术现状多么尴尬。 上面是OpenCL 3.0标准的官方说明。大家一定要read between lines读懂字面后面的意思。它在说OpenCL3.0将只支持OpenCL1.2标准的内容所有其它内容你们各个厂商自己随意想支持就做不支持也无所谓。也就是说OpenCL3.0标准倒退回了OpenCL1.2的内容然后宣称这是3.0标准
我再来帮你翻译翻译什么他妈的叫做惊喜。OpenCL3.0不再官方支持C语言这是OpenCL2.2加入的最重要的核心变动。你要用C写GPU内核程序对不起给你推荐个编译器自己去捣鼓吧标准不支持我不管了爱咋咋地。 所以你的NVIDIA的显卡上宣称支持OpenCL3.0但实际上只支持1.2的功能。你的一堆报错不是你错了而是你被坑了。
而且即使这古老的OpenCL1.2标准在某些平台上也恐怕保不住。因为几年前苹果出手了。
OpenCL本来是苹果交给KHRONOS group希望其发展起来在开放软件体系下与CUDA的软件生态对抗。很明显经过十几年的发展没有达到目的。那既然开放的软件系统下做不到那苹果本身就是做封闭技术体系的那我自己做。
2019年苹果就开始对外宣称搭建和力推自己新的GPGPU软件框架Metal只支持MacOS和IOS并逐步放弃OpenCL在苹果上的支持仅维护对老应用的支持。前两年苹果应用商店提交OpenCL新应用已经出现被拒的情况。 而苹果的OpenCL开发者平台上也非常明确的建议所有苹果应用的GPGPU开发逐步转为Metal. 也就是说OpenCL的亲生父亲明确不支持OpenCL了现在老的OpenCL应用还能跑。以后在苹果生态下工程师只能用metal而且openGL也将逐步废弃统一由metal替代。这不是技术问题而是软件生态背后的巨大商业利益。 4.未来猜想与展望
基本上我认为OpenCL1.2标准以后已经属于接近瘫痪状态基本看不到未来OpenCL无论从短期现状还是从长期来看都无法撼动CUDA在GPGPU领域的软件生态体系。当年在图形学软件生态体系下OpenGL干翻DirectX的场景将不会在GPGPU软件生态体系再现。
那我们工程师该如何选择呢接受所有自己不能改变的关注自己能做的。
以彩超为例如果我们需要使用Nvidia的硬件最好开发使用CUDA软件体系的彩超链路否则你想跨Intel/AMD/Nvidia的硬件你需要使用OpenCL1.2标准这种非常不方便完善的体系和更加艰难的调试与更困难受限的软件架构设计。
如果需要使用Intel/AMD和高通的ARM应用开发彩超链路OpenCL是唯一的选择。
如果需要在苹果的设备上提供彩超系统Metal是唯一的选择。2019年就有人在IOS上基于Metal完成含软波束的实时彩超系统软件链路 换句话说工程师几乎要付出三倍的精力来做一个事情并且维护三套系统以使产品能覆盖的不同平台。这对工程师来说肯定是不愿看到的大家更愿意在自身业务上投入资源不愿因为厂商的利益争斗而导致我们付出不必要的成本和资源。但我们需要理性这不是我们能决定的接受所有不可改变的把精力放在我们可以控制的事情上。
前端时间看到网上有游戏厂商怼苹果说如果苹果不支持OpenGL了它们就放弃苹果上产品投放。我能够理解其感受但很显然这是不理性的。如果真的需要做三套so be it因为其它应用厂商面临的局面和你一样对大家是公平的。 希望以上的分析能帮助你更透彻的看清局势做出恰当理性的工程选择。