SSE指令集简单入门

来源:互联网 发布:网络手机电视直播 编辑:程序博客网 时间:2024/06/11 14:00

我们从这个程序入手:

void sse_cal(float *a,float*b){    __m128 m1, m2, m3;    __m128 SSEA = _mm_load_ss(a);    __m128 SSEB = _mm_load_ss(b);    __m128 h = _mm_set_ss(1.0f);    for(int i=0;i<LOOP;i++)    {        m1 = _mm_mul_ss(SSEA, SSEB);        m2 = _mm_sqrt_ss(SSEB);        m3 = _mm_add_ss(m1,m2);             SSEA = _mm_add_ss(SSEA, h);        SSEB = _mm_add_ss(SSEB, h);    }}

注意到SSE并不能访问一般的内存,我们必须要有一个新建或者复制的过程

__m128 m1, m2, m3;//声明了变量__m128 SSEA = _mm_load_ss(a);//将a地址指向的值复制给SSEA__m128 SSEB = _mm_load_ss(b);//将b地址指向的值复制给SSEB__m128 h = _mm_set_ss(1.0f);//声明了变量并赋值(1.0f)

而循环体里面的则是一些计算命令:

m1 = _mm_mul_ss(SSEA, SSEB);//将SSEA和SSEB相乘m2 = _mm_sqrt_ss(SSEB);//求SSEB的平方m3 = _mm_add_ss(m1,m2);//将m1和m2相加       SSEA = _mm_add_ss(SSEA, h);//将SSEA和h相加SSEB = _mm_add_ss(SSEB, h);//将SSEB和h相加

我们可以发现,其实调用SSE来计算并不是多么困难的,事实上也不一定能提高速度,还是需要按需使用。
比较完整的函数表可以参考这篇博客:http://blog.csdn.net/jacke121/article/details/54630930
感觉SSE和CUDA还是比较像的。

原创粉丝点击