2016-07-31 22 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

不幸的是,我不認爲我被允許。抱歉。 –