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 f8c75f710205a462515b22e829f5ee860c4e8811..750891d138f1506d9ad557adc9a440708f8382b4 100644 --- a/llvm/projects/hpvm-tensor-rt/dnn_sources/include/utils.h +++ b/llvm/projects/hpvm-tensor-rt/dnn_sources/include/utils.h @@ -9,6 +9,7 @@ #include <bits/stdc++.h> #include "../../tensor_runtime/include/tensor.h" #include "types.h" +#include <cmath> std::vector<float> run_accuracies; @@ -42,9 +43,9 @@ void dumpWeightsToFile(char* file_name, void* weights_ptr){ abort(); } - printf("size_in_bytes = %lu \n", weights->size_in_bytes); + //printf("size_in_bytes = %lu \n", weights->size_in_bytes); size_t bytes_written = fwrite(weights->host_data, 1, weights->size_in_bytes, fp); - printf("bytes_written = %lu \n", bytes_written); + //printf("bytes_written = %lu \n", bytes_written); fclose(fp); } @@ -209,7 +210,7 @@ void* readInputTensor(const char* file_name, int data_type, int dim1_size, int d tensor_data[i] = (float) file_data[i] / 255.0f; } - printf("tensor_data[%d] = %f \n", 10, tensor_data[10]); + //printf("tensor_data[%d] = %f \n", 10, tensor_data[10]); // NOTE: Using NCHW format struct Tensor* input = (struct Tensor*) create4DTensor(data_type, nchw, dim1_size, dim2_size, @@ -243,7 +244,7 @@ struct Tensor* readTrainedWeights(const char* file_name, int data_type, fseek(file, file_header_size, SEEK_CUR); // Skipping the file header size_t bytes_read = fread(tensor_data, 1, size_in_bytes, file); - printf("size in bytes = %lu, bytes read = %lu \n", size_in_bytes, bytes_read); + // printf("size in bytes = %lu, bytes read = %lu \n", size_in_bytes, bytes_read); fclose(file); @@ -282,7 +283,7 @@ struct Tensor* readInputBatch(const char* file_name, int data_type, fseek(file, file_header_size, SEEK_SET); // Skipping the file header size_t bytes_read = fread(tensor_data, 1, size_in_bytes, file); - printf("size in bytes = %lu, bytes read = %lu \n", size_in_bytes, bytes_read); + // printf("size in bytes = %lu, bytes read = %lu \n", size_in_bytes, bytes_read); fclose(file); @@ -311,7 +312,7 @@ uint8_t* readLabels(const char* labels_file, int num_labels){ fclose(file); - printf("--labels bytes_read = %lu \n", bytes_read); + // printf("--labels bytes_read = %lu \n", bytes_read); return labels; } @@ -335,7 +336,7 @@ uint8_t* readLabelsBatch(const char* labels_file, int start, int end){ fclose(file); - printf("--labels bytes_read = %lu \n", bytes_read); + // printf("--labels bytes_read = %lu \n", bytes_read); return labels; } @@ -536,4 +537,46 @@ void dumpExecutionAccuracies(){ +float computePSNRViolation(void* gold_ptr, void* approx_ptr, float PSNR_threshold){ + + struct Tensor* gold_tensor = (struct Tensor*) gold_ptr; + struct Tensor* approx_tensor = (struct Tensor*) approx_ptr; + + size_t* dim_sizes = gold_tensor->dims.dim_sizes; + size_t batch_dim = dim_sizes[0]; + size_t image_size = dim_sizes[1] * dim_sizes[2] * dim_sizes[3]; + + printf("batch_dim = %d, image_size = %d \n", batch_dim, image_size); + + float* gold_data = (float*) gold_tensor->host_data; + float* approx_data = (float*) approx_tensor->host_data; + + int num_errors = 0; + for(size_t i = 0; i < batch_dim; i++){ + float mse_sum = 0.0; + float max_val = -999999; + size_t offset = i * image_size; + + for(size_t j = 0; j < image_size; j++){ + float diff = gold_data[offset + j] - approx_data[offset + j]; + float diff_square = diff * diff; + mse_sum += diff_square; + + if(max_val < gold_data[offset + j]){ + max_val = gold_data[offset + j]; + } + } + + printf ("max_val = %f \n", max_val); + mse_sum = mse_sum / image_size; + float psnr = 20 * log10(max_val / sqrt(mse_sum)); + + printf("PSNR value = %f \n", psnr); + } + + return 0.0; +} + + + #endif