diff --git a/llvm/projects/hpvm-tensor-rt/dnn_sources/include/utils.h b/llvm/projects/hpvm-tensor-rt/dnn_sources/include/utils.h
index 1eb32c2df8ffd5e5bad18d010686fb446354b723..a627f83e6b2aa9f38b09d82ee94ce35da1a6bafe 100644
--- a/llvm/projects/hpvm-tensor-rt/dnn_sources/include/utils.h
+++ b/llvm/projects/hpvm-tensor-rt/dnn_sources/include/utils.h
@@ -412,7 +412,7 @@ uint8_t* readLabels(const char* labels_file, int num_labels){
 
 
 
-uint32_t* readLabels2(const char* labels_file, int num_labels){
+uint32_t* readLabels3(const char* labels_file, int num_labels){
 
   uint32_t* labels = (uint32_t*) malloc(sizeof(uint32_t) * num_labels);
   FILE* file = fopen(labels_file, "rb");
@@ -453,7 +453,7 @@ uint8_t* readLabelsBatch(const char* labels_file, int start, int end){
 }
 
 
-uint32_t* readLabelsBatch2(const char* labels_file, int start, int end){
+uint32_t* readLabelsBatch3(const char* labels_file, int start, int end){
 
   int num_labels = end - start;
   int file_header_size = sizeof(uint32_t) * start;
diff --git a/llvm/projects/hpvm-tensor-rt/dnn_sources/src/lenet_int32.cc b/llvm/projects/hpvm-tensor-rt/dnn_sources/src/lenet_int32.cc
index 552826eebfedc0333c3e7a2f5b2cce5753f9e6f4..03a4137004fe063a4536efec8fa7ecf2d8d2b374 100644
--- a/llvm/projects/hpvm-tensor-rt/dnn_sources/src/lenet_int32.cc
+++ b/llvm/projects/hpvm-tensor-rt/dnn_sources/src/lenet_int32.cc
@@ -72,7 +72,7 @@ int main(){
     void* var_17 = tensorRelu(var_16); 
     void* var_18 = tensorSoftmax(var_17); 
 
-    uint32_t* labels = readLabelsBatch2(labels_path.c_str(),start,end); 
+    uint32_t* labels = readLabelsBatch3(labels_path.c_str(),start,end); 
 
     float accuracy = computeAccuracy3(labels, var_18); 
     final_accuracy += accuracy; 
diff --git a/llvm/projects/hpvm-tensor-rt/model_params/alexnet2_cifar10_test/labels32.bin b/llvm/projects/hpvm-tensor-rt/model_params/alexnet2_cifar10_test/labels32.bin
new file mode 100644
index 0000000000000000000000000000000000000000..f2d1cdf8748dabd80aca7314824ed7fc0002524d
Binary files /dev/null and b/llvm/projects/hpvm-tensor-rt/model_params/alexnet2_cifar10_test/labels32.bin differ
diff --git a/llvm/projects/hpvm-tensor-rt/model_params/alexnet_cifar10_test/labels32.bin b/llvm/projects/hpvm-tensor-rt/model_params/alexnet_cifar10_test/labels32.bin
new file mode 100644
index 0000000000000000000000000000000000000000..f2d1cdf8748dabd80aca7314824ed7fc0002524d
Binary files /dev/null and b/llvm/projects/hpvm-tensor-rt/model_params/alexnet_cifar10_test/labels32.bin differ
diff --git a/llvm/test/VISC/DNN_Benchmarks/benchmarks/alexnet/src/alexnet_loop.cpp b/llvm/test/VISC/DNN_Benchmarks/benchmarks/alexnet/src/alexnet_loop.cpp
index 7b0fb69dd853dbe678c1dee535d0ba0fdbdebcaa..ee07bdd8f9901f1582d5f7642a2a86c099397a14 100644
--- a/llvm/test/VISC/DNN_Benchmarks/benchmarks/alexnet/src/alexnet_loop.cpp
+++ b/llvm/test/VISC/DNN_Benchmarks/benchmarks/alexnet/src/alexnet_loop.cpp
@@ -372,7 +372,7 @@ int main(){
   std::string dir_prefix = std::string("../../../../../../projects/hpvm-tensor-rt/model_params/alexnet_cifar10_test/");
 
 
-  std::string labels_path =  dir_prefix + std::string("labels.bin"); 
+  std::string labels_path =  dir_prefix + std::string("labels32.bin"); 
   //uint8_t* labels = readLabels(labels_path.c_str(),10000); 
   std::string conv2d_1_w_path =  dir_prefix + std::string("conv2d_1_w.bin"); 
   void* conv2d_1_w =  readTrainedWeights(conv2d_1_w_path.c_str(), 0,64,3,11,11); 
@@ -436,6 +436,7 @@ int main(){
   std::string input_path =  dir_prefix + std::string("input.bin"); 
   void* input = create4DTensor(0,nchw,batch_size,3,32,32);
 
+  
   startMemTracking();
   for (int i = 0; i < batch_count; i++){
 
@@ -457,11 +458,11 @@ int main(){
     hpvm_request_tensor(result, 0); 
 
 
-    uint8_t* labels = readLabelsBatch(labels_path.c_str(),start,end); 
+    uint32_t* labels = readLabelsBatch3(labels_path.c_str(),start,end); 
 
-    computeAccuracy2(labels, batch_size, result);
+    computeAccuracy3(labels, result);
 
-    llvm_hpvm_invokeRtControl(result, labels);
+    llvm_hpvm_invokeRtControl2(result, labels);
       
     freeBatchMemory();
   }
diff --git a/llvm/test/VISC/DNN_Benchmarks/benchmarks/alexnet2/src/alexnet2_loop.cpp b/llvm/test/VISC/DNN_Benchmarks/benchmarks/alexnet2/src/alexnet2_loop.cpp
index 71ee98ee9adf1d7fded523ad4ec32fc3d3ce27a0..4147adabc31baaa6d5619ef72ab02942b859b9a7 100644
--- a/llvm/test/VISC/DNN_Benchmarks/benchmarks/alexnet2/src/alexnet2_loop.cpp
+++ b/llvm/test/VISC/DNN_Benchmarks/benchmarks/alexnet2/src/alexnet2_loop.cpp
@@ -420,7 +420,7 @@ int main(){
 
   std::string dir_prefix = std::string("../../../../../../projects/hpvm-tensor-rt/model_params/alexnet2_cifar10_test/");
   
-  std::string labels_path =  dir_prefix + std::string("labels.bin"); 
+  std::string labels_path =  dir_prefix + std::string("labels32.bin"); 
   std::string conv2d_1_w_path =  dir_prefix + std::string("conv2d_1_w.bin"); 
   void* conv2d_1_w =  readTrainedWeights(conv2d_1_w_path.c_str(), 0,32,3,3,3); 
   std::string conv2d_1_b_path =  dir_prefix + std::string("conv2d_1_b.bin"); 
@@ -513,11 +513,11 @@ int main(){
     hpvm_request_tensor(result, 0); 
 
 
-    uint8_t* labels = readLabelsBatch(labels_path.c_str(),start,end); 
+    uint32_t* labels = readLabelsBatch3(labels_path.c_str(),start,end); 
 
-    computeAccuracy2(labels, batch_size, result);
+    computeAccuracy3(labels, result);
 
-    llvm_hpvm_invokeRtControl(result, labels);
+    llvm_hpvm_invokeRtControl2(result, labels);
       
     freeBatchMemory();
   }
diff --git a/llvm/test/VISC/DNN_Benchmarks/common/include/tensorUtils.h b/llvm/test/VISC/DNN_Benchmarks/common/include/tensorUtils.h
index 8976f7dc8fa5df24536b051a5d436da6555161cf..a627f83e6b2aa9f38b09d82ee94ce35da1a6bafe 100644
--- a/llvm/test/VISC/DNN_Benchmarks/common/include/tensorUtils.h
+++ b/llvm/test/VISC/DNN_Benchmarks/common/include/tensorUtils.h
@@ -412,7 +412,7 @@ uint8_t* readLabels(const char* labels_file, int num_labels){
 
 
 
-uint32_t* readLabels2(const char* labels_file, int num_labels){
+uint32_t* readLabels3(const char* labels_file, int num_labels){
 
   uint32_t* labels = (uint32_t*) malloc(sizeof(uint32_t) * num_labels);
   FILE* file = fopen(labels_file, "rb");
@@ -453,7 +453,7 @@ uint8_t* readLabelsBatch(const char* labels_file, int start, int end){
 }
 
 
-uint32_t* readLabelsBatch2(const char* labels_file, int start, int end){
+uint32_t* readLabelsBatch3(const char* labels_file, int start, int end){
 
   int num_labels = end - start;
   int file_header_size = sizeof(uint32_t) * start;
@@ -518,40 +518,75 @@ void computeAccuracy(const char* labels_file, int num_labels, void* result_ptr){
 
 
 
-float computeAccuracy2(uint8_t* labels, int num_labels,
-		       void* result_ptr, unsigned num_classes = 10){
+// NOTE: batch_size and num_classes are Unused arguments 
+float computeAccuracy2(uint8_t* labels, int batch_size,
+		       void* result_ptr, size_t num_classes = 10){
 
-  unsigned num_zeros = 0;
+  struct Tensor* result = (struct Tensor*) result_ptr;
+  
+  size_t batch_dim = result->dims.dim_sizes[0];
+  num_classes = result->dims.dim_sizes[1];
+  float* data = (float*) result->host_data;
+  int num_errors = 0;
+
+  printf("batch_dim = %lu, channels = %lu \n", batch_dim, num_classes);
+  
+  for(unsigned int i = 0; i < batch_dim; i++){ 
+      
+    int chosen = 0;
+    for (int id = 1; id < num_classes; ++id){
+      if (data[i * num_classes + chosen] < data[i * num_classes + id]) chosen = id;
+    }
+    
+    if(chosen != labels[i])
+      num_errors++;
+
+  }
+
+  float accuracy = ((batch_dim - num_errors) * 1.0 / batch_dim * 1.0) * 100.0;
+  printf("****** Accuracy = %f \n\n", accuracy);
+
+  FILE* fp = fopen("final_accuracy", "w+");
+  if(fp != NULL){
+
+    std::ostringstream ss;
+    ss << std::fixed << accuracy;
+    std::string print_str = ss.str();
+  
+    fwrite(print_str.c_str(), 1, print_str.length(), fp);
+  }
+
+  fclose(fp);
+
+  return accuracy;    
+}
+
+
+
+float computeAccuracy3(uint32_t* labels, void* result_ptr){
   
   struct Tensor* result = (struct Tensor*) result_ptr;
   
   size_t batch_dim = result->dims.dim_sizes[0];
-  size_t channels = result->dims.dim_sizes[1];
+  size_t num_classes = result->dims.dim_sizes[1];
   float* data = (float*) result->host_data;
   int num_errors = 0;
 
-  printf("batch_dim = %lu, channels = %lu \n", batch_dim, channels);
+  printf("batch_dim = %lu, num_classes = %lu \n", batch_dim, num_classes);
   
-  for(int i = 0; i < num_labels; i++){
+  for(int i = 0; i < batch_dim; i++){
   
     int chosen = 0;
-    //for (int id = 1; id < num_classes; ++id){
-    for (int id = 1; id < channels; ++id){
-      if (data[i * channels + chosen] < data[i * channels + id]) chosen = id;
+    for (int id = 1; id < num_classes; ++id){
+      if (data[i * num_classes + chosen] < data[i * num_classes + id]) chosen = id;
     }
     
-    if(labels[i] == 0)
-      num_zeros++;
-      
     if(chosen != labels[i])
       num_errors++;
-
-    //printf("chosen = %d, label = %d \n", chosen, labels[i]);
   }
 
   float accuracy = ((batch_dim - num_errors) * 1.0 / batch_dim * 1.0) * 100.0;
   printf("****** Accuracy = %f \n\n", accuracy);
-  //printf("****** Zero class labels %d \n", num_zeros);
 
   FILE* fp = fopen("final_accuracy", "w+");
   if(fp != NULL){
@@ -569,6 +604,7 @@ float computeAccuracy2(uint8_t* labels, int num_labels,
 }
 
 
+
 struct ClassProb{
   float prob;
   int index;