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( &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(&
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
引起的。我想听一听您对这个问题的解释,以及是否有办法验证一下
您的解释。
#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( &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(&
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
引起的。我想听一听您对这个问题的解释,以及是否有办法验证一下
您的解释。