强制默认 CPU 实现时,RenderScript 加速 10 倍

2023-12-28

我已经在 RenderScript 中实现了 CNN,如上一个问题 https://stackoverflow.com/questions/37080673/how-to-do-correct-timing-of-android-renderscript-code-on-nvidia-shield这催生了这个。基本上,跑步时

adb shell setprop debug.rs.default-CPU-driver 1

Nvidia Shield 和 Nexus 7 的加速都提高了 10 倍。平均计算时间从大约 50 毫秒到 5 毫秒,测试应用程序从大约 50 fps 到 130 或更多。卷积算法有两种:

(1)移动内核
(2) 来自 RenderScriptIntrinsicsBLAS 的 im2col 和 GEMM。

两者都经历了类似的加速。问题是:为什么会发生这种情况?这种效果能否以可预测的方式从代码中实例化?是否有关于此的详细信息?

Edit:

根据下面的建议,我验证了 finish() 和 copyTo() 的使用,这里是该过程的细分。报告的加速是在调用 copyTo() 但没有 finish() 之后。取消注释 finish() 会增加大约 1 毫秒的时间。

double forwardTime = 0;
long t = System.currentTimeMillis();
//double t = SystemClock.elapsedRealtime(); // makes no difference
for (Layer a : layers) {
    blob = a.forward(blob);
}
mRS.finish();   // adds about 1ms to measured time 

blob.copyTo(outbuf);
forwardTime = System.currentTimeMillis() - t;​

也许这是不相关的,但在 NVIDIA Shield 上,我在启动时收到一条错误消息,当使用 adb shell setprop debug.rs.default-CPU-driver 1 运行时该消息消失

E/Renderscript: rsAssert failed: 0, in vendor/nvidia/tegra/compute/rs/driver/nv/rsdNvBcc.cpp

我现在将compileSdkVersion、minSdkVersion和targetSdkVersion设置为23,buildToolsVersion为“23.0.2”。平板电脑会自动更新到最新的 Android 版本。不确定我需要设置的最低目标,并且 ScriptIntrinsicsBLAS 仍然可用。

我在所有脚本中使用#pragma rs_fp_relaxed。分配全部使用默认标志。
这个问题 https://stackoverflow.com/questions/28750267/android-renderscript-performance-drop-in-sdk-21有类似的情况,但事实证明 OP 在每个计算轮次中创建新的 Script 对象。我没有做任何类似的事情,所有脚本和分配都是在初始化时创建的。


原始帖子已注释掉 mRS.finish() 。我想知道这里是否是这种情况。

为了正确地对 RenderScript 进行基准测试,我们应该等待挂起的异步操作完成。通常有两种方法可以做到这一点:

  1. Use RenderScript.finish() http://developer.android.com/reference/android/renderscript/RenderScript.html#finish()。使用时效果很好debug.rs.default-CPU-driver 1。它也适用于大多数 GPU 驱动程序。然而,某些 GPU 驱动程序确实将其视为 NOOP。
  2. Use Allocation.copyTo() http://developer.android.com/reference/android/renderscript/Allocation.html#copyTo(float%5B%5D)或其他类似的 API 来访问分配的数据,最好是最终输出分配。这实际上是一个技巧,但它适用于所有设备。请注意,copyTo 操作本身可能需要一些时间,请务必考虑到这一点。

这里的 5ms 看起来很可疑,但根据实际算法,它可能是真实的。但值得仔细检查当您添加 finish() 或 copyTo() 时情况是否仍然如此。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

