簡體   English   中英

_mm_set1_ps 和 _mm_set_ps1 有什么區別?

[英]What is the difference between _mm_set1_ps and _mm_set_ps1?

這些功能有什么區別嗎? 如果不是,為什么?

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

Intel Intrinsics Guide網站上的兩種描述是相同的。 謝謝你。

有零差異。 _mm_set1_ps是慣用的,使用它。

例如鐺的xmmintrin.h定義set_ps1來講set1_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)。

我只知道它,因為前幾天我在尋找可以執行嚴格別名安全廣播負載的內在函數時偶然發現了它,就像在 asm 中使用vpbroadcastd一樣。 (沒有一種可在任何地方都能高效編譯的可移植的;對內在函數的編譯器支持是一個混合包,當您嘗試做任何復雜的事情時會出現腦殘的悲觀和缺少內在函數。也許再過幾年_mm_loadu_si32(void*)到零擴展將至少得到廣泛支持..)/結束話題咆哮。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM