在Xeon Phi上操作双打面具

时间:2013-09-11 13:40:15

标签: intrinsics intel-mic xeon-phi

我正在使用内部函数对Xeon Phi进行条件计算。 我必须使用双值,所以我需要一个__mmask8。 只要我使用一些比较函数对我来说没有问题,但如果我想修改这些掩码,我会遇到一些类型的冲突。 documentation给了我很多函数来修改用于单精度的__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 chapter中的所有操作函数也是如此。

我也可以使用这些功能吗?

是否有类似“使用__mmask16的每一秒”的约定?

提前致谢

1 个答案:

答案 0 :(得分:2)

根据http://software.intel.com/en-us/articles/intel-xeon-phi-coprocessor-vector-microarchitecture

  

每个VPU有128个入口512位向量寄存器   线程,因此每个线程获得32个条目。这些是   硬分区。每个线程有8个16位掩码寄存器   这是矢量寄存器文件的一部分。掩码寄存器充当   16个元素的每个元素的过滤器,因此允许一个元素   控制16个32位元素中的哪一个在a期间处于活动状态   计算。 对于双精度,掩码位是最低8位。

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