万年历 购物 网址 日历 小说 | 三峰软件 天天财富 小游戏 视频推荐 小游戏
TxT小说阅读器
↓小说语音阅读,小说下载↓
一键清除系统垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放,产品展示↓
首页  日历2024  日历2025  日历2026  日历知识  | 每日头条  视频推荐  数码知识 两性话题 情感天地 心理咨询 旅游天地 | 明星娱乐 电视剧  职场天地  体育  娱乐 
日历软件  煮酒论史  历史 中国历史 世界历史 春秋战国 三国 唐朝 宋朝 明朝 清朝 哲学 厚黑学 心理学 | 文库大全  文库分类 
电影票房 娱乐圈 娱乐 弱智 火研 中华城市 仙家 六爻 佛门 风水 钓鱼 双色球 戒色 航空母舰 网球 乒乓球 足球 nba 象棋 体操
    
  知识库 -> 数码 -> DeepSeek 绕开 CUDA 垄断,针对英伟达 PTX 进行优化实现最大性能,英伟达护城河还在吗? -> 正文阅读

[数码]DeepSeek 绕开 CUDA 垄断,针对英伟达 PTX 进行优化实现最大性能,英伟达护城河还在吗?

[收藏本文] 【下载本文】
英伟达刚刚从 DeepSeek-R1引发的4万亿元暴跌中缓过劲来,又面临新的压力? 硬件媒体Tom‘s Hardware带来开年最新热议: DeepS…
你以为的:DeepSeek 绕过 CUDA 使用 PTX。
实际上的:DeepSeek 通过在 CUDA 代码里塞入一堆 PTX 代码来优化 CUDA 性能,然后和其他现成 CUDA 工具链结合,在可接收的开发时间内完成了开发,换成别的 GPU 还是做不到。
英伟达的护城河是 CUDA 的生态,而不是 CUDA 本身,而 PTX 是 CUDA 生态的一环
CUDA 生态包括高级 API 和丰富的工具链,庞大的库和框架支持,而这些在其他显卡生态上都还不够完善。
PTX 是 CUDA 的汇编,你可以理解为 CUDA 是一步一步翻译到显卡能照着执行的代码的,PTX 是 CUDA 的下一步。
现阶段的用 PTX 开发,是指把 PTX 插入到 CUDA 代码里,比如

// CUDA 内核函数,用于向量相加
__global__ void vectorAdd(const float* A, const float* B, float* C, int N) {
    int idx = blockIdx.x * blockDim.x + threadIdx.x;
    if (idx < N) {
        float a = A[idx];
        float b = B[idx];
        float c;

        // 插入 PTX 汇编代码
        asm volatile(
            "add.f32 %0, %1, %2;"  // PTX 汇编指令:将 %1 和 %2 相加,结果存入 %0
            : "=f"(c)              // 输出操作数:c
            : "f"(a), "f"(b)       // 输入操作数:a 和 b
        );

        C[idx] = c;
    }
}

常见的误区PTX 编程是整个代码用 PTX 写
PTX 的开发效率特别低,PTX 现在只被用来优化某些关键部分,是以镶嵌在 CUDA 里的形式存在的。
PTX 是跨芯片的
PTX 肯定不是跨芯片的,AMD 上与之对应的概念是 GCN ISA。
兼容 PTX 是分分钟的事
CUDA 编译后的结果是 PTX,要是兼容 PTX 简单,显卡厂商早拿着 CUDA 编译出来的中间结果到自己显卡上跑了,事实上,兼容 PTX 比兼容 CUDA 更难。
误解护城河的含义
我们现在说的英伟达的护城河一直是他做得更快(包括开发更快以及跑得更快),而不是其他显卡不能做。
CUDA 生态的东西太多了,其他生态的东西相比之下又太贫瘠了,DeepSeek 这个事件不仅没有说明 CUDA 护城河的消失,反而是在证明 CUDA 护城河仍然坚固。
只有当以下事件发生时,才是大众理解的护城河消失的征兆
其他显卡的理论性能超过英伟达发生类似华为制裁导致的生态大迁徙(比如完全禁用 N 卡,被迫开始重复造轮子),丰富了其他生态CUDA 护城河会破吗
其实,从业者一直是相信 CUDA 不会永远一家独大的,近几年越来越多的业务开始用 AMD 的显卡,尤其是推理侧。过往是迁移到其他显卡的成本太大,但是随着英伟达吃相越来越难看,N 卡越来越不划算,这个迁移是肉眼可见的。
但是,我最想吐槽的点就是,DeepSeek 用 PTX 这件事,和打破 CUDA 护城河是一点关系都没有,甚至这个事情应该是 CUDA 护城河的体现。
硬要扯上关系,就是未来其他显卡的生态需要一群高水平的从业者来开发,DeepSeek 如果愿意的话,他们有这个能力来完成这个事情,但到底能不能实现,还要看包括 DeepSeek 在内的高级开发者是否愿意为爱发电做迁移,或者是其他显卡展现出足够的潜力。
但是,CUDA 地位动摇这件事早已有之,和 DeepSeek 真是一点关系都没有,用 PTX 来优化 CUDA 至少三年前就开始大规模在干了,而且仍然是 CUDA 护城河内部的事情,现在突然被拿出来东拼西凑了一个故事。
这个问题火了,而且评论区吵得厉害,我觉得有争议的点不是护城河,而是城本身,也就是训练用的显卡的需求会变少吗,这是一般认为 Nvidia 股价下跌的主要原因
DeepSeek 推出后 Nvidia 的股价下跌意味着什么
DeepSeek 提出了一个新颖的算法,用 1/10 的成本在 N 卡上完成了训练,证明训练大模型不需要那么多显卡,又因为训练大模型一直是用 N 卡,所以 Nvidia 的股票跌的厉害。
也就是
N 卡仍然是训练时的主流(目前大模型竞赛需要的领域)但是未来训练端需要的显卡可能会变少
所以以今天的情况来看,N 卡的总需求可能会因为训练端需要的显卡变少而减少。
可能减少是因为微软 CEO 在第二天提出了一个有意思的观点
杰文斯悖论:蒸汽机发明了,煤炭就少用了吗?提高资源使用效率反而可能增加其总消耗量。
这个观点认为技术进步提高了资源使用效率,效率提高降低了资源使用成本,成本下降刺激了资源需求的增长,需求增长可能超过效率提升带来的节约,最终导致资源总消耗增加。
举一些例子就是:
蒸汽机发明提高了煤炭的利用效率,但是每年煤炭的需求反而在提高LED 照明技术比传统更节能,全球照明用电需求仍在上升家电能效提升,但家庭总用电量仍在增长数据中心的能效提高,数据中心能耗仍在上升
数据来源:2020-2025 电力电量分析与展望


用电量增速一直是正的


能耗一直是上升的
但这个观点对于显卡来说会不会成立,我们以目前的眼光是看不到的。当然 Nvidia 股票下跌还受到中国科技实力上升对美国科技企业产生冲击之类的影响,不能完全反应美股市场对显卡数量问题的看法。
“DeepSeek甚至绕过了CUDA”,工程师灵魂提问:英伟达护城河还在吗??www.zhihu.com/question/10949909331/answer/90240945794?utm_psn=1868767916519981056


