【问题标题】:ARMv8 backward compatibility with ARMv7 (Snapdragon 820 vs Cortex-A15)ARMv8 向后兼容 ARMv7(Snapdragon 820 与 Cortex-A15)
【发布时间】:2017-08-15 18:34:57
【问题描述】:

我看到 ARMv8 只是 ARMv7 架构的扩展,所有在 ARMv7 上编译的代码都应该在 ARMv8 上运行。我对 ARMv8 到 ARMv7 的向后兼容性感兴趣。在 ARMv8 上编译的代码会在 ARMv7 上运行吗?

我有一个特别感兴趣的案例:我想在Nvidia Jetson TK1(NVIDIA Cortex-A15 CPU)上运行为OnePlus 3 smartphone(Qualcomm MSM8996 Snapdragon 820 CPU)编译的comma.ai's Openpilot visiond binary。有远见的人会在 Jetson 上运行吗?

编辑:可能存在比 CPU 兼容性更多的问题,因为 Visiond 可能在该手机上大量使用 GPU。可能取决于他们是使用一些标准的并行化方式(OpenCL、NEON 等)还是有一些针对 Snapdragons GPU 的自定义代码。即使使用 OpenCL,在不同硬件上兼容的机会也可能很低。

【问题讨论】:

  • 如果您的二进制文件是为 ARMv8 编译的,它将无法在 ARMv7 上运行。寄存器模型和指令集发生了变化。 ARMv8 处理器可以运行 ARMv7 代码,但需要专门在 ARMv7 模式下运行。您不能混合使用这两种类型的代码。
  • @BitBank ARMv8 不代表 AArch64。 ARMv8 AArch32 确实添加了新指令,但没有添加新的应用程序级状态,甚至没有添加新的 ABI。针对 AArch64 的程序(仅在 ARMv8 中可用)不会在 ARMv7 实现上本地运行;使用新的 ARMv8 AArch32 指令的程序也不会在 ARMv7 实现上本地运行。也可能有一个不支持 AArch32 的 ARMv8 AArch64 实现,这样的 ARMv8 实现将无法原生运行 AArch32 代码。
  • ARMv8 和 ARMv7 是完全不兼容的指令集。许多/大多数 ARMv8 内核具有 ARMv7 兼容模式(如文档所述,有些没有但不知道我是否见过其中的任何一个)。因此,您声明在 armv7 上编译的所有代码都可以在 aarch32 模式下很好地在 armv8 上运行,但那是 armv7 模式而不是 armv8 模式。 armv8 aarch64 不会在 armv7 上运行,不会。至于在两个不同处理器之间运行的 armv7 代码,请查看 raspberry pi 以获得答案。是的...
  • 您可以构建一个 armv7 项目并在 armv7 处理器和 armv8 上以 aarch32(armv7 兼容)模式运行它。
  • 99% 的可移植性问题与指令集无关,但指令集是否匹配并不重要。正如您的编辑所示,您可能开始理解了。

标签: arm cpu-architecture backwards-compatibility binary-compatibility armv8


【解决方案1】:

我相信 aarch32 用户空间与 ARMv7 完全或非常高度向后兼容,即为 ARMv7 编译的用户空间程序应该只能在 AArch32 中工作,但我在 ARM 手册中找不到准确的引用。

aarch32 确实在 ARMv7 上添加了新指令,但是,它们中的大多数似乎是 ARMv8 添加的功能,设计人员决定在 aarch32 上公开。因此,aarch32 与 ARMv7 不向前兼容,即为 aarch32 编译的程序可能无法在 ARMv7 上运行。

我不确定系统空间。另见:Does ARMv8 AArch32 mode has backward compatible with armv4 , armv5 or armv6?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-20
    相关资源
    最近更新 更多