确定Renderscript是否在CPU / GPU上运行&线程数

问题描述 投票:5回答:3

我似乎找不到任何有关如何检查RenderScript是否实际上在并行化代码的文档。我想知道是否正在使用CPU或GPU以及分派的线程数。

我发现的唯一错误是此错误报告:http://code.google.com/p/android/issues/detail?id=28662

作者提到,将rsForEach放入脚本中会导致它通过指向以下调试输出而被序列化:

01-02 00:21:59.960: D/RenderScript(1256): = 0  0x0
01-02 00:21:59.976: D/RenderScript(1256): = 1  0x1

我尝试在LogCat中搜索相似的字符串,但是我找不到匹配的字符串。

有什么想法吗?

更新:实际上,我似乎已经知道了。似乎我的LogCat foo不够好。我通过应用程序信息过滤了调试输出,并找到了这样的一行:

02-26 22:30:05.657: V/RenderScript(26113): rsContextCreate dev=0x5cec0458
02-26 22:30:05.735: V/RenderScript(26113): 0x5d9f63b8 Launching thread(s), CPUs 2
renderscript
3个回答
2
投票

这只会告诉您可以使用多少个CPU。这不会指示正在使用多少线程或正在使用哪个处理器。通过设计,RS避免公开此信息

通常,除非您调用rsg *或time函数之类的“串行”函数,否则RS将使用所有可用的CPU内核。至于什么条件会导致脚本从GPU插入CPU,这取决于每个供应商GPU的能力。

您引用的错误已在4.1中修复


2
投票

当我使用RS时遇到了相同的问题。我使用Nexus 5进行测试。我发现RS的初始启动是使用CPU而不是GPU,这已通过Trepn 5.0s应用程序进行了验证。后来我发现Nexus-5 GPU不支持双精度(Link to Adreno 330),因此默认情况下会将其移植到CPU。为了克服这个问题,我使用了rs文件顶部的#pragma rs_fp_relaxed以及标头声明。

因此,如果您严格要将其移植到GPU上,那可能是找出您的移动GPU规格并尝试上述技巧并使用Trepn 5.0s或同等应用程序测量GPU利用率的最佳方法。到目前为止,RS并未公开线程级别的详细信息,但是在实现过程中,我们可以利用根-内核的x和y参数作为线程索引。


0
投票

调试属性

RenderScript包括debug.rs.default-CPU-driver和debug.rs.script调试属性。

debug.rs.default-CPU-driver

值= 0或1

默认值= 0

如果设置为1,则RenderScript Compute的Android开放源代码项目(AOSP)实现用来。这不使用任何GPU功能。

debug.rs.script

值= 0或1

默认值= 0

如果设置为1,则会在logcat中打印其他诊断信息。这些信息包括内核在GPU或应用程序处理器上运行的实际设备。如果内核无法在GPU上运行,则会提供更多详细信息,说明原因。对于例:[RS-DIAG]不支持在GPU上进行递归调用

Arm® Mali™ RenderScript Best Practices_pdf

© www.soinside.com 2019 - 2024. All rights reserved.