BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #25789同步于 2009/7/2
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

for循环效率问题

xintai
2009/7/2镜像同步42 回复
执行效率问题: int row,col,sum; int a[100][5]; for(row=0;row <100;row++) 效率低于 for(col=0;col <5;col++) { { for(col=0;col <5;col++) for(row=0;row <100;row++) { { sum = sum+a[row][col]; sum = sum+a[row][col]; } } } } 请问为什么?
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
DrJan机器人#1 · 2009/7/2
结论是怎么出来的? 同问
Bettysucks机器人#2 · 2009/7/2
同关注。。。这个是爱立信笔试里面出现过的一道题吧。。。
FadeToBlack机器人#3 · 2009/7/2
这个要看编译出来的代码中数组是行优先还是列优先,不过一般默认都是行优先 【 在 xintai (心态) 的大作中提到: 】 : 执行效率问题: : int row,col,sum; : int a[100][5]; : ...................
guo机器人#4 · 2009/7/2
http://topic.csdn.net/u/20071206/20/5ae1a8f9-fab5-443c-a2ea-af1d755f5de1.html 【 在 xintai (心态) 的大作中提到: 】 : 执行效率问题: : int row,col,sum; : int a[100][5]; : ...................
BismarckDD机器人#5 · 2009/7/2
我觉得可能是分页分块的问题吧。。。 【 在 xintai (心态) 的大作中提到: 】 : 执行效率问题: : int row,col,sum; : int a[100][5]; : ...................
huitailang机器人#6 · 2009/7/3
数组的访问顺序,先行后列肯定优于先列后行(如3楼说的,我们假设行优先) 有如下一个数组,假设内存页大小为4096 int a[100][1024] 先行后列:每一行独占一个内存页,完成循环需要的页面调度次数为100 先列后行:每次都需要调度,完成访问需要的调度次数为 100*1024.(实际中应小于这些) lz问题中为 a[100][5] 5*100*4 =2000 应该在两个页内. 【 在 xintai (心态) 的大作中提到: 】 : 标 题: for循环效率问题 : 发信站: 北邮人论坛 (Thu Jul 2 22:43:28 2009), 站内 : : 执行效率问题: : int row,col,sum; : int a[100][5]; : for(row=0;row <100;row++) 效率低于 for(col=0;col <5;col++) : { { : for(col=0;col <5;col++) for(row=0;row <100;row++) : { { : sum = sum+a[row][col]; sum = sum+a[row][col]; : } } : } } : : : 请问为什么? : -- : : ※ 来源:·北邮人论坛 http://forum.byr.edu.cn·[FROM: 2001:da8:215:1740:84d0:1e39:f232:*]
Noah机器人#7 · 2009/7/3
记得哪本书上说过,多层循环尽量减小外层循环的循环次数
Parid机器人#8 · 2009/7/3
第二个的空间效率明显没有第一个好
sunway机器人#9 · 2009/7/3
只要数据在内存里,抛开cpu cache不谈,无论怎么读速度都是一样的(除非内存是NUMA,或者数据还不在内存里,需要从磁盘读) 页面调度是什么意思?难道是说CPU打算读一块内存时还需要调度一下?直接读就完了 这个问题就是cpu cache miss的问题.. 【 在 huitailang (我爱吃羊,哞~~~咩。。) 的大作中提到: 】 : 标 题: Re: for循环效率问题 : 发信站: 北邮人论坛 (Fri Jul 3 08:20:23 2009), 站内 : : 数组的访问顺序,先行后列肯定优于先列后行(如3楼说的,我们假设行优先) : 有如下一个数组,假设内存页大小为4096 : int a[100][1024] : : 先行后列:每一行独占一个内存页,完成循环需要的页面调度次数为100 : : 先列后行:每次都需要调度,完成访问需要的调度次数为 100*1024.(实际中应小于这些) : : lz问题中为 a[100][5] : 5*100*4 =2000 : : 应该在两个页内. : : : : : 【 在 xintai (心态) 的大作中提到: 】 : : 标 题: for循环效率问题 : : 发信站: 北邮人论坛 (Thu Jul 2 22:43:28 2009), 站内 : : : : 执行效率问题: : : int row,col,sum; : : int a[100][5]; : : for(row=0;row <100;row++) 效率低于 for(col=0;col <5;col++) : : { { : : for(col=0;col <5;col++) for(row=0;row <100;row++) : : { { : : sum = sum+a[row][col]; sum = sum+a[row][col]; : : } } : : } } : : : : : : 请问为什么? : : -- : :