我似乎无法找到有关如何检查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
答案 0 :(得分:2)
这只会告诉您可以使用多少CPU。这不会指示正在使用多少线程或哪个处理器。通过设计RS避免暴露这些信息
通常,RS将使用所有可用的CPU内核,除非您调用“串行”功能,例如rsg *或时间函数。至于什么标准会导致脚本从GPU到CPU,这将取决于每个供应商GPU的能力。
您引用的错误已在4.1
中修复答案 1 :(得分:2)
当我与RS合作时,我遇到了同样的问题。我使用Nexus 5进行测试。我发现RS的初始启动使用CPU而不是使用GPU,这是使用Trepn 5.0s应用程序验证的。后来我发现Nexus-5 GPU不支持双精度(Link to Adreno 330),所以默认情况下它会将它移植到CPU上。为了解决这个问题,我使用了 #pragma rs_fp_relaxed 我的rs文件的顶部以及标头声明。
因此,如果您只想将其移植到GPU上,那么最好的方法是找出您的移动GPU规格并尝试使用Trepn 5.0或同等应用程序进行上述技巧并测量GPU利用率。到目前为止,RS并没有公开线程级细节,但在实现过程中我们可以利用root-Kernel的x和y参数作为线程索引。
答案 2 :(得分:1)
调试属性
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上进行递归调用