#include<iostream>
#include<random>
#include<time.h>
#include<vector>
#include<cmath>
#include<cstdio>
using namespace std;
float time(int n){
vector<vector<int >> A(n, vector<int>(n,0));
vector<int> v(n,0);
vector<int> m(n,0);
for(int i=0; i<n; i++){
for(int j=0; j<n; j++){
A[i][j]=rand();
}
v[i]=rand();
}
clock_t t;
t= clock();
for(int i=0; i<n; i++){
for(int j=0; j<n; j++){
m[i]+= A[i][j]*v[j];
}
}
t= clock()-t;
//printf("operations took %ld clicks (%f seconds).\n",t,((float)t)/CLOCKS_PER_SEC);
return (((float)t)/CLOCKS_PER_SEC);
}
vector<float> t(5,0);
int main(){
for(int i=256; i<5000; i=i*2){
int k= i/256;
int j= log2(k);
t[j] = time(i);
}
FILE* gp = popen("gnuplot -persistent", "w");
fprintf(gp, "set title 'operational time vs n'\n");
fprintf(gp, "set xlabel 'order of matrix- n'\n");
fprintf(gp, "set ylabel 'time taken(s)'\n");
fprintf(gp, "plot '-' with lines title 'time(s)'\n");
for (double x = 0; x < 5; x ++) {
fprintf(gp, "%f %f\n", (256*pow(2,x)), t[x]);
}
fprintf(gp, "e\n"); // end of data
fflush(gp);
pclose(gp);
return 0;
}
I2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlPHJhbmRvbT4KI2luY2x1ZGU8dGltZS5oPgojaW5jbHVkZTx2ZWN0b3I+CiNpbmNsdWRlPGNtYXRoPgojaW5jbHVkZTxjc3RkaW8+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpmbG9hdCB0aW1lKGludCBuKXsKdmVjdG9yPHZlY3RvcjxpbnQgPj4gQShuLCB2ZWN0b3I8aW50PihuLDApKTsKdmVjdG9yPGludD4gdihuLDApOwp2ZWN0b3I8aW50PiBtKG4sMCk7Cgpmb3IoaW50IGk9MDsgaTxuOyBpKyspewogIGZvcihpbnQgaj0wOyBqPG47IGorKyl7CiAgICBBW2ldW2pdPXJhbmQoKTsKICAgIH0KICB2W2ldPXJhbmQoKTsKICB9CiAgCmNsb2NrX3QgdDsKdD0gY2xvY2soKTsKCmZvcihpbnQgaT0wOyBpPG47IGkrKyl7CiAgZm9yKGludCBqPTA7IGo8bjsgaisrKXsKICAgIG1baV0rPSBBW2ldW2pdKnZbal07CiAgICB9CiAgfQp0PSBjbG9jaygpLXQ7Ci8vcHJpbnRmKCJvcGVyYXRpb25zIHRvb2sgJWxkIGNsaWNrcyAoJWYgc2Vjb25kcykuXG4iLHQsKChmbG9hdCl0KS9DTE9DS1NfUEVSX1NFQyk7CnJldHVybiAoKChmbG9hdCl0KS9DTE9DS1NfUEVSX1NFQyk7Cn0KCnZlY3RvcjxmbG9hdD4gdCg1LDApOwppbnQgbWFpbigpewpmb3IoaW50IGk9MjU2OyBpPDUwMDA7IGk9aSoyKXsKICBpbnQgaz0gaS8yNTY7CiAgaW50IGo9IGxvZzIoayk7CiAgdFtqXSA9IHRpbWUoaSk7Cn0KRklMRSogZ3AgPSBwb3BlbigiZ251cGxvdCAtcGVyc2lzdGVudCIsICJ3Iik7CgogICAgZnByaW50ZihncCwgInNldCB0aXRsZSAnb3BlcmF0aW9uYWwgdGltZSB2cyBuJ1xuIik7CiAgICBmcHJpbnRmKGdwLCAic2V0IHhsYWJlbCAnb3JkZXIgb2YgbWF0cml4LSBuJ1xuIik7CiAgICBmcHJpbnRmKGdwLCAic2V0IHlsYWJlbCAndGltZSB0YWtlbihzKSdcbiIpOwogICAgZnByaW50ZihncCwgInBsb3QgJy0nIHdpdGggbGluZXMgdGl0bGUgJ3RpbWUocyknXG4iKTsKCiAgICBmb3IgKGRvdWJsZSB4ID0gMDsgeCA8IDU7IHggKyspIHsKICAgICAgICBmcHJpbnRmKGdwLCAiJWYgJWZcbiIsICgyNTYqcG93KDIseCkpLCB0W3hdKTsKICAgIH0KCiAgICBmcHJpbnRmKGdwLCAiZVxuIik7ICAgLy8gZW5kIG9mIGRhdGEKICAgIGZmbHVzaChncCk7CiAgICBwY2xvc2UoZ3ApOwogICAgcmV0dXJuIDA7Cgp9