1

我正在使用内部函数对 Xeon Phi 进行条件计算。我必须使用双精度值,所以我需要一个 __mmask8。只要我使用一些比较函数,对我来说就没有问题,但是如果我想修改这些掩码,我会遇到一些类型冲突。如果文档为我提供了很多修改用于单精度的 __mmask16 的功能,则没有一个可用于双精度的功能。

我想做如下的事情:

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 位。

英特尔不提供任何用于在 __mmask8 类型上操作的内在函数;所有内在函数都用于 __mmask16。因此,我假设我们应该只使用 __mmask16 内部函数来操作 __mask8 类型。这似乎可行,但到目前为止我对这些的经验很少。

于 2013-09-19T20:22:02.927 回答