Сохранение регистров ARM NEON при переключении контекста в Android

Во время переключения контекста Android сохраняет все общие регистры ARM в стеке и восстанавливает их после.

Хранит ли ОС Android регистры NEON в стеке?

Если нет, то как безопасно использовать NEON в многопоточной и многозадачной среде?

2 ответа

Решение

Если ядро ​​построено с поддержкой NEON/VFP, то оно действительно сохранит состояние NEON для задачи вместе с остальными как часть переключения контекста (при условии, что задача фактически коснулась NEON/VFP заранее, поэтому существует некоторое состояние для сохранить).

Если в ядре нет поддержки NEON/VFP, то, как вы догадываетесь, безопасного способа его использования просто не существует - любая задача может свободно повредить любую другую задачу, поскольку все они будут использовать одни и те же регистры. К счастью, такой проблемы не существует на практике, потому что ядро, которое не знает о NEON, также не будет разрешать доступ к оборудованию в первую очередь. В этом случае любые инструкции NEON будут рассматриваться как неопределенные, а сигналы отправляются обратно на задание в зависимости от ситуации.

Тот факт, что существует множество Android-приложений с NEON-кодом, должен указывать на то, какая из этих конфигураций здесь уместна;)

Если вы можете использовать инструкции Neon в Android, это означает, что ваше ядро ​​активировало VFP и позаботится о переключении (вы могли бы прервать выполнение инструкции, если бы ядро ​​не включило Neon/VFP). Более того, ARM VFP и NEON используют один и тот же набор регистров. Таким образом, по всей вероятности, ваш контекст будет восстановлен. В некоторых ОС есть хитрость, позволяющая сократить время переключения за счет использования ленивых методов переключения, но регистры останутся без повреждений

Другие вопросы по тегам