在GCC师SIMD(SSE)指令 [英] SIMD (SSE) instruction for division in GCC
本文介绍了在GCC师SIMD(SSE)指令的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想用最优化的SSE指令下面的代码片断如果可能的话:
I'd like to optimize the following snippet using SSE instructions if possible:
/*
* the data structure
*/
typedef struct v3d v3d;
struct v3d {
double x;
double y;
double z;
} tmp = { 1.0, 2.0, 3.0 };
/*
* the part that should be "optimized"
*/
tmp.x /= 4.0;
tmp.y /= 4.0;
tmp.z /= 4.0;
这是可能的呢?
推荐答案
您正在寻找的内在是 _mm_div_pd
。这里是一个工作的例子应该是足够引导你在正确的方向:
The intrinsic you are looking for is _mm_div_pd
. Here is a working example which should be enough to steer you in the right direction:
#include <stdio.h>
#include <emmintrin.h>
typedef struct
{
double x;
double y;
double z;
} v3d;
typedef union __attribute__ ((aligned(16)))
{
v3d a;
__m128d v[2];
} u3d;
int main(void)
{
const __m128d vd = _mm_set1_pd(4.0);
u3d u = { { 1.0, 2.0, 3.0 } };
printf("v (before) = { %g %g %g }\n", u.a.x, u.a.y, u.a.z);
u.v[0] = _mm_div_pd(u.v[0], vd);
u.v[1] = _mm_div_pd(u.v[1], vd);
printf("v (after) = { %g %g %g }\n", u.a.x, u.a.y, u.a.z);
return 0;
}
这篇关于在GCC师SIMD(SSE)指令的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文