2016-07-31 25 views
1

在的renderScript我这样调用叠加计算和通信的renderScript

foo.forEach_bar(out_array); 

的参数和传送一个内核分配如下:

in_array.copyFromUnchecked(array); 

我工作的一个程序,我称之为多个不同的内核。是否有可能将内核的数据传输与前一个内核的计算重叠? (即,当GPU工作在先前的内核时,我们设法为下一个内核传输数据)

回答

0

当您在内核上使用分配时,可以使用一个内核的输出分配作为输入分配给另一个内核。

当您依次调用多个内核时,您不必担心它们“重叠”,因为它们不是“真正”的异步性。它们将一个接一个地执行,因此您可以重新使用先前的分配(例如,您用作内核的输出)作为新内核的输入。

“重叠”的概念并不完全正确:由于分配存储在RAM内存中,因此它们不会在那里的任何位置。这意味着另一个内核可以访问相同的内存分配,而不需要将其内容传送到别的地方。

参考:RenderScript: parallel computing on Android, the easy way

+0

有可能是由于移动GPU和非GPU存储器之间的缓冲区重叠。它并不总是完全共享。然而,真正的答案是,只要缓冲区不再被使用,计算/复制就会重叠(即,在您将内容读回到Java内存的同时,您不能在内核中写入分配复制到)。 –

+0

非常感谢Stephen,关于非共享架构的通知。你能举一个非共享体系结构的移动设备的例子吗? – cmaster11

+0

不幸的是,我不认为我被允许。抱歉。 –