0

在上下文切换时,Android 将所有 ARM 通用寄存器保存在堆栈中并在之后恢复。

Android OS 是否将 NEON 寄存器存储在堆栈上?

如果没有,如何在多线程和多任务环境中安全使用 NEON?

4

2 回答 2

2

如果内核是在支持 NEON/VFP 的情况下构建的,那么它确实会保留任务的 NEON 状态以及其余任务作为上下文切换的一部分(前提是该任务实际上已经事先接触过 NEON/VFP,所以有一些状态需要保存)。

如果内核不支持 NEON/VFP,那么正如您猜想的那样,根本就没有安全的使用方法——任何任务都可以随意破坏任何其他任务,因为它们都将共享相同的寄存器。幸运的是,这个问题在实践中并不存在,因为不了解 NEON 的内核也不会首先启用对硬件的访问。在这种情况下,任何 NEON 指令都将被视为未定义,并酌情将信号发送回任务。

有大量带有 NEON 代码的 Android 应用程序这一事实应该暗示这些配置中的哪些配置与此处相关;)

于 2015-06-25T18:15:08.467 回答
0

如果您能够在 Android 中使用 Neon 指令,则意味着您的内核已启用 VFP 并将负责切换部分(如果内核未启用 Neon/VFP,您将获得指令中止)。此外,ARM VFP 和 NEON 共享同一组寄存器。因此,您的上下文很可能会被保存恢复。一些操作系统具有通过采用惰性切换技术来减少切换时间的智能,但寄存器将保持无损坏

于 2015-06-26T05:02:30.227 回答