Умножение вектора и матрицы с проблемой C - PullRequest
2 голосов
/ 17 января 2020

мой код:

#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>

что это случилось?

1 Ответ

0 голосов
/ 17 января 2020

Я думаю, что вы хотели сделать, это t_w = clk2 - clk1. Вы этого не сделали.

...