/** * \file example/example.cpp * MegEngine is Licensed under the Apache License, Version 2.0 (the "License") * * Copyright (c) 2014-2021 Megvii Inc. All rights reserved. * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */ #pragma once #include #include "lite/global.h" #include "lite/network.h" #include "lite/tensor.h" #include "npy.h" #include #include #include #include namespace lite { namespace example { void set_cpu_affinity(const std::vector& cpuset); struct Args { int args_parse_ret = 0; std::string example_name; std::string model_path; std::string input_path; std::string output_path; std::string loader_path; static Args from_argv(int argc, char** argv); }; std::shared_ptr parse_npy( const std::string& path, LiteBackend backend = LiteBackend::LITE_DEFAULT); using ExampleFunc = std::function; using ExampleFuncMap = std::unordered_map; ExampleFuncMap* get_example_function_map(); bool register_example(std::string example_name, const ExampleFunc& fuction); template struct Register; #if LITE_BUILD_WITH_MGE #if LITE_WITH_CUDA bool load_from_path_run_cuda(const Args& args); #endif bool basic_load_from_path(const Args& args); bool basic_load_from_path_with_loader(const Args& args); bool basic_load_from_memory(const Args& args); bool cpu_affinity(const Args& args); bool network_share_same_weights(const Args& args); bool reset_input(const Args& args); bool reset_input_output(const Args& args); bool config_user_allocator(const Args& args); bool register_cryption_method(const Args& args); bool update_cryption_key(const Args& args); bool async_forward(const Args& args); #if LITE_WITH_CUDA bool device_input(const Args& args); bool device_input_output(const Args& args); bool pinned_host_input(const Args& args); #endif #endif } // namespace example } // namespace lite #if LITE_BUILD_WITH_MGE bool basic_c_interface(const lite::example::Args& args); bool device_io_c_interface(const lite::example::Args& args); bool async_c_interface(const lite::example::Args& args); #endif #define CONCAT_IMPL(a, b) a##b #define MACRO_CONCAT(a, b) CONCAT_IMPL(a, b) #define REGIST_EXAMPLE(name_, func_) \ REGIST_EXAMPLE_WITH_NUM(__COUNTER__, name_, func_) #define REGIST_EXAMPLE_WITH_NUM(number_, name_, func_) \ template <> \ struct Register { \ Register() { register_example(name_, func_); } \ }; \ namespace { \ Register MACRO_CONCAT(example_function_, number_); \ } // vim: syntax=cpp.doxygen foldmethod=marker foldmarker=f{{{,f}}}