假设有一个__m128
变量包含4个SP值,并且您想要最小值,是否有任何可用的内部函数,或者除了值之间的天真线性比较之外的任何其他函数?
正确知道我的解决方案如下(假设输入__m128
变量是x
):
x = _mm_min_ps(x, (__m128)_mm_srli_si128((__m128i)x, 4));
min = _mm_min_ss(x, (__m128)_mm_srli_si128((__m128i)x, 8))[0];
Run Code Online (Sandbox Code Playgroud)
这是非常可怕的,但它的工作(顺便说一下,有什么类似的_mm_srli_si128
但是__m128
类型?)
没有单一指令/内在但你可以用两个shuffle和两个分钟来做:
__m128 _mm_hmin_ps(__m128 v)
{
v = _mm_min_ps(v, _mm_shuffle_ps(v, v, _MM_SHUFFLE(2, 1, 0, 3)));
v = _mm_min_ps(v, _mm_shuffle_ps(v, v, _MM_SHUFFLE(1, 0, 3, 2)));
return v;
}
Run Code Online (Sandbox Code Playgroud)
输出向量将包含输入向量中所有元素的min,在整个输出向量中复制.
归档时间: |
|
查看次数: |
768 次 |
最近记录: |