例如,对于输入ymm
向量x
和位索引i
,我希望输出向量只保留第i
位,其他都归零.
使用AVX512 k
寄存器,我可以编写以下内容,但AVX2及以下没有k
个寄存器,那么您认为最好的方法是什么?
__m512i m512i_maskBit(__m512i x, unsigned i) {
__mmask8 m = _cvtu32_mask8(1u << i / 64);
__m512i vm = _mm512_maskz_set1_epi64(m, 1ull << i % 64);
return _mm512_and_si512(x, vm);
}