转载知乎一个关于X86和ARM的讨论。
ARM的低功耗的一个原因是减少了硬件层面上对cache的一致性的保护,这样可以节省晶体管数量。很多人把晶体管数量当做低功耗的原因,其实是弄错了,晶体管数量少是结果,原因是ARM精简了很多设计(或者,叫偷工减料)里面的"Y"越多,意味着
编写软件的时候需要的额外的指令就越多,这些指令就是要手工维护内存数据一致性的。对于x86的32和64位架构来说,reorder的动作最少,所以在Intel和AMD的CPU上,编写操作系统编写驱动最容易,而
对于ARM来说,需要大量的额外指令去刷新和同步cache,这对于软件来说非常不友好,也造成了额外的开销。一个典型的例子就是,对于DMA操作来说,x86架构对于细节都做了隐藏,而ARM则需要额外指令通知硬件做刷新,否则数据就可能不一致,这对于IO操作来说非常不友好。因为底层硬件设计就是这样的,除非把ARM推倒重来。网上的很多跑分软件并不实际做IO操作,单纯比较CPU的算力是没意义的,一个正常的软件,都需要给外设交换数据,这方面ARM对于x86而言,性能上没有优势。单纯的比较单核的算力或者IPC毫无意义,普通用户不是拿CPU来搞科学计算的,绝大多数用户的应用都是有大量IO操作的,IO接口的设计才会直接影响到用户体验,道理就类似于:升级硬盘到SSD远比升级CPU效果更明显。
作者:北极
链接:
https://www.zhihu.com/question/356734743/answer/905462604
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。