Redian新闻
>
Using register to cash visa
avatar
Using register to cash visa# Money - 海外理财
h*b
1
【 以下文字转载自 Working 讨论区 】
发信人: htb (小牛 。。。妞。。。), 信区: Working
标 题: 问个面试问题
关键字: in
发信站: BBS 未名空间站 (Wed Jun 13 16:55:27 2012, 美东)
面试的时候问了下面的问题,没有回答上来:
下面的程序当N=64*1024的时候,run time是100 msec,
当N=70*1024的时候,time变成了74 msec。为什么N越大run time
越小?
如果run多次的时候,run time可能变成:
N=64: 100, 76, 500, 80, 90
N=70: 74, 80, 300, 63, 80
为什么会出现500/300这突变的数字?
把a,b,c,d,e初始化成0也会出现同样的现象。
#define N 64*1024
int a[N], b[N], c[N], d[N], e[N];
int main()
{
int i;
for (i = 0; ia[i] = b[i] + c[i] + d[i] + e[i];
return 0;
}
avatar
m*e
2
Or master cards from rebate
Is it ok to lose 3% but saving you lots of
time to manage this 30, 50,100value
Since most of other purchase will
use more than 5% cashback cc
avatar
A*l
3
process context switch?

【在 h*b 的大作中提到】
: 【 以下文字转载自 Working 讨论区 】
: 发信人: htb (小牛 。。。妞。。。), 信区: Working
: 标 题: 问个面试问题
: 关键字: in
: 发信站: BBS 未名空间站 (Wed Jun 13 16:55:27 2012, 美东)
: 面试的时候问了下面的问题,没有回答上来:
: 下面的程序当N=64*1024的时候,run time是100 msec,
: 当N=70*1024的时候,time变成了74 msec。为什么N越大run time
: 越小?
: 如果run多次的时候,run time可能变成:

avatar
t*e
4
All operation are independed of each other. Running on 2 different processor
in the second case probably. Notice time is almost cut in half in one case.
avatar
s*0
5
Seems like a memory question. I'm guessing you hit some special edge
conditions for tlb misses. Maybe faulting more in the longer runs.
avatar
c*g
6
单线程单进程程序没有context switch和multicore的问题
我猜想是cache performance的问题,假设L1 cache四路组相联(这个是一下推论的假
设,但应该属于cpu常规配置,可以搜搜主流cpu的配置)
#define N 64*1024
// 每个数组64KB
a[i] = b[i] + c[i] + d[i] + e[i];
// 每次循环读四个mem location,写一个mem location
那么在L1 cache来看, 由于每个数组64KB, a[0]-e[0]映射到同一组4路cache line,5
个memory address在4个cache line上冲突,每次循环都会因此出现cache miss
当数组size变成70时,a[0]-e[0]映射到不同的组上,5个mem address在L1 cache共存
,performance就上去了
运行都多次performance不一样,还没有想到解释。。。
avatar
A*l
7
这个解释很靠谱,赞一个!
PS:我是说波动是因为被别的进程抢占了(IO之类)

5

【在 c******g 的大作中提到】
: 单线程单进程程序没有context switch和multicore的问题
: 我猜想是cache performance的问题,假设L1 cache四路组相联(这个是一下推论的假
: 设,但应该属于cpu常规配置,可以搜搜主流cpu的配置)
: #define N 64*1024
: // 每个数组64KB
: a[i] = b[i] + c[i] + d[i] + e[i];
: // 每次循环读四个mem location,写一个mem location
: 那么在L1 cache来看, 由于每个数组64KB, a[0]-e[0]映射到同一组4路cache line,5
: 个memory address在4个cache line上冲突,每次循环都会因此出现cache miss
: 当数组size变成70时,a[0]-e[0]映射到不同的组上,5个mem address在L1 cache共存

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。