首页 文章

在Xeon Phi上操作双打面具

提问于
浏览
1

我正在使用内部函数对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 回答

  • 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类型 . 这似乎有效,但到目前为止我对这些方面的经验很少 .

相关问题