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 6cf1cc90f4f3003efc939879c9679fb3dea3e2c6..27d777d7ba52b5bf85316d5121c598c329ecde13 100644 --- a/llvm/projects/hpvm-tensor-rt/dnn_sources/include/utils.h +++ b/llvm/projects/hpvm-tensor-rt/dnn_sources/include/utils.h @@ -569,21 +569,33 @@ float computePSNRViolation(void* gold_ptr, void* approx_ptr, float PSNR_threshol } } - printf ("max_val = %f \n", max_val); mse_sum = mse_sum / image_size; float psnr = 20 * log10(max_val / sqrt(mse_sum)); + if (psnr < PSNR_threshold) + num_errors += 1; + printf("PSNR value = %f \n", psnr); } - return 0.0; + + float violation_rate = (num_errors * 1.0) / batch_dim * 100.0; + printf("*** violation_rate= %f \n\n", violation_rate); + + return violation_rate; } -void dumpOutput(void* output){ +void dumpOutput(void* output_ptr){ + struct Tensor* out_tensor = (struct Tensor*) output_ptr; + size_t size_in_bytes = out_tensor->size_in_bytes; + printf ("** Output size = %lu \n", size_in_bytes); - + float* host_data = (float*) out_tensor->host_data; + FILE* fd = fopen("output.bin", "w+"); + fwrite(host_data, 1, size_in_bytes, fd); + fclose(fd); } diff --git a/llvm/projects/hpvm-tensor-rt/dnn_sources/src/pipeline.cc b/llvm/projects/hpvm-tensor-rt/dnn_sources/src/pipeline.cc index 0c74f130144488ce3901d450b24a234aefb1209c..6b3c960cc51f75fd9014f75e682d7a941f7cece7 100644 --- a/llvm/projects/hpvm-tensor-rt/dnn_sources/src/pipeline.cc +++ b/llvm/projects/hpvm-tensor-rt/dnn_sources/src/pipeline.cc @@ -86,8 +86,6 @@ void testLenetTanh(){ readOpenTunerFlags("opentuner_flags"); // Resets the OpenTuner counters - // Start power and performnce profiling - startProfiling(); int conv_mode = 1; // NOTE: using CROSS_CORRELATION int conv_precision = 0; // NOTE: using Float as compute precision. FIXIT: use enum @@ -107,10 +105,13 @@ void testLenetTanh(){ void* result = tensorAdd(emboss_out, emboss_bias); - // End profiling and dump output to profile.txt - stopProfiling(); - + // NOTE-IMP: Important to include this call always before doing dumpOutput and computePSNViolation + hpvm_request_tensor(result, 0); + + dumpOutput(result); + computePSNRViolation(golden_output, result, 30); + dumpAccuracyNorms(); freeOutputTensors();