又一个看似简单的问题

[复制链接]
2238|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一般会重新启动一个爆发读命令,读入一个缓存行,而非仅仅你要的那一个安节。
明白了?
Tinnal 发表于 2012-5-17 13:30 | 显示全部楼层
是不是时间局部性的问题
zjgtan 发表于 2012-5-16 23:33


对,CACHE是因为有时间局部性原则才有意义。离开时间局部性原则,CACHE就变成废物了。
21IC之星 发表于 2012-5-22 12:51 | 显示全部楼层
没考虑过时间
shalixi 发表于 2012-5-22 13:25 | 显示全部楼层
思路简单运算慢,思路复杂运算慢快。有时不能想得太复杂,有时又不能想得太简单。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:学习,思考。

144

主题

1720

帖子

43

粉丝
快速回复 在线客服 返回列表 返回顶部