C simd _m128 晶圆厂

标签 c simd sse absolute-value

如何为 __m128 vector 制作 fabs() ?

我是否必须使用符号位将原始 vector 乘以 1.0f/-1.0f ?

没有找到任何指令集来执行此操作。

我不需要 __m256 或 512。我正在搜索 __m128 数据类型

最佳答案

使用准备好的常数来关闭符号位的单个 AND-NOT 就足够了:

#include <stdio.h>

#include <xmmintrin.h>


int main(void)
{
    static const __m128 MinusZero = { -0.f, -0.f, -0.f, -0.f };

    __m128 x = { +1, -2, +3, -4 };

    __m128 y = _mm_andnot_ps(MinusZero, x);

    printf("%g %g %g %g\n", y[0], y[1], y[2], y[3]);
}

输出:

1 2 3 4

关于C simd _m128 晶圆厂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76895133/

相关文章:

c++ - 为什么将使用过的变量转换为 void

c - SSE 指令优于普通指令的地方

计算质数 PThread

字符数组和字符串长度

c++ - SIMD 代码?

c++ - c=c+a*b 的 OpenMP 4 simd 矢量化

c++ - 从 __m128i 中查找最小值/最大值

c - sigkill 不会终止 C 程序

c - Valgrind 创建链表数组时出错(用于哈希表链接)

c++ - 使用可变范围时,循环未矢量化