system888net 发表于 2008-04-27 20:03

使用CPU 专用指令提高float运算速度的一个小例子

若有一批float要进行y= sqrt(x1*x1+x2*x2)+0.5 的计算
在32bit的CPU上用常规模式进行计算则明显耗时.
而用INTEL CPU自己专用的SSE指令进行运算,则有明显的优势:
windows2000+ VC

int i;
             float x1_float_data_block[]={...}; // x1数据块
             float x2_float_data_block[]={...}; // x2数据块
             float y_float_data_block;    // y数据块,结果
             int num_float=sizeof(x1_float_data_block)/sizeof(float);                // 数据块中float的数量

             int count = num_float/4;
             float f = 0.5f;
             _asm    {
                         movss   xmm2, f         
                         shufpsxmm2, xmm2, 0   
                         mov         esi, x1_float_data_block               
                         mov         edx, x2_float_data_block               
                         mov         edi, y_float_data_block               
                         mov         ecx, count                           
               sse_loop:      
                         movaps      xmm0,
                         mulps       xmm0, xmm0
                         movaps      xmm1,
                         mulps       xmm1, xmm1
                         addps       xmm0, xmm1
                         sqrtps      xmm0, xmm0
                         addps       xmm0, xmm2
                         movaps      ,xmm0
                         add         esi, 16   
                         add         edx, 16   
                         add         edi, 16   
                         dec         ecx         
                         jnz         sse_loop                  
                     }
               for(i=0;i<num_float;i++)
                         printf("...",y_float_data_block,...
               .....


[ 本帖最后由 system888net 于 2008-5-18 10:51 编辑 ]

system888net 发表于 2008-04-27 20:22

这条printf("...",y_float_data_block,...
在上面edit了几次总是显示不出来[ i ],不知为何:em14:

[ 本帖最后由 system888net 于 2008-4-27 20:23 编辑 ]

chzCPU 发表于 2008-04-27 21:02

运算速度能提高一点还是许多?

jamesr 发表于 2008-04-28 19:16

system888net 发表于 2008-05-18 10:48

原帖由 jamesr 于 2008-4-28 19:16 发表 http://linux.chinaunix.net/bbs/images/common/back.gif
使用 代把码括起来。
另外,应该说明这段代码的运行环境。这种内联汇编不是gcc格式的。

谢谢提醒,已加了code 和/code,平台 windows2000+vc

[ 本帖最后由 system888net 于 2008-5-18 10:51 编辑 ]

chuhongze 发表于 2008-05-18 16:49

回复 #1 system888net 的帖子

速度是明显快了,顶...

chuhongze 发表于 2008-05-18 16:53

此程序调用的是FPU内部的指令
页: [1]
查看完整版本: 使用CPU 专用指令提高float运算速度的一个小例子