|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
<P><B>发信人: greatfool (大猪), 信区: Programming <BR>标 题: Re: C++->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[x1][y1], chb1 = chbl[x1][y1].... <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<=2*w+m;x++) <BR>: for(int y=1;y<=2*w+n;y++) <BR>: { <BR>: hb[x-1][y-1]=chb1[x-1][y-1]*hb[x-1][y-1] <BR>: +chb2[x-1][y-1]*(eab[x-1][y-1]-eab[x-1][y]+eac[x-1][y-1]-eac[x-1][ <BR>]); <BR>: hc[x-1][y-1]=chc1[x-1][y-1]*hc[x-1][y-1] <BR>: +chc2[x-1][y-1]*(eab[x][y-1]-eab[x-1][y-1]+eac[x][y-1]-eac[</P>
<P>x-1][y- <BR>]); <BR>: } <BR>: for(int x=2;x<=2*w+m;x++) <BR>: for(int y=2;y<=2*w+n;y++) <BR>: { <BR>: eab[x-1][y-1]=ceb1[x-1][y-1]*eab[x-1][y-1] <BR>: +ceb2[x-1][y-1]*(hc[x-1][y-1]-hc[x-2][y-1]); <BR>: eac[x-1][y-1]=cec1[x-1][y-1]*eac[x-1][y-1] <BR>: +cec2[x-1][y-1]*(hb[x-1][y-2]-hb[x-1][y-1]); <BR>: } <BR> <BR></P> |
|