在SSE矢量M128中找到最大浮点
finding maximum float in sse vector m128
我找到了_m128i
的以下解决方案int horizontal_max_Vec4i(__m128i x) {
__m128i max1 = _mm_shuffle_epi32(x, _MM_SHUFFLE(0,0,3,2));
__m128i max2 = _mm_max_epi32(x,max1);
__m128i max3 = _mm_shuffle_epi32(max2, _MM_SHUFFLE(0,0,0,1));
__m128i max4 = _mm_max_epi32(max2,max3);
return _mm_cvtsi128_si32(max4);
}
返回M128的最大浮点的等效函数是什么?
(我可以使用任何版本的SSE和AVX)
感谢任何帮助
使用算法,您可以将其转换为Interins的单个尺寸浮点版本。并不是说这是最佳解决方案,而是这样的解决方案:
float horizontal_max_Vec4(__m128 x) {
__m128 max1 = _mm_shuffle_ps(x, x, _MM_SHUFFLE(0,0,3,2));
__m128 max2 = _mm_max_ps(x, max1);
__m128 max3 = _mm_shuffle_ps(max2, max2, _MM_SHUFFLE(0,0,0,1));
__m128 max4 = _mm_max_ps(max2, max3);
float result = _mm_cvtss_f32(max4);
return result;
}
您可以使用DirectXmath,MS在_M128上为您完成了所有事情。
相关文章:
- 分段故障(堆芯转储)矢量
- 为什么在popback()操作之后,它仍然打印完整的矢量
- 将二维矢量传递给类
- 读取文件并输入到矢量中
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 无法通过空白将文本文件行分隔为矢量
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- 正在将csv文件读取为双精度矢量
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 如何通过 getter 函数删除矢量的元素?
- 如何在C++中将数组转换为矢量指针
- SSE矢量操作在双型型上
- 在SSE矢量M128中找到最大浮点
- 三维矢量的SSE对齐
- 水平求和SSE无符号字节矢量的最快方法
- SIMD/SSE:如何检查所有矢量元素是否为非零
- 正在对齐SSE的模板矢量结构
- 将SSE矩阵矢量乘法代码转换为AVX
- 使用SSE进行矢量初始化
- 使用SSE和STL矢量计算平均值