打印
[应用相关]

拆解循环-以空间换时间

[复制链接]
61|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
中国龙芯CDX|  楼主 | 2024-6-27 22:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

在编写循环处理程序的时候要充分利用CPU的指令缓存,要充分分解小的循环。特别是当循环体本身很小的时候,分解循环可以提高性能。

这里要注意,很多编译器并不能自动分解循环。不好的代码:

// 3D转化:把矢量 V 和 4x4 矩阵 M 相乘
for (i = 0;i < 4;i ++)
{
  r[i] = 0;
  for (j = 0;j < 4;j ++)
  {
    r[i] += M[j][i]*V[j];
  }
}

推荐的代码:

r[0] = M[0][0]*V[0] + M[1][0]*V[1] + M[2][0]*V[2] + M[3][0]*V[3];
r[1] = M[0][1]*V[0] + M[1][1]*V[1] + M[2][1]*V[2] + M[3][1]*V[3];
r[2] = M[0][2]*V[0] + M[1][2]*V[1] + M[2][2]*V[2] + M[3][2]*V[3];
r[3] = M[0][3]*V[0] + M[1][3]*V[1] + M[2][3]*V[2] + M[3][3]*v[3];

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

188

主题

1680

帖子

2

粉丝