GPGPU面临的工程困境闲聊

作者:蒋志强

  本人同意他人对我的文章引用,但请在引用时注明出处,谢谢.作者:蒋志强

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为此背上了巨额债务,为了度过财务危机,连晶圆厂都卖掉,公司总部大楼都卖了,那些年里根本没有资源投入Stream,Stream已经被放弃。而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的推进相比,内部利益斗争非常复杂。

原因在于Intel,Intel本来在GPU领域存在感不强,不赚钱的部门给自家的CPU当绿叶的存在,但由于集成显卡HD/UHD都是搭配在CPU里,装机量巨大,话语权也很重。GPGPU在某种程度上,对它的核心业务有影响,也就是Intel的Xeon至强级服务器处理器。因为以前的高端服务器,靠的是高性能CPU,GPU的发展会让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,因为其它应用厂商面临的局面和你一样,对大家是公平的。

希望以上的分析,能帮助你更透彻的看清局势,做出恰当理性的工程选择。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/665491.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Canal 结合 SpringBoot 源码梳理

1、canal是什么,可以用来作什么 canal是阿里开源的一个用于监听数据库binlog,从而实现数据同步的工具。 2、安装 我使用的是1.1.5版本,太高的版本需要的jdk版本和mysql的驱动版本会更高,可以根据自己的环境选择。 如果是自己玩的话…

如何保证MySQL和Redis中的数据一致性?

文章目录 前言一、缓存案例1.1 缓存常见用法1.2 缓存不一致产生的原因 二、解决方案2.1 先删除缓存,再更新数据库2.2 先更新数据库,删除缓存2.3 只更新缓存,由缓存自己同步更新数据库2.4 只更新缓存,由缓存自己异步更新数据库2.5 …

MySQL-----DDL基础操作

SQL通用语法 1.SQL语句可以单行或多行书写,以分号结尾。 2. SQL语句可以使用空格/缩进来增强语句的可读性。 3. MySQL数据库的SQL语句不区分大小写,关键字建议使用大写。 4.注释: 单行注释:--注释内容或#注释内容(MySQL特有) 多行注释:/*注释…

【Iot】什么是串口?什么是串口通信?串口通信(串口通讯)原理,常见的串口通信方式有哪些?

串口通信原理 1. 串口2. 串口通信4. 波特率与比特率5. 帧格式3. 串口通讯的通讯协议3.1. RS2323.2. RS485 总结 1. 串口 串行接口简称串口,也称串行通信接口或串行通讯接口(通常指COM接口),是采用串行通信方式的扩展接口。 串口可…

jstack命令解析

前言 如果有一天,你的Java程序长时间停顿,也许是它病了,需要用jstack拍个片子分析分析,才能诊断具体什么病症,是死锁综合征,还是死循环等其他病症,本文我们一起来学习jstack命令~ jstack 的功…

深度学习入门笔记(六)线性回归模型

本节,我们用线性回归为例子,回顾一些基本概念 6.1 相关性 相关性的取值范围是-1 到 1,越接近 1 或者-1 代表越相关,越接近 0 则越不相关。相关系数大于 0 称为正相关,小于 0 称为负相关。 假如 A 与 B 正相关&#…

[UI5 常用控件] 05.FlexBox, VBox,HBox,HorizontalLayout,VerticalLayout

文章目录 前言1. FlexBox布局控件1.1 alignItems 对齐模式1.2 justifyContent 对齐模式1.3 Direction1.4 Sort1.5 Render Type1.6 嵌套使用1.7 组件等高显示 2. HBox,VBox3. HorizontalLayout,VerticalLayout 前言 本章节记录常用控件FlexBox,VBox,HBox,Horizontal…

快速理解复杂系统组成学习内容整合

目录 一、复杂系统组成 二、接入系统 (Access System) 三、应用系统 (Application System) 四、基础平台 (Foundation Platform) 五、中间件 (Abundant External Middleware) 六、支撑系统 (Supporting System) 参考文章 一、复杂系统组成 复杂系统是由多个相互关联、相…

