我找不到确切的推文,但苹果工程师表示,英特尔x86 翻译的保留和发布操作要比标准英特尔x86快。
发布于 2020-11-15 08:34:28
Rosetta 2采用了动态优化的实时编译,例如甲骨文HotSpot JVM (以及大多数其他J9 / Eclipse )、微软.NET CLR、所有主流ECMAScript实现(GraalJS、V8、SpiderMonkey、JavaScriptCore)、PyPy、GraalPython、IronPython和Jython实现、Rubinius、IronRuby、JRuby、TruffleRuby和YARV实现等等。
由于动态优化器可以简单地检查当前的程序状态并观察程序的行为,因此不可能进行静态分析,例如停止问题的不可判定性或Rice定理,因此Rosetta 2动态优化器可以执行原始Swift或Objective编译器无法执行的优化。因此,对于某些类型的操作来说,代码可能更优化,因而速度更快,这并不令人惊讶。
你可能可以通过在英特尔Mac上运行从AMD64到AMD64编译的Rosetta 2的修改版本,或者在Apple上运行从AArm64编译到AArm64的修改版本,或者通过将Swift和Objective从提前编译的实现更改为JIT编译的实现来实现同样的目标。
动态语言社区(特别是Smalltalk和Lisp )早就知道,带有动态、推测和自适应优化的JIT编译可以产生很大的性能效益。(例如,实际上只是一个修改的Smalltalk,J9是由IBM的Smalltalk团队在Smalltalk VM的基础上构建的,V8是基于Smalltalk的(实际上与相同))。
但是在20世纪90年代末,知识也首次在C、C++和组装社区以及CPU社区中传播。英特尔和惠普正在研发一种名为IA-64的新CPU架构,这将取代惠普的PA体系结构以及英特尔的IA-32体系结构(至少在服务器和工作站上)。CPU总线主要与PA兼容,因此它可以作为惠普大型机的插入式替代,但当然,ISA是完全不同的。
因此,为了使客户从PA顺利过渡到IA-64,惠普开发了一个基于JIT编译的动态二进制翻译器,并进行了动态优化。他们想对这个翻译系统进行基准测试,但目前还没有任何IA-64芯片。然而,他们意识到,如果他们为翻译器构建了一个parse后端,他们仍然可以对其进行基准测试,因为它仍然会做同样的工作:解析parse二进制文件,分析它,优化,然后生成优化的机器代码,唯一的区别是生成的机器代码也是parse,而不是IA-64。
事实上,由于前端和后端是相同的,所以它们可以直接比较在PA-RISC中本地运行的代码和在完全相同的系统上在翻译器中运行的代码,这将使他们能够准确地测量翻译器的开销和速度。所以他们对此进行了测量,发现经济放缓是…造成的否定!换句话说,这是一种加速。
这是著名的迪纳摩项目.
因此,简而言之:动态优化可以执行静态优化无法执行的优化,因此至少可以相信该语句实际上是正确的。
发布于 2020-11-15 11:08:17
首先,M1处理器的速度似乎明显高于等效的Intel处理器,因此,在将Intel转换为ARM代码之后,release /Release将会运行得更快,除非翻译的代码更糟糕。
但这两种手术都被大量使用。苹果公司已经为他们编写了代码,所以他们很有可能不会使用通用翻译,但译者会识别代码,并将其翻译成最优的ARM代码。
在其他情况下也可能是如此;如果您的代码调用由Apple编写的低级代码,则该代码可能不会被翻译,而是直接替换为等效的优化ARM代码。如果你看看苹果从ARM处理器和英特尔处理器的设备中赚了多少钱,现有的ARM代码可能会比现有的英特尔代码更好。
很多库都是操作系统本身的一部分,比如标准C、C++、Objective和Swift库,所以它们根本不会被翻译,但是将使用原始的ARM库。
PS。今天,一些基准测试结果已经发布,将运行模拟x86代码的x86处理器与英特尔Mac进行比较-- M1处理器在单线程性能上优于任何基于英特尔的Mac。
https://softwareengineering.stackexchange.com/questions/418983
复制相似问题