#穿越记忆的河流# 2025年2月8日,PTX是否做到绕过CUDA垄断?
我的同事黄海平的结论:
正好昨天研究了一天,我简单解释下,结论是不能绕过CUDA。
首先解释下PTX。英伟达芯片的顶层应用场景特别广,从游戏图形、自动驾驶、大语言模型到科学模拟,每个领域都得根据具体任务去编程软件库,因为每个领域使用GPU都得靠这些不同库去加速。英伟达芯片的底层硬件设计,架构也一直在变,从过去的Pascal、Volta到现在我们熟知的Ampere、Hopper和Blackwell,里边的芯片架构一直在升级,包括制程、精度、复杂指令等。所以,软件和硬件都一直在迭代和丰富,怎么互相兼容呢?简单来讲,我今天设计的软件,过几年能否适应新的英伟达显卡,大家都会打个问号。因此,英伟达自己设计了一套专用的“中将表示层”,来连接软件和硬件。就好像,中国和欧洲做生意,中国和欧洲人都讲非常多种语言,如果有个中间美国人做翻译,都懂中欧两地的所有语言,那么就不需要每个中国人都学习欧洲所有语言了,大家都讲英语好了。
这就是PTX的作用,翻译上层CUDA软件的高级语言,成为中间表示,然后再转化成英伟达显卡可以理解的SASS语言(这部分是保密的)。英伟达为了让上层CUDA软件开发者能够更好的适配GPU,就开放了PTX本身的编辑权限,允许开发者不仅编辑CUDA软件层,还可以编辑PTX中间编译层。可以这么理解,CEO把工作布置给市场部主管,主管把它拆成各种任务分配给销售去执行,但也允许CEO直接来调整任务,如果觉得主管分配的不合理的话。
所以,DEPPSEEK能够使用PTX(全称为:并行计算任务线程的执行)进行任务执行的优化,也是因为英伟达的“可编辑性”允许的,英伟达经常会吸收这些创新工程方法,到官方那边的,这也是CUDA生态的魅力优势。而AMD、华为、寒武纪的芯片,也有这种中间表达层,但他们用的是开源的架构叫OPENCL,并且是不给开发者暴露和可编辑的。
以上原理弄清楚之后,我们可以思考,Deepseek使用PTX进行硬件的任务执行优化,是否可以绕过CUDA。
首先,PTX就是CUDA的一部分,CUDA不止是软件,还包括PTX和底层的硬件架构,全称是“计算和设备的统一架构”,这是个架构,就是我们上边讲的软件和硬件保持多元化更新,但可以时时统一协作,进行耦合。
其次,Deepseek编辑PTX,只是编辑了CUDA软件的另一种表达形式,这个PTX也只有英伟达的芯片可以用,其他芯片看不懂这个指令。
再者,Deepseek可以编辑PTX,那是英伟达放开的权限,如果用华为、AMD、tpu的芯片,其中间表达层IR码,Deepseek连编辑的权限都没有。
如果要绕过CUDA,除非在高级语言层面,重新花时间去从0开始设计一套覆盖各个行业的加速库,需要时间的;要么勉强的把CUDA编译成PTX以外的IR码,供其他芯片读懂,这是AMD在做的编译器适配工作,就像在苹果电脑上运行Windows系统,效果非常差。除此以外,别无他法。
我的同事刘释允的结论: 绕不过!其实ptx 是一个更底层的语言,也是和英伟达强绑定的,也就是说ptx 只能用在英伟达的gpu 上!能写ptx的人非常少,但是ptx 层面的编程可以进一步提高gpu的效率。另外,ptx 编写出来的算子,我个人认为,英伟达会把这些算子汇编进cuda,反而可以进一步增强cuda的护城河
发布于 广东
