如何看待 AMD Ryzen 处理器 AES/SHA 性能异常之高?

[图片] [图片] 由图可见,ryzen的aes、sha性能和其核数不成正比,分别达到了6850k的2.5倍和3.5倍,甚至大幅度超越了20核至强。 …
关注者
92
被浏览
74,611

7 个回答

这取决于算法和专用电路,首先是专用电路,表现出来的叫做专用指令集,Intel存在一个AES指令集,AMD也有, Clarkdale第一次集成了加速加密解密过程的指令集。在新的AES-NI指令集中,包含了4条新的指令。他们分别是负责加密的AESENC,AESENCLAST和负责解密的AESDEC,AESDECLAST。另外还有两个AES密匙扩展指令AESIMC,AESKEYGENASSIST。这些指令都属于SIMD单指令多数据编码。他们支持目前最为主流的AES-128、AES-192、AES-256。

所有的AES指令都有着固定的长度和指令潜伏周期。这就意味着这些固定的指令不会发起任何的内存访问请求。他们的变成模式与现在标准的SSE4和SSE指令相同。这就意味着所有的操作系统都可以支持AES-NI指令集。从这段话可知,Intel的AES指令集脱胎于SSE指令集,本质上是已经落后的,而且SSE不支持FMA,这里就会有一个问题,如果不使用FMA,intel的128bit向量SSE性能是有问题的

这是SKL的架构框图,箭头内是普通SKL处理器,方框外是SKL-X/SP的AVX512专用单元,暂且不看,VEC代表向量运算器,Intel的向量Mul与ADD与FMA共用,一共两个FMA运算单元,是可支持256bit向量的运算单元和对应256位的YMM寄存器,做128bit向量调用低128位寄存器来进行计算,也就是如果做SSE的Add计算,SSE 128bit的输出性能add是2X128,mul也是2X128,128bit FMA也是2X128(但等效4X128,因为乘加融合了),但SSE指令集中没有FMA这个技能,AVX(AVX也可支持128bit向量)才有,那Zen是什么样的?

FP部分很明显了,首先AMD是128bit的向量寄存器,mul与Add分开,进行mul是2X128,Add也是2X128,但是如果是Mul/Add各一半呢?那就是4X128,也就是等效于无时无刻运用了FMA,当然这也导致AMD做FMA的时候除了降低指令延时没有峰值提升,而Intel的优势在于其还是256bit的向量运算器,最高可支持2X256的 AVX FMA浮点峰值(等效4X256),AMD是2X128(等效4X128),所以向量性能如下图,

所以你测试就会发现,如果使用了AVX2向量指令集做浮点计算,Intel的浮点峰值是等效4X256的,换句话就是单精度浮点峰值每周期32flops,按这个推论,8700k 6核4.3Ghz下单精度浮点峰值为4.3GX6X32等于826Gflops左右,用AIDA64测试可以看出,AMD则为Intel一半

但AES基于SSE,Intel就没那么好运了,2X128的乘加峰值和4X128的乘加峰值,让Intel实在打不动,当然Intel SKL有高频和IPC优势,而且AMD的4X128的性能经常也只能发挥出3X128的水平(真要看到4X128的峰值还得上FMA),所以Intel还是能勉强一战,当然AES这种纯计算的还是打不动,同核同频率AMD至少是1.5倍,当然Intel也知道这样太丢人,ICL上AVX512- VAES指令集还是会来,而且SHA指令集也会登陆高性能处理器(此前一直是凌动支持SHA)


那SHA或者叫Hash的性能怎么解释呢?AMD集成有SHA指令集,但实际上Intel可以通过自身的高位宽AVX向量化指令集来弥补缺陷,而不是像AIDA64那样直接被完全蹂躏

在sisoftware测试中,开发者将6700K使用AVX2向量化编译,7900X使用AVX512向量化编译,我们可以看见,SHA1中,1700X对67K是17.7对11.3,1950X对7900X是34.2对26.4,考虑到AMD核心更多,实际效率差远低于AIDA64表现出的情况,不过SHA2-256的测试中,1950X达到了7900X的2倍多(排除核心差距平均每核要高46%),1700X更是67K的3倍(17.1vs5.9,不过也比AIDA64跑出的近5倍差距好点),排除核心数量差距每个核AMD也赢了50%,但是在SHA512上,Intel大获全胜,这是因为AMD的SHA指令集不能加速SHA-512计算,所以只能也使用AVX指令集,而Intel这方面明显占有绝对优势,7900X更是凭借AVX-512压制了1950X,找回了面子,平均每核高了174%


所以总结的说,浮点性能更强,是因为Intel的最大峰值性能凭借原生256bit向量指令集和寄存器的帮助,拥有对手两倍的峰值潜力,而AES是因为Intel明显偷懒,因为有了FMA而将乘加运算器依附于FMA运算器,使得乘加混合的计算峰值在无FMA指令集帮助下与对手没有优势,而SHA的性能,则是专用电路的胜利,但AMD的指令集也不是万能的,比如他不支持SHA-512,不过SHA-512用的少

而且,做专门的加密解密,用高性能处理器其实不那么划算,这种一般有专门的低功耗处理器来做更合适,这也是为什么Intel只给goldmont的凌动级别处理器(本质是为了服务那堆凌动服务器U,附图为同为goldmont的N4200)配了这个SHA指令集,而且楼主的图上也可以看出,与N4200同为apllolake的J3455 hash性能与7700K相当,而能耗比不知道高到哪里去了