c - _mm_set1_ps 和 _mm_set_ps1 有什么区别?

标签 c sse intrinsics

这些功能有什么区别吗?如果不是,为什么?

__m128 __mm_set1_ps(float a)
__m128 __mm_set_ps1(float a)

Intel Intrinsics Guide上的两个描述是一样的网站。
谢谢你。

最佳答案

有零差异。 _mm_set1_ps是惯用的,使用它。

例如clang 的 xmmintrin.h 定义了 set_ps1set1_ps 方面:

static __inline__ __m128 __DEFAULT_FN_ATTRS
_mm_set_ps1(float __w)
{
    return _mm_set1_ps(__w);
}

历史猜测

我的猜测是英特尔在 SSE1 的早期还没有确定命名方案,而是切换到 _mm_set1_键入前进。但如果他们已经记录了 _mm_set_ps1 ,他们无法收回。

请注意,没有 _mm_set_epi321_mm_set_ep81 (幸运的是)!因此_mm_set1_ps是惯用的并且遵循与其他广播内在函数相同的模式,而 _mm_set_ps1是不寻常的,会让人类读者感到惊讶。有_mm_set_pd1_mm_load_pd1 ,不过,大概它们是同时引入的(使用 SSE2)。

我只知道它,因为前几天我在寻找可以执行严格别名安全广播负载的内在函数时偶然发现了它,就像您可以使用 vpbroadcastd 一样。在组装。 (没有一种可以在任何地方高效编译的可移植的;对内在函数的编译器支持是一个混合包,当您尝试做任何复杂的事情时,会出现脑残的悲观和缺少内在函数。也许再过几年 _mm_loadu_si32(void*) 到零扩展至少会得到广泛支持......)/结束话题咆哮。

关于c - _mm_set1_ps 和 _mm_set_ps1 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60922271/

相关文章:

c - 尝试安装 openmpi 时出现段错误

intel - 了解 Intel Intrinsics Guide 中的代码示例

cpu-architecture - 如何确定 SSE 预取指令大小?

visual-studio - 有没有办法强制 visual studio 从 SSE 内在函数生成对齐的指令?

c - 内函数,无法定义 (C)

c - C中struct的动态分配

c - getchar() 在尝试扫描输入时跳过第一个字符

performance - 为什么 GCC 和 Clang 不使用 cvtss2sd [内存]?

c - 在 __m256i vector 中水平累积运行总计(前缀总和)

c -/lib/x86_64-linux-gnu/libthread_db.so.1 文件不存在