当前这个回答实在过于抽象,很怀疑现在的人是不是问了问llm就开始胡编乱造。
ptx是相比cuda更底层的,和nv gpu绑定更深的语言。
ptx是相比cuda更底层的,和nv gpu绑定更深的语言。
ptx是相比cuda更底层的,和nv gpu绑定更深的语言。
如果你能理解这一点,就能知道所谓绕过cuda,使用ptx实际上并不是和nv解藕,而是更深度的优化。
原有的模型执行层级:
模型层算子层实现层(cublas, cutlass, 手写cuda, 自动生成cuda, 一般来说是这些混合实现的)汇编层
所谓绕过cuda,指的是在实现层加入手写/自动生成ptx来增加一种kernel实现,这样做的目的是更深度的优化。从ptx到汇编层完全依赖nvidia的编译器实现,而目前没有任何已知工具可以从ptx编译到其他平台的汇编层。而cuda,反而是有工具来做这件事的,并且已经证明是可行的。有人会为了绕过cuda的护城河来进入比cuda更深的ptx护城河吗?
如果需要绕过cuda,最简单的办法就是在算子层对其他平台进行支持,事实上其他公司也是这么做的。
如果真的想实现一种虚拟字节码来支持不同的gpu,那它一定不是ptx。并且这个字节码一定会编译到ptx来执行。不过鉴于现在的gpu并没有一个通用架构,也事实上并不支持任何程度的解释执行,这种做法相比于直接实现一个多平台算子库/算子编译器没有任何优势,所以也不可能有人往这个方向做。
我以前在阿里的时候,认识一些公关部的朋友,有时候他们会让我帮他们审核他们即将发布的稿件(可能只是条微博)里面有没有一些技术上的错误。
当我看到利用ptx绕开cuda护城河这个公关稿的时候,我就想发明这个说法的人应该一行代码也没写过。
1.deepseek绕开cuda,类似用cython的人绕开c语言。
2.非cs技术人员信原神那个搞笑答案的,可以理解,cs技术人员信了,一律看做彩笔辣鸡,简历可以丢垃圾桶。
用cpp写低时延代码时,偶尔也需要在c代码里插入x86汇编语句来提升性能,那么问题来了,这种和架构绑定的汇编语句换mips,arm和sparc上能运行吗?
cuda本质上是个c库,ptx本质上是nv架构gpu的专属汇编代码,写cuda事内联进去。
拿ptx当java那种中间码,堪比拿着x86的汇编跑别的架构上运行,说明这人基础真的不行,别写代码了,干点别的吧。
又看见编程界著名原神了。
笑死个人的内容和置顶评论,除了暴露技术稀烂之外毫无用处。神他妈PTX绕过了CUDA。
我用 ASCII 码写小作文,绕过了英语,成功突破 English 盎撒五眼联盟的封锁。
我用十六进制表示浮点数,成功绕过IEEE754浮点数标准,避免被ISO/IEC组织卡脖子。
PTX其实是英伟达GPU的中间指令集,层次比CUDA低,但一样是和英伟达的GPU高度绑定的。
deepseek使用PTX只是为了对程序性能进行高度优化。据说它分出来一部分显卡处理单元用于数据的压缩/解压缩,以此大幅度提高显卡之间的数据通信带宽。这种对硬件性能的极致压榨是量化交易员的风格。
不过这说明deepseek的程序员对于自己的程序有充分的理解和掌控,没有把自己的工作完全建立在现成的CUDA库上面。对于他们来说,换个硬件平台应该不是什么难事。
如果你是个外行说这个,我觉得很正常,如果你还是做技术的工程师也说这个,我会觉得你还是学点别的手艺糊口吧。
聊点题外的,我们来深度分析下 DeepSeek-R1 用华为昇腾,推理集群大概多大?
根据华为官方,Atlas(昇腾) 300I Pro 推理卡单卡拥有 140 TOPS INT8 和 70 TFLOPS FP16,这个性能足够推理用,但关键的内存则使用了LPDDR4X 24 GB,总带宽204.8 GB/s。这意味着运行原生的FP8版本的DeepSeek-R1大概单卡(先不考虑装不下的问题, R1激活量是37B)是 4 token/s.


然后还有2合一型号 Atlas 300I Duo(一块PCB焊了2个核心),内存翻倍,LPDDR4X 96GB或48GB,总带宽408GB/s。


那么我们计算一下如果能装下DeepSeek-R1(FP8 按照800GB计算), 大概是 8.3 ~= 9 块卡。推理速度来到了 72 token/s 。这么看如果装得下速度其实够用(先不考虑并发)
但是装显卡的服务器 Atlas 800 推理服务器是个8卡服务器(RAID卡还有个PCIe 4.0 ,但8卡应该是极限,因为还要联网),那么至少应该是个双机,16卡的架构才能达到最低标准。推理内存达到 1.5TB 左右. 推理速度在128 token/s
然后华为的昇腾集群单柜应该是16台2U的Atlas 800,因此单柜性能在12TB推理内存, 推理速度极限是1024 token/s,如果每个用户给60 token/s, 那么理论上单柜并发量在17左右。(单柜最大功率50.5kW)


