英特尔AVX:为什么没有双精度浮点变量的256位版本点积?

7
Stack Overflow上的另一个问题中,我们尝试(并成功)找到了一种替代AVX缺失指令的方法。
 __m256d _mm256_dp_pd(__m256d m1, __m256d m2, const int mask);

有人知道这个指令缺失的原因吗?部分答案在这里


你说的“missing”是什么意思?AVX 确实有数百万件事情没有指令,除了“该指令不属于 AVX”,没有其他理由。 - jalf
2
我的错,“missing”是指我希望AVX来实现它,因为单精度版本已经存在(_mm256_dp_ps)。我想了解他们为什么选择不实现它(哲学或技术原因)。但你说得对,这可能不是最好的术语。 - gleeen.gould
2
点积指令是缓慢的、愚蠢的ISA扩展,除了鼓励新手向量程序员选择愚蠢的数据布局外,几乎没有任何作用。一般来说,应尽可能避免水平操作,而点积则是最糟糕的罪犯之一。 - Stephen Canon
4
我正在阅读@StephenCanon在2015年9月的评论,但我仍想发表评论。点乘是数值计算中最常用和最有用的操作之一。当然,矢量处理器必须具备这种运算功能。像Canon先生那样毫无解释就做出如此绝对的陈述,实在让人感到恼火。 - Erik Alapää
1个回答

13

这个和其它各种AVX的限制的根本原因在于,AVX在体系结构上不过是两个SSE执行单元并排放置 - 您会注意到,几乎没有AVX指令在一个向量的两个128位半部分之间水平操作(这在vpalignr的情况下尤其令人烦恼)。通常情况下,您实际上只能获得两个128位SSE操作并行执行,这对于大多数按元素方式操作的指令非常有用,但不如一个完整的256位SIMD实现那么有用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接