1

組み込み関数を使用して、Xeon Phi で条件付き計算を行っています。double 値を使用する必要があるため、__mmask8 が必要です。いくつかの比較関数を使用する限り問題はありませんが、それらのマスクを変更したい場合、型の競合が発生します。ドキュメントには、単精度に使用される__mmask16を変更するための関数がたくさんありますが、倍精度に使用できる関数は 1 つもありません。

私は次のようなことをしたい:

int tmp = 0;
for(i = 0; i < 8; i++) { 
    tmp = index[i];
    tmp = tmp << 1;
}
__mmask8 something = _mm512_int2mask(tmp);

ドキュメントは、__mmask16 に対してのみ指定された関数を提供します。ドキュメントのVector Mask Intrinsic の章にあるすべての操作関数についても同様です。

それらの機能も使えますか?

「__mmask16 のすべてのビットを使用する」のような規則はありますか?

前もって感謝します

4

1 に答える 1

2

http://software.intel.com/en-us/articles/intel-xeon-phi-coprocessor-vector-microarchitectureによると

各 VPU には、スレッド間で分割された 128 エントリの 512 ビット ベクトル レジスタがあり、スレッドごとに 32 エントリを取得します。これらはハード パーティションです。ベクトル レジスタ ファイルの一部であるスレッドごとに 8 つの 16 ビット マスク レジスタがあります。マスク レジスタは、16 個の要素に対して要素ごとのフィルターとして機能するため、計算中に 16 個の 32 ビット要素のどれをアクティブにするかを制御できます。倍精度の場合、マスク ビットは下位 8 ビットです。

Intel は __mmask8 型を操作するための組み込み関数を提供していません。すべての組み込み関数は __mmask16 用です。したがって、__mask8 型の操作には __mmask16 組み込み関数のみを使用することが期待されると思います。これはうまくいくようですが、これまでのところ、これらの経験はほとんどありません。

于 2013-09-19T20:22:02.927 に答える