Advertisement
pexea12

Matrix multiplication

Feb 9th, 2020
143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.55 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <time.h>
  3.  
  4. #define N 1000
  5.  
  6.  
  7. void reset(double C[N][N]) {
  8.   int i, j;
  9.   for (i = 0; i < N; ++i)
  10.     for (j = 0; j < N; ++j)
  11.       C[i][j] = 0;
  12. }
  13.  
  14. int main()
  15. {
  16.   double A[N][N], B[N][N], C[N][N];
  17.   double time1, time2, time3;
  18.   clock_t start, end;
  19.  
  20.   int i, j, k;
  21.   for (i = 0; i < N; ++i)
  22.     for (j = 0; j < N; ++j) {
  23.       A[i][j] = i * 2 + j;
  24.       B[i][j] = i * 3 / (j + 0.2);
  25.     }
  26.  
  27.   // C = AB
  28.   reset(C);
  29.   start = clock();
  30.   for (i = 0; i < N; ++i)
  31.     for (j = 0; j < N; ++j) {
  32.       for (k = 0; k < N; ++k)
  33.         C[i][j] += A[i][k] * B[k][j];
  34.     }
  35.   end = clock();
  36.  
  37.   for (i = 0; i < 10; ++i)
  38.     printf("%f ", C[i][i]);
  39.   printf("\n");
  40.  
  41.   time1 = (double) (end - start) / CLOCKS_PER_SEC;
  42.   printf("Elapsed time (a): %f\n", time1);
  43.  
  44.   // C = A^T * B
  45.   reset(C);
  46.   start = clock();
  47.   for (i = 0; i < N; ++i)
  48.     for (j = 0; j < N; ++j) {
  49.       for (k = 0; k < N; ++k)
  50.         C[i][j] += A[k][i] * B[k][j];
  51.     }
  52.   end = clock();
  53.  
  54.   for (i = 0; i < 10; ++i)
  55.     printf("%f ", C[i][i]);
  56.   printf("\n");
  57.  
  58.   time2 = (double) (end - start) / CLOCKS_PER_SEC;
  59.   printf("Elapsed time (b): %f\n", time2);
  60.  
  61.   // C = AB^T
  62.   reset(C);
  63.   start = clock();
  64.   for (i = 0; i < N; ++i)
  65.     for (j = 0; j < N; ++j) {
  66.       for (k = 0; k < N; ++k)
  67.         C[i][j] += A[i][k] * B[j][k];
  68.     }
  69.   end = clock();
  70.  
  71.   for (i = 0; i < 10; ++i)
  72.     printf("%f ", C[i][i]);
  73.   printf("\n");
  74.  
  75.   time3 = (double) (end - start) / CLOCKS_PER_SEC;
  76.   printf("Elapsed time (c): %f\n", time3);
  77.  
  78.   return 0;
  79. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement