【问题标题】:Renderscript rs.finish(), allocation.syncAll(), copyTo() : wait till kernel execution finishesRenderscript rs.finish(), allocation.syncAll(), copyTo() : 等待内核执行完成
【发布时间】:2014-04-05 05:09:18
【问题描述】:

我正在编写需要背靠背内核调用的 android 渲染脚本代码(有时一个内核的输出成为另一个内核的输入)。我还有一些全局指针,从 Java 层绑定到内存。每个内核都会更新这些全局指针并输出一些东西。在 kernel2 开始执行之前,我必须确保 kernel1 的执行完成。

我查看了 android renderscript 文档,但无法很好地理解 syncAll(Usage) 和 finish()。谁能澄清如何实现这种行为?

谢谢

mScript.forEach_kernel1(mColorImageAllocation, tempAlloc);

// make sure kernel1 finishes, from android rs doc, copyTo should block 
tempAlloc.copyTo(testOutputBitmap);

for (short i = 0; i < NUM_DIST; i++) {
            mScript.set_gCurrentDistanceIndex(i);
            mScript.forEach_kernel2(tempAlloc);    
        mRS.finish(); // wait till kernel2 finishes
}

在上面的例子中,在 kernel1 的输出中使用不同的全局参数调用同一个 kernel2。

【问题讨论】:

    标签: android parallel-processing gpu sync renderscript


    【解决方案1】:

    对于此代码,您也不需要。 RS 是一种管道模型,因此任何可能影响后续命令结果的工作都必须由驱动程序首先完成。

    syncAll() 用于同步内存空间而不是执行。例如,将更改从脚本内存传播到图形内存。

    【讨论】:

    猜你喜欢
    • 2016-02-21
    • 2015-09-16
    • 2023-03-07
    • 1970-01-01
    • 2014-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多