summaryrefslogtreecommitdiffstats
path: root/src/openblas-test.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/openblas-test.c')
-rw-r--r--src/openblas-test.c71
1 files changed, 71 insertions, 0 deletions
diff --git a/src/openblas-test.c b/src/openblas-test.c
new file mode 100644
index 0000000..1568224
--- /dev/null
+++ b/src/openblas-test.c
@@ -0,0 +1,71 @@
+/*
+ * This file is part of MXE.
+ * See index.html for further information.
+ *
+ * taken from: https://gist.github.com/xianyi/5780018
+ */
+
+#include "stdio.h"
+#include "stdlib.h"
+#include "sys/time.h"
+#include "time.h"
+
+extern void dgemm_(char*, char*, int*, int*,int*, double*, double*, int*, double*, int*, double*, double*, int*);
+
+int main(int argc, char* argv[])
+{
+ int i;
+ printf("test!\n");
+ if(argc<4){
+ printf("Input Error\n");
+ return 1;
+ }
+
+ int m = atoi(argv[1]);
+ int n = atoi(argv[2]);
+ int k = atoi(argv[3]);
+ int sizeofa = m * k;
+ int sizeofb = k * n;
+ int sizeofc = m * n;
+ char ta = 'N';
+ char tb = 'N';
+ double alpha = 1.2;
+ double beta = 0.001;
+
+ struct timeval start,finish;
+ double duration;
+
+ double* A = (double*)malloc(sizeof(double) * sizeofa);
+ double* B = (double*)malloc(sizeof(double) * sizeofb);
+ double* C = (double*)malloc(sizeof(double) * sizeofc);
+
+ srand((unsigned)time(NULL));
+
+ for (i=0; i<sizeofa; i++)
+ A[i] = i%3+1;//(rand()%100)/10.0;
+
+ for (i=0; i<sizeofb; i++)
+ B[i] = i%3+1;//(rand()%100)/10.0;
+
+ for (i=0; i<sizeofc; i++)
+ C[i] = i%3+1;//(rand()%100)/10.0;
+ //#if 0
+ printf("m=%d,n=%d,k=%d,alpha=%lf,beta=%lf,sizeofc=%d\n",m,n,k,alpha,beta,sizeofc);
+ gettimeofday(&start, NULL);
+ dgemm_(&ta, &tb, &m, &n, &k, &alpha, A, &m, B, &k, &beta, C, &m);
+ gettimeofday(&finish, NULL);
+
+ duration = ((double)(finish.tv_sec-start.tv_sec)*1000000 + (double)(finish.tv_usec-start.tv_usec)) / 1000000;
+ double gflops = 2.0 * m *n*k;
+ gflops = gflops/duration*1.0e-6;
+
+ FILE *fp;
+ fp = fopen("timeDGEMM.txt", "a");
+ fprintf(fp, "%dx%dx%d\t%lf s\t%lf MFLOPS\n", m, n, k, duration, gflops);
+ fclose(fp);
+
+ free(A);
+ free(B);
+ free(C);
+ return 0;
+}