2013-09-29 73 views
1

我想知道是否可以使用RenderScript引擎來優化算法。Android RenderScript使用不確定的元素

該算法對圖像進行迭代處理,直到滿足一些條件。處理所需的迭代次數之前無法知道。但是我只看到了RenderScript的例子,這個例子可以在一個定義好的具有N個元素的Allocation上工作(典型的例子是內核爲位圖中的每個像素執行)。

一種解決方案是創建Java「while」循環,並在每次迭代時調用RenderScript代碼(它只有一個元素,一個內核循環),並在算法結束時從java中檢查。這是高性能的嗎?我的意思是,我必須將位圖傳遞給RenderScript,這是否會導致整個副本的製作?在這種情況下,NDK不是更好的解決方案嗎?

這將是解決此問題的最佳高性能方法?

謝謝! 胡安·伊格納西奧

+0

Renderscript不用於優化算法,但是可以創建合適的一個運行性能。你提到迭代處理,但是你可以在Renderscript中做Mandelbrot這樣的事情,所以你可能想更詳細地解釋你想要完成的事情。 –

回答

2

你可以回到Java來進行每次迭代的流量控制,但這不是最好的,並且需要大量額外的東西來確保你不會阻塞UI線程和類似的東西。

這樣做的好方法是創建一個單線程RS函數(不是用__attribute((kernel))或類似的東西創建的),並使用rsForEach來產生每次迭代。當迭代完成時,rsForEach將返回,您可以通過全局腳本檢查終止條件,並在必要時啓動另一個迭代。這也將使開銷保持在最低限度,因爲你將在整個迭代過程的運行時間內處於RS環境中(更少的JNI轉換,更少的CPU核心的啓動/關閉轉換等等)。

+0

請注意,您只能將rsForEach()與給定腳本的「root()」內核一起使用。 –