渲染脚本文件中的内核数
Number of kernels in a renderscript file
在 renderscript 中,内核必须在单独的 .rs
文件中定义,如下所示:
float __attribute__((kernel)) foo_1(uint32_t x) {
}
float __attribute__((kernel)) foo_2(uint32_t x) {
}
然后它必须在主 java 文件中使用,如下所示:
ScriptC_fileName tmp = new ScriptC_fileName(rs);
我想知道以下哪项是提高性能的最佳编程实践以及原因。
- 在同一
.rs
文件中定义所有内核。
- 为不同的内核使用单独的
.rs
文件。
这真的是偏好和架构的问题。关注点分离:如果 RS 功能不相关,那么您可能不想将其全部保存在一个 .rs
文件中。
当您创建 ScriptC
实例时,它会创建 Java 端对象并加载组件的本机/平台特定代码。因此,如果您将所有内容都放在一个 .rs
文件中,那么您可能正在加载当时不是 used/required 的内容。如此大的内存消耗和可能的 native/platform 资源消耗。
除了我已经描述过的更大的资源使用之外,它(通常)的处理性能应该没有重大影响。当然,这将取决于硬件和实现。如果由于加载了更多低级代码(在 DSP 或 GPU 上)而导致硬件细节对处理性能产生影响,那么这是一个特定于平台的问题。
在 renderscript 中,内核必须在单独的 .rs
文件中定义,如下所示:
float __attribute__((kernel)) foo_1(uint32_t x) {
}
float __attribute__((kernel)) foo_2(uint32_t x) {
}
然后它必须在主 java 文件中使用,如下所示:
ScriptC_fileName tmp = new ScriptC_fileName(rs);
我想知道以下哪项是提高性能的最佳编程实践以及原因。
- 在同一
.rs
文件中定义所有内核。 - 为不同的内核使用单独的
.rs
文件。
这真的是偏好和架构的问题。关注点分离:如果 RS 功能不相关,那么您可能不想将其全部保存在一个 .rs
文件中。
当您创建 ScriptC
实例时,它会创建 Java 端对象并加载组件的本机/平台特定代码。因此,如果您将所有内容都放在一个 .rs
文件中,那么您可能正在加载当时不是 used/required 的内容。如此大的内存消耗和可能的 native/platform 资源消耗。
除了我已经描述过的更大的资源使用之外,它(通常)的处理性能应该没有重大影响。当然,这将取决于硬件和实现。如果由于加载了更多低级代码(在 DSP 或 GPU 上)而导致硬件细节对处理性能产生影响,那么这是一个特定于平台的问题。