これに続くすべての組み込み関数では、入力ベクターが 2 つのパラメーターで制御されるデータ シャッフリング関数を通過します。
Start
オフセット
fpmul 関数の例で見てみます。
vector<float,8> fpmul(vector<float,32> xbuf, int xstart, unsigned int xoffs, vector<float,8> zbuf, int zstart, unsigned int zoffs)
xbuf、xstart、xoffs: 最初のバッファーとシャッフリング パラメーター
zbuf、zstart、zoffs: 2 つ目のバッファーおよびシャッフリング パラメーター
Start: バッファーの全レーンの開始オフセット
Offset: 追加でレーンに依存するバッファーのオフセット定義には、1 レーンあたり 4 ビットかかります。
次に例を示します。
vector<float,8> ret = fpmul(xbuf,2,0x210FEDCB,zbuf,7,0x76543210)
for (i = 0 ; i < 8 ; i++)
ret[i] = xbuf[xstart + xoffs[i]] * zbuf[zstart + zoffs[i]]
値はすべて 16 進数です。
ret |
xbuf |
xbuf |
最終的な |
zbuf |
zbuf |
最終的な |
|---|---|---|---|---|---|---|
0 |
2 |
B |
D |
7 |
0 |
7 |
1 |
2 |
C |
E |
7 |
1 |
8 |
2 |
2 |
D |
F |
7 |
2 |
9 |
3 |
2 |
E |
10 |
7 |
3 |
A |
4 |
2 |
F |
11 |
7 |
4 |
B |
5 |
2 |
0 |
2 |
7 |
5 |
C |
6 |
2 |
1 |
3 |
7 |
6 |
D |
7 |
2 |
2 |
4 |
7 |
7 |
E |