diff options
Diffstat (limited to 'examples')
-rw-r--r-- | examples/cl_cache.cpp | 63 | ||||
-rw-r--r-- | examples/graph_alexnet.cpp | 23 | ||||
-rw-r--r-- | examples/graph_inception_v4.cpp | 22 |
3 files changed, 45 insertions, 63 deletions
diff --git a/examples/cl_cache.cpp b/examples/cl_cache.cpp index 87a3058956..998c4682ba 100644 --- a/examples/cl_cache.cpp +++ b/examples/cl_cache.cpp @@ -35,69 +35,6 @@ using namespace utils; namespace { -/** This function loads prebuilt opencl kernels from a file - * - * @param[in] filename Name of the file to be used to load the kernels - */ -void restore_program_cache_from_file(const std::string &filename = "cache.bin") -{ - std::cout << "Loading kernels from file " << filename << std::endl; - std::ifstream cache_file(filename, std::ios::binary); - if(cache_file.is_open()) - { - while(!cache_file.eof()) - { - size_t name_len = 0; - size_t binary_len = 0; - cache_file.read(reinterpret_cast<char *>(&name_len), sizeof(size_t)); - cache_file.read(reinterpret_cast<char *>(&binary_len), sizeof(size_t)); - if(name_len == 0 || binary_len == 0) - { - break; - } - std::vector<char> tmp(name_len); - std::vector<unsigned char> binary(binary_len); - std::string name; - cache_file.read(tmp.data(), name_len); - name.assign(tmp.data(), name_len); - tmp.resize(binary_len); - cache_file.read(reinterpret_cast<char *>(binary.data()), binary_len); - cl::Context context = arm_compute::CLScheduler::get().context(); - cl::Program::Binaries binaries{ binary }; - std::vector<cl::Device> devices = context.getInfo<CL_CONTEXT_DEVICES>(); - cl::Program program(context, devices, binaries); - program.build(); - CLKernelLibrary::get().add_built_program(name, program); - } - cache_file.close(); - } -} - -/** This function saves opencl kernels library to a file - * - * @param[in] filename Name of the file to be used to save the library - */ -void save_program_cache_to_file(const std::string &filename = "cache.bin") -{ - std::cout << "Saving opencl kernels to " << filename << std::endl; - std::ofstream cache_file(filename, std::ios::binary); - if(cache_file.is_open()) - { - for(const auto &it : CLKernelLibrary::get().get_built_programs()) - { - std::vector<std::vector<unsigned char>> binaries = it.second.getInfo<CL_PROGRAM_BINARIES>(); - ARM_COMPUTE_ERROR_ON(binaries.size() != 1); - const std::string kernel_name = it.first; - size_t kernel_name_size = kernel_name.length(); - size_t binary_size = binaries[0].size(); - cache_file.write(reinterpret_cast<char *>(&kernel_name_size), sizeof(size_t)); - cache_file.write(reinterpret_cast<char *>(&binary_size), sizeof(size_t)); - cache_file.write(kernel_name.c_str(), kernel_name_size); - cache_file.write(reinterpret_cast<const char *>(binaries[0].data()), binaries[0].size()); - } - cache_file.close(); - } -} } // namespace class CLCacheExample : public Example diff --git a/examples/graph_alexnet.cpp b/examples/graph_alexnet.cpp index a785dea78d..f8b25a103a 100644 --- a/examples/graph_alexnet.cpp +++ b/examples/graph_alexnet.cpp @@ -27,6 +27,8 @@ #include "utils/GraphUtils.h" #include "utils/Utils.h" +#include <chrono> + using namespace arm_compute::utils; using namespace arm_compute::graph::frontend; using namespace arm_compute::graph_utils; @@ -148,13 +150,34 @@ public: // Finalize graph GraphConfig config; + config.num_threads = common_params.threads; config.use_tuner = common_params.enable_tuner; config.tuner_mode = common_params.tuner_mode; config.tuner_file = common_params.tuner_file; + const auto config_start_time = std::chrono::high_resolution_clock::now(); + + // Load the precompiled kernels from a file into the kernel library, in this way the next time they are needed + // compilation won't be required. + if(common_params.enable_cl_cache) + { + restore_program_cache_from_file(); + } + graph.finalize(common_params.target, config); + const auto config_end_time = std::chrono::high_resolution_clock::now(); + const auto time_elapsed = config_end_time - config_start_time; + const auto time_elapsed_ms = std::chrono::duration_cast<std::chrono::milliseconds>(time_elapsed).count(); + std::cout << "Configuration time " << time_elapsed_ms << " ms " << std::endl; + + // Save the opencl kernels to a file + if(common_opts.enable_cl_cache) + { + save_program_cache_to_file(); + } + return true; } void do_run() override diff --git a/examples/graph_inception_v4.cpp b/examples/graph_inception_v4.cpp index 3ea2b2fd1c..15fd049fa3 100644 --- a/examples/graph_inception_v4.cpp +++ b/examples/graph_inception_v4.cpp @@ -27,6 +27,8 @@ #include "utils/GraphUtils.h" #include "utils/Utils.h" +#include <chrono> + using namespace arm_compute::utils; using namespace arm_compute::graph::frontend; using namespace arm_compute::graph_utils; @@ -154,8 +156,28 @@ public: config.tuner_mode = common_params.tuner_mode; config.tuner_file = common_params.tuner_file; + const auto config_start_time = std::chrono::high_resolution_clock::now(); + + // Load the precompiled kernels from a file into the kernel library, in this way the next time they are needed + // compilation won't be required. + if(common_params.enable_cl_cache) + { + restore_program_cache_from_file(); + } + graph.finalize(common_params.target, config); + const auto config_end_time = std::chrono::high_resolution_clock::now(); + const auto time_elapsed = config_end_time - config_start_time; + const auto time_elapsed_ms = std::chrono::duration_cast<std::chrono::milliseconds>(time_elapsed).count(); + std::cout << "Configuration time " << time_elapsed_ms << " ms " << std::endl; + + // Save the opencl kernels to a file + if(common_opts.enable_cl_cache) + { + save_program_cache_to_file(); + } + return true; } |