コンテキストの切り替え時に、Android はすべての ARM 汎用レジスタをスタックに保存し、後で復元します。
Android OS は NEON レジスタをスタックに格納しますか?
そうでない場合、マルチスレッドおよびマルチタスク環境で NEON を安全に使用するにはどうすればよいですか?
コンテキストの切り替え時に、Android はすべての ARM 汎用レジスタをスタックに保存し、後で復元します。
Android OS は NEON レジスタをスタックに格納しますか?
そうでない場合、マルチスレッドおよびマルチタスク環境で NEON を安全に使用するにはどうすればよいですか?
カーネルが NEON/VFP サポートを使用して構築されている場合、コンテキスト スイッチの一部としてタスクの NEON 状態と残りのタスクが実際に保持されます (ただし、タスクが実際に事前に NEON/VFP に触れているため、いくつかの状態が存在する場合)。保存)。
カーネルが NEON/VFP をサポートしていない場合、ご想像のとおり、それを安全に使用する方法はまったくありません。すべてのタスクが同じレジスタを共有しているため、任意のタスクが他のタスクを自由に破壊する可能性があります。幸いなことに、NEON を認識しないカーネルはそもそもハードウェアへのアクセスを有効にしないため、この問題は実際には存在しません。その場合、すべての NEON 命令は未定義として扱われ、シグナルが必要に応じてタスクに送り返されます。
そこに NEON コードを含む大量の Android アプリケーションがあるという事実は、これらの構成のどれがここに関連しているかについてのヒントになるはずです ;)
Android で Neon 命令を使用できる場合、それはカーネルが VFP を有効にしており、スイッチング部分を処理していることを意味します (カーネルが Neon/VFP を有効にしていない場合は、命令が中止されます)。さらに、ARM VFP と NEON は同じレジスタ セットを共有します。したがって、おそらくコンテキストは保存され、復元されます。一部の OS は、レイジー スイッチング手法を採用してスイッチング時間を短縮するスマートな機能を備えていますが、レジスタは破損しないままです。