1
我正在寫一個圖像處理應用程序在Android上,我試圖加快它使用NDK。我有以下的for循環:優化我的內部循環(ARM,安卓ndk)
int x, y, c, idx;
const int pitch3 = pitch * 3;
float adj, result;
...
// px, py, u, u_bar are all float arrays of size nx*ny*3
// theta, tau, denom are float constants
// idx >= pitch3
for(y=1;y<ny;++y)
{
for(x=1;x<nx;++x)
{
for(c=0;c<3;++c)
{
adj = -px[idx] - py[idx] + px[idx - 3] + py[idx - pitch3];
result = ((u[idx] - tau * adj) + tau * f[idx]) * denom;
u_bar[idx] = result + theta * (result - u[idx]);
u[idx] = result;
++idx;
}
}
}
我想知道是否有可能加快這一循環?
我在想,使用定點算術不會有太大的作用,除非真的是舊的android手機(我不打算瞄準)。會不會寫入彙編會有很大的改進?
編輯:我知道我可以使用SIMD/NEON指令,但他們不那麼常見,我認爲......
也許我錯過了一些東西,但你的計算似乎沒有使用任何循環變量,y,x或c。所以從這個意義上說,計算可以移到循環之外。 –
你正在爲armeabi或armeabi-v7a建設嗎?前者使用軟浮點運算,後者使用硬浮點運算,但限制您使用ARMv7 CPU的設備。 – fadden