0

在渲染腳本中,我使用綁定指針遍歷大圖像。 問題在於數組訪問性能。Renderscript c風格指針使用性能問題

... 
for(int i=0; i < channels; i++) { 
    sum += (input[i*input_size]) * mulValue; 
} 
... 

例如,當input_size是12288它需要1.5秒來完成腳本,但是當input_size是12280花費〜0.5秒。

什麼會導致這樣的神祕行爲?

+0

檢查您是否無法訪問它。此外,更喜歡rsGetElementAt_ *函數來綁定指針。 – sakridge

+0

@sakridge陣列太大,但我沒有訪問它超出範圍。這可能是緩存的結果嗎? – Vardan95

+0

可能。也許這個大小會導致你的算法超過一個緩存級別。另一件事是更小的尺寸更加一致,這可能會導致更多的銀行衝突,但3倍的差異似乎過大。你可以嘗試一堆不同的尺寸? – sakridge

回答

1

瞭解您在RenderScript(或openCL)中編寫的內容的性能影響很複雜。

只需將它寫入RendersScript並不能保證性能。 當您的內存訪問跳來跳去時,您遇到緩存一致性問題的很多次。

通常最好將代碼構建爲一系列以緩存友好方式處理的內核。

對不起,如果這是模糊的。你的任務沒有足夠的細節。