2013-03-06 17 views
1

我正在計算從n維(10-39)點到數組的距離的很多實例。我希望Android 4.0+能夠儘可能快地運行,特別是Galaxy S3。 我已經得到了硬件FPU的工作,但聽說你可以用矢量化和霓虹燈加快速度。 這樣的問題Android build system, NEON and non-NEON builds如何不給我一個簡單的答案。在Android中使用浮點向量化

什麼是最簡單的方法,我可以在S3中使用這種矢量化的例子,顯示了這種計算的加速(n點到n點矢量的點距離)。

下面是循環代碼:

// go through each point in the vector 
for (bi=0; bi<sizeOfVect; bi++) { 
    r[bi] = 0.0; // initialise distance 

    //calculate distance in each dimension (d is 10-39 depending) 
    for (di=0; di<d; di++) { 
     rj[di] = s1[i*d+di] - b[bi*d+di]; 
      // s1 is the n dim point, b is the vector array 
     r[bi] += rj[di]*rj[di]; 
    } 
} 

回答

1

您有兩種方法可以從CPU獲取矢量化(側重於ARM);編譯器可以幫助你,或者你自己做。

通過編寫程序集或使用intrinsics,可以在ARM CPU中使用vector instructions (NEON)

你可以從編譯器獲得幫助,但是你必須寫可矢量化的代碼。有關如何得到此示例的示例,請參閱此so post

+0

謝謝,看起來像正確的方向。 – 2013-03-07 20:22:50

0

要使用GPU來爲你那裏執行計算是兩條路線:

  • NDK:您將使用Android原生開發工具包使用特定於該硬件的調用(NEON)在C++中創建代碼來加速算法。
  • Renderscript:您將使用的renderScript計算API來處理所有的數據,讓框架自動parallelise它爲您的CPU和GPU之間

我從來沒有對任何人的工作,但如果我不得不爲一個特定的應用程序的路線我會嘗試renderscript,因爲它是所有設備類型的解決方案的一個代碼(對於ICS及以上)