5

我似乎找不到任何关于如何检查 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
4

3 回答 3

2

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

一般来说,RS 将使用所有可用的 CPU 内核,除非您调用“串行”函数,例如 rsg* 或时间函数。至于什么标准会导致脚本从 GPU 推送到 CPU,这将取决于每个供应商 GPU 的能力。

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

于 2013-02-27T06:56:41.167 回答
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 参数作为线程索引。

于 2014-06-26T17:13:22.900 回答
1

调试属性

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

debug.rs.default-CPU 驱动程序

值 = 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 最佳实践_pdf

于 2020-05-27T11:04:00.067 回答