From b8bb1dd3f114685f5e50ff58c3ce688bb005038d Mon Sep 17 00:00:00 2001 From: Hashim Sharif <hsharif3@tyler.cs.illinois.edu> Date: Sat, 14 Sep 2019 23:59:45 -0500 Subject: [PATCH] Adding early exit for Promise Tuner files --- .../src/promise/alexnet2_promise.cc | 26 ++++- .../src/promise/alexnet_promise.cc | 27 ++++- .../dnn_sources/src/promise/lenet_promise.cc | 98 ++++++++++++------- .../src/promise/mobilenet_promise.cc | 61 ++++++++---- .../src/promise/mobilenet_shallow_promise.cc | 23 ++++- .../src/promise/resnet18_promise.cc | 23 ++++- .../src/promise/vgg16_cifar100_promise.cc | 29 +++++- .../src/promise/vgg16_cifar10_promise.cc | 25 ++++- .../autotuner/measure_confidence2.py | 3 +- 9 files changed, 247 insertions(+), 68 deletions(-) diff --git a/llvm/projects/hpvm-tensor-rt/dnn_sources/src/promise/alexnet2_promise.cc b/llvm/projects/hpvm-tensor-rt/dnn_sources/src/promise/alexnet2_promise.cc index b6cea42050..6074dacf3f 100644 --- a/llvm/projects/hpvm-tensor-rt/dnn_sources/src/promise/alexnet2_promise.cc +++ b/llvm/projects/hpvm-tensor-rt/dnn_sources/src/promise/alexnet2_promise.cc @@ -9,17 +9,36 @@ #include "../../../tensor_runtime/include/tensor_runtime.h" #include "../../include/utils.h" + +int total_runs = 1; +float bench_acc = 0; +int to_skip = 5; + int main(int argc, char* argv[]){ - int total_runs = 1; + if (argc > 1){ total_runs = atoi(argv[1]); } + if (argc > 2){ + bench_acc = atof(argv[2]); + } + + if(argc > 3){ + to_skip = atoi(argv[3]); + } + + llvm_hpvm_initTensorRt(1); + int missed = 0; for (int i = 0 ; i < total_runs; i++){ + if (missed >= to_skip){ + break; + } + startMemTracking(); int test_input_size = 1000; @@ -89,7 +108,10 @@ int main(int argc, char* argv[]){ } final_accuracy = final_accuracy / batch_count; - dumpFinalAccuracy(final_accuracy); + dumpFinalAccuracy(final_accuracy); + + if (final_accuracy < bench_acc) + missed += 1; } diff --git a/llvm/projects/hpvm-tensor-rt/dnn_sources/src/promise/alexnet_promise.cc b/llvm/projects/hpvm-tensor-rt/dnn_sources/src/promise/alexnet_promise.cc index dfc03b24d1..0513723b5a 100644 --- a/llvm/projects/hpvm-tensor-rt/dnn_sources/src/promise/alexnet_promise.cc +++ b/llvm/projects/hpvm-tensor-rt/dnn_sources/src/promise/alexnet_promise.cc @@ -10,18 +10,37 @@ #include "../../include/utils.h" +int total_runs = 1; +float bench_acc = 0; +int to_skip = 5; + + int main(int argc, char* argv[]){ - int total_runs = 1; + if (argc > 1){ total_runs = atoi(argv[1]); } + if (argc > 2){ + bench_acc = atof(argv[2]); + } + + if(argc > 3){ + to_skip = atoi(argv[3]); + } + llvm_hpvm_initTensorRt(1); + + int missed = 0; for (int i = 0 ; i < total_runs; i++){ + if (missed >= to_skip){ + break; + } + startMemTracking(); int test_input_size = 1000; @@ -83,7 +102,11 @@ int main(int argc, char* argv[]){ } final_accuracy = final_accuracy / batch_count; - dumpFinalAccuracy(final_accuracy); + dumpFinalAccuracy(final_accuracy); + + + if (final_accuracy < bench_acc) + missed += 1; } diff --git a/llvm/projects/hpvm-tensor-rt/dnn_sources/src/promise/lenet_promise.cc b/llvm/projects/hpvm-tensor-rt/dnn_sources/src/promise/lenet_promise.cc index bfc29d7b9c..37a30c5500 100644 --- a/llvm/projects/hpvm-tensor-rt/dnn_sources/src/promise/lenet_promise.cc +++ b/llvm/projects/hpvm-tensor-rt/dnn_sources/src/promise/lenet_promise.cc @@ -14,6 +14,8 @@ // Piped OpenTuner usage is now deprecated bool Opentuner_run = false; int total_runs = 1; +float bench_acc = 0; +int to_skip = 5; /* NOTE: Reference Architecture to use for profiling */ @@ -29,15 +31,17 @@ void testLenetTanh(){ clearTensorMap(); + int missed = 0; for(int i = 0; i < total_runs; i++){ + if (missed >= to_skip){ + break; + } + void* input = readInputTensor("../model_params/lenet_params/datasets/t10k-images-idx3-ubyte", CUDNN_DATA_FLOAT, test_batch_size, 1, 28, 28); - // NOTE: Filter descriptors do NOT have batch size - // NOTE: First two dims are output channels (configurable), input channels (MUST match input channels) - // IMP: The output channels matches the trained model - not the Lenet arch proposed in Andrew Ng's class void* conv1_filter = readTrainedWeights("../model_params/lenet_keras/conv1.bin", float_type, 32, 1, 5, 5); void* conv1_bias = readTrainedWeights("../model_params/lenet_keras/conv1_bias.bin", @@ -56,25 +60,6 @@ void testLenetTanh(){ float_type, 1, 10, 1, 1); - if(Opentuner_run){ - - char* myfifo = "/tmp/myfifo"; - int fd = open(myfifo, O_RDONLY); - - int ret_val = fcntl(fd, F_GETFD); - if(ret_val == -1){ - printf("Invalid descriptor \n"); - abort(); - } - - char str[100]; - read(fd, str, 80); - if(strcmp(str, "stop_run") == 0){ - abort(); - } - - close(fd); - } readOpenTunerFlags("promise_flags"); // Resets the OpenTuner counters @@ -101,22 +86,10 @@ void testLenetTanh(){ dumpFinalAccuracy(accuracy); - - if(Opentuner_run){ - char* myfifo = "/tmp/myfifo"; - int fd_out = open(myfifo, O_WRONLY); - int ret_val = fcntl(fd_out, F_GETFD); - if(ret_val == -1){ - printf("Invalid descriptor \n"); - abort(); - } - - const char* str = "completed***!\n\0"; - write(fd_out, str, 80); - close(fd_out); - } - + if (accuracy < bench_acc) + missed += 1; + } dumpExecutionAccuracies(); @@ -130,6 +103,14 @@ int main(int argc, char* argv[]){ total_runs = atoi(argv[1]); } + if (argc > 2){ + bench_acc = atof(argv[2]); + } + + if(argc > 3){ + to_skip = atoi(argv[3]); + } + llvm_hpvm_initTensorRt(0); @@ -140,3 +121,46 @@ int main(int argc, char* argv[]){ return 0; } + + + + + + +/* if(Opentuner_run){ + + char* myfifo = "/tmp/myfifo"; + int fd = open(myfifo, O_RDONLY); + + int ret_val = fcntl(fd, F_GETFD); + if(ret_val == -1){ + printf("Invalid descriptor \n"); + abort(); + } + + char str[100]; + read(fd, str, 80); + if(strcmp(str, "stop_run") == 0){ + abort(); + } + + close(fd); + } +*/ + + +/* if(Opentuner_run){ + + char* myfifo = "/tmp/myfifo"; + int fd_out = open(myfifo, O_WRONLY); + int ret_val = fcntl(fd_out, F_GETFD); + if(ret_val == -1){ + printf("Invalid descriptor \n"); + abort(); + } + + const char* str = "completed***!\n\0"; + write(fd_out, str, 80); + close(fd_out); + } +*/ diff --git a/llvm/projects/hpvm-tensor-rt/dnn_sources/src/promise/mobilenet_promise.cc b/llvm/projects/hpvm-tensor-rt/dnn_sources/src/promise/mobilenet_promise.cc index 19e54b5ee2..9b82b3ea75 100644 --- a/llvm/projects/hpvm-tensor-rt/dnn_sources/src/promise/mobilenet_promise.cc +++ b/llvm/projects/hpvm-tensor-rt/dnn_sources/src/promise/mobilenet_promise.cc @@ -9,17 +9,38 @@ #include "../../../tensor_runtime/include/tensor_runtime.h" #include "../../include/utils.h" + +int total_runs = 1; +float bench_acc = 0; +int to_skip = 5; + + int main(int argc, char* argv[]){ - int total_runs = 1; + if (argc > 1){ total_runs = atoi(argv[1]); } - llvm_hpvm_initTensorRt(0); + if (argc > 2){ + bench_acc = atof(argv[2]); + } + + if(argc > 3){ + to_skip = atoi(argv[3]); + } + + + llvm_hpvm_initTensorRt(1); + + int missed = 0; for (int i = 0 ; i < total_runs; i++){ + if (missed >= to_skip){ + break; + } + startMemTracking(); int test_input_size = 1000; @@ -29,7 +50,8 @@ int main(int argc, char* argv[]){ for(int i = 0; i < batch_count; i++){ - std::string dir_prefix = std::string("../../keras/data/mobilenet_test_5/"); + + std::string dir_prefix = std::string("../../keras/data/mobilenet_quant/"); std::string input_path = dir_prefix + std::string("input.bin"); std::string labels_path = dir_prefix + std::string("labels.bin"); std::string conv2d_1_w_path = dir_prefix + std::string("conv2d_1_w.bin"); @@ -313,89 +335,89 @@ int main(int argc, char* argv[]){ void* input = readInputBatch(input_path.c_str(),0,start,end,3,32,32); - void* var_0 = ConvLayer_PROMISE(input, -1.9892114, 2.126797, conv2d_1_w, -1.0851606, 1.451633, NULL, 0, 0, 1, 1, 1, 1, -1, 0, -1, -26.15982448577881, 25.103958129882812, 9); + void* var_0 = ConvLayer_PROMISE(input, -1.9892114, 2.126797, conv2d_1_w, -2.196306920051575, 1.347581704139706, NULL, 0, 0, 1, 1, 1, 1, -1, 0, -1, -60.89275047302246, 51.99256916046146, 9); void* var_1 = tensorBatchNorm(var_0, batch_normalization_1_gamma, batch_normalization_1_beta, batch_normalization_1_mean, batch_normalization_1_variance, 0.001); void* var_2 = tensorRelu(var_1); void* var_3 = tensorConvolution(var_2, depthwise_conv2d_1_w, 1, 1, 1, 1, 1, 32); void* var_4 = tensorBatchNorm(var_3, batch_normalization_2_gamma, batch_normalization_2_beta, batch_normalization_2_mean, batch_normalization_2_variance, 0.001); void* var_5 = tensorRelu(var_4); - void* var_6 = ConvLayer_PROMISE(var_5, 0.0, 4.236004893779741, conv2d_2_w, -0.92661893, 1.2747382, NULL, 0, 0, 0, 0, 1, 1, -1, 0, -1, -4.845528128147125, 3.9501850628852857, 9); + void* var_6 = ConvLayer_PROMISE(var_5, 0.0, 5.713541553974245, conv2d_2_w, -0.9317721160650253, 1.0774258937835774, NULL, 0, 0, 0, 0, 1, 1, -1, 0, -1, -6.518589503288269, 6.810842518806449, 9); void* var_7 = tensorBatchNorm(var_6, batch_normalization_3_gamma, batch_normalization_3_beta, batch_normalization_3_mean, batch_normalization_3_variance, 0.001); void* var_8 = tensorRelu(var_7); void* var_9 = tensorConvolution(var_8, depthwise_conv2d_2_w, 1, 1, 2, 2, 1, 64); void* var_10 = tensorBatchNorm(var_9, batch_normalization_4_gamma, batch_normalization_4_beta, batch_normalization_4_mean, batch_normalization_4_variance, 0.001); void* var_11 = tensorRelu(var_10); - void* var_12 = ConvLayer_PROMISE(var_11, 0.0, 3.331837462186821, conv2d_3_w, -0.6851696, 0.97514033, NULL, 0, 0, 0, 0, 1, 1, -1, 0, -1, -3.2466478753089905, 3.1737997651100134, 9); + void* var_12 = ConvLayer_PROMISE(var_11, 0.0, 4.932139402866376, conv2d_3_w, -0.5316544661521911, 0.5753790403604531, NULL, 0, 0, 0, 0, 1, 1, -1, 0, -1, -4.482631235122681, 3.96730119752885, 9); void* var_13 = tensorBatchNorm(var_12, batch_normalization_5_gamma, batch_normalization_5_beta, batch_normalization_5_mean, batch_normalization_5_variance, 0.001); void* var_14 = tensorRelu(var_13); void* var_15 = tensorConvolution(var_14, depthwise_conv2d_3_w, 1, 1, 1, 1, 1, 128); void* var_16 = tensorBatchNorm(var_15, batch_normalization_6_gamma, batch_normalization_6_beta, batch_normalization_6_mean, batch_normalization_6_variance, 0.001); void* var_17 = tensorRelu(var_16); - void* var_18 = ConvLayer_PROMISE(var_17, 0.0, 3.101028444766998, conv2d_4_w, -0.44624555, 0.61994684, NULL, 0, 0, 0, 0, 1, 1, -1, 0, -1, -2.8684406340122224, 3.4094150185584997, 9); + void* var_18 = ConvLayer_PROMISE(var_17, 0.0, 4.103263397693674, conv2d_4_w, -0.36234098821878435, 0.4076913900375366, NULL, 0, 0, 0, 0, 1, 1, -1, 0, -1, -4.04261828327179, 3.88677932929993, 9); void* var_19 = tensorBatchNorm(var_18, batch_normalization_7_gamma, batch_normalization_7_beta, batch_normalization_7_mean, batch_normalization_7_variance, 0.001); void* var_20 = tensorRelu(var_19); void* var_21 = tensorConvolution(var_20, depthwise_conv2d_4_w, 1, 1, 2, 2, 1, 128); void* var_22 = tensorBatchNorm(var_21, batch_normalization_8_gamma, batch_normalization_8_beta, batch_normalization_8_mean, batch_normalization_8_variance, 0.001); void* var_23 = tensorRelu(var_22); - void* var_24 = ConvLayer_PROMISE(var_23, 0.0, 4.277180709838866, conv2d_5_w, -0.47713536, 0.3870595, NULL, 0, 0, 0, 0, 1, 1, -1, 0, -1, -4.388716280460358, 3.3948878145218107, 9); + void* var_24 = ConvLayer_PROMISE(var_23, 0.0, 5.383221302509475, conv2d_5_w, -0.3131200549006462, 0.29357679939270065, NULL, 0, 0, 0, 0, 1, 1, -1, 0, -1, -5.921469215393066, 4.338679324150087, 9); void* var_25 = tensorBatchNorm(var_24, batch_normalization_9_gamma, batch_normalization_9_beta, batch_normalization_9_mean, batch_normalization_9_variance, 0.001); void* var_26 = tensorRelu(var_25); void* var_27 = tensorConvolution(var_26, depthwise_conv2d_5_w, 1, 1, 1, 1, 1, 256); void* var_28 = tensorBatchNorm(var_27, batch_normalization_10_gamma, batch_normalization_10_beta, batch_normalization_10_mean, batch_normalization_10_variance, 0.001); void* var_29 = tensorRelu(var_28); - void* var_30 = ConvLayer_PROMISE(var_29, 0.0, 3.38968591213227, conv2d_6_w, -0.27188912, 0.38737836, NULL, 0, 0, 0, 0, 1, 1, -1, 0, -1, -3.039871279001236, 3.046174806356437, 9); + void* var_30 = ConvLayer_PROMISE(var_29, 0.0, 4.316738154411368, conv2d_6_w, -0.23299247801303866, 0.2580290257930756, NULL, 0, 0, 0, 0, 1, 1, -1, 0, -1, -4.207789947509766, 3.932436970710759, 9); void* var_31 = tensorBatchNorm(var_30, batch_normalization_11_gamma, batch_normalization_11_beta, batch_normalization_11_mean, batch_normalization_11_variance, 0.001); void* var_32 = tensorRelu(var_31); void* var_33 = tensorConvolution(var_32, depthwise_conv2d_6_w, 1, 1, 2, 2, 1, 256); void* var_34 = tensorBatchNorm(var_33, batch_normalization_12_gamma, batch_normalization_12_beta, batch_normalization_12_mean, batch_normalization_12_variance, 0.001); void* var_35 = tensorRelu(var_34); - void* var_36 = ConvLayer_PROMISE(var_35, 0.0, 4.318326425552359, conv2d_7_w, -0.22026193, 0.26253384, NULL, 0, 0, 0, 0, 1, 1, -1, 0, -1, -3.6486071228981016, 3.1357058513164486, 9); + void* var_36 = ConvLayer_PROMISE(var_35, 0.0, 5.830408106803901, conv2d_7_w, -0.20233777219057084, 0.18998308175802117, NULL, 0, 0, 0, 0, 1, 1, -1, 0, -1, -6.298286915779113, 4.848135117530843, 9); void* var_37 = tensorBatchNorm(var_36, batch_normalization_13_gamma, batch_normalization_13_beta, batch_normalization_13_mean, batch_normalization_13_variance, 0.001); void* var_38 = tensorRelu(var_37); void* var_39 = tensorConvolution(var_38, depthwise_conv2d_7_w, 1, 1, 1, 1, 1, 512); void* var_40 = tensorBatchNorm(var_39, batch_normalization_14_gamma, batch_normalization_14_beta, batch_normalization_14_mean, batch_normalization_14_variance, 0.001); void* var_41 = tensorRelu(var_40); - void* var_42 = ConvLayer_PROMISE(var_41, 0.0, 3.5547023189067835, conv2d_8_w, -0.20200194, 0.27563378, NULL, 0, 0, 0, 0, 1, 1, -1, 0, -1, -3.3069639313220978, 3.006637917757032, 9); + void* var_42 = ConvLayer_PROMISE(var_41, 0.0, 4.446417809963227, conv2d_8_w, -0.17442735651135444, 0.17695830866694454, NULL, 0, 0, 0, 0, 1, 1, -1, 0, -1, -4.347910885810852, 3.6144364695549145, 9); void* var_43 = tensorBatchNorm(var_42, batch_normalization_15_gamma, batch_normalization_15_beta, batch_normalization_15_mean, batch_normalization_15_variance, 0.001); void* var_44 = tensorRelu(var_43); void* var_45 = tensorConvolution(var_44, depthwise_conv2d_8_w, 1, 1, 1, 1, 1, 512); void* var_46 = tensorBatchNorm(var_45, batch_normalization_16_gamma, batch_normalization_16_beta, batch_normalization_16_mean, batch_normalization_16_variance, 0.001); void* var_47 = tensorRelu(var_46); - void* var_48 = ConvLayer_PROMISE(var_47, 0.0, 3.5062010693550105, conv2d_9_w, -0.17277962, 0.21063991, NULL, 0, 0, 0, 0, 1, 1, -1, 0, -1, -2.691830636262894, 2.582372983694075, 9); + void* var_48 = ConvLayer_PROMISE(var_47, 0.0, 4.518095604896667, conv2d_9_w, -0.14546796187758446, 0.15256431668996823, NULL, 0, 0, 0, 0, 1, 1, -1, 0, -1, -3.0287702755928043, 2.9487365779876953, 9); void* var_49 = tensorBatchNorm(var_48, batch_normalization_17_gamma, batch_normalization_17_beta, batch_normalization_17_mean, batch_normalization_17_variance, 0.001); void* var_50 = tensorRelu(var_49); void* var_51 = tensorConvolution(var_50, depthwise_conv2d_9_w, 1, 1, 1, 1, 1, 512); void* var_52 = tensorBatchNorm(var_51, batch_normalization_18_gamma, batch_normalization_18_beta, batch_normalization_18_mean, batch_normalization_18_variance, 0.001); void* var_53 = tensorRelu(var_52); - void* var_54 = ConvLayer_PROMISE(var_53, 0.0, 4.156345422267913, conv2d_10_w, -0.164539, 0.1991264, NULL, 0, 0, 0, 0, 1, 1, -1, 0, -1, -2.9234970450401305, 2.800861362218857, 9); + void* var_54 = ConvLayer_PROMISE(var_53, 0.0, 6.348575634956407, conv2d_10_w, -0.13025874522328376, 0.13558243343234128, NULL, 0, 0, 0, 0, 1, 1, -1, 0, -1, -4.2293100805282595, 3.5315046372413645, 9); void* var_55 = tensorBatchNorm(var_54, batch_normalization_19_gamma, batch_normalization_19_beta, batch_normalization_19_mean, batch_normalization_19_variance, 0.001); void* var_56 = tensorRelu(var_55); void* var_57 = tensorConvolution(var_56, depthwise_conv2d_10_w, 1, 1, 1, 1, 1, 512); void* var_58 = tensorBatchNorm(var_57, batch_normalization_20_gamma, batch_normalization_20_beta, batch_normalization_20_mean, batch_normalization_20_variance, 0.001); void* var_59 = tensorRelu(var_58); - void* var_60 = ConvLayer_PROMISE(var_59, 0.0, 3.656778683662412, conv2d_11_w, -0.18202196, 0.1923372, NULL, 0, 0, 0, 0, 1, 1, -1, 0, -1, -2.8381178665161135, 3.2068653273582455, 9); + void* var_60 = ConvLayer_PROMISE(var_59, 0.0, 5.221003110408843, conv2d_11_w, -0.11900172759592534, 0.12536374783515936, NULL, 0, 0, 0, 0, 1, 1, -1, 0, -1, -4.038203780174255, 4.004009407043483, 9); void* var_61 = tensorBatchNorm(var_60, batch_normalization_21_gamma, batch_normalization_21_beta, batch_normalization_21_mean, batch_normalization_21_variance, 0.001); void* var_62 = tensorRelu(var_61); void* var_63 = tensorConvolution(var_62, depthwise_conv2d_11_w, 1, 1, 1, 1, 1, 512); void* var_64 = tensorBatchNorm(var_63, batch_normalization_22_gamma, batch_normalization_22_beta, batch_normalization_22_mean, batch_normalization_22_variance, 0.001); void* var_65 = tensorRelu(var_64); - void* var_66 = ConvLayer_PROMISE(var_65, 0.0, 3.7428039026260356, conv2d_12_w, -0.16017516, 0.20817208, NULL, 0, 0, 0, 0, 1, 1, -1, 0, -1, -2.624585204124451, 3.482389675378794, 9); + void* var_66 = ConvLayer_PROMISE(var_65, 0.0, 5.732498347759442, conv2d_12_w, -0.10839721685647964, 0.11625668607652187, NULL, 0, 0, 0, 0, 1, 1, -1, 0, -1, -3.3111015114784244, 4.462933233261136, 9); void* var_67 = tensorBatchNorm(var_66, batch_normalization_23_gamma, batch_normalization_23_beta, batch_normalization_23_mean, batch_normalization_23_variance, 0.001); void* var_68 = tensorRelu(var_67); void* var_69 = tensorConvolution(var_68, depthwise_conv2d_12_w, 1, 1, 2, 2, 1, 512); void* var_70 = tensorBatchNorm(var_69, batch_normalization_24_gamma, batch_normalization_24_beta, batch_normalization_24_mean, batch_normalization_24_variance, 0.001); void* var_71 = tensorRelu(var_70); - void* var_72 = ConvLayer_PROMISE(var_71, 0.0, 4.213704152107228, conv2d_13_w, -0.11207349, 0.13319267, NULL, 0, 0, 0, 0, 1, 1, -1, 0, -1, -2.3042326772212984, 4.052856867313354, 9); + void* var_72 = ConvLayer_PROMISE(var_71, 0.0, 7.240498211860681, conv2d_13_w, -0.08623744961619377, 0.08859449951350662, NULL, 0, 0, 0, 0, 1, 1, -1, 0, -1, -4.175431394577027, 6.2043294754027345, 9); void* var_73 = tensorBatchNorm(var_72, batch_normalization_25_gamma, batch_normalization_25_beta, batch_normalization_25_mean, batch_normalization_25_variance, 0.001); void* var_74 = tensorRelu(var_73); void* var_75 = tensorConvolution(var_74, depthwise_conv2d_13_w, 1, 1, 1, 1, 1, 1024); void* var_76 = tensorBatchNorm(var_75, batch_normalization_26_gamma, batch_normalization_26_beta, batch_normalization_26_mean, batch_normalization_26_variance, 0.001); void* var_77 = tensorRelu(var_76); - void* var_78 = ConvLayer_PROMISE(var_77, 0.0, 3.4259072160720754, conv2d_14_w, -0.08910778, 0.09989126, NULL, 0, 0, 0, 0, 1, 1, -1, 0, -1, -9.591523356437683, 1.7863811397552434, 9); + void* var_78 = ConvLayer_PROMISE(var_77, 0.0, 7.813958834648251, conv2d_14_w, -0.06813025139272214, 0.07002027779817581, NULL, 0, 0, 0, 0, 1, 1, -1, 0, -1, -10.920566423416137, 2.6442912578582534, 9); void* var_79 = tensorBatchNorm(var_78, batch_normalization_27_gamma, batch_normalization_27_beta, batch_normalization_27_mean, batch_normalization_27_variance, 0.001); void* var_80 = tensorRelu(var_79); void* var_81 = tensorPooling(var_80,1,2,2,0,0,2,2); - void* var_82 = FCLayer_PROMISE(var_81, 0.0, 1.271940953135491, dense_1_w, -0.22483952, 0.15173192, dense_1_b, -0.106048204, 0.16996701, -1, -5.430917320251465, 9.963713722228993, 9); + void* var_82 = FCLayer_PROMISE(var_81, 0.0, 2.8692066650391013, dense_1_w, -0.22301019695401192, 0.1442659378200768, dense_1_b, -0.1654396, 0.23336112, -1, -12.245949958801269, 23.80532513427739, 9); void* var_83 = tensorSoftmax(var_82); uint8_t* labels = readLabelsBatch(labels_path.c_str(),start,end); @@ -409,7 +431,8 @@ int main(int argc, char* argv[]){ final_accuracy = final_accuracy / batch_count; dumpFinalAccuracy(final_accuracy); - + if (final_accuracy < bench_acc) + missed += 1; } dumpExecutionAccuracies(); diff --git a/llvm/projects/hpvm-tensor-rt/dnn_sources/src/promise/mobilenet_shallow_promise.cc b/llvm/projects/hpvm-tensor-rt/dnn_sources/src/promise/mobilenet_shallow_promise.cc index 3c088e988a..a485327a44 100644 --- a/llvm/projects/hpvm-tensor-rt/dnn_sources/src/promise/mobilenet_shallow_promise.cc +++ b/llvm/projects/hpvm-tensor-rt/dnn_sources/src/promise/mobilenet_shallow_promise.cc @@ -9,18 +9,37 @@ #include "../../../tensor_runtime/include/tensor_runtime.h" #include "../../include/utils.h" + +int total_runs = 1; +float bench_acc = 0; +int to_skip = 5; + + int main(int argc, char* argv[]){ - int total_runs = 1; + if (argc > 1){ total_runs = atoi(argv[1]); } + if (argc > 2){ + bench_acc = atof(argv[2]); + } + + if(argc > 3){ + to_skip = atoi(argv[3]); + } + llvm_hpvm_initTensorRt(0); + int missed = 0; for (int i = 0 ; i < total_runs; i++){ + if (missed >= to_skip){ + break; + } + startMemTracking(); int test_input_size = 1000; @@ -229,6 +248,8 @@ int main(int argc, char* argv[]){ dumpFinalAccuracy(final_accuracy); + if (final_accuracy < bench_acc) + missed += 1; } dumpExecutionAccuracies(); diff --git a/llvm/projects/hpvm-tensor-rt/dnn_sources/src/promise/resnet18_promise.cc b/llvm/projects/hpvm-tensor-rt/dnn_sources/src/promise/resnet18_promise.cc index 95d2cdbbfd..cc0981dc7d 100644 --- a/llvm/projects/hpvm-tensor-rt/dnn_sources/src/promise/resnet18_promise.cc +++ b/llvm/projects/hpvm-tensor-rt/dnn_sources/src/promise/resnet18_promise.cc @@ -9,17 +9,36 @@ #include "../../../tensor_runtime/include/tensor_runtime.h" #include "../../include/utils.h" + +int total_runs = 1; +float bench_acc = 0; +int to_skip = 5; + + int main(int argc, char* argv[]){ - int total_runs = 1; if (argc > 1){ total_runs = atoi(argv[1]); } + if (argc > 2){ + bench_acc = atof(argv[2]); + } + + if(argc > 3){ + to_skip = atoi(argv[3]); + } + + llvm_hpvm_initTensorRt(1); + int missed = 0; for (int i = 0 ; i < total_runs; i++){ + if (missed >= to_skip){ + break; + } + startMemTracking(); int test_input_size = 1000; @@ -182,6 +201,8 @@ int main(int argc, char* argv[]){ dumpFinalAccuracy(final_accuracy); + if (final_accuracy < bench_acc) + missed += 1; } dumpExecutionAccuracies(); diff --git a/llvm/projects/hpvm-tensor-rt/dnn_sources/src/promise/vgg16_cifar100_promise.cc b/llvm/projects/hpvm-tensor-rt/dnn_sources/src/promise/vgg16_cifar100_promise.cc index 7944e34bfb..ec5de9a5e2 100644 --- a/llvm/projects/hpvm-tensor-rt/dnn_sources/src/promise/vgg16_cifar100_promise.cc +++ b/llvm/projects/hpvm-tensor-rt/dnn_sources/src/promise/vgg16_cifar100_promise.cc @@ -9,17 +9,38 @@ #include "../../../tensor_runtime/include/tensor_runtime.h" #include "../../include/utils.h" + + +int total_runs = 1; +float bench_acc = 0; +int to_skip = 5; + + int main(int argc, char* argv[]){ - int total_runs = 1; if (argc > 1){ total_runs = atoi(argv[1]); } + if (argc > 2){ + bench_acc = atof(argv[2]); + } + + if(argc > 3){ + to_skip = atoi(argv[3]); + } + + llvm_hpvm_initTensorRt(1); + + int missed = 0; for (int i = 0 ; i < total_runs; i++){ + if (missed >= to_skip){ + break; + } + startMemTracking(); int test_input_size = 1000; @@ -125,7 +146,11 @@ int main(int argc, char* argv[]){ } final_accuracy = final_accuracy / batch_count; - dumpFinalAccuracy(final_accuracy); + dumpFinalAccuracy(final_accuracy); + + + if (final_accuracy < bench_acc) + missed += 1; } dumpExecutionAccuracies(); diff --git a/llvm/projects/hpvm-tensor-rt/dnn_sources/src/promise/vgg16_cifar10_promise.cc b/llvm/projects/hpvm-tensor-rt/dnn_sources/src/promise/vgg16_cifar10_promise.cc index 9ff6c3a924..798b5f67aa 100644 --- a/llvm/projects/hpvm-tensor-rt/dnn_sources/src/promise/vgg16_cifar10_promise.cc +++ b/llvm/projects/hpvm-tensor-rt/dnn_sources/src/promise/vgg16_cifar10_promise.cc @@ -9,18 +9,35 @@ #include "../../../tensor_runtime/include/tensor_runtime.h" #include "../../include/utils.h" -int main(int argc, char* argv[]){ - int total_runs = 1; +int total_runs = 1; +float bench_acc = 0; +int to_skip = 5; + + +int main(int argc, char* argv[]){ + if (argc > 1){ total_runs = atoi(argv[1]); } - + + if (argc > 2){ + bench_acc = atof(argv[2]); + } + + if(argc > 3){ + to_skip = atoi(argv[3]); + } llvm_hpvm_initTensorRt(1); + int missed = 0; for (int i = 0 ; i < total_runs; i++){ + if (missed >= to_skip){ + break; + } + startMemTracking(); int test_input_size = 1000; @@ -132,6 +149,8 @@ int main(int argc, char* argv[]){ dumpFinalAccuracy(final_accuracy); + if (final_accuracy < bench_acc) + missed += 1; } diff --git a/llvm/projects/hpvm-tensor-rt/opentuner/autotuner/measure_confidence2.py b/llvm/projects/hpvm-tensor-rt/opentuner/autotuner/measure_confidence2.py index 36aff4ad08..80e67a1bc3 100644 --- a/llvm/projects/hpvm-tensor-rt/opentuner/autotuner/measure_confidence2.py +++ b/llvm/projects/hpvm-tensor-rt/opentuner/autotuner/measure_confidence2.py @@ -20,6 +20,7 @@ def getAccuracy(file_name): total_runs = 60.0 +fails_allowed = 4 skip_lines = 0 @@ -92,7 +93,7 @@ def do_multiple_runs2(binary_name, accuracy_threshold, confidence_threshold): total_acc = 0 FNULL = open(os.devnull, 'wb') - p = subprocess.Popen([binary_name, str(int(total_runs))], stdout = FNULL) + p = subprocess.Popen([binary_name, str(int(total_runs)), str(accuracy_threshold), str(fails_allowed)], stdout = FNULL) p.wait() confidence, avg_acc = getConfidence("run_accuracies.txt", accuracy_threshold) -- GitLab