SSE 整数 2^n 的 2 次方,对于没有 AVX2 的 32 位整数
SSE integer 2^n powers of 2 for 32-bit integers without AVX2
我找不到用于2^n
计算 32 位整数向量__m128i
的 SSE 指令。
是否有执行以下伪代码的指令或函数?
__m128i power_of_two(__m128i b) {
__m128 r;
for (int i = 0; i < 4; i++)
r[i] = 1 << b[i];
return r;
}
_mm_sll_epi32
指令仅计算r[i] = a[i] << b[0]
。
AVX2 之前没有一条指令,但即使只有 SSE2,也有一个技巧,它滥用浮点格式,通过生成具有整数算术的指数字段,然后将其从浮点数转换为整数来生成 2 的幂。可能有更快的选择。
__m128i power_of_two(__m128i b) {
__m128i exp = _mm_add_epi32(b, _mm_set1_epi32(127));
__m128 f = _mm_castsi128_ps(_mm_slli_epi32(exp, 23));
return _mm_cvtps_epi32(f);
}
相关文章:
- 如何反转整数参数包
- enum是C++中的宏变量还是整数变量
- 努力将整数转换为链表。不知道我在这里做错了什么
- 整数不会重复超过随机数
- 在C++中手动调整数组大小
- 检查输入是否不是整数或数字
- C++使用整数的压缩数组初始化对象
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 通过套接字[TCP]传输数据 如何在C / C ++中打包多个整数并使用send() recv()传输数据
- 如何只允许用户输入正整数
- 如何在c++中从文本文件中逐行读取整数
- C++:如何循环通过向量中的整数元素
- 我可以信任表示整数的浮点或双精度来保持精度吗
- 序列化,没有库的整数,得到奇怪的结果
- 在一定长度后从数组中打印时缺少整数
- AVX2 整数乘以有符号 8 位元素,产生有符号 16 位结果?
- SSE 整数 2^n 的 2 次方,对于没有 AVX2 的 32 位整数
- 如何在AVX2中从32位转换为16位未签名的整数
- 紧凑的AVX2寄存器,因此选择的整数是连续的,根据掩码