没有高分低能的硬件,只有选错了跑分和对应场景的关系的人
首先我用AIDA64的性能基准来说明一下
你能看出谁高分低能吗?你会发现CPU QUEEN/zlib是同规格下AMD与Intel接近,AES/Hash是AMD明显绝对优势,VP8是多核没什么优势/超线程负加成+Intel高主频处理器有优势,julia/mandel/ray trace FP32/64是Intel绝对优势,Sinjulia是AMD有较大优势,CPU PhotoWorxx是Intel优势且超线程有负加成,至少从AIDA64这些项目来看,你不能说谁高分低能,那这些差异是为什么呢?
这样一看很多人似乎理解了,Intel有优势的项目全是AVX/AVX512项目,AMD最大优势Hash,AMD处理器都支持Hash加速指令,且拥有更大的加密解密执行单元,而FPU中Sinjulia是AMD的优势项目,而恰好80bit扩展精度的浮点计算无法使用SIMD指令进行优化,他使用了更老的X87浮点指令和执行单元来执行
那有人要问了,这难道是指令集的问题导致了差异?其实指令集只是汇编语句的抽象概念,只是告诉处理器该怎样执行这些计算的一个显式的概念,对应的背后是具体使用了何种单元执行这些指令,处理器如何更快的将这些指令发射到对应的流水线来执行的问题。比如Ryzen都支持AVX2指令,但观察9700K/9900K相对2700X,同样是8核规格,在AVX项目上2700X都被拉开极大差距,这便主要是执行单元的巨大差异造成的
Zen与Skylake系列的后端执行单元来看,AMD的端口多达10个,除去两个AGU,实际执行计算的端口有8个,Skylake则只有4个,其中VEC是执行SIMD指令的单元,它将负责AVX/SSE的指令执行,AMD则是整数浮点分离,整数4个端口,浮点4个端口,咋一看AMD没有任何劣势啊,Intel在执行浮点加法乘法将使用Port0/1的FMA单元提供的乘加计算,该单元在乘法加法混合时如果有FMA指令则同时双发乘加融合计算,即执行浮点加法时双发射,浮点乘法时双发射,乘法加法同时混合使用FMA单元的FMA计算,也是双发射(等效4发射),AMD的浮点计算则没有专用FMA单元,所以执行浮点加法是双发射,乘法是双发射,乘加融合是两个Mul+两个Add一起上,相当于四发射,咋一看还是没差别啊?但AMD不幸的是每个单元只能执行128Bit SIMD的计算,Intel则是256/512Bit(Skylake-X)的SIMD计算,这样同样是双发射,Intel是2X256,AMD是2X128,自然也就被远远甩开,
而整数计算Intel的SIMD int加法依旧是VEC的单元来做,他是3个ALU来做int型的逻辑和int加法计算,所以最高吞吐3X256,int乘法则属于FMA单元的事情,他能实现2X256的吞吐,AMD的int型逻辑计算由4个ALU执行实现4X128吞吐,int加法由其中两个ALU执行,实现2X128,乘法由其中一个ALU执行实现1X128,最后一个ALU执行除法,包括Intel都是一个除法器,当然除法器Intel的移位规模很高,实现了radix 1024,这也使得其在老式圆周率计算super Pi中领先AMD相当多,总结如下
当然之前AMD没能力做,一堆A粉想尽办法掩饰,比如AVX没用(没用你还明明用着128bit SSE指令集的宽度来支持AVX2),比如AMD考虑市场上支持AVX的少节约成本(这时不谈挤牙膏了,不给你是为了节约成本),然而Zen2就要把这个执行单元升级为256Bit了,显然之前的规模和工艺,AMD自身能力的不足,难以在14nm就像Intel一样设计一个这么大的计算单元还跑出高频(Intel),体现了双方的差距
但是,AMD不是也有优势项目吗?比如Sinjulia,比如AES Hash跑分就很牛逼啊,CPU queen也不差啊,而且如果执行128bit的SIMD,你Intel不也是2X128的水平?这样不就差不多了?
这就是另一个问题,比如CPU QUEEN是一个棋盘皇后(10皇后)问题,他指的是在10X10的棋盘上摆放10个皇后且不能相互攻击(皇后是横竖加对角都能攻击的),这个问题被认为是分支处理的典型问题,这在日常中不是不常见,然而这里有一个巨大的问题,那就是AIDA64的棋盘皇后问题做了多线程的处理,而且由于基本不具备向量化并行优化空间,这几乎对AMDIntel来说就是个谁核多线程多谁厉害的项目,然而日常中这并不是一个简单的事情,更多时候一些分支的处理往往都还是单线程的,这让超多核的处理器实际上就出现了AIDA64跑分高但日常用不到的问题,同理,aida64上的AVX512项目,也面临日常用不到的境地,但好歹AVX512可以在密集计算领域发挥作用,密集计算的需求在如今越发旺盛,CPU强化这方面性能显然是对抗GPU的一个重要手段,在日常中可能就不能转化为你能看见的能了
Sinjulia代表的X87浮点更是如MMX一样,基本是历史垃圾堆里的了,属于基本只有古董软件才有,但是古董软件也压根很难支持你这么多核,这也是AMD很多时候跑分高的原因,使用老版本的跑分软件,在标量执行单元和流水线设计如今趋同的今天,基本的ILP优化水平都差不多的,能同频差出10%已经很多了,所以AMD多两个核跑分想低都难,但是实际应用中这些老版本的跑分软件对应的使用场景也很难有足够多的线程调用,这也让AMD的多核性能不太容易在日常使用中发挥出来,好不容易有足够多的线程支持的软件,你发现他居然支持了AVX,虽然AVX的利用率也没有支持AVX的跑分软件那么高,但是这么一来一回,Intel本身同频性能和主频也高,依旧也就保持了优势
而既没有FMA指令支持的SSE程序,使用128bit SIMD和寄存器的程序,AMD自然是与Intel五五开,如果你的使用环境的确是这样,那AMD也不是低能,但是还是要考虑多线程的支持程度,否则如果即使Intel核更少,但是你的程序连4核都利用不上,那在如今主流处理器都已经4核以上的时候,大家都只跑4个核,那主频更高更有优势
当然服务器讲求多实例的吞吐能力,比如单个实例单个任务无法利用足够多的线程,但可以同时执行多个实例来充分利用这些线程,这样也就发挥了多核的作用,但是问题在于家用用户很难有足够多的并发项目来填满超多核心处理器,往往普通用户处理的是单个实例或较少实例的负载,而且核心多使用多个实例来填满硬件线程,还会面临极高的内存速率和容量需求
使用SPEC2006浮点Rate项目+新编译器环境下(VS2017+ICC19)对9900X/9940X/7820X/金牌6144进行了对比(SPEC2006在编译器使用Qxcore AVX512的收益有限,所以我做9900/9940的时候直接使用QxCORE-AVX2)
7820X 16线程,我设定了16个实例(Rate 16)来执行,安装48GB内存,每个实例分到3GB内存
9900X 20线程,我设定了20个实例(Rate 20)来执行,安装64GB内存,每个实例分到3.2GB内存
9900X 28线程,我设定了28个实例(Rate 28)来执行,安装64GB内存,每个实例分到2.3GB内存
双路金牌6144共32线程,设定32个实例(Rate 32)来执行,安装192GB内存,每个实例分到6GB内存,同时每个实例分到的L3是6144最多(6144一共49.5MB L3),其次是9900X(19.25MB L3),然后是9940X 19.25MB L3但是28个实例。7820X是11MB L3 16实例,这些处理器的多核频率都比较接近
实际上可以发现很多项目9940X的内存瓶颈极大,尽管他比9900X多了40%的核心,频率也相近,但是有不少memory bound项目已经被9900X追上,而6144凭借超大的缓存和内存容量,基本放飞自我,只有少数内存瓶颈小的项目被9940X追上,这说明在讲求多实例的吞吐测试中,尽管有能力填满所有核心与线程了,但此时内存性能也成为一个重要指标,他会明显影响性能的表现
至于AES和Hash,日常主要用于签名,身份验证,包括网页,下载文件的校验,如果要执行密集的AES/Hash计算,可能比较为人熟知的应用就是挖矿了,比如比特币是SHA,门罗币是AES,而且最重要的是Hash虽然intel没给主流处理器支持SHA(尽管SHA指令集极其加速单元是Intel扩展的,被用于目前的凌动处理器),但是实际上可以通过AVX512 int单元来执行HASH,实际上sisoftware给出的成绩便是AES计算成了cache/memory bound,Hash使用AVX512配合高内存带宽配置,实际上Intel完全不输AMD
我直接拿我跑的9940X(全默认)与sisoftware的2990WX进行了对比,实际上跑分完全不输,不仅是加密解密不输,其实像诸如多媒体(SIMD),科学计算等项目14核9940X依旧超过了2990WX,,说AMD高分可以停停了
实际上只要还在2018年继续更新的跑分软件,都显示AMD的优势越来越小,因为AVX/AVX512的支持越来越普遍,就连AMD最爱的CPUZ跑分,都在近日支持了AVX/AVX512,还有3Dmark的新场景,就连刺客信条奥德赛还搞出了不支持AVX不能进游戏的问题
在都是默认频率的成绩下,2700X拿9700K来打都是浪费,当然SSE的分数还是很高的,比7820X还高,可能这也是有人认为AMD高分的原因
而AMD市场宣传最爱的R15,的确也是高分
可问题是,我拿出R20跑了一下R15里面的渲染场景,仅仅只是重新导入了这个项目,其他没有任何修改,
7820X 9秒完成,而使用R15足足掐着秒表要20多秒,请问R15有什么资格代表C4D的性能指标?
C4D更是支持了embree插件,而embree插件最新的支持AVX512,未来C4D的新版随之支持也是理所应当的,而3DsMax,Conroa都有使用embree插件用于光线追踪和特效处理的部分,这也是为什么很多人发现AMD跑R15很厉害,R15出的时候本身压根没有任何AVX支持,使用的embree插件也是古董级的,但是跑实际自己用的新版本甚至8核不比8700K快的问题
上图则是blender最新的编译测试版运行一个光线较多的渲染的一个性能分析器结果,可以发现AVX FMA的使用已经成为了主要SIMD部分,256bit向量占据了更高的比例,再拿什么avx用不到来说已经毫无意义,更不要说Intel已经在研究X265使用AVX512的问题了
最后便是很多人说的优化问题,首先Intel的软件开发中心有数不清的优化参考文件,而AMD的寥寥无几也很难找到,似乎AMD认为反正我和Intel都是X86处理器,你优化好Intel我就能跑的态度,Intel针对新处理器的parallel Studio XE套件,涵盖计算需要的MKL IPP DAAL ICC编译器等工具,能无缝安装进入VS,AS,eclipse,Xcode等多个平台的IDE,反观AMD,出个AOCC,厉害就厉害在只能在Linux上用,而且参考资料少
而且Intel尽管被嘲讽icelake看不到在哪,但是AIDA64的更新页面一打开,你会发现ICL将会提供用于使用256bit向量加速的AES指令集VAES已经被AIDA64性能测试进行优化了,cascadelake的优化也存在了,而已经被AMD发布的Zen2,看不到优化迹象,甚至sisoftware也提供了对ICL VAES的支持,
你以为是跑分软件故意优化Intel不优化AMD?打开ICC编译器的属性选项,你会发现未来架构的处理器都在优化范围内,AMD推出AOCC For ryzen甚至要等到zen上市以后
对比之下,AMD属于活该优化不好,当然日常中的低能,无非就是AMD游戏性能不好,这主要是游戏对内存延迟的要求,对主频的要求高,至于多线程优化?你可以这么理解,等什么时候游戏能支持足够多线程的并行计算了,AVX512可能也在游戏里跑了,到时低能不低能和跑分有什么关系?