那么我们来估算点更有意思的,假设有日均 1000 万用户要用DeepSeek-R1, 大概需要多少服务器?
假设每个用户的平均 token 输出量是 500(不考虑输入token处理),那么60 token/s 的单用户限制应该需要 8.3s才能结束生成。我们继续假设1000万用户请求平均集中在8小时内,那么每秒钟请求平均值是 10000000/(8*3600)=347.2 即每秒钟要承受348并发.
我们再来计算单台服务器的QPS, 17并发/8.3s ~= 2.048. 那么最终就可以得出, 需要的服务器量为 347.2/2.048 ~=169.5 即170台服务器,约11个柜就可以!总功率来到了550kW.
如果换更好的卡昇腾 910b 呢? 单个卡使用HBM2e 达到了 1.2TB的显存带宽, 单卡 64GB. 单机也是8卡, 那么只需要大概30台服务器就可以。大概也就4个柜。(4U机器,单柜8台)
(注意,这只是基础估算, 实际为了顶住峰值请求, 可能要乘以个3-5倍,当然云服务的好处就是直接购买服务弹性伸缩就好了)
等会儿先别赢,DeepSeek 赢的方面很多,但这个赢法赢昏头了。
因为 PTX 优化实际上是加深英伟达护城河的。因为 PTX 优化实际上是加深英伟达护城河的。因为 PTX 优化实际上是加深英伟达护城河的。
甚至还能转进赢到基本在深度学习领域全面落后的 Java 上我是真的服了.
大语言模型, 最上面是 Python/C++, 使用的框架是 PyTorch/GGML.
往下是调用的各个 CPU/GPU 的算子, 这些算子一般使用低级语言编写, 后面转为汇编.
在 CPU 上低级语言就是 C, 汇编语言就是 NASM.
在 Nvidia 卡上低级语言就是 CUDA, 汇编语言就是 PTX.
CUDA 这类低级语言在别的卡上还能转译(一般叫 lower), 但是 PTX 这种极端针对某种卡的汇编, 转义是没意义的.
因为别的卡, 比如昇腾, 具有完全不同的指令集, 翻译没意义.
因此这种优化无法迁移到华为的昇腾, 本质上加深了英伟达护城河.
你可以从 DeepSeek 团队深入了解 Nvidia 卡的角度赢
也可以认为 DeepSeek 能对昇腾910 做同等优化这样的角度赢
但是题目里这个离谱赢法还有 3000 人点赞, 我是真的绷不住了.
导读
说服持异见者对我没有任何好处,因此本文目的不是争论,仅用作技术讨论。我会尽量淡化技术细节和名词,用人民群众喜闻乐见的语言来阐述。
我毕业后一直从事GPU编译器工作,手写CUDA和AI编译器经验停留在毕业前夕,在这部分可能表述有偏差,烦请各位指出。
下文由三部分构成,首先是对题目中若干叙述的评论,其次是对本题下若干代表性论点的评论,最后是个人发挥。
答题
1.
DeepSeek甚至绕过了CUDA,使用更底层的编程语言做优化。
倒也不必用"甚至"这么惊讶的语气,因为这就是业界基操,在部分系统级高级编程语言中(如C++, CUDA),通过内联汇编来提高程序性能是HPC工程师吃饭喝水一样的日常,每个受过合格计算机本科教育的大三学生都掌握这项技能。
更何况,PTX是公开指令集,不需要像对M1那样逆向,辛苦地猜一些指令的操作数设置和语义。
我第一个月接触CUDA的时候,就能找到通过CUDA语义表达不出来的PTX指令变种来优化程序的机会,收益是20%性能提升。对dpsk的工程师来说必不是什么难事。
再次强调PTX是公开的,能直接操纵PTX也并不值得大惊小怪,我记得Triton, TVM和XLA也能直接生成PTX,或是借由LLVM的NVPTX后端获取。
基于以下三个事实,我非常困惑直接写PTX会削弱NV的护城河”这个论点:
PTX文档是公开的内联汇编是允许的LLVM NVPTX后端是存在的
2.
在使用英伟达的H800 GPU训练DeepSeek-V3时,他们针对自己的需求把132个流式多处理器(SMs)中的20个修改成负责服务器间的通信,而不是计算任务。变相绕过了硬件对通信速度的限制。
听起来像是Warp-Specialization写法,用CUDA C++也可以实现,只要用if-else让不同WARP/CTA ID的线程做不同的事情。近代NVGPU新增了若干异步指令,而setmaxnreg更是大杀器,可参阅这个讨论,我认为亦对外暴露了C++接口。
提这句话是因为我觉得它有点混淆视听,因为WASP通常是直接写CUDA来实现的。最新消息,用Python也能写XD
Enabling advanced GPU features in PyTorch - Warp Specialization?pytorch.org/blog/warp-specialization/


代表性论点PTX约等于Java字节码,编译到其他厂商的各类*pu很简单
正巧,我同时具备HotSpot C2和GPU编译器开发经验。
为了让外行看得懂,我解释一下,HotSpot是一个Java虚拟机的实现,大家日常使用的绝大多数APP的后台程序都跑在HotSpot上,而C2就是其中将Java字节码编译成X86、ARM汇编代码的JIT编译器。
PTX的使用方法和Java字节码也确实相似,PTX不能直接跑在硬件上,而是通过JIT编译到真正的汇编SASS来运行。
也就是说,PTX和字节码更像是一个编译器中的IR(中间表示),有些人可能理解与LLVM IR无异,我在这篇文章中也有类似表述:
开心的小福:从PTX到SASS:编译器视角241 赞同 · 34 评论文章
对于其中产生的误导性结论,我深感抱歉。我说PTX是IR,是基于我常年和真正的GPU汇编打交道的经验,PTX和字节码、LLVM IR完全是两个世界的东西,大家不妨自行打开相关文档阅读一下。
我在这篇文章中也说过,PTX和SASS已十分相似,指令结构几乎是一样的(谓词操作数+数据操作数),它是为了编译成NV GPU的汇编而设计的,带有浓厚的NV GPU硬件系体系结构的色彩。反之,LLVM IR和JAVA字节码为了方便转译为多相去甚远的各平台的汇编,它们必须具备平台无关性。根本上的出发点就不一样,演变成的形态自然相去甚远。
读书时,我曾在Ampere上用纯PTX编写了一小段高性能代码,当我将其直接跑在Turing上时,出现了死锁。因此,我是实在不认同将PTX与LLVM IR和Java字节码类比。
再次恳请你们打开文档看一看:
LLVM Language Reference ManualThe Java Virtual Machine SpecificationParallel Thread Execution ISA Version 8.7
接下来,评论移植到其他厂商硬件的难易程度,我的结论是:直接移植CUDA更简单。
首先明确的是,PTX是和NV GPU硬件高度绑定的,可以非常灵活地编程,而且一段PTX程序描述的是单个线程的任务。因为没用移植经验,短时间内我能想到的可行性难题是:
当移植到SIMD/CPU架构时,我们需要对全程序进行向量化,参考<Whole-function vectorization>。我已经忘了细节,但我猜,当SIMD宽度不是32时,需要进行复杂的控制流变化,当考虑到Irreducible Control Flow Graph时更困难。现在流行的Produce-consume写法更是雪上加霜。当移植到ASIC架构时,虽然我说PTX到SASS仍有大量优化,并不代表PTX呈现的就是类似于O0的效果,其他厂商从PTX层兼容的目的,十有八九是为了白嫖像Cutlass这样高度优化又开源的库,广泛应用了如multi-stage、tiling等优化。转译到自家ASIC硬件上,我猜需首先得将PTX指令映射到ASIC可以支持的指令,通常来讲GPU的指令更细粒度,种类更丰富; 还要面对指令操作数不匹配的情形,比如矩阵乘指令支持的宽度不一样,ASIC的可能要大一点。当移植到SIMT架构时,AMD GPU可能算是?但我记得他们提供了CUDA->HIP的翻译工具。我知道还有ZLUDA,从项目结构上看它是通过解析PTX转换成LLVM IR来实现跨平台的,但首页的与OpenCL的对比,对我来说并没有太多说服力,从我为数不多的科研经历来看, “可行”到“产品化”之间困难重重。
然后是性能问题:
Kernel的性能,需要在并行度和局部性之间权衡,比如期望多少个CTA同时跑,Thread/Warp如何共享数据,这些因素决定了片上资源(如share memory和寄存器)使用的量,而使用的量又决定了kernel代码的写法,比如几个stage,是否要循环展开,分块的大小等等...因此如果要达到客观的性能,还需要额外分析kernel是如何使用的,仅解决ptx层面的转译是不够的。具体到每一条PTX指令上,硬件设计者需要考虑,是要在硬件上直接实现每一条PTX指令,还是通过软件模拟以及如何控制模拟造成的损失;硬件指令是否遵循PTX的形式,例如是否添加控制指令执行的谓词操作数,如果添加,register file和流水线如何设计,是否支持data forwarding等等;NV GPU独有的内存层级怎么支持?PTX ISA产生的Arch影响如何与原有Arch特性融合?打问号是因为我也不知道答案,我觉得很难,仁者见仁智者见智,或许观众们觉得简单。我之所以到现在才写这篇,主要也是想严肃地讨论ISA对硬件和编译器的影响,这里只是抛砖引玉,我还需要查阅一些资料。
据我所知,有些团队通过PTX转译到自家硬件上达到了相当可观的性能,但用的是Ampere架构PTX。查阅公开资料可以得知,Hopper是一次质的飞跃,尚未得知任何在Hopper之后成功的案例。
有能力写PTX,就能写其他家汇编,进而抛弃CUDA
上过汇编语言课程的学生都能写汇编,所以我认同前半句。我一不理解该论点的因果关系,二不理解何来抛弃CUDA这一说,在NV GPU上写CUDA理所应当,但一直以来有很多人在AMD、昇腾等国产卡上写算子(当然没用CUDA),从来没有人要求你在别的卡写CUDA啊?
大家想的是,不用CUDA来实现NV GPU编程,那我只好表示感谢。我根本不会因为别人用PTX而不是CUDA来写NV GPU程序而感到慌张。
Freestyle
从用户的角度,我觉得CUDA体系最牛逼的地方是:
开箱即用的体验。见cublas/cutlass/cudnn各种高性能库,以及pytorch等大型软件拉下来就能用。犹记前几个月一个包含了友商计算卡的评测,就不在此引用了。舒适的编程体验。写kernel代码以线程角度切入的,非常容易上手,我记得早期写nbody程序时,只是简单的移植CPU代码就能几十倍加速比。进阶时肯定需要了解深入Warp/CTA概念,内存层级,以及复杂的API,但此时已经有成就感了,畏难情绪所剩无几。强大的工具链。例如Nsight和NVCC。Nsight真的非常强大,用过都说好,我刚入门的时候都会用它来迅速找到瓶颈。以我的编译器开发经验看,不借助profiling工具很难直接指出哪条/段汇编是瓶颈,比如结构冒险(Structure hazards)就很隐蔽,强大的profiling工具可以让我事半功倍,进而提高迭代速度。
回过头来看,dpsk使用PTX编程,有改变以上任何现状吗?没有。我相信他们代码主体还是由CUDA编写,或是通过NV对其他软件的支持来获取PTX,也是用Nsight来定位性能瓶颈并解决。当然,也有可能是本身就熟知程序特征等编译器不知道的知识,比如数据的流动特征、线程竞争的烈度等,经查阅PTX手册直接内联恰当的汇编指令。
每隔一段时间,有新的相较于CUDA更简化且性能可观的编程语言出现时,都会有CUDA被打败了,NV完蛋了的论调。我通常从以下几个方面去求证:
是否绕过了PTX,99.9%的都没绕过,还是依赖NV的工具链。看实现代码和编程范式。在部分场合替代还是可行的,比如Triton,不得不提,用户的心智负担是减轻了,但编译器开发人员就得掉头发了。实验结果。从展示的Benchmark中能知道新语言的通用性,有些只有简单的Kernel,另一些只有固定类型的几种Kernel,如GEMM, GEMV和Element-wise等。但项目早期阶段大概率是不支持太多类型程序,所以实验结果只能作为辅助手段。
另外,很多网友贬低体系结构和硬件团队的贡献,仿佛搞个高性能芯片只需搭下积木丢给台积电就行了,我认为不对。从我读研和工作经验来看,编程语言、体系结构和硬件实现三者的确是相互影响,最终呈现到用户面前的效果,绝非是一方起决定性作用,另一方只是陪衬,大家可翻阅:
计算机体系结构?book.douban.com/subject/7006537/


