これに続くすべての組み込み関数では、入力ベクターが 2 つのパラメーターで制御されるデータ シャッフリング関数を通過します。
開始
オフセット
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 オフセット |
最終的な xbuf インデックス |
zbuf 開始 |
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 |