- 论坛徽章:
- 0
|
若有一批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[sizeof(x1_float_data_block)/sizeof(float)]; // 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
- shufps xmm2, 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, [esi]
- mulps xmm0, xmm0
- movaps xmm1, [edx]
- mulps xmm1, xmm1
- addps xmm0, xmm1
- sqrtps xmm0, xmm0
- addps xmm0, xmm2
- movaps [edi],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[i],...
- .....
复制代码
[ 本帖最后由 system888net 于 2008-5-18 10:51 编辑 ] |
评分
-
查看全部评分
|