此书在这方面有一些通俗的论述,相较于我一家之言,更加客观公正。
自RT core和Tensor core以来,似乎没有什么突破性的变化,翻阅近两代公开白皮书,以及参阅了相应的编程模型转变后,我认为其影响是温和而深远的,或许多年后才能见效。
最后,我看到某些新闻说在PTX层次可以分配最终寄存器,不可以哈。
绕过cuda纯胡说八道,多少有些无知,但凡了解.cu编译执行过程也不至于
不直接使用某些nv算子库就算绕过吗,很多第三方库比flash-attn早就存在了,知道算子库处于生态什么位置吗?
因为我软件/硬件公司都搞过,所以懂一些,以下说的这些很多人没见过,都是cuda生态一部分,但nv对外不开源。
整个AI软件栈分层:
model:hf上的各种模型
分布式加速框架:megatron & fsdp & deepspeed,主流就是zero3/tp-pp
pytorch:python胶水层,python跨语言调用c++,算子dispatch, ad自动微分,torch allocator,ncclpg通信,各家芯片厂屏蔽软硬件后端细节在这里做的,通过privateuse1这个key来绑定不同后端算子实现;
cuda算子库:cutlass、cublass、cudnn,等很多cuda原生代码库,在cuda-toolkits里,还有很多第三方库,给开发者用的,也是大部分cuda开发者写算子库的工作,cuda应用生态,类比于boost、c++11标准库等其他的c/c++ so;
cuda runtime && cuda编译器:.cu编译和运行,nvcc/gcc将c cuda code编译成device能执行sass指令,链接打包fatbin,同时需要这些fatbin发送到device上,控制其调度执行流程,而ptx只是nvcc一层中间IR,人类还是可以读懂的……可类比于gcc编译链接,以及elf加载运行,只不过cpu在os及cpu上,而cuda代码是在device上。
umd:用户态驱动,一般是和cuda runtime耦合在一起,但是也可以直接提供umd编程接口,非常难懂,不细讲,只有芯片公司软件研发懂,其实在cuda兼容最重要的工作。
kmd:内核态驱动,对上层提供ioctl/rw接口
why:相比于c/c ++ linkers and loaders,显卡只是计算机的一块外设,需要内核态驱动(kmd)管理设备、提供命令/数据交互,但是kmd太低层,需要umd/runtime提供user api 运行时支持,包括device可识别的二进制cubin怎么发到设备、显存分配、数据copy,kernel怎么kick、异步结果怎么拿到、异常捕获等
明确来讲,cuda开发简而言之就是写gpu上类c code(kernel function),nvcc编译链接打包到cubin(.cu—ptx—sass),并且通过驱动发送到device执行,而ptx只是类汇编的中间表达,deepseek所做的事,就是c/c++嵌套asm的优化。
总之:ptx只是一层lower IR类似于汇编,可以比较细粒度控制代码,会写汇编就代表高水平了?一般是一些热点code可以用ptx去优化,还是要依赖驱动,把可执行程序发到device并且后续异步执行,算子库其实只是cuda生态应用层,runtime/驱动绕不开的,更别说的pytorch之上了,ds infra强在v3 paper写的,ptx真的九牛一毛。
ps:V3和R1看其paper,deepseek对cuda软硬件理解是软件公司国内外top1的,很多文章是疯狂点赞,主要是因为他们的工作,可以比肩openai
补充声明:无脑花粉避开,别没事找事,对遥遥领先厂没兴趣,不知道为啥这话题也能引来一些花粉煞笔,不挨个喷了,帽子已备自己领。
很多人没有意识到这次对英伟达的冲击有多大
其实造gpu这种事,或者说设计gpu,确切点说是设计,因为真正制造芯片的,是台积电负责的晶圆代工业务,美国那些芯片企业,除了intel以外,其他基本上都是芯片的设计厂,比如英伟达,苹果,amd,高通这些
gpu其实没啥特别复杂的,gpu的本质,就是能并行处理一堆相对简单运算的芯片
gpu 对比 cpu,犹如一个班的小学生和一个教授,如果你让一个班的小学生和一个教授同时算10000道加减乘除数学题,一个班的小学生肯定比教授算得快,因为一个班的小学生可以并行计算,可以把这一万道数学题分拆成几十个独立的部分,然后由每个小学生负责一部分,并完成计算,但是教授相比之下,算得要慢得多了,因为教授只有一个人,cpu就是那个教授,gpu就是那一个班的小学生,cpu不是不能做gpu的计算,但是并行的核心数量少,所以算不快
而因为制造本身并不是由英伟达完成,而是由台积电代工的,所以英伟达的单纯的gpu设计,其实没有太深的护城河,能造gpu的多得是,甚至,能造gpu替代品的,也就是asic,比如xpu,tpu那些,也有很多家企业可以做
如果没有cuda这种所谓的软件生态护城河的话,其他家芯片设计厂要做出竞品来,也就是分分钟的事
那这次deepseek干了件什么事呢?
很有趣,deepseek啊,绕过了cuda,直接使用gpu的字节码也就是ptx编码,然后再将编码后的产物交给gpu的jit编译器予以执行
注意这里的关键字:字节码,jit编译器
可能很多人都很熟悉了,对,java就是这个原理啊
但是java的字节码主要是编译成cpu的指令执行,而这里说的是gpu
很多人并不知道的是,gpu其实也已经大量采用字节码和jit技术
像游戏中大量使用的shader,你启动游戏时候经常要编译shader,对吧,那个就是把shader源码编译成一种叫做spir-v的字节码,然后再由编译器后端,将其翻译成gpu指令并执行
当然你也可以直接翻译并将spir-v下发生产,但是提醒注意,shader语言的源码相对较小,编译成spir-v的话,字节码的体积要比源代码大不少,所以很多游戏还是选择保留shader源码
在你第一次执行的时候,将其编译,所以你会看到比较长时间的界面提示说,在编译shader
那这个是针对游戏领域的字节码,也就是spir-v
那cuda用的字节码是什么呢?
就是ptx


