Android:为啥快照和gpu是互斥的?

Posted

技术标签:

【中文标题】Android:为啥快照和gpu是互斥的?【英文标题】:Android: why snapshots and gpu are mutually exclusive?Android:为什么快照和gpu是互斥的? 【发布时间】:2012-07-21 23:02:56 【问题描述】:

我尝试对模拟器使用快照和 gpu 支持。但是模拟器拒绝启动:

模拟器:错误:快照和 gpu 在此是互斥的 观点。请关闭其中一个,然后重新启动模拟器。

我想知道这些限制的原因是什么?在我看来,这不是合乎逻辑的冲突。

【问题讨论】:

是的,这似乎是一个奇怪的限制 【参考方案1】:

android 模拟器基于 QEMU,它必须模拟各种硬件设备,就像在真手机上运行的 Android 一样。具体来说,它模拟了一个名为“金鱼”的神话电话。

保存快照时,设备 RAM 必须保存在快照中。但是,这不仅仅意味着主 RAM - 它还指代手机硬件的所有其他复杂位 - 例如 CPU 寄存器、实时时钟硬件的状态以及每隔一个的任何/所有寄存器此虚拟手机中的硬件。

如果您没有启用 GPU,那么图形硬件状态相当简单 - 它是一个帧缓冲区,以及一些代表 x 维度、y 维度和像素格式的寄存器。

但是,如果您已启用 GPU 直通,则保存该硬件的状态会复杂得多。 QEMU 必须保存每个纹理的状态、设置的相机、几何形状以及保存在 GPU 中的其他更多内容。流向 GPU 的命令流水线也必须在任意点中断,并记录这些命令的执行状态(很难,因为存在多级流水线,并且某些指令可能已部分执行)。

此外,qemu 实际上可能很难获取此信息,因为 qemu 只是将其传递给主机 GPU。 qemu 无法准确地询问主机 GPU 驱动程序执行了什么以及没有执行什么。至少,这需要主机操作系统和 GPU 驱动程序的支持,甚至可能需要更改 GPU 管道以简化事情,以便管道可以在任意点停止和重新启动。

【讨论】:

这是有道理的。最后我可以将此问题标记为已解决。谢谢! 奇怪的是 ios 模拟器启动速度如此之快,图形速度也很快,这个 android 的东西是如此落后。 @Adian,我仍然不相信这是不可能的。由于要求模拟器立即关闭,因此它不需要“在任意点中断”。如果模拟器需要 10 秒或更长时间才能关闭,没有人会抱怨,因此它实际上可以等待所有东西(管道和诸如此类)清理、存储它们,然后关闭。恢复时,他可以简单地从接近关机时间点的干净保存状态非常恢复。 @mskw 不仅仅是实现它们。 iOS有模拟器,安卓有模拟器,其实差别很大。 ***.com/questions/1584617/…【参考方案2】:

首先检查您的 Android 模拟器快照是否启用? (如果选中则将其设置为未选中) 转到 Eclipse 中的 AVD->选择您的模拟器->编辑->启用快照->取消选中它。 重新启动将正常运行。 我也是为同样的问题做的。

【讨论】:

感谢您的回答。但我知道它可以通过这种方式解决。但我想了解这个原因。

以上是关于Android:为啥快照和gpu是互斥的?的主要内容,如果未能解决你的问题,请参考以下文章

为啥互斥锁不需要互斥锁(而互斥锁需要互斥锁......)

Xamarin Android Fragment ZXing - ClassCastException

sql问题,首先是快照,为啥不能恢复,然后是如何删除触发器(我指的是用命令),再就是游标和索引有何区

为啥tensorflow训练用GPU比CPU更慢了

数据库的快照隔离级别(Snapshot Isolation)

为啥 asp-route 和 asp-action 互斥?