作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有了 4 个打包的 float
(__m128
),我可以使用 SSE intrinsic
__m128 X;
__m128 H = _mm_shuffle_ps(X,X,_MM_SHUFFLE(3,3,3,3));
将H
的所有元素设置为X
的第三个元素(这是最快的方法吗?)
现在,我想对 4 个打包的 double
(__m256d
) 执行相同的操作。我天真地编码
__m256d X;
__m256d H = _mm256_shuffle_pd(X,X,_MM_SHUFFLE(3,3,3,3));
但这不是正确的做法!相反,它设置 H={X[1],X[1],X[3],X[3]}。
那么,怎样做才是正确的呢?
编辑
使用 Intel(R) Xeon(R) CPU E5-2670 0 @ 2.60GHz
最佳答案
它并不总是最优的,但询问你的编译器它认为什么可能是一个很好的提示。
#include <x86intrin.h>
__m256d f(__m256d x){
__m256i m={3,3,3,3};
return __builtin_shuffle(x,m);
}
对于 gcc-4.8,这会生成:
vpermilpd $15, %ymm0, %ymm0
vperm2f128 $17, %ymm0, %ymm0, %ymm0
clang 有一个不同的 builtin for shuffling,我不知道其他编译器是否有。
关于sse - 如何将 __m256d 中的所有元素设置为另一个 __m256d 的第三个元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13845806/
我是一名优秀的程序员,十分优秀!