`vmovdqu8` / 16 / 32 / 64 指令和 `_mm_loadu_epi8` / 16 / 32 / 64 内在函数目的

问题描述 投票:0回答:1

可以通过

movdqu
获得
_mm_loadu_si128
,需要 SSE2。

通过 AVX512BW + AVX512VL 或 AVX512F + AVX512VL 提供

vmovdqu8
(16, 32, 64) 可用。
如果后者显然也这样做,那么他们的目的是什么?

如果目的是掩码,那么为什么不掩码

_mm_loadu_epi8

暴露为内在函数?

    

x86 intrinsics avx512
1个回答
0
投票

这些指令的存在只是为了支持屏蔽操作,因此非屏蔽内在函数通常是无用的。它可能已被定义为正交性
  • gcc 选择不公开至少一部分无用的内在函数;请参阅
  • 错误:'_mm512_loadu_epi64' 未在此范围内声明
  • 为编译器标记 AVX512 代码路径可能很有用,这些编译器允许使用任何内在函数,而不需要编译器选项中的 CPU 功能或其他功能,但实际上这种方式没有用。
  • 在英特尔编译器中,它不是这样工作的,而是有
      _mm_loadu_epi8
    • 来标记代码路径
      在 MSVC 中它并不总是有效,请参阅 
    • MSVC 如何避免混合 SSE 和 AVX?
    • 特别是,这在 MSVC 中对于有问题的
    • _allow_cpu_features
    • 不起作用,请参阅
      https://godbolt.org/z/9aaha1h8r
    到目前为止,这些未掩盖的内在函数的存在只会造成混乱,不要使用它们
© www.soinside.com 2019 - 2024. All rights reserved.