你看,ptx的下一步是不是就是jit编译器?这就是另外一种字节码,跟spir-v以及java字节码一样的
只不过,这次jit编译器变成了服务于ai的gpu指令,java字节码是翻译成cpu指令,spir-v是翻译成渲染的gpu指令
注意,这里的ptx是虚拟的gpu指令,并不是真实的gpu指令,还需要即时编译之后才能执行
那这次deepseek直接使用ptx做编程,意味着什么呢?
如果deepseek可以用ptx编程,那就意味着cuda存在变得毫无必要了
它可以解释成英伟达的gpu的指令
那它也就可以解释成其他gpu,或者asic的指令
换句话说,这个东西,是跨平台,确切一点说,就是跨gpu等ai芯片的
也就是,它可以解释成英伟达gpu所使用的指令,也可以解释成比如Google云上tpu所使用的指令,也可以解释成比如博通xpu上所使用的指令,也可以解释成华为某个芯片上的指令
这样就直接干翻了编译器前端也就是cuda和nvcc的存在价值和意义
所以为什么英伟达股票应声下跌啊
就这个原因
作者注:这一段稍微有点误解,这里说的不是把ptx翻译成其他芯片(比如tpu,xpu)的指令,而是说,这些用作ai计算的芯片的汇编语言或者叫指令集,其实都是差不多的,deepseek可以用ptx编程,他也可以用其他芯片的指令集或者虚拟指令集编程,因为gpu的指令本来对比cpu就要简单,gpu只是能够同时执行更多的指令,而不是说它的指令有多复杂(第一段说了,gpu是小学生,cpu是教授),随便一个cpu的指令集都比gpu要复杂,而用作ai的gpu指令,更进一步,要更简单一点,所以诞生了tpu,xpu,npu等专门用于处理ai计算的芯片,这些芯片统称asic,也就是Application-specific integrated circuit,特殊应用集成电路,但是asic不仅包括ai用芯片,还包括像基带芯片等也都算是asic,因为相对简单,指令就那么几个,所以耗电量小啊,根据Google的说法,tpu的耗电量是gpu的三分之一
因为asic的指令集都相对简单,而且相似(这也很好理解,因为都用在同一个领域中),所以ds能够用ptx编程,就意味着他们也能用其他asic的指令集编程,所以这次是一种poc,proof of concept的项目,就证明,我可以做到,的项目,我可以不用cuda直接实现大模型,就这个意思
然后现在ai芯片的指令集(汇编)和虚拟指令集也就是中间码,字节码,还不统一,它不像cpu有java的字节码,gpu渲染有spir-v,这些字节码都得到了广泛的支持,ai芯片现在还处于各自为战的状态中,英伟达当然希望其他厂家都听它号令,用它的cuda,用它的ptx,买它的芯片,但这次ds直接做到ptx就是告诉你,你这个cuda,ptx,gpu什么的,都不是非你不可,其他也可以,听说已经在跟华为的芯片在做兼容了
当然其他厂家的这个指令集也不统一,那将来很有可能,出现一种类似java的jcp,gpu上的vulkan的khronos这样的一个机构,对ai用芯片的指令,做一个标准化的设计,从而诞生java的字节码以及gpu的spir-v这样的一个标准,然后各个ai芯片再提供将这种字节码jit即时编译成指令并执行的这么一个机制
那ds这次证明了,我可以直接在ptx上编程,那这就在告诉其他厂家,英伟达不再是必需和唯一,它愿意参与就参与,不愿意参与,这事也不是没他就不行,他不愿意来,那就别来,少了他这事一样可以搞下去,就这个意思
那至于将来会不会出现像java字节码和spir-v一样统一的ai专用虚拟指令集,还不清楚,静观其变
但是这事足以证明,英伟达的软件,并非必需品,同时也给中国的厂家,在将来可能出现的标准制定上,有了足够的话语权,英伟达一下子从必需变成了一个可选项
进一步延伸,聪明的你,看到上面这么多字节码,他们都叫做字节码
应该能够想到一点
那就是
这些字节码之间,能不能互相翻译啊?
当然可以
而且现在已经有不少技术,就在面向这种字节码之间的翻译
比如java的babylon项目,就是通过代码反射,将java的字节码翻译成其他的格式
比如spir-v字节码,这个在油管上已经有视频了


