#define _XOPEN_SOURCE
#include <stdio.h>
#include <stdlib.h>

double a[4000][4000];
double b[4000][4000];
double c[4000][4000];

int main(int argc, char * argv[])
{
  int N;
  int i, j, k;

  if (argc > 1) N = atoi(argv[1]);
  else N = 100;

  for (i=0 ;i<N; i++)  
    for (j=0 ;j<N; j++) {
      c[i][j] = 0;
      a[i][j] = drand48();
      b[i][j] = drand48();
    }

#pragma omp parallel for private(i, j, k) shared(a, b, c)
  for (i=0; i<N; i++) 
    for (j=0; j<N; j++) 
      for (k=0; k<N; k++) c[i][j] += a[i][k]*b[k][j];

#ifdef VERBOSE
  for (i=0; i<N; i++) 
    for (j=0; j<N; j++) 
      printf("C[%d][%d] = %f\n", i, j, c[i][j]);
#endif  
}