From b507e1b0fdb34f0d58f8ca892959c45c0fbfc88d Mon Sep 17 00:00:00 2001 From: saundersp Date: Tue, 25 Jul 2023 12:36:31 +0200 Subject: [PATCH] cpp : final unit test display revamp --- cpp/projet.cpp | 180 +++++++++++++++++++++++-------------------------- 1 file changed, 85 insertions(+), 95 deletions(-) diff --git a/cpp/projet.cpp b/cpp/projet.cpp index 50169f4..c08a83f 100644 --- a/cpp/projet.cpp +++ b/cpp/projet.cpp @@ -191,102 +191,95 @@ void testing_and_evaluating(const np::Array& X_train_feat, const np::Ar } } -void final_unit_test() { - printf("\n| %-49s | %-10s | %-17s | %-29s |\n", "Unit testing", "Test state", "Time spent (ns)", "Formatted time spent"); - printf("|%s|%s|%s|%s|\n", S(51), S(12), S(19), S(31)); - - if(fs::exists(OUT_DIR "/X_train_ii_CPU.bin") && fs::exists(OUT_DIR "/X_train_ii_GPU.bin")){ - const np::Array X_train_ii_cpu = load(OUT_DIR "/X_train_ii_CPU.bin"); - const np::Array X_train_ii_gpu = load(OUT_DIR "/X_train_ii_GPU.bin"); - benchmark_function_void("X_train_ii CPU vs GPU", unit_test_cpu_vs_gpu, X_train_ii_cpu, X_train_ii_gpu); - } - - if(fs::exists(OUT_DIR "/X_test_ii_CPU.bin") && fs::exists(OUT_DIR "/X_test_ii_GPU.bin")){ - const np::Array X_test_ii_cpu = load(OUT_DIR "/X_test_ii_CPU.bin"); - const np::Array X_test_ii_gpu = load(OUT_DIR "/X_test_ii_GPU.bin"); - benchmark_function_void("X_test_ii CPU vs GPU", unit_test_cpu_vs_gpu, X_test_ii_cpu, X_test_ii_gpu); - } - - if(fs::exists(OUT_DIR "/X_train_feat_CPU.bin")){ - const np::Array X_train_feat = load(OUT_DIR "/X_train_feat_CPU.bin"); - - if(fs::exists(OUT_DIR "/X_train_feat_GPU.bin")){ - const np::Array X_train_feat_gpu = load(OUT_DIR "/X_train_feat_CPU.bin"); - benchmark_function_void("X_train_feat CPU vs GPU", unit_test_cpu_vs_gpu, X_train_feat, X_train_feat_gpu); - } - - np::Array X_train_feat_argsort_cpu; - uint8_t loaded = 0; - if(fs::exists(OUT_DIR "/X_train_feat_argsort_CPU.bin")){ - X_train_feat_argsort_cpu = std::move(load(OUT_DIR "/X_train_feat_argsort_CPU.bin")); - ++loaded; - benchmark_function_void("argsort_2D training set (CPU)", unit_test_argsort_2d, X_train_feat, X_train_feat_argsort_cpu); - } - - np::Array X_train_feat_argsort_gpu; - if(fs::exists(OUT_DIR "/X_train_feat_argsort_GPU.bin")){ - X_train_feat_argsort_gpu = std::move(load(OUT_DIR "/X_train_feat_argsort_GPU.bin")); - ++loaded; - benchmark_function_void("argsort_2D training set (GPU)", unit_test_argsort_2d, X_train_feat, X_train_feat_argsort_gpu); - } - - if (loaded == 2) - benchmark_function_void("X_train_feat_argsort CPU vs GPU", unit_test_cpu_vs_gpu, X_train_feat_argsort_cpu, X_train_feat_argsort_gpu); - } - - if(fs::exists(OUT_DIR "/X_test_feat_CPU.bin")){ - const np::Array X_test_feat = load(OUT_DIR "/X_test_feat_CPU.bin"); - - if(fs::exists(OUT_DIR "/X_test_feat_GPU.bin")){ - const np::Array X_test_feat_gpu = load(OUT_DIR "/X_test_feat_GPU.bin"); - benchmark_function_void("X_test_feat CPU vs GPU", unit_test_cpu_vs_gpu, X_test_feat, X_test_feat_gpu); - } - - np::Array X_test_feat_argsort_cpu; - uint8_t loaded = 0; - if(fs::exists(OUT_DIR "/X_test_feat_argsort_CPU.bin")){ - X_test_feat_argsort_cpu = std::move(load(OUT_DIR "/X_test_feat_argsort_CPU.bin")); - ++loaded; - benchmark_function_void("argsort_2D testing set (CPU)", unit_test_argsort_2d, X_test_feat, X_test_feat_argsort_cpu); - } - - np::Array X_test_feat_argsort_gpu; - if(fs::exists(OUT_DIR "/X_test_feat_argsort_GPU.bin")){ - X_test_feat_argsort_gpu = std::move(load(OUT_DIR "/X_test_feat_argsort_GPU.bin")); - ++loaded; - benchmark_function_void("argsort_2D testing set (GPU)", unit_test_argsort_2d, X_test_feat, X_test_feat_argsort_gpu); - } - - if (loaded == 2) - benchmark_function_void("X_test_feat_argsort CPU vs GPU", unit_test_cpu_vs_gpu, X_test_feat_argsort_cpu, X_test_feat_argsort_gpu); - } +void unit_test(void) { + printf("\n| %-37s | %-10s | %-18s | %-29s |\n", "Unit testing", "Test state", "Time spent (ns)", "Formatted time spent"); + printf("|%s|%s|%s|%s|\n", S(39), S(12), S(20), S(31)); char title[BUFFER_SIZE] = { 0 }; - char alphas_title[BUFFER_SIZE] = { 0 }; - char final_classifiers_title[BUFFER_SIZE] = { 0 }; + char tmp_title[BUFFER_SIZE / 2] = { 0 }; + char file_cpu[BUFFER_SIZE] = { 0 }; + char file_gpu[BUFFER_SIZE] = { 0 }; + const std::chrono::system_clock::time_point fnc_s = perf_counter_ns(); + uint64_t n_total = 0, n_success = 0; - for (const size_t T : TS) { - sprintf(alphas_title, MODEL_DIR "/alphas_%lu_CPU.bin", T); - if(!fs::exists(alphas_title)) continue; - const np::Array alphas = load(alphas_title); + auto test_fnc = [&n_total, &n_success](const char* title, const auto& fnc) { + ++n_total; + const std::chrono::system_clock::time_point start = perf_counter_ns(); + const bool state = fnc(); + const long long time_spent = duration_ns(perf_counter_ns() - start); + if(state){ + printf("| %-37s | %10s | %18s | %-29s |\n", title, "Passed", thousand_sep(time_spent).c_str(), format_time_ns(time_spent).c_str()); + ++n_success; + } else + printf("| %-37s | %10s | %18s | %-29s |\n", title, "Failed", thousand_sep(time_spent).c_str(), format_time_ns(time_spent).c_str()); + }; - sprintf(final_classifiers_title, MODEL_DIR "/final_classifiers_%lu_CPU.bin", T); - if(!fs::exists(final_classifiers_title)) continue; - const np::Array final_classifiers = load(final_classifiers_title); - - sprintf(alphas_title, MODEL_DIR "/alphas_%lu_GPU.bin", T); - if(!fs::exists(alphas_title)) continue; - const np::Array alphas_gpu = load(alphas_title); - - sprintf(final_classifiers_title, MODEL_DIR "/final_classifiers_%lu_GPU.bin", T); - if(!fs::exists(final_classifiers_title)) continue; - const np::Array final_classifiers_gpu = load(final_classifiers_title); - - sprintf(title, "alphas %ld CPU vs GPU", T); - benchmark_function_void(title, unit_test_cpu_vs_gpu, alphas, alphas_gpu); - sprintf(title, "final_classifiers %ld CPU vs GPU", T); - benchmark_function_void(title, unit_test_cpu_vs_gpu, final_classifiers, final_classifiers_gpu); + for (const char* label : { "train", "test" }) { + sprintf(file_cpu, OUT_DIR "/X_%s_ii_CPU.bin", label); + sprintf(file_gpu, OUT_DIR "/X_%s_ii_GPU.bin", label); + if (fs::exists(file_cpu) && fs::exists(file_gpu)) { + const np::Array X_train_ii_cpu = load(file_cpu); + const np::Array X_train_ii_gpu = load(file_gpu); + sprintf(tmp_title, "X_%s_ii", label); + sprintf(title, "%-22s - CPU vs GPU", tmp_title); + test_fnc(title, [&X_train_ii_cpu, &X_train_ii_gpu]{ return unit_test_cpu_vs_gpu(X_train_ii_cpu, X_train_ii_gpu); }); + } + char file_feat[BUFFER_SIZE] = { 0 }; + sprintf(file_feat, OUT_DIR "/X_%s_feat_CPU.bin", label); + if (fs::exists(file_feat)) { + const np::Array X_feat = load(file_feat); + sprintf(file_gpu, OUT_DIR "/X_%s_feat_GPU.bin", label); + if (fs::exists(file_gpu)) { + const np::Array X_feat_gpu = load(file_gpu); + sprintf(tmp_title, "X_%s_feat", label); + sprintf(title, "%-22s - CPU vs GPU", tmp_title); + test_fnc(title, [&X_feat, &X_feat_gpu]{ return unit_test_cpu_vs_gpu(X_feat, X_feat_gpu); }); + } + sprintf(file_cpu, OUT_DIR "/X_%s_feat_argsort_CPU.bin", label); + np::Array X_feat_argsort_cpu; + uint8_t loaded = 0; + if (fs::exists(file_cpu)) { + X_feat_argsort_cpu = std::move(load(file_cpu)); + ++loaded; + sprintf(tmp_title, "X_%s_feat_argsort", label); + sprintf(title, "%-22s - CPU argsort", tmp_title); + test_fnc(title, [&X_feat, &X_feat_argsort_cpu]{ return unit_test_argsort_2d(X_feat, X_feat_argsort_cpu); }); + } + sprintf(file_gpu, OUT_DIR "/X_%s_feat_argsort_GPU.bin", label); + np::Array X_feat_argsort_gpu; + if (fs::exists(file_gpu)) { + X_feat_argsort_gpu = std::move(load(file_gpu)); + ++loaded; + sprintf(tmp_title, "X_%s_feat_argsort", label); + sprintf(title, "%-22s - GPU argsort", tmp_title); + test_fnc(title, [&X_feat, &X_feat_argsort_gpu]{ return unit_test_argsort_2d(X_feat, X_feat_argsort_gpu); }); + } + if (loaded == 2){ + sprintf(tmp_title, "X_%s_feat_argsort", label); + sprintf(title, "%-22s - CPU vs GPU", tmp_title); + test_fnc(title, [&X_feat_argsort_cpu, &X_feat_argsort_gpu]{ return unit_test_cpu_vs_gpu(X_feat_argsort_cpu, X_feat_argsort_gpu); }); + } + } } + + for (const size_t T : TS) + for (const char* label : { "alphas", "final_classifiers" }) { + sprintf(file_cpu, MODEL_DIR "/%s_%lu_CPU.bin", label, T); + sprintf(file_gpu, MODEL_DIR "/%s_%lu_GPU.bin", label, T); + if (fs::exists(file_cpu) && fs::exists(file_gpu)){ + const np::Array cpu = load(file_cpu); + const np::Array gpu = load(file_gpu); + sprintf(tmp_title, "%s_%ld", label, T); + sprintf(title, "%-22s - CPU vs GPU", tmp_title); + test_fnc(title, [&cpu, &gpu]{ return unit_test_cpu_vs_gpu(cpu, gpu); }); + } + } + + const long long time_spent = duration_ns(perf_counter_ns() - fnc_s); + sprintf(title, "%ld/%ld", n_success, n_total); + + printf("|%s|%s|%s|%s|\n", S(39), S(12), S(20), S(31)); + printf("| %-37s | %10s | %18s | %-29s |\n", "Unit testing summary", title, thousand_sep(time_spent).c_str(), format_time_ns(time_spent).c_str()); } int main(){ @@ -308,9 +301,6 @@ int main(){ const auto [ X_train_feat, X_train_feat_argsort, y_train, X_test_feat, y_test ] = preprocessing(); train(X_train_feat, X_train_feat_argsort, y_train); testing_and_evaluating(X_train_feat, y_train, X_test_feat, y_test); - final_unit_test(); -#if __DEBUG - printf("\nAFTER CLEANUP\n"); -#endif + unit_test(); return EXIT_SUCCESS; }