使用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 编辑 ] 这条printf("...",y_float_data_block,...
在上面edit了几次总是显示不出来[ i ],不知为何:em14:
[ 本帖最后由 system888net 于 2008-4-27 20:23 编辑 ] 运算速度能提高一点还是许多? 原帖由 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 编辑 ]
回复 #1 system888net 的帖子
速度是明显快了,顶... 此程序调用的是FPU内部的指令
页:
[1]