From 18e12d8045bbf9df454f2246b8d92f4f1e4a611f Mon Sep 17 00:00:00 2001
From: Prakalp Srivastava <prakalps@gmail.com>
Date: Thu, 11 Jun 2015 10:01:54 -0500
Subject: [PATCH] Fixed timers in sgemm and spmv

---
 .../parboil/benchmarks/sgemm/src/opencl_base/main.cc     | 9 ++++++---
 llvm/test/VISC/parboil/benchmarks/sgemm/src/visc/main.cc | 7 ++++---
 llvm/test/VISC/parboil/benchmarks/spmv/src/visc/main.c   | 2 +-
 3 files changed, 11 insertions(+), 7 deletions(-)

diff --git a/llvm/test/VISC/parboil/benchmarks/sgemm/src/opencl_base/main.cc b/llvm/test/VISC/parboil/benchmarks/sgemm/src/opencl_base/main.cc
index 6360dfb643..4d199149e2 100644
--- a/llvm/test/VISC/parboil/benchmarks/sgemm/src/opencl_base/main.cc
+++ b/llvm/test/VISC/parboil/benchmarks/sgemm/src/opencl_base/main.cc
@@ -102,6 +102,7 @@ int main (int argc, char *argv[]) {
       exit(-1);
     }
 
+  pb_SwitchToTimer(&timers, visc_TimerID_SETUP);
   cl_int clStatus;
   cl_platform_id clPlatform;
   clStatus = clGetPlatformIDs(1,&clPlatform,NULL);
@@ -139,14 +140,13 @@ int main (int argc, char *argv[]) {
   // load A
   readColMajorMatrixFile(params->inpFiles[0],
       matArow, matAcol, matA);
-  // copy A to device memory
-  A_sz = matArow*matAcol*sizeof(float);
-
   // load B^T
   readColMajorMatrixFile(params->inpFiles[2],
       matBcol, matBrow, matBT);
 
   pb_SwitchToTimer( &timers, pb_TimerID_COMPUTE );
+  // copy A to device memory
+  A_sz = matArow*matAcol*sizeof(float);
   B_sz = matBrow*matBcol*sizeof(float);
 
   // allocate space for C
@@ -154,6 +154,8 @@ int main (int argc, char *argv[]) {
 
   // OpenCL memory allocation
   std::vector<float> matC(matArow*matBcol);
+  
+  pb_SwitchToTimer( &timers, pb_TimerID_COPY );
   cl_mem dA = clCreateBuffer(clContext,CL_MEM_READ_ONLY,A_sz,NULL,&clStatus);
   CHECK_ERROR("clCreateBuffer")
   cl_mem dB = clCreateBuffer(clContext,CL_MEM_READ_ONLY,B_sz,NULL,&clStatus);
@@ -174,6 +176,7 @@ int main (int argc, char *argv[]) {
   clStatus = clEnqueueWriteBuffer(clCommandQueue,dC,CL_TRUE,0,C_sz,&matC.front(),0,NULL,NULL);
   CHECK_ERROR("clEnqueueWriteBuffer")
 
+  pb_SwitchToTimer( &timers, pb_TimerID_COMPUTE );
   pb_SwitchToTimer( &timers, pb_TimerID_KERNEL );
 
   // Use standard sgemm interface
diff --git a/llvm/test/VISC/parboil/benchmarks/sgemm/src/visc/main.cc b/llvm/test/VISC/parboil/benchmarks/sgemm/src/visc/main.cc
index 81d791568b..23d89aeb16 100644
--- a/llvm/test/VISC/parboil/benchmarks/sgemm/src/visc/main.cc
+++ b/llvm/test/VISC/parboil/benchmarks/sgemm/src/visc/main.cc
@@ -108,14 +108,14 @@ int main (int argc, char *argv[]) {
     // load A
     readColMajorMatrixFile(params->inpFiles[0],
                            matArow, matAcol, matA);
-    // copy A to device memory
-    A_sz = matArow*matAcol*sizeof(float);
 
     // load B^T
     readColMajorMatrixFile(params->inpFiles[2],
                            matBcol, matBrow, matBT);
 
     pb_SwitchToTimer( &timers, pb_TimerID_COMPUTE );
+    // copy A to device memory
+    A_sz = matArow*matAcol*sizeof(float);
     B_sz = matBrow*matBcol*sizeof(float);
 
     // allocate space for C
@@ -133,7 +133,7 @@ int main (int argc, char *argv[]) {
     for(size_t i=0; i<matC.size(); i++)
         matC[i] = 0.0f;
 
-    pb_SwitchToTimer( &timers, pb_TimerID_KERNEL );
+    pb_SwitchToTimer( &timers, pb_TimerID_NONE );
 
     // Use standard sgemm interface
     basicSgemm('N', 'T', matArow, matBcol, matAcol, 1.0f, \
@@ -149,6 +149,7 @@ int main (int argc, char *argv[]) {
                                 matArow, matBcol, matC);
     }
 
+    pb_SwitchToTimer( &timers, visc_TimerID_MEM_UNTRACK );
     llvm_visc_untrack_mem(&matA.front());
     llvm_visc_untrack_mem(&matBT.front());
     llvm_visc_untrack_mem(&matC.front());
diff --git a/llvm/test/VISC/parboil/benchmarks/spmv/src/visc/main.c b/llvm/test/VISC/parboil/benchmarks/spmv/src/visc/main.c
index 78cef8f7af..cf153ac4d4 100644
--- a/llvm/test/VISC/parboil/benchmarks/spmv/src/visc/main.c
+++ b/llvm/test/VISC/parboil/benchmarks/spmv/src/visc/main.c
@@ -99,7 +99,6 @@ void spmv_jds(float *dst_vector, float *d_data,
 }
 
 int main(int argc, char** argv) {
-    __visc__init();
     struct pb_TimerSet timers;
     struct pb_Parameters *parameters;
 
@@ -114,6 +113,7 @@ int main(int argc, char** argv) {
     }
 
     pb_InitializeTimerSet(&timers);
+    __visc__init();
     pb_SwitchToTimer(&timers, pb_TimerID_COMPUTE);
 
     //parameters declaration
-- 
GitLab