一个没有分数的问题,你会吗?(0分)

  • 主题发起人 主题发起人 jhtchina
  • 开始时间 开始时间
J

jhtchina

Unregistered / Unconfirmed
GUEST, unregistred user!
#include<stdio.h>
#include<time.h>
#define N 1024 //image size
int i,j,k;
float slice[N][N];

void main()
{
time_t start,end;

float s;
time( &amp;start );
for(k=0;k<100;k++)
{
//省略部分代码
for(j=0;j<N;j++)
for(i=0;i<N;i++)
{
//省略部分代码
slice[j]=(float)(slice[j]+0.01);
// 语句1
slice[j]=(float)(slice[j]+0.01);
// 语句2
}
printf("%d/n",k);
}
time(&amp;
end);
s=difftime(end,start);
printf(" The total time is %f:",s);
}
问题1:当N=1022,1023,1025,1026的时候运行时间都只有s=13或者14秒
左右,可当N=1024的时候,运行时间就是56秒了。我
在我的编译器上(Visual C++)验证过有这个问题。
问题2:“slice[j]=(float)(slice[j]+0.01);”语句执行

速度慢,比“slice[j]=(float)(slice[j]+0.01);

慢2至3倍,也就是说slice[j]比slice[j]运行起来
慢好多。
有人解释是"independent memory bank技术",也有人认为是cache
引起的。我想听一听您对这个问题的解释,以及是否有办法验证一下
您的解释。
 
你的程序N本来就是1024,只有i在变化,而i在1024时已经没有用了,其它的我不能解释
 
关注。。。等下午认真看看。。。
 
问题1:真不知道。。。。真奇怪!
问题2:慢2至3倍是如何验证的?如果是按照你上面代码,那么再根据上面提到的可能是cache问题
我感觉还是有一定道理的,因为cache容量比较小,那么当[j]和[j]的之间距离
比较大的时候,会导致不读cache(里面没有),去读内存。。。但是为什么又只有[j]
慢,而[j]不会慢呢?您说的"independent memory bank技术"是什么?能介绍下吗?
谢谢您! 另外,很想和你认识一下,希望以后能有机会向您请教...
qq:71892967 信箱:liu_mazi@163.com
 
我们公司内部一位同事在网上发布的问题,我不知到答案所以把他放到论坛上面和大家一起研究,其实我得水平很菜.
 
我的hotmail:jhtchina@hotmail.com
 
记下了,谢谢!
 
Dev-C++编译器,
N = 256 0.000s
N = 512 5s
N = 1022 3s
N = 1023 3s
N = 1024 21s如果变量改为double,22s
N = 2048 巨慢
BCB6
N = 1022 42s
N = 1023 42s
N = 1024大约为62s
N = 1025 46s
在build的时候提示错误
Exception...
Date : 04/06/2004 00:34:44
Address: 4002E755
Module : rtl60.bpl
Type : EStringListError
Message: List index out of bounds (-1).
 
有意思!

学习!
 

Similar threads

I
回复
0
查看
831
import
I
I
回复
0
查看
755
import
I
I
回复
0
查看
464
import
I
I
回复
0
查看
650
import
I
后退
顶部