比瓴科技入围软件供应链安全赛道!为关键信息基础设施安全建设注入新动力

1月20日,中关村华安关键信息基础设施安全保护联盟会员大会暨关键信息基础设施安全保护论坛在北京成功举办,比瓴科技作为会员单位受邀出席。 本次论坛发布了《关键信息基础设施安全保护支撑能力白皮书(2023)》,比瓴科技…

【开源】SpringBoot框架开发大学计算机课程管理平台

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 实验课程档案模块2.2 实验资源模块2.3 学生实验模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 实验课程档案表3.2.2 实验资源表3.2.3 学生实验表 四、系统展示五、核心代码5.1 一键生成实验5.2 提交实验5.3 批阅实…

获取真实 IP 地址(二):绕过 CDN(附链接)

一、DNS历史解析记录 DNS 历史解析记录指的是一个域名在过去的某个时间点上的DNS解析信息记录。这些记录包含了该域名过去使用的IP地址、MX记录(邮件服务器)、CNAME记录(别名记录)等 DNS 信息。DNS 历史记录对于网络管理员、安全研…

怪物联萌小游戏

欢迎来到程序小院 怪物联萌 玩法:将怪物连体,怪物只能直线上下左右移动,躲过障碍物,共16关卡, 不同关卡不同界面,遇到金币记得吃掉金币哦,会获得更高分数,快去闯关吧^^。开始游戏ht…

纯血鸿蒙来了,鸿蒙App开发该如何提速

“全世界做产品挣钱的公司很多,但有能力打造操作系统的公司没有几家,最后世界上的操作系统就只有三套:鸿蒙、iOS和安卓。” --- 360集团创始人、董事长周鸿祎 “HarmonyOS实现了AI框架、大模型、设计系统、编程框架、编程语言、编译器等全栈…

git的分支操作

目录 简介: 操作:查看 操作:创建 操作:切换​编辑 操作:本地分支推送到远程 操作:git merge [name]合并分支​编辑 简介: 在Git中,可以通过分支来管理和处理不同的版本和功能。分…

一文读懂C++的类和对象以及多态的原理

现实生活中,关于类和对象最好的例子是自然界的动物类,本文将以此为场景逐步引入C的概念,达到学习的目的。因为C这门语言本身有很多繁杂的内容,而网上的资源也是参差不齐,有的人见山谈山遇水聊水,有多人故弄…

已解决!AttributeError: ‘Sequential‘ object has no attribute ‘session‘ 问题

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通Golang》…

EtherCAT转ModbusTCP网关

一、功能概述 1.1设备简介 本产品是EtherCAT和Modbus TCP网关,使用数据映射方式工作。 本产品在EtherCAT侧作为EtherCAT从站,接TwinCAT、CodeSYS、PLC等;在ModbusTCP侧做为ModbusTCP主站(Client)或从站(…

c语言---操作符(详解)

目录 一、操作符的分类二、算术操作符三、 移位操作符3.1<<左移操作符3.1.1移位规则3.1.2直接上代码以及解释 3.2>> 右移操作符3.2.1移位规则3.2.2画图解释 3.3注意 四、位操作符&#xff1a;&、|、^、~4.1&按位与4.1.1按位与的计算逻辑4.1.2代码4.1.3运行…

2024程序员就业咋办?

国际研究机构Gartner会在每年10月份左右发布下一年度的战略发展趋势预测&#xff0c;并在次年3月左右发布和网络安全相关的趋势预测。绿盟科技通过将近3年的趋势预测进行分组对比分析后发现&#xff0c;除了众人皆知的AI技术应用外&#xff0c;数据模块化、身份优先安全、行业云…

阿里云OSS对象存储

一、前言 阿里云对象存储OSS作用&#xff1a;用于存储图片、视屏、文件等数据。 参考阿里云文档地址&#xff1a;阿里云对象存储教程 二、总体思路 说明&#xff1a;客户端给服务端发送请求&#xff0c;获取policy和signature等数据&#xff08;服务端提供&#xff09;&#…