_mm256_set1_epi64x
将一个long long型的数据重复四次写入一个__m256i的数据中。
参考链接:https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_set1_epi64x&expand=4174,5654,6158,5708,4071,6158,4071,4071,5315,5527,5315,3418,4962
_mm256_loadu_si256
从未对齐的内存地址加载整形向量。
具体来说,如:
__m256i _mm256_loadu_si256 (__m256i const * mem_addr);
返回的则是从地址addr开始的256bit。
参考链接:https://blog.youkuaiyun.com/just_sort/article/details/94393506
http://scc.ustc.edu.cn/zlsc/sugon/intel/compiler_c/main_cls/intref_cls/common/intref_avx_loadu_si256.htm
https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_loadu_si256&expand=4174,5654,6158,5708,4071,6158,4071,4071,5315,5527,5315,3418
_mm256_shuffle_epi8
功能:将一个256bit的数据a按照一定顺序(另一个256bit的数据b)重新排列。
文本解释:
extern __m256i _mm256_shuffle_epi8(__m256i a, __m256i b);
按第二个源操作数中的混洗控制掩码指定的那样,对源向量中有符号或无符号的8位整数执行混洗操作。以下是将a,b和r解释为无符号8位整数数组的伪代码:
for (i = 0; i < 16; i++){
if (b[i] & 0x80){
r[i] = 0;
}
else
{
r[i] = a[b[i] & 0x0F];
}
}
具体执行:
FOR j := 0 to 15
i := j*8
IF b[i+7] == 1
dst[i+7:i] := 0
ELSE
index[3:0