android - GPGPU Android 模拟器 (Renderscript/OpenCL)

标签 android opencv android-emulator amd-processor

更具体地说,我想在 Android 模拟器中运行 OpenCL/Renderscript 代码,该模拟器实际上在我计算机的 GPU 而不是 CPU 上运行。不幸的是,我使用的是 AMD CPU 和 GPU。

我知道 AMD 通过 SDK 支持 OpenGL ES(并且几乎所有东西都支持 OpenCL),但就我在这方面的了解而言——我发现的关于模拟器的唯一 OpenCL/Renderscript 信息是它们要么根本不工作,或者,如果我有一个英特尔 CPU,我可以在模拟器中安装 OpenCL,但它只会使用 CPU(坦率地说,如果我的模拟器在幕后没有,我不会感到惊讶已经这样做了 - OpenCV 运行时没有发生任何事故,但 OpenCL-Z 表示不支持 OpenCL)。

有什么方法可以将命令从模拟器发送到我的操作系统并让它自动运行吗?我想出的唯一方法是保存和加载一个文本文件,考虑到我正在运行 2 个模拟器实例,这不太可能更快(或对我的硬盘驱动器有利)。

我发现官方模拟器支持 RenderScript,但说模拟器不适合我的用例,我强烈怀疑它是否会使用我的 GPU。

我目前正在使用 Memu,因为 Bluestacks 3 在运行 2 个实例时使用了更多资源,而第二个实例由于某种原因不能很好地与 adb 命令/root 一起工作 - 它认为它正在工作但它没有任何事物。如果在运行 2 个实例时有一个更快的模拟器,我相信它会有所帮助,但奇怪的是,比较它们既困难又耗时(尤其是当它们中的每一个都像“不,我是最快的 - 看看我的条形图!”大声笑)最终我认为我的问题是 OpenCV 没有获得 GPU 加速(因为它在我的手机上运行得更快)而不是模拟器的基本速度。

我启用了 AMD 的虚拟化功能(已通过 Leomoon 或 w/e 确认),并且它们已在 Memu 的管理器中启用。也许这已经在幕后运作了?无论哪种方式,一旦 OpenCV 的东西开始发挥作用,每个实例的仿真成本都会增加 10%(从 60% 增加到 80%+)

最佳答案

使用一种语言(如 Python)并通过 ADB 发送命令。 Python 可以连接到 OpenCL 和 OpenCV; ADB 可用于获取屏幕截图的帧缓冲区,或者 Python 可以仅捕获模拟器的窗口渲染。

或者,可以使用 SocketIO(在我的例子中是 Flask Socket IO 和 Javascript 的客户端套接字 IO)建立连接,它们可以通过这种方式进行通信。通过模拟器和真实设备上的浏览器确认。每个模拟器都有与您的 native 操作系统通信的端口。我最终选择不走这条路,因为它有点复杂(2 台服务器,不同的语言,不比 LAN 上的 ADB 好)但它是一个选择。 Java (iirc) 也可以很好地运行 SocketIO,对于许多熟悉该语言并希望在 Android 设备上本地运行某些东西的开发人员来说,这可能是一个不错的选择。

在 atm 和电话打字时感觉 body 不适,对于目前缺乏示例和帮助,我深表歉意。希望我能抽出时间来解决这个问题,但坦率地说,除了我目前的目标之外,这个用例很少,而且它一开始就非常小众。

关于android - GPGPU Android 模拟器 (Renderscript/OpenCL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48030092/

相关文章:

Android Lollipop 软键盘隐藏 DialogFragment 中的用户输入

android - fragment 替换事件?

java - 如何在 Nativescript 中使用接口(interface)类型参数调用 Java 方法(自定义类)

java - 使用 Android 扩展类 fragment 时出错

Android Studio 模拟器 : Unhandled exit 1d (Mac OS : Big Sur Beta)

android - gradle,设置库项目的默认资源

来自 RGB 阵列的 OpenCv 图像

python - 什么是.so文件的库和包含目录变量?

python - 在opencv SGBM中,当我使名为numDisparities的参数变大时,为什么视差图的左侧部分变暗?

android - 互联网在模拟器上不起作用