从 C / JNI 调用 RenderScript
Calling RenderScript from C / JNI
我希望用更高效的东西替换 C atan2 函数。 RenderScript 确实提供 atan2,包括采用矢量的版本。
我找到的示例演示了从 Java 调用 RenderScript。是否可以从 C 代码调用 RS?举个例子就好了。
谢谢
它曾经是可能的,尽管 NDK 中的 RS 支持现在已经放弃了一段时间。它可能仍然是可能的,但即使是 NDK 样本也不再包含 RS 样本。从 Android 7 开始,您可以尝试使用 "Single Source RenderScript",描述为 here,这应该可以从 C/C++ 代码实现。
您可能会看到使用 RS 的效率提升是由于几个可能的原因(非常依赖于平台):
- RS 将对您的数据集进行并行操作。在某些情况下,您正在调用的函数(例如
atan2
)可能会并行化操作。
- 您的 RS 代码可能在协处理器(例如 GPU 或 DSP)上执行。
- RS 提供的内部函数和库函数针对平台进行了高度优化。再次以
atan2
为例,RS 核心中的函数可能比标准 C 库中的函数更优化,因为它可能使用协处理器,或者可能使用特定于体系结构的优化实现(汇编).
综上所述,在 RS space (Allocation
) 之间将数据移回非 RS 代码时,您的代码可能会受到 I/O 的影响。
我找到了两个例子;这是我要构建的 运行:
https://github.com/adhere/NDKCallRenderScriptDemo
我一直在搜索 C++ 的文档API,但没有找到。
我希望用更高效的东西替换 C atan2 函数。 RenderScript 确实提供 atan2,包括采用矢量的版本。
我找到的示例演示了从 Java 调用 RenderScript。是否可以从 C 代码调用 RS?举个例子就好了。
谢谢
它曾经是可能的,尽管 NDK 中的 RS 支持现在已经放弃了一段时间。它可能仍然是可能的,但即使是 NDK 样本也不再包含 RS 样本。从 Android 7 开始,您可以尝试使用 "Single Source RenderScript",描述为 here,这应该可以从 C/C++ 代码实现。
您可能会看到使用 RS 的效率提升是由于几个可能的原因(非常依赖于平台):
- RS 将对您的数据集进行并行操作。在某些情况下,您正在调用的函数(例如
atan2
)可能会并行化操作。 - 您的 RS 代码可能在协处理器(例如 GPU 或 DSP)上执行。
- RS 提供的内部函数和库函数针对平台进行了高度优化。再次以
atan2
为例,RS 核心中的函数可能比标准 C 库中的函数更优化,因为它可能使用协处理器,或者可能使用特定于体系结构的优化实现(汇编).
综上所述,在 RS space (Allocation
) 之间将数据移回非 RS 代码时,您的代码可能会受到 I/O 的影响。
我找到了两个例子;这是我要构建的 运行:
https://github.com/adhere/NDKCallRenderScriptDemo
我一直在搜索 C++ 的文档API,但没有找到。