我截图截全了,自行搜索
可以说这就是java等前沿技术所努力的方向之一
那它可以翻译成spir-v,当然也可以翻译成其他任何一种格式,只要你愿意
而更早之前的将llvm的ir翻译成java字节码的项目叫做graal的sulong,速龙项目,在这里
https://github.com/oracle/graal/blob/master/sulong/README.md?github.com/oracle/graal/blob/master/sulong/README.md
所以只要你愿意,可以把中间码,字节码翻译成任何一种你想要的格式或者说是指令,并将其执行
这样看,是不是扩展性就比cuda要大得多得多了?
虽然所有人都知道英伟达有泡沫,只是没想到来得这么快,啧啧
多说一句
可能有人会对直接手写虚拟的汇编语言这种事感到困难
固然直接这么做并不算简单
但是也没有你想的那么困难
因为你在大学里学的汇编,那个都是 cpu 的指令集
第一段就说了,cpu是教授,gpu是小学生,意思就是,gpu的指令集是相对cpu而言,是要简单的
而用在 ai 上的 gpu 指令集,比普通 gpu 的指令集,还要少
做个简单的量化类比,比如 cpu 的指令集里有 200 多条指令
那么 gpu 的指令数量,肯定不会比 200多,估计只有100多条,甚至更少,但具体数字不重要,你知道比 cpu 指令少就行了
而 ai 用的 gpu 指令,会比普通 gpu 指令数量更少,按照Google的说法, tpu 的能耗只有普通 gpu 的三分之一
那么你可以做个简单的类比,你比如 gpu 有100 条指令,那么ai 用的指令是多少条呢?
30条咯
所以实际上这个手写的汇编指令,已经是经过两轮精简后的指令集
也就是困难程度,可能没有你在大学里手写 cpu 用的汇编指令那么困难
而因为 ai 用的 gpu 指令就那么几条,所以这里其实形成不了什么护城河
所以英伟达也不是在这里挖护城河,而是在此基础上,做cuda也就是nvcc那个编译器
那个是一个不完整的c以及一些c++特性的扩展,那个很复杂
如果逼着所有人都去用那个东西,那这个门槛很高,而且中间隔了一层,就有点黑箱操作的感觉
而deepseek直接面对 gpu 指令,就是在告诉你,他们做的东西所需要的指令,其实就这些
而这些指令,其实大多数友商都已经有竞品了,能造gpu以及asic的可不止英伟达一家
苹果,AMD,博通,Google这些都能造
deepseek听说已经在跟华为接触,将其源码翻译成华为造的芯片的指令,再说一次,这个指令相对简单,对比cpu的指令是经过两轮简化后的精简指令,所以难度上会下降不少
其实你大概都能猜到,用的是哪些常用指令,就是加和乘,主要是矩阵用的那两个
当初之所以会找上 gpu,也是因为 cpu和gpu里面,gpu能够提供比较成熟方便的矩阵运算功能
矩阵运算的特点就是量大,但都是很简单计算的组合,你在大学学过线性代数就知道了,学过矩阵吧?知道矩阵的乘法运算吧?要把一整行和一整列做叉乘,还要加起来,算一遍累死了,但都是很简单的运算,都是加和乘,没有特别复杂的运算,都是小学计算题,就是量大,算起来特别费时
因为都是这种计算,所以指令其实不需要多少,都是简单的运算的组合
黄仁勋当时根本就不知道还能用在ai上,他奶奶问他,你这个东西有啥用?
他说能用来打游戏,还有呢?还有他也不知道了
cuda根本就不是黄仁勋做出来的,是斯坦福大学一个学生在读书期间做的cuda,他的名字叫做Ian Buck,是他找上的gpu,做出的cuda,然后毕业之后他就入职了英伟达,但当时也没啥可选的,cpu又不擅长做矩阵计算,只有gpu能做,那时候也没有ai用的asic,asic还在搞基带芯片
现在不一样了,现在各种ai专用的芯片越来越多,不是只有gpu才能做矩阵计算
现在创业人家都找这种能耗低,便宜的ai芯片,而不是gpu
而如果你只会cuda,那cuda不支持其他芯片,那其他厂家芯片给你你也用不了
但现在ds直接在ptx上编程,那把ptx的指令转换成其他厂家的指令,那这个并不困难
也就是光ptx本身压根形成不了护城河
再多说一点
之前忽略了
就是有人突然提出内联的说法
意思是,并不是全部代码都用ptx等字节码实现的,而是一部分是其他编程语言,比如c/c++,有一部分是ptx
对,其实上面我贴了一张图还有一个视频,你把这两个都认真看一下
就能看到,以cuda为例,cuda里面有c(以及部分c++)的代码,也有ptx代码
那么c或者c++代码的处理,是由cpu完成的,而ptx代码则是由 gpu 完成的
那其实完整的编码应该是将 由 ptx 编写的 gpu 的代码啊,嵌入到 c或者c++代码中去
那这个其实在我之前看来,完全没有讲的必要,但是有人居然将其歪曲成
所有代码都用 ptx 来写,那这个就是纯属抬杠,那就不妨解释一下
其实在实际工作中,绝大多数的 ai 代码,都是要将 ai 芯片处理的代码,给嵌入到 cpu 处理的代码中去的
比如将 ptx 嵌入到 cuda 的 c/c++代码中去
然后你再看一下我截图中的视频,translate java to spir-v,认真听完视频中的解释之后
最后有说,他们正在利用 巴比伦 和 ffm 制作一个项目
这里ffm,其实就是将其他 机器码 嵌入到 java 代码中去的一种手段
这个就包括 c 或者 汇编
这个在编程语言中,叫做 ffi,foreign function interface,就是把一种代码(常见c或者汇编)嵌入到另外一种代码中去的技术
所以实际工作中,其实还是要编写 字节码 以外的代码
因为真正的程序运行时候,还是需要 cpu 的
像锁的并发管理,缓存等等这些工作,其实都是由 cpu 完成的
而 ai 芯片,不管是 ai用 gpu,还是 tpu,xpu,npu这些,都只负责 ai 相关的计算
但也是最重要的工作,其他的,各种管理性质的工作,其实还是由 cpu 完成
所以老外说的,代码由 ptx 编写,其实意思是,核心 ai 计算代码用 ptx 编写
其他不重要的,各种管理性质的工作,还是交给 cpu 去处理,这个做一个ffi就好了
但是外层的其他语言,那其实做起来就更简单
现在应该说,绝大多数语言这些年都提供了,对于 汇编 层面衔接的支持
比如 java 的 ffm,swift等等也都可以
所以这里其实没什么可说的,这是另外一个话题,有兴趣的可以说一下
反正你知道 ai 用芯片的汇编语言(比如ptx这种)现在可以很容易嵌入到其他编程语言中去
比如java,swift,python等等,就行了
外层的这些编程语言呢,编译后的代码会由 cpu 执行,所以一般ai芯片,用的时候,还是需要配合 cpu 使用
并不是说所有的代码都是由 ptx 或者一般认为的汇编语言去编写,没有必要
但是最重要的算法的实现,是由 ptx 实现的,而能够用 ptx 实现,它就能够用其它ai用芯片的指令实现
至于cuda的其他功能,也就是cuda里面 c,c++写的那些,那些随便抓个语言来做个ffi就行了
早就没什么门槛了,这个就是其他语言来替代 c或者c++ 的话题了
跟这里前面说的内容没啥关系其实
有兴趣的,自行搜索 编程语言+ffi,比如swift + ffi,就能查到结果,java可以直接查ffm,panama
以前只有python和c++会比较简单滴跟c互操作,但是这些年,几乎所有语言都提供了类似的互操作功能,都很方便,之前写过不少回答,有兴趣的自行观看
这个内容已经在X上讨论过了, 很火热的问题
我先翻译一下国外教授的详细回答,再讲清楚CUDA、PTX的关系。


