【问题标题】:Differences between RenderScript and V8 Support LibraryRenderScript 和 V8 支持库的区别
【发布时间】:2017-10-26 18:03:36
【问题描述】:

在使用 V8 支持库和 Android 中默认的 RenderScript 运行时时,我注意到 Java 级别的相同 RenderScript 代码可以产生不同的结果。

例如,生成的图像存在细微差异,可能是由于某些内在函数的实现不同。

我还注意到支持库版本比原生版本“更加异步”。本机版本需要一些时间来处理“forEach()”方法,而支持库将在“forEach()”调用后几乎立即返回,并在调用“copyTo”或“finish()”时完成所有工作。

我还注意到,当调用“Allocation.createFromBitmap()”时,支持库将使用位图内存,而不是在 VM 外部分配额外空间,而原生版本总是会分配更多空间。我使用Qualcom's Trepn profiler得出了这个结论。

差异是否记录在某处?

【问题讨论】:

    标签: android android-support-library renderscript


    【解决方案1】:

    RenderScript 支持库与 CPU 路径中的原生 RenderScript 基本相同。

    虽然有几个不同之处:

    1. 支持库中不存在依赖于私有 Android API(非 NDK API)的某些功能。
    2. 内核 (.rs) 文件已针对支持库进行预编译,而本机 RenderScript 将在设备上进行 JIT 编译。
    3. 如果设备上的 Android 版本高于“renderscriptTargetApi”和“targetSdkVersion”,则支持库也可以在原生 RenderScript 路径中执行。

    内存使用和其他行为的差异可能来自设备上的 GPU 驱动程序。 GPU 可能需要使用指定的步幅/对齐方式将位图复制到 GPU 内存。

    【讨论】:

    • 你能更好地解释一下你的第三个陈述吗?如果设备的Android版本等于“renderscriptTargetApi”怎么办?如果我理解正确,高“targetSdkVersion”将导致使用库而不是原生 RenderScript 路径的相对较新的设备。
    • 你是对的。 RenderScript 既有框架 API(如 Allocation、Intrinsics 等),也有运行时 API (developer.android.com/guide/topics/renderscript/reference/…)。一般来说,renderscriptTargetApi 是提供所有需要的 RenderScript 运行时 API 的最小 API。 targetSdkVersion 是应用所针对的 Android 框架 API。支持库需要确保运行时部分和框架部分都可以在本机路径中运行。
    • 支持库是否使用 GPU 路径(如果可用)?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多