1. #include <iostream>
  2. #include <cstdlib>  // for random number generator
  3. #include <ctime>
  4. #include <fstream> // for writing to the file
  5. using namespace std;
  6.  
  7. int main()
  8. {
  9.  
  10.     int array_sizes[6] = {32,64,128,256,512,1024};
  11.  
  12.     int m;
  13.     ofstream results; //output the results
  14.     results.open ("results.txt");
  15.  
  16.     for(int i = 0; i < 6; i++){
  17.         for (int k = 0; k < 3; k ++){
  18.  
  19.             clock_t start = clock();
  20.             m = array_sizes[i];
  21.  
  22.             int **A = new int*[m];
  23.             int **B = new int*[m];
  24.             int **product = new int*[m];
  25.  
  26.             for ( int i = 0 ; i < m ; i++)
  27.             {
  28.                 A[i] = new int[m];
  29.                 B[i] = new int[m];
  30.                 product[i] = new int[m];
  31.             }
  32.  
  33.             // Initialize A[I][K]
  34.             // I x K == row * inner
  35.             for(int row = 0; row < m; row++) {
  36.                 for(int inner = 0; inner < m; inner++){
  37.                     A[row][inner] = 5;
  38.                 }
  39.             }
  40.  
  41.  
  42.             for(int row = 0; row < m; row++) {
  43.                 for(int inner = 0; inner < m; inner++){
  44.                     B[row][inner] = 3;
  45.                     //cout << B[row][inner] << " ";
  46.                 }
  47.                 //cout << "\n";
  48.             }
  49.  
  50.             // main routine for multiplication
  51.             for(int row = 0; row < m; row++) {
  52.                 for(int col = 0; col < m; col++) {
  53.                     product[row][col] = 0;
  54.                     for(int inner = 0; inner < m; inner++) {
  55.                         product[row][col] += A[row][inner] * B[inner][col];
  56.                     }
  57.                     //cout << product[row][col] << " ";
  58.                 }
  59.                 //cout << "\n";
  60.             }
  61.  
  62.             //Deallocate
  63.             for ( int i = 0 ; i < m ; i++)
  64.             {
  65.                 delete[] A[i];
  66.                 delete[] B[i];
  67.                 delete[] product[i];
  68.             }
  69.             delete[] A;
  70.             delete[] B;
  71.             delete[] product;
  72.  
  73.  
  74.             clock_t end = clock();
  75.             double cpu_time = static_cast<double>(end - start)/CLOCKS_PER_SEC;
  76.            
  77.             results << cpu_time << endl;
  78.         }
  79.         results << m << endl;
  80.     }
  81.  
  82.     results.close();
  83.     return 0;
  84. }