【问题标题】:Splitting __m256 into two __m128 registers将 __m256 拆分为两个 __m128 寄存器
【发布时间】:2021-03-08 20:38:26
【问题描述】:

我有一个 __m256 包含 8 个浮点数,我想将其拆分为 2 个 __m128,一个包含前四个浮点数,另一个包含最后四个浮点数。这可能吗?

谢谢

【问题讨论】:

  • 是的,有可能。您使用什么参考资料来了解 AVX 编程?
  • 我正在查看英特尔关于 software.intel.com/sites/landingpage/IntrinsicsGuide 的文档。我想加载前 128 位,然后移位然后再次加载前 128 位,但不幸的是这不起作用:(
  • 例如,仅选择 AVX 指令,然后搜索 __m128d,会得到一个少于 20 条指令的列表,很容易检查那些名称可能相似的指令。

标签: c intrinsics avx avx2


【解决方案1】:

_mm256_extractf128_ps 可用于上下两部分。对于上半部分,这是提取它的最佳方法。但是,对于一些稍旧的 MSVC 版本,内在总是会产生相应的指令,即使索引为零(在这种情况下,实际上 没有指令 是必需的)。所以要提取下半部分,应该首选_mm256_castps256_ps128

【讨论】:

    猜你喜欢
    • 2012-06-22
    • 2014-12-23
    • 2017-07-18
    • 2012-10-22
    • 1970-01-01
    • 2020-02-14
    • 1970-01-01
    • 1970-01-01
    • 2011-01-14
    相关资源
    最近更新 更多