首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Qualcomm SNPE阻止UI线程

Qualcomm SNPE阻止UI线程
EN

Stack Overflow用户
提问于 2018-03-21 12:30:26
回答 3查看 452关注 0票数 3

使用高通NeturalNetwork软件开发工具包。我可以运行SNPE SDK示例并更改为inception_v3模型,运行良好。

但是snpe会在execute()中阻塞UI线程;

我没办法阻止这一切。android用户将得到糟糕的用户体验。

我尝试过:低优先级线程、作业调度程序等

当我使用GPU执行snpe时,它总是阻塞UI。

如何配置SNPE,Android UI是高优先级,SNPE是低优先级,这样我们就可以快速得到结果,而不会阻塞UI

谢谢。

EN

回答 3

Stack Overflow用户

发布于 2018-05-25 22:24:47

GPU上的批量操作会阻止新帧的渲染。这个问题很难解决,实际上与SNPE没有任何关系,因为我们可以使用非SNPE实现(基于OpenCL的内部框架)重现这个问题。您可以简单地更改张量操作的位置来缓解此问题。例如,您可以在CPU上进行计算(例如: tensorflow mobile),并且UI可以正确呈现,同时速度慢得多,并且需要大量CPU。

可以通过设备上的开发人员选项来可视化我的解释。有关更多信息,请访问此链接:https://developer.android.com/studio/profile/inspect-gpu-rendering#profile_rendering。您将能够看到,几个“交换缓冲区”1操作可能需要很长的时间间隔。

最好的解决方案是用量化网络在DSP上进行计算,但在可用运算符和内存上有很多限制。

Android 8.1有可能通过NN-API抽象和GPU资源的OS级调度来解决这些问题,但我对Google不会有太高的期望。

顺便说一句,我有一个假设的方案,可以通过将批量操作分段来缓解这个问题。从理论上讲,如果工作线程在低于50ms的操作之间休眠20ms,以便UI线程能够正确呈现,那么用户体验应该是可以容忍的,因为FPS可以保持在15以上。我们将尝试这种方案,因为这种有缺陷的方案仍然应该比基于CPU的方案快得多。

票数 3
EN

Stack Overflow用户

发布于 2018-03-24 13:51:54

您应该能够使用AsyncTask在后台线程上运行推理。请参阅SNPE SDK中的'ClassifyImageTask‘以获取此示例。

票数 0
EN

Stack Overflow用户

发布于 2018-07-12 22:46:57

对于SNPE GPU运行时,您可以使用low execution提示,这会将SNPE设置为最低GPU优先级。

通过SNPEBuilder::setExecutionPriorityHint()设置ExecutionPriorityHint_t::Low

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49398221

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档