你有一个三(或四)个浮点数的向量.总结它们的最快方法是什么?
SSE(movaps,shuffle,add,movd)总是比x87快吗?SSE4.2中的水平加法说明值得吗?移动到FPU的成本是多少,然后是faddp,faddp?什么是最快的特定指令序列?
"尝试安排事情,这样你可以一次总结四个向量"将不被接受作为答案.:-)
我有一些代码,最初是由MSVC工作人员给我的,我正试图让它在Clang上工作.这是我遇到麻烦的功能:
float vectorGetByIndex( __m128 V, unsigned int i )
{
assert( i <= 3 );
return V.m128_f32[i];
}
Run Code Online (Sandbox Code Playgroud)
我得到的错误如下:
Member reference has base type '__m128' is not a structure or union.
Run Code Online (Sandbox Code Playgroud)
我环顾四周,发现Clang(也许是GCC)在将__m128视为结构或联合时遇到了问题.但是我还没有找到一个直接的答案,我怎么能得到这些价值.我已经尝试过使用下标运算符而无法做到这一点,我已经浏览了大量的SSE内在函数列表并且尚未找到合适的函数.
我正在尝试学习使用内在函数进行编码,下面是一个添加代码的代码
compiler used: icc
#include<stdio.h>
#include<emmintrin.h>
int main()
{
__m128i a = _mm_set_epi32(1,2,3,4);
__m128i b = _mm_set_epi32(1,2,3,4);
__m128i c;
c = _mm_add_epi32(a,b);
printf("%d\n",c[2]);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我得到以下错误:
test.c(9): error: expression must have pointer-to-object type
printf("%d\n",c[2]);
Run Code Online (Sandbox Code Playgroud)
如何在c类型变量中打印值__m128i
为什么_mm_extract_ps返回int而不是float?
float从C中的XMM寄存器读取单个数据的正确方法是什么?
或者更确切地说,一种不同的方式是:与_mm_set_ps指令相反的是什么?