中文翻译:
人们说“Deepseek 使用了 PTX,它打破了 CUDA 的护城河!”从根本上误解了这里发生的事情,以及 CUDA 实际上是什么。
CUDA 是一种高级语言。它使代码库和与 NVIDIA GPU 硬件的接口更加容易。它允许快速迭代。它是公司在设计过程中使用的语言,并且为高级设计而精心设计。如今,许多生产级软件都是基于 CUDA 构建的。可以通过微调低级代码(称为 PTX)来优化 CUDA。基础库已经存在。
PTX 更类似于 NVIDIA 硬件可以理解的 GPU 汇编语言。它是低级语言,允许进行微细优化。这是一项繁琐的任务,需要对硬件和正在运行的问题有丰富的专业知识和知识。如果您使用 PTX 编写,则会绕过许多“安全”的 CUDA 库。但归根结底,当它运行时(如果它运行),如果您知道自己在做什么,您可以期待更好的性能和优化。
如果说 CUDA 是 C,那么 PTX 就是 汇编。 除非您是 Chris Sawyer,否则请使用高级语言。
(解释一下《过山车大亨》是一款通过汇编写的游戏,作者是 Chris Sawyer)
Deepseek 可能是《过山车大亨》的一个时刻,但《过山车大亨》并没有掀起组装游戏的浪潮。
NVIDIA 上的大部分行业都使用 CUDA。那些想要从工作负载中获得额外 10-20% 性能或功率的人,因此任何在云端销售代币并成功广泛部署模型的人,都已将其从 CUDA 级别优化到 PTX 级别。他们花时间是因为长期权衡是值得的。通常 PTX 也会调整到一个硬件模型,除非你编写逻辑代码,否则很难转换。
使用 PTX 的 Deepseek 不会瓦解 CUDA 护城河。不是每个人,包括你的祖母,都会开始手动调整内核以使其自定义的 7B 参数模型正常工作。当该死的东西每 5000 个周期就会出现分段错误时,需要磨练、毅力和天赋才能保持理智。我永远不希望任何人随意使用 PTX。但对于那些需要它的用例,以及那些为处理它付出足够多的开发人员来说,那就祝你好运。其他人将继续使用 CUDA 或其他利用 CUDA(或 MLIR)的高级变体。认识cuda、PTX以及SASS
GPU和CPU的工作原理相近,都是通过指令来控制硬件达到计算的效果。
但是GPU更专注于矩阵计算,接下来就来梳理一下GPU的结构以及英伟达所建立的CUDA生态。


GPU其实一点都不复杂, 通过大量简单结构(数千个核结构),采用采用SIMT(单指令多线程)模型,通过线程级并行隐藏延迟,来完成高吞吐量的数据密集型任务(如图形渲染、科学计算)。
正式因为GPU的结构比较简单,所有采用CPU来控制GPU的单元让他们一起工作,其中CPU的上运行的称之为host代码,在GPU的运行的称之为device代码。
再往下探究,发现英伟达提供了一种中间汇编语言PTX(Parallel Thread Execution),独立于具体硬件,提供了虚拟指令集。也就是说PTX是为了GPU设计出来的汇编语言。
在汇编语言下面,就是真正执行GPU硬件的机器码SASS(Shader Assembly),由PTX编译生成(如NVIDIA的nvcc编译器完成转换)。
PTX是虚拟汇编,用于跨代GPU兼容;SASS是硬件原生指令,直接控制CUDA核心。
比如,PTX指令add.s32 %r1, %r2, %r3会被编译为特定GPU架构的SASS指令。
说完了底层语言,再说说CUDA是用来干么?
CUDA(Compute Unified Device Architecture)是由NVIDIA推出的并行计算平台和编程模型,其编程接口基于扩展的C/C++语法。严格来说,CUDA并不是一门独立的编程语言,而是一套面向GPU的编程扩展,属于高级语言的范畴,但提供了直接控制硬件的能力。
简单理解可以把CUDA当做一个C/C++语言的增强包, 通过这种方式就是用C++的方式来直接操作硬件。
接下来这张图详细解释了类比CPU的编译过程


DeepSeek到底做了什么?
说完了这些,那么DeepSeek到底做了什么呢?
简单来说,DeepSeek就是通过在代码中利用CUDA提供的方式来完成性能优化z
直接给一个代码类似,CUDA代码中内联PTX完成更低级的调用

__device__ int atomicAdd(int* address, int val) {
    int old = *address;
    asm volatile ("atom.global.add.s32 %0, [%1], %2;" 
                  : "=r"(old) : "l"(address), "r"(val));
    return old;
}

CUDA还提供类似内存修饰符、Warp级操作的更接近硬件层的优化接口。
你过你知道C语言,那你可以在C语言当中调用CPU的汇编语句。
打破CUDA垄断?
看到这里你还会觉得DeepSeek打破了CUDA的垄断么?
这明明就是对CUDA的熟练操作的适用,同时会GPU底层训练逻辑的深刻详细理解。
英伟达最强大的就是实现了CUDA生态,相当于给GPU建立了一个定制化的语言,直接操作GPU来完成一些具体的工作。
简单来说明一下就是,如果是一个新架构的CPU,那么相当于英伟达完成了指令集的构建(SASS)、汇编语言(PTX)的建立,以及提供了高级语言的增强包。
英伟达的护城河就是CUDA生态!
英伟达的护城河就是CUDA生态!
英伟达的护城河就是CUDA生态!
DeepSeek也是这个生态的受益者!
关注我
@TopGeeky
,致力于用大白话讲清楚更多有趣的知识。
关注AI和学LLM的朋友,在这个问题下拉黑全部“PTX打破CUDA垄断”“PTX打破英伟达护城河”的答主,
你会节省一大堆鉴别和筛选可靠信息的成本
英伟达搞了好几年没搞定,然后被DsspSeek狠狠的打脸。
不给大家说,大家都不知道,相当于绕过了cuda这个封装好了的编译器,直接用更底层的语言。
两个字,牛逼!
据报道,他们在短短两个月时间,在2,048个H800 GPU集群上,训出6710亿参数的MoE语言模型,比顶尖AI效率高出10倍。
网友对其策略纷纷表示震惊:
「在这个世界上,如果有哪群人会疯狂到说出『CUDA太慢了!干脆直接写PTX吧!』这种话,绝对就是那些前量化交易员了。」


