Renderscript rs.finish(),allocation.syncAll(),copyTo():等到内核执行完成

时间:2014-03-03 22:27:42

标签: android parallel-processing gpu sync renderscript

我正在编写android renderscript代码,它需要背对背内核调用(有时一个内核的输出成为其他内核的输入)。我还有一些全局指针,从Java层绑定到内存。每个内核都会更新这些全局指针并输出一些内容。我需要确保在kernel2开始执行之前完成kernel1的执行。

我查看了android renderscript文档,但无法理解syncAll(用法)和完成()。任何人都可以澄清如何实现这种行为吗?

由于

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。

1 个答案:

答案 0 :(得分:3)

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

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