1

char値の配列をNEONレジスタにロードし、それらを16ビットまたは32ビット整数値として処理しようとしています。だからこのようなもの...

void SubVector(short* c, const unsigned char* a, const unsigned char* b, int n)
{
    for(int i = 0; i < n; i++)
    {
        c[i] = (short)a[i] - (short)b[i];
    }
}

データの読み込み方法がわかりません。8ビットデータをレーンにロードしてから、レジスタをショートとして再解釈する必要がありますか?または、ロードして変換しますか?最速の方法は何でしょうか?

NEON組み込み関数を使用してこれを行う方法の例はありますか?

ありがとう!

4

1 に答える 1

6

NEON には、値を 8 ビットから 16 ビット、16 ビットから 32 ビット、または 32 ビットから 64 ビットに拡張できる加算および減算命令があります。次のように一度に 8 つ実行できます。

uint8x8_t u88_a, u88_b;
uint16x8_t u168_diff;

u88_a = vld1_u8(a); // load 8 unsigned chars from a[]
u88_b = vld1_u8(b); // load 8 unsigned chars from b[]
u168_diff = vsubl_u8(u88_a, u88_b); // calculate the difference and widen to 16-bits
于 2012-01-27T17:51:15.983 に答える