打印

又一个看似简单的问题

[复制链接]
1305|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
drentsi|  楼主 | 2012-5-16 20:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
TE, FOR, TI
二维数组的转置问题,简单描述如下
BYTE ms[x][y];
BYTE md[y][x];
int i,j;
for(i=0;i<x;i++)
for(j=0;j<y;j++)
md[j][i]=ms[i][j];
就是这么简单的一个问题,却存在严重的瓶颈。
当x*y的大小远远超出CPU的CACHE时,这种转置将变得很慢。
在嵌入式中,CACHE较小,会变得更慢。
不信,你试试看。

相关帖子

沙发
yjhon| | 2012-5-16 21:30 | 只看该作者
不太明白

使用特权

评论回复
板凳
zjgtan| | 2012-5-16 23:33 | 只看该作者
是不是时间局部性的问题

使用特权

评论回复
地板
Tinnal| | 2012-5-17 13:28 | 只看该作者
我信,而且不旦要保证不超CACHE大小,还应保证不超缓存行的大小,这样才保证不会发起慢得多的内存访问。可你想证明什么呢?
超过一个缓存行的大小后,如果目标地址没有命中,则直接访问内存。而且对于嵌入式系统而言又大多用SDRAM,CPU一般会重新启动一个爆发读命令,读入一个缓存行,而非仅仅你要的那一个安节。
明白了?

使用特权

评论回复
5
Tinnal| | 2012-5-17 13:30 | 只看该作者
是不是时间局部性的问题
zjgtan 发表于 2012-5-16 23:33


对,CACHE是因为有时间局部性原则才有意义。离开时间局部性原则,CACHE就变成废物了。

使用特权

评论回复
6
21IC之星| | 2012-5-22 12:51 | 只看该作者
没考虑过时间

使用特权

评论回复
7
shalixi| | 2012-5-22 13:25 | 只看该作者
思路简单运算慢,思路复杂运算慢快。有时不能想得太复杂,有时又不能想得太简单。

使用特权

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

本版积分规则

个人签名:学习,思考。

144

主题

1719

帖子

43

粉丝