查看: 938|回复: 0
打印 上一主题 下一主题
收起左侧

为什么苹果A12的JS处理性能轻松秒杀PC级CPU?

[复制链接]

8

主题

37

帖子

136

积分

注册会员

Rank: 2

积分
136
跳转到指定楼层
楼主
发表于 2018-11-8 17:02:55 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
前一段时间Rails on Ruby创始人David Heinemeier Hansson(DHH)在Twitter上发了一篇推文,如下图,文中比对了苹果A12、其他手机CPU和Intel CPU对JavaScript处理速度的比对。可以看到苹果A12在JavaScript上的表现明显超过其他手机CPU,甚至超过了Intel的PC级CPU!DHH因此发问:为什么苹果A12在JS处理速度上这么快?


大神DHH竟然也有知识盲点啊!

ARMv8架构的演进
我们知道现在的手机CPU基本上是基于ARMv8架构,ARMv8架构是不停演进的,从最早的ARMv8.0,ARMv8.1,ARMv8.2,到目前市面上可以看到的最新的芯片版本ARMv8.3(当然现在还有ARMv8.4等在开发中甚至ARMv9,只是暂时未见有芯片产品出炉)。
目前高通,MTK和华为海思的手机CPU最高到ARMv8.2版本,具体如下图。而苹果A12则到了ARMv8.3!市面上最早的一款ARMv8.3产品,而且是迄今为止唯一的一款ARMv8.3产品。

ARMv8基本架构
上面介绍了基本的ARMv8背景,现在开始进入正题。回到DHH的问题,原因是ARMv8.3相对于之前的版本,多出了一条相对于JavaScript的指令FJCVTZS (AArch64) or VJCVT (AArch32),在这有必要再多啰嗦一句关于AArch64和AArch32. 他们是ARMv8有两种执行状态(Execution states),AArch64支持A64指令集(instruction set),而AArch32可以支持A32和T32指令集。苹果A12芯片支持A12指令集,因此我们以AArch64的FJCVTZS为例。

ARMv8.3 新增JavaScript指令
JavaScript对于数据的处理都是基于双精度浮点数据来进行,JS在进行bit-wise操作的时候,普通CPU需要把这个双精度浮点数据转换成32bit整形数据,同时检查这个转换后的数据是否真的是整形数据;这种场景在JS中还是相对比较常见的场景。
这就是那个JavaScript的奇葩规定:

ARMv8.3 spec中关于FJCVTZS指令的说明:

一般CPU是怎样处理上面的场景呢?利用JavaScript中规定的ToInt32函数,每个浏览器(FireFox、Chrome、IE和Safari)都会实现自己的ToInt32函数来完成转换功能。对此感兴趣的小伙伴,可以下载下FireFox的源代码下来看看。
显而易见,ToInt32这个函数需要多条指令才能完成,运行速度是比较慢的,而FJCVTZS指令则可以一条指令就可以搞定,将大大加速了JS处理性能。
回头说说其他加的CPU,高通、华为海思、联发科等一众都是采用的ARM公司的CPU,都还在ARMv8.2阶段,还没引入FJCVTZS 指令,三星虽然是自研的CPU但也还没有引入FJCVTZS指令,Intel还没有专门针对JS的指令,这样一对比,Apple A12 JS牛X性能就凸显出来了。
题外话
ARMv8.3在引入了JS浮点转换指令后,下面是国外一小伙的吐槽。相信代表了好多小伙伴的声音。


参考文献:
推荐阅读



关注微信公众号 半导体行业观察(ID:icbank),后台回复以下关键词获取更多相关内容
氮化镓 | 中美贸易 | 碳化硅 | 财报 | 被动元件 | 开源 | 射频 | 光刻机 | 展会

回复 投稿,看《如何成为“半导体行业观察”的一员 》

回复 搜索,还能轻松找到其他你感兴趣的文章!
关于摩尔精英
摩尔精英是领先的芯片设计加速器,重构半导体基础设施,让中国没有难做的芯片。主营业务包括“芯片设计服务、供应链运营服务、人才服务、企业服务”。覆盖半导体产业链1500多家芯片设计企业和50万工程师,掌握集成电路精准大数据。目前员工200人且快速增长中,在上海、硅谷、南京、北京、深圳、西安、成都、合肥、广州等地有分支机构和员工。

免责声明:本信息采集于互联网,只供模板效果浏览测试,如果内容侵犯了您的权益,请联系我们谢谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表