AaronSpark 发表于 2005-7-26 21:29

C++循环优化

<P><B>发信人: greatfool (大猪), 信区: Programming <BR>标题: Re: C++-&gt;asm求助 <BR>发信站: The unknown SPACE (Mon May 21 01:55:37 2001), 转信 </B><BR><BR>要优化运算速度的话,不如用一些临时变量存储反复使用的数组成员, <BR>象大量的重复运算也可以用临时变量存储结果, 比如: <BR>int x1 = x-1,y1 = y-1; <BR>double hbx1y1 = hb, chb1 = chbl.... <BR><BR>还可以用递加的指针代替有规律询址的数组变量,比如: <BR>double *p_hb_x, *p_hb_y; <BR>p_hb_x = *hb; <BR>for (int x=.....) { <BR>p_hb_y = p_hb_x; <BR>for (int y=....) { <BR>(*p_hb_y) = ..... + (*p_hb_y) * (....) <BR>..... <BR>p_hb_y++; <BR> } <BR>p_hb_x += size_of_col; <BR>} <BR>为每一个运算的变量准备一个指针,即使是同一个数组里的 <BR>double *p1, *p2; <BR>..... <BR>p1++; p2++; <BR>*p1 = a + b + c * (*p2); <BR>.... <BR>优于: <BR>double *p; <BR>.... <BR>*p+</P>
<P>+; <BR>*p = a + b + c * (*(p+offset)) <BR><BR><BR>最后, 循环终值也可以先计算好, 放在临时变量里,避免重复计算 <BR>相信这样的程序不会比汇编的效率差多少. <BR><BR>【 在 FangQ (F the world) 的大作中提到: 】 <BR>: 一段数值计算程序,想加快运算速度,程序核心计算部分如下,不 <BR>: 知道如何把这段计算改为汇编(不知道如何对应asm{}内外的变量), <BR>: 循环等的写法也不太清楚),哪位大侠能帮忙给看看,多谢! <BR>: hb,hc,eab,eac,chb1,chb2,ceb1,ceb2,chc1,chc2,cec1,cec2为double数组 <BR>: w,m,n为整形变量 <BR>: 平台是C++Builder4 <BR>: //------------------------------------------------ <BR>: for(int x=1;x&lt;=2*w+m;x++) <BR>:    for(int y=1;y&lt;=2*w+n;y++) <BR>:    { <BR>:       hb=chb1*hb <BR>:             +chb2*(eab-eab+eac-eac[ <BR>]); <BR>:       hc=chc1*hc <BR>:             +chc2*(eab-eab+eac-eac[</P>
<P>x-1]); <BR>:    } <BR>: for(int x=2;x&lt;=2*w+m;x++) <BR>:    for(int y=2;y&lt;=2*w+n;y++) <BR>:    { <BR>:   eab=ceb1*eab <BR>:                +ceb2*(hc-hc); <BR>:   eac=cec1*eac <BR>:                +cec2*(hb-hb); <BR>:    } <BR><BR></P>
页: [1]
查看完整版本: C++循环优化