1

次元(10-39)の点から配列までの距離の多くのインスタンスを計算しています。Android 4.0以降、特にGalaxy S3の場合は、できるだけ速く実行したいと思います。ハードウェアFPUは動作していますが、ベクトル化とネオンを使用すると速度を上げることができるとどこかで聞いたことがあります。このAndroidビルドシステム、NEONおよび非NEONビルドのような質問は、私に簡単な答えを与えません。

S3でこのベクトル化を使用できる最も簡単な方法は、この種の計算の速度向上(ndimポイントからndimベクトルまで)を示す例です。

ループコードは次のとおりです。

// 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];
    }
}
4

2 に答える 2

1

CPU からベクトル化を取得するには 2 つのオプションがあります (ARM に焦点を当てています)。コンパイラがあなたを助けるか、あなたが自分でそれをします。

アセンブリを記述するか、組み込み関数を使用することにより、ARM CPU でベクトル命令 (NEON)を利用できます。

コンパイラからヘルプを得ることができますが、ベクトル化可能なコードを作成する必要があります。これを取得する方法の例については、これを参照してください

于 2013-03-07T06:34:35.113 に答える