мой код:
#define N 8000
static double A[N][N];
static double x[N], y[N];
void MyMatVec(double y[N], double A[N][N], double x[N], int n)
{
int i,j;
for(i=0;i<n;i++){
y[i]=0.0;
for(j=0;j<n;j++){
y[i]+=A[i][j]*x[j];
}
}
}
int main(){
int i, j;
clock_t clk1, clk2;
double t_w,d_mflops;
for(i=0; i<N; i++) {
x[i] = 1.0;
}
for(j=0; j<N; j++) {
for(i=0; i<N; i++) {
A[j][i] = 1.0;
}
}
clk1 = clock();
MyMatVec(y, A, x, N);
clk2 = clock();
t_w=clk2-clk1;
printf("N = %d, \n",N);
printf("multply times = %lf [sec] \n",t_w);
d_mflops = 2.0*(double)N*(double)N/t_w* 1.0e-6;
fprintf(" %lf [MFLOPS] \n", d_mflops);
return 0;
}
Итак, я изменил N 5000 ~ 10000. напечатано:
N = 7000
multply times = 1.068000 [sec]
91.760300 [MFLOPS]
N = 8000
multply times = 2.665000 [sec]
48.030019 [MFLOPS]
N = 9000
multply times = 2.384000 [sec]
67.953020 [MFLOPS]
Когда N = 8000 является ошибочным, времена и MFLOPS страннее, чем 7000,9000.
Конечно, 7000 <8000 <9000 в разы, но не . </p>
и MFLOPS тоже. мои отпечатки MFLOPS было 8000 <7000 <9000. это не нормально, я думаю </p>
что это случилось?