#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 4000
#define M 4000

main()
{
  int i,j;
  float **a,**b,**c;
  double wall_time1, wall_time2, wall_time;

  a=(float **)malloc(N*M*sizeof(float));
  b=(float **)malloc(N*M*sizeof(float));
  c=(float **)malloc(N*M*sizeof(float));
  for (i=0; i<N; i++) {
    a[i]  = (float *)malloc(M*sizeof(float));
    b[i]  = (float *)malloc(M*sizeof(float));
    c[i]  = (float *)malloc(M*sizeof(float));
  }

  for(i=0;i<N;i++){
    for(j=0;j<M;j++){
      b[i][j] = (float)rand()/(float)RAND_MAX;
      c[i][j] = (float)rand()/(float)RAND_MAX;
    }
  }
  wall_time1=(double)clock()/(double)CLOCKS_PER_SEC;

  for(i=0;i<N;i++) {
    for(j=0;j<M;j++)
      a[i][j] = b[i][j] + c[i][j];
  }
  wall_time2=(double)clock()/(double)CLOCKS_PER_SEC;
  wall_time=(wall_time2-wall_time1);
  printf("%f\t %.5f\n",a[0][0],wall_time);

  wall_time1=(double)clock()/(double)CLOCKS_PER_SEC;

  for (j=0;j<M;j++){
    for (i=0;i<N;i++)
      a[i][j] = b[i][j] + c[i][j];
  }
  wall_time2=(double)clock()/(double)CLOCKS_PER_SEC;
  wall_time=(wall_time2-wall_time1);
  printf("%f\t %.5f\n",a[0][0],wall_time);
}


