diff --git a/benchmark/cpp/CMakeLists.txt b/benchmark/cpp/CMakeLists.txt index 347216479..f6cce9a83 100755 --- a/benchmark/cpp/CMakeLists.txt +++ b/benchmark/cpp/CMakeLists.txt @@ -36,4 +36,7 @@ else() target_link_libraries(benchmark_ppocr_cls ${FASTDEPLOY_LIBS} gflags) target_link_libraries(benchmark_ppocr_rec ${FASTDEPLOY_LIBS} gflags) endif() -install_fastdeploy_libraries(${CMAKE_CURRENT_BINARY_DIR}) +# only for Android ADB test +if(ANDROID) + install_fastdeploy_libraries(${CMAKE_CURRENT_BINARY_DIR}) +endif() diff --git a/benchmark/cpp/benchmark_ppocr_cls.cc b/benchmark/cpp/benchmark_ppocr_cls.cc old mode 100644 new mode 100755 diff --git a/benchmark/cpp/benchmark_ppocr_det.cc b/benchmark/cpp/benchmark_ppocr_det.cc old mode 100644 new mode 100755 diff --git a/benchmark/cpp/benchmark_ppocr_rec.cc b/benchmark/cpp/benchmark_ppocr_rec.cc old mode 100644 new mode 100755 diff --git a/benchmark/cpp/benchmark_precision_ppyolov8.cc b/benchmark/cpp/benchmark_precision_ppyolov8.cc old mode 100644 new mode 100755 diff --git a/benchmark/cpp/benchmark_yolov5.cc b/benchmark/cpp/benchmark_yolov5.cc old mode 100644 new mode 100755 diff --git a/benchmark/cpp/flags.h b/benchmark/cpp/flags.h index e32e39eab..618ae144e 100755 --- a/benchmark/cpp/flags.h +++ b/benchmark/cpp/flags.h @@ -44,6 +44,7 @@ DEFINE_bool( DEFINE_bool( collect_memory_info, false, "Whether to collect memory info"); DEFINE_int32(sampling_interval, 50, "How often to collect memory info(ms)."); +DEFINE_string(result_path, "benchmark.txt", "Path of benchmark result file."); static void PrintUsage() { std::cout << "Usage: infer_demo --model model_path --image img_path --device " @@ -92,6 +93,9 @@ static void PrintBenchmarkInfo() { << "ms" << std::endl; } std::cout << ss.str() << std::endl; + // Save benchmark info + fastdeploy::benchmark::ResultManager::SaveBenchmarkResult(ss.str(), + FLAGS_result_path); #endif return; } diff --git a/benchmark/cpp/macros.h b/benchmark/cpp/macros.h index 77df0c657..9b55d3b0d 100755 --- a/benchmark/cpp/macros.h +++ b/benchmark/cpp/macros.h @@ -23,6 +23,8 @@ return 0; \ } \ auto __im__ = cv::imread(FLAGS_image); \ + std::stringstream __ss__; \ + __ss__.precision(6); \ fastdeploy::benchmark::ResourceUsageMonitor __resource_moniter__( \ FLAGS_sampling_interval, FLAGS_device_id); \ if (FLAGS_collect_memory_info) { \ @@ -35,6 +37,7 @@ } \ double __profile_time__ = MODEL_NAME.GetProfileTime() * 1000; \ std::cout << "Runtime(ms): " << __profile_time__ << "ms." << std::endl; \ + __ss__ << "Runtime(ms): " << __profile_time__ << "ms." << std::endl; \ } else { \ std::cout << "Warmup " << FLAGS_warmup << " times..." << std::endl; \ for (int __i__ = 0; __i__ < FLAGS_warmup; __i__++) { \ @@ -56,14 +59,20 @@ __tc__.End(); \ double __end2end__ = __tc__.Duration() / FLAGS_repeat * 1000; \ std::cout << "End2End(ms): " << __end2end__ << "ms." << std::endl; \ + __ss__ << "End2End(ms): " << __end2end__ << "ms." << std::endl; \ } \ if (FLAGS_collect_memory_info) { \ float __cpu_mem__ = __resource_moniter__.GetMaxCpuMem(); \ float __gpu_mem__ = __resource_moniter__.GetMaxGpuMem(); \ float __gpu_util__ = __resource_moniter__.GetMaxGpuUtil(); \ std::cout << "cpu_rss_mb: " << __cpu_mem__ << "MB." << std::endl; \ + __ss__ << "cpu_rss_mb: " << __cpu_mem__ << "MB." << std::endl; \ std::cout << "gpu_rss_mb: " << __gpu_mem__ << "MB." << std::endl; \ + __ss__ << "gpu_rss_mb: " << __gpu_mem__ << "MB." << std::endl; \ std::cout << "gpu_util: " << __gpu_util__ << std::endl; \ + __ss__ << "gpu_rss_mb: " << __gpu_mem__ << "MB." << std::endl; \ __resource_moniter__.Stop(); \ } \ + fastdeploy::benchmark::ResultManager::SaveBenchmarkResult(__ss__.str(), \ + FLAGS_result_path); \ } diff --git a/fastdeploy/benchmark/utils.cc b/fastdeploy/benchmark/utils.cc old mode 100755 new mode 100644 index a66bdb6c0..0d1762ba6 --- a/fastdeploy/benchmark/utils.cc +++ b/fastdeploy/benchmark/utils.cc @@ -350,6 +350,21 @@ TensorDiff ResultManager::CalculateDiffStatis(const FDTensor& lhs, } } +void ResultManager::SaveBenchmarkResult(const std::string& res, + const std::string& path) { + if (path.empty()) { + FDERROR << "Benchmark data path can not be empty!" << std::endl; + return; + } + auto openmode = std::ios::app; + std::ofstream fs(path, openmode); + if (!fs.is_open()) { + FDERROR << "Fail to open result file: " << path << std::endl; + } + fs << res; + fs.close(); +} + #if defined(ENABLE_VISION) bool ResultManager::SaveDetectionResult(const vision::DetectionResult& res, const std::string& path) { diff --git a/fastdeploy/benchmark/utils.h b/fastdeploy/benchmark/utils.h index 2ad0ae4aa..f7317c5b0 100755 --- a/fastdeploy/benchmark/utils.h +++ b/fastdeploy/benchmark/utils.h @@ -138,6 +138,9 @@ struct FASTDEPLOY_DECL ResultManager { /// Calculate diff value between two FDTensor results. static TensorDiff CalculateDiffStatis(const FDTensor& lhs, const FDTensor& rhs); + /// Save Benchmark data + static void SaveBenchmarkResult(const std::string& res, + const std::string& path); #if defined(ENABLE_VISION) /// Save & Load functions for basic results. static bool SaveDetectionResult(const vision::DetectionResult& res,