-1

这是一个我不太了解的主题,我希望能更好地理解这个主题。

我正在阅读有关 Apple 向 Apple Silicon 过渡的文章,在某些时候我读到“Apple 将发布 Rosetta 2,这是一个让您可以在新 Mac 上运行旧应用程序的仿真层。”

据我所知,应用程序是用高级语言(例如 C/C++、Java 等)编写的。然后编译器(假设解释器暂时不存在)读取该代码并将其转换为汇编代码。然后汇编器将汇编代码转换为处理器可读的机器代码。

我的问题是,假设以上是正确的,为什么需要 Rosetta 2,因为 CPU 应该将高级代码转换为可读的机器代码?为什么开发人员需要“优化”(或关心他们的应用程序在哪个处理器上运行)他们的应用程序,因为它们(大部分)是用高级语言(处理器可以编译)编写的?我不明白为什么程序员会关心 CPU 是否应该处理编译和汇编。

这个问题可能相当琐碎,但仅通过阅读有关编译器或 CPU 架构的信息,我无法找到我想要的东西。

4

1 回答 1

4

CPU应该将高级代码转换为可读的机器代码吗?

不,CPU 本身不会这样做,它是通过在 CPU 上运行的软件(JIT 或提前编译器)发生的。

对于提前编译器(例如普通的 C++ 实现),闭源软件只提供 x86 机器代码,而不是源代码。所以你不能自己重新编译它。开源软件通常可以通过重新编译轻松移植。

重写对于大多数应用来说是夸大其词,大多数只能重新编译

但是,如果您有自定义的 x86 特定代码,例如使用 SSE / AVX 内部函数或手写 asm 的手动矢量化 SIMD 循环,则必须将它们移植到 NEON / AArch64 SIMD。

于 2020-12-01T00:04:18.687 回答