【问题标题】:Intel AVX : Why is there no 256-bits version of dot product for double precision floating point variables? [closed]Intel AVX:为什么双精度浮点变量没有 256 位版本的点积? [关闭]
【发布时间】:2013-04-08 15:14:24
【问题描述】:

another question on SO 中,我们尝试(并成功)找到了替换 AVX 缺失指令的方法:

 __m256d _mm256_dp_pd(__m256d m1, __m256d m2, const int mask);

有人知道这条指令丢失的原因吗?部分回答here

【问题讨论】:

  • “失踪”是什么意思?从字面上看,有数以百万计的东西 AVX 没有说明,除了“说明不是 AVX 的一部分”之外没有其他理由
  • 我的错,“缺失”,因为我希望 AVX 实现它,因为单精度版本已经存在 (_mm256_dp_ps)。我想了解他们为什么选择不实施它(哲学或技术原因)。但你是对的,这可能不是最好的术语。
  • 点积指令是缓慢的 bozo ISA 扩展,除了鼓励新手矢量程序员选择笨拙的数据布局外,几乎什么也没做。一般来说,应尽可能避免横向操作,点积是最严重的违规行为之一。
  • 我正在阅读 2015 年 9 月的上述评论(来自@StephenCanon),但我仍然想发表评论。点积是数值计算中最有用和最常见的运算之一。当然,向量单元必须有相应的操作。像佳能先生这样笼统地说,却不提供任何解释,真是令人讨厌。

标签: c++ performance simd avx


【解决方案1】:

造成这种情况和其他各种 AVX 限制的根本原因是,在架构上,AVX 只不过是两个并排的 SSE 执行单元——您会注意到,几乎没有 AVX 指令在两个 128 位半块之间的边界上水平运行。矢量(这在vpalignr 的情况下特别烦人)。通常,您实际上只需并行执行两个 128 位 SSE 操作,这对于大多数仅以元素方式操作的指令很有用,但不如正确的 256 位 SIMD 实现有用。

【讨论】:

    猜你喜欢
    • 2012-05-14
    • 1970-01-01
    • 1970-01-01
    • 2016-09-22
    • 1970-01-01
    • 2018-07-06
    • 1970-01-01
    • 2010-10-22
    • 1970-01-01
    相关资源
    最近更新 更多