我正在编写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。
答案 0 :(得分:3)
对于此代码,您也不需要。 RS是一个管道模型,因此任何可能影响后一个命令结果的工作必须首先由驱动程序完成。
syncAll()用于同步不执行的内存空间。例如,将更改从脚本内存传播到图形内存。