强制默认 CPU 实现时,RenderScript 加速 10 倍 的相关文章

  • Kotlin 中的单例类

    我想知道如何在 Kotlin 中创建一个单例类 以便我的 Util 类在每次应用程序执行时仅实例化一次 但是 当我将 Java 类转换为 kotlin 时 生成了以下代码 它是否正确 companion object private var
  • 无法运行 android/sdk/build-tools/23.0.2/aapt

    最近在 Ubuntu 15 上安装了 Android Studio 1 0 1 由于某些原因是旧版本 我正在尝试创建一个新项目 每当我构建它时 我都会收到此错误 无法运行程序 home user Android Sdk build tool
  • 如何将视图动态添加到已在 xml 布局中声明的relativelayout?

    我宣布了一个RelativeLayout在 xml 布局文件中 现在我想添加Views从代码到现有布局 我添加了一个Button通过代码动态地更改为现有布局 如下所示 rLayout RelativeLayout findViewById
  • ViewPager 开关 FragmentPagerAdapter

    我有一个ViewPager这是由一个FragmentPagerAdapter 我想将第一个适配器更换为另外两个 问题是之前加载的所有页面 同时具有第一个适配器 仍然是旧的页面 我查看了源代码FragmentPagerAdapter并猜测问题
  • 在 CollapsingToolbarLayout 中设置 minHeight 没有任何效果

    我目前使用 CollapsingToolbarLayout 遇到的主要问题是 无论我尝试什么 工具栏的 minHeight 属性都没有任何效果 我想要的结果是这样的 CollapsingToolbarLayout 具有一定的展开高度和一定的
  • Onclick 不会在 CardView 上触发

    我有一个OnClickListener on a CardView 仅当我点击内容之外的区域 TextViews ImageViews 时 侦听器才起作用 我的内部也有一个线性布局CardView 我希望当我点击屏幕上的任意位置时它就能工作
  • 在 Android 中绘制一条带有弯曲边缘的线

    I am using canvas drawLine to draw some line in android but the lines are too sharp but i need a curved edges 这里的 1 是我所拥
  • 无法在 Android 模拟器上使用 ART

    我只是想在我的模拟器上尝试 android 4 4 的 ART 我所做的是创建一个模拟器 选择设备为 Nexus 7 目标为 Android 4 4 RAM 512 然后我启动模拟器并加载它 然后我进入开发者选项并选择运行时作为 ART 设
  • sqlite 插入表中 select * from

    我需要在 Android 应用程序中将数据从一个表移动到另一个表 我想使用以下sql insert into MYTABLE2 select id STATUS risposta DATETIME now data ins from MYT
  • java.lang.RuntimeException:release()后调用的方法

    If i am 不使用 相机 release in 表面被破坏 then 无法从另一个 Activity 再次启动 CameraActivity 简而言之 得到不幸的是应用程序已停止 错误 即使不释放相机 但如果我确实点击了 主页 按钮 来
  • Google Games API 需要 games_lite 函数

    我使用 Google Play 游戏服务 我从官方示例中获取了代码 尝试使用 API 27 和 API 17 所有功能仅在一个帐户 所有者 Google 开发者控制台 下有效 在任何其他帐户下均有效 不行 我明白了 E AndroidRun
  • 如何在 C++ 中对静态缓冲区执行字符串格式化?

    我正在处理一段对性能要求非常高的代码 我需要执行一些格式化的字符串操作 但我试图避免内存分配 甚至是内部库的内存分配 在过去 我会做类似以下的事情 假设是 C 11 constexpr int BUFFER SIZE 200 char bu
  • 膨胀类片段 InflateException 二进制 XML 文件时出错

    我正在使用 Material Design 和 NavigationDrawer 布局等设计我的第一个应用程序 但我遇到了一个问题 该应用程序非常简单 它只显示文本 并且基于 Android Studio 中提供的模板 尝试启动我的应用程序
  • 无法仅在控制台中启动 androidstudio

    你好 我的问题是下一个 我下载了Android Studio如果我去 路径 android studio bin 我执行studio sh 我收到以下错误 No JDK found Please validate either STUDIO
  • setKeyListener 将覆盖 setInputType 并更改键盘

    大家好 我在两个设备之间遇到问题 在实践中使用InputType和KeyListener我正在操纵一个EditText让它从数字键盘接收逗号和数字 有关更多背景信息 请检查我之前的question https stackoverflow c
  • Android 键盘清单未显示在设置中

    我正在制作我的第一个 Android 应用程序 我需要它作为键盘服务 据我所知 清单看起来不错 并且我有一个文件 WifiJoy java 在 com zwad3 wifijoy 包中 以及所有其他文件
  • Android:毫米或英寸尺寸的视图尺寸不正确

    我有一个布局高度为 10mm 的按钮 在大多数设备上看起来都是正确的 但在 Lg Optimus 2X 和 Motorola Defy 上 按钮的尺寸大约只有一半 我检索了这些设备上的 DisplayMetrics 信息 这是一个简短的概述
  • 我可以在 Android Market 上出售我的 SL4A 应用程序吗?

    Closed 这个问题是无关 help closed questions 目前不接受答案 我想使用 SL4A 在 Android 上使用 Python 开发一个应用程序 并且我想知道是否可以将其作为应用程序在 Android Market
  • 有什么方法可以禁用/覆盖 Galaxy Tab 4 上的多任务按钮吗? [复制]

    这个问题在这里已经有答案了 我们编写了一个工业控制应用程序 并随我们的制造产品预装在三星 Galaxy 平板电脑上 我们使用的平板电脑是运行 Honeycomb 的 Tab 10 但我们无法再获得足够的 OEM 平板电脑 因此我们改用运行
  • 首选项和操作栏中的开/关切换按钮 - 冰淇淋三明治风格

    我指的是 ICS 手机上默认 Android 设置应用程序中看到的蓝色开 关样式 也可以在这里看到 http android developers blogspot com 2012 02 android design v2 now wit

随机推荐