主要是他写的这套运行效率不低,大家都知道这样能绕过去,本科学了编译原理的都知道思路,但真正在ai方面成功绕过去的这还是第一家。
deepseek 跨平台是通过上层转换 各硬件平台,各硬件平台联合对接,支持人AMD 华为昇腾
DS的优化不是更抽象,而是更具体,更贴近英伟达的芯片缓存的特异的硬件设计,也就更难以泛化到其他芯片平台。


不用cuda是一种技术力的提现,用了英伟达更底层的语言,这种能力说明了ds开发组对于厂商提供的工具并不是那么感冒,更在乎硬件性能本身——这为寻找英伟达平替降低了门槛,要知道英伟达强大的不只是性能,它的cuda和配套资源也是优势。
硬要说的话,只能说这种DS“更贴近硬件层进行优化的能力”本身是可以泛化的。


毕竟解决模型学习效率问题说起来简单,但苏妈要是真能解决也不至于被老黄在ai大发展的几年内吊起来打了。而且他能绕过一次把通用方案写出来,那么就有能力推广到更多的模型。
而对于英伟达来说,也只能拿开源中小模型做点微调和垂直应用的,主要使用langchain,transformer这些工具的应用开发人员,感觉没有能力去做这种底层的开发吧?


在这种场景里面,cuda还是必须的吗?还是说要寄希望pytorch,TensorFlow去把这些底层的兼容解决了
不过我认为GPU设计还是有点护城河的,不然AMD也不至于在本年度放弃高端GPU和英伟达的竞争转而去做中低端GPU,何出GPU设计无护城河此言
之前英伟达对中国禁售高端显卡,新加坡一夜之间变成英伟达全球第二大市场,份额跟中国减少的几乎完全一样。如果美国铁了心不想让中国再拿到的话,那么英伟达相当于丢了半管子血了


如果从架构的角度上分析,CUDA编译器会先将代码编译成PTX,再编译为具体GPU架构的机器码,护城河依然存在。原因有两点:
英伟达仍控制着底层硬件架构
PTX最终还是要运行在英伟达的GPU上
不过话说回来,就相当于掘了英伟达的根,英伟达从此变孤城。
鉴定为:学新闻学的。
越底层的代码肯定越和硬件绑定啊。
用 CPU 举例,这就像你说“绕过”C 语言直接调用 ARM 的 Neon 汇编,实际上并不是“绕过”,而是和 ARM 架构高度绑定了。因为 x86 没有 Neon,只有 AVX。而 CUDA 就类似于 GPU 编程的 C 语言。
再说了,难道底层优化不本来就是 HPC 的基操?DeepSeek 以前就是做量化的,高频交易做底层优化都是家常便饭,这也能大惊小怪?只能说学新闻学的还是牛逼。
张雪峰又又又又封神了,用PTX代替cuda c,这显然是跟NV的cuda生态绑定更深了,这都能被某些人说成是绕过了CUDA,这谣言堪比光刻厂。
PTX暴露了更多硬件细节,跟NV绑定更深
相比CUDA C, PTX为高级程序员提供了进一步压榨硬件潜力的手段,包括更丰富的数据类型、更明确的rouding mode、更灵活的memory order、更精细的同步机制等等众多的高级特性,这些高级特性都跟NV的硬件紧密相连,这导致了用PTX编写的代码比CUDA C的代码更加难以在非NV的硬件上高性能运行。
用cpu侧的代码来举例,c语言代码更容易移植还是汇编代码更容易移植?
PTX更像一种程序员友好的ISA,而不是bytecode
有高赞的答主用PTX类比字节码,这是不确切的。字节码要尽量屏蔽硬件细节,isa要尽量暴露硬件细节。用字节码(bytecode)做中间层的编程语言,在性能上都会有少则3-5倍多则数量级的性能下降,而用PTX编码则可以带来10%以上性能提升。并行计算这种对性能极为敏感的场景,厂商不会蠢到用bytecode做中间层。
PTX的全称是一种低层并行线程虚拟机及其指令集架构,提供一个跨越多个GPU世代的稳定指令集。不同于bytecode天生为屏蔽不同体系结构的CPU的硬件细节而生,PTX设计之初就充分暴露了NV家GPU的硬件细节,大部分PTX指令都有真实的硬件指令(SASS)与之一一对应,少部分PTX指令没有直接硬件指令对应,但是只需SASS指令的简单组合就可以表示。
PTX天生只能支持NV家的GPU,要在其他家的GPU上支持PTX一点都不比cuda c容易。
PTX编译器的开发难度可能还要高于cuda c编译器
一方面,PTX通过变量来使用内存,这导致了PTX到SASS的转换不可能通过一个简单得汇编器实现,编译器后端中的SSA构建、寄存器分配、冗余指令删除、控制流化简等步骤一个都不少,工作量完全不输出CUDA C编译器。
另一方面,clang的CUDA C前端已经非常成熟,AMD也开源了hip c的前端,如果要开发一个CUDA C的编译器,前端部分基本不用操心。但是PTX几乎没有靠谱的工业级前端可用。
还有有,PTX的细节及其繁杂,比cuda c的细节要多得多,这一部分的工作量也不少。
严重怀疑这一波营销的含金量。
PTX作为CUDA技术栈的一部分,同样是英伟达的专利。
所以题主你是觉得有人用英伟达的技术专利打破了英伟达的护城河?!
这是什么操作?我左右没想明白。
没绕开,但是给做AI的公司提供了一种新的思路:
既然deepseek可以穿过CUDA到PTX层来榨干芯片的性能,那其他AI公司理论上也可以这么干。
并且这套逻辑不仅仅适用于CUDA,可能用其他品牌的算力芯片的时候,也可以采取同样的处理办法。
相对的,算力芯片设计公司在研发算力芯片的时候也可以参考Deepseek在PTX层操作的思路,对自家芯片进行有针对性的研发。
[收藏本文] 【下载本文】
   数码 最新文章
联想推出 ThinkBook 14/16 2025 酷睿 Ultra
初次 DIY 电脑时都犯过哪些低级错误?
为什么同样是一英寸底,相机的镜头尺寸比手
苹果选择 EMS 的原因是什么?
如何评价苹果 3 月 5 日发布的 MacBook Air
iPhone电池健康看80和100有什么区别?
为什么现在的手机都要配手机壳?
三星 AI 功能向折叠屏等更多机型开放,你会
荣耀 Magic6 至臻版实际使用体验怎么样,Ma
中国出口这么多先进的无人机,自己用什么?
上一篇文章      下一篇文章      查看所有文章
加:2025-02-06 11:08:43  更:2025-02-07 13:41:58 
 
娱乐生活: 电影票房 娱乐圈 娱乐 弱智 火研 中华城市 印度 仙家 六爻 佛门 风水 古钱币交流专用 钓鱼 双色球 航空母舰 网球 乒乓球 中国女排 足球 nba 中超 跑步 象棋 体操 戒色 上海男科 80后
足球: 曼城 利物浦队 托特纳姆热刺 皇家马德里 尤文图斯 罗马 拉齐奥 米兰 里昂 巴黎圣日尔曼 曼联
  网站联系: qq:121756557 email:121756557@qq.com  知识库