intel怕cpu变成gpu启动器,十分焦虑。在想各种办法优化机器学习性能,虽然说这条路很艰难,但是总是要挣扎一下嘛,看看nvidia的股票,眼馋啊。
linus的主要工作是编译linux内核,自然不在乎浮点性能,还不如多来几个核心。
我觉得有个两全其美的办法,intel还是把研发经费省下来买nvidia的股票吧。
Linus中肯。
假设我是一个程序员,需要进行大量的矩阵运算,目前我有三个选项:
作为普通开发者,怎么看都是1和4最划算。
选择2的大概只有Mathworks和wolframe的人才有时间和精力做这么细的优化。
Intel再往珍贵的半导体上扩展各种SIMD指令集,在真正做整机方案的人眼里来说,都是毫无意义的浪费——哪怕Intel在最鼎盛的时期,打包给服务器卖AVX-512,都没什么人买账,该用GPU用GPU,该用FPGA用FPGA(如果只是大面积部署在自家PCIe上),而广大普通消费者们除了视频编码解码、opengl做点设计以外,几乎再也没有能用的到大量计算的场景了。
从我个人角度看,这无论如何都不是个技术问题,而是商业问题。Intel估算Nirvana的市场有几十亿上百亿刀,现在看起来是自己吹起来、自己又要破灭的泡沫。实际的技术成本不仅要平摊到自己头上,还要平摊到开发者头上——如果双方都有利可图,利益驱动真正花钱的消费者去付费更新换代CPU,那么才是一种双赢。
然而事实是,90%的用户除了看网页、用用office和google docs、收发邮件、视频会议,除了encoding和decoding,几乎连负载稍重的GPU应用都用不到;10%对一些计算有需求的用户,才会考虑用nvidia和AMD的GPU来打游戏剪视频;在全球用户的大基数下,用到CUDA的人已经是凤毛麟角了,真正有刚需去使用各种SIMD的用户是一个极小的基本盘,给他们单独支持部分计算上的优化是一个非常不划算的事情。
市场越小,容纳下的玩家越少,而且越是高成本难开发的方案越容易提前出局,越是入局早、用起来简单、综合成本低的方案越容易提前赢家通吃,不给追赶者任何弯道超车的机会——不要被“AI”吹的泡沫洗脑了,真实的市场远没有那么大。
PS:在评论区杠“为什么不用MKL”的,请回去把第二条再读10遍。
其实就是晶体管怎么用的问题。
大神吐槽,是因为英特尔浪费这些晶体管,使用效率太低。
能用到的程序少,编程困难,有更好的办法(gpu通用计算,异构)解决。不用的时候白白浪费晶体管,浪费功耗。
跑分能用上跑分好看点。
而真正需要高性能计算的场合,它增加的那点性能又干不过专门加速器,很鸡肋。
类似于高性能集成显卡,说没用,它确实快一点,说有用真跑游戏,它没法和高性能显卡比。
更复杂的指令集是需要的,到了一定性能,指令集太简单,传递信息太少,不利于性能增长。
但是AVX512这种是不太需要。
现在CPU的发展到了一个十字路口,Intel和Linus在这里出现了分岐。
半导体工艺从十多年前的90nm到今天的7nm,CPU主频从4GHz艰难的提升到今天5GHz,十多年来也没有再出现新的能大幅提升CPU IPC的技术——除了SIMD指令。
SIMD全称是Single Instruction Multi Data,单指令多数据。顾名思义,就是一条指令同时处理多个数据。对于现代CPU来说,单条指令需要经历多个处理过程,包括指令预取、解码、分支预测、乱序重排、数据加载、发射、执行、数据回写等。除了必须的执行步骤外,其它的额外步骤都需要消耗一定的功率。而现代应用中,又往往会对批量数据进行相同的处理,如果每个数据都用一条指令进行处理,速度慢并且需要消耗更多的额外功率。SIMD很好的解决了这个问题。
二十多年前上市的奔腾MMX的MMX指令集,就是SIMD指令集,一条MMX指令使用FPU的80bit寄存器中的64bit,可以同时对八个Byte、四个Word或者两个DWord数据进行处理。从Windows 95开始流行的各种多媒体应用,例如图像/视频处理,CPU需要对大量的像素数据进行处理,而每个像素都包含3个字节的RGB数据(或者4个字节,加上透明度),使用MMX指令处理非常高效。除了像素数据外,3D游戏中的三维坐标、音频应用中的大量采样数据同样可以使用MMX指令进行加速。
从MMX开始,奔腾3时期引入的SSE指令集,数据宽度提升到128bit;第二代Core引入的AVX,数据宽度提升到256bit。每次宽度提升,性能都是随之翻倍的。然而,MMX直接使用了80bit的FPU寄存器中的64bit,对CPU整个流水线几乎没有影响;SSE的128bit相比80bit增加了48bit宽度还算可以接受。AVX的256bit,整个CPU的数据通道比80bit增加了三倍多,需要消耗三倍的晶体管,功率也增加了三倍。因此在严格限定功耗的场景如笔记本或者服务器中,CPU运行AVX应用时需要降低频率从而降低功耗。
此外,加宽的SIMD指令对于程序编写也是一个挑战。绝大部分应用中,数据通常使用8-64bit。事实上64bit的使用也不多,大部分应用使用32bit的Int或者单精度浮点数据足以满足业务需要。256bit的AVX指令,意味着一组8个32bit数据才能达到最高效率。而实际业务中很少应用需要使用四维以上的矢量数据,需要对数据结构进行重组才能充分发挥CPU性能。
如果说Int64/双精度浮点用到的场合还是不少,AVX的256bit宽度还是有其必要性的话,那么AVX-512的512bit宽度的存在意义就很有争议了。对于以Linus为代表的广泛程序员群体来说,不管是64bit以上的数据,还是4维以上的矢量数据,使用场景都是极其有限的。只有高性能计算或者一些非常罕见的高维矢量应用能从中得益。但CPU为了支持AVX-512指令集,消耗了大量的晶体管,更宽的数据路径也意味着或者需要降低CPU频率,或者更多的流水线级数,都会降低CPU性能。我想这是Linus反对AVX512的主要原因。
当然,这是现状。事实上现在各种AI应用正在兴起,新的AVX512-VNNI指令对于加速AI推断还是非常有效的。但对于AI推断来说,使用GPU效率更高,虽然代价是更高的成本下限——GPU和显存都需要付出更高的额外成本,不利于硬件生态的普及。另一个解决方案是CPU集成独立的NPU单元,这在手机平台上是主流方案了。
CPU+AVX512、GPU、NPU三个方案都各有所长也各有所短,在桌面平台,到底最终哪个方案胜出,我只能说,如果Intel的10nm工艺没有难产,在2016-2017年按时推出的话也许AVX512能普及开来,但2020年的今天,Intel在桌面、服务器都还在用14nm续命,AVX512真的前景堪忧。
说下对于AI,其实就是神经网络的推断与训练任务,大概没人会指着Xeon能干啥,当然Phi和FPGA也少有人折腾。Intel对桌面Xeon的AVX512在神经网络任务中的用途很明确,低Latency推断,然鹅,实际应用时候大部分都是Batch推断,而且也不在乎几十ms的延迟,AVX512用途不大。在训练时,指着这个SIMD加速预处理也不太现实,不如直接堆核心来的高效。
对体系结构而言,引入AVX512由于可以同时处理更多的数据,这样cache的带宽和大小都需要增加,无论AVX512的Offset,这的确限制了主频的提升。对于有科学计算,数据能挖掘出ILP这部分的确有用,但是ILP挖掘对于普通用户常用的软件已经很难了,俺还是觉得与其折腾这个不如直接堆核心来的省事。也就是Linus说的堆很多性能不错的核心。
曾经有段时间我一直觉得对我们臭打游戏的,如果intel出原生没有AVX,只到SSE42,8核心5G不带HT(八心八箭)的奔腾就够了,当然最近把AVX这个需求加进去了。
本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度,google,bing,sogou 等
© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有