| @@ -1,47 +1,2 @@ | |||||
| file (GLOB_RECURSE SOURCES ./*.cpp) | |||||
| add_executable(lite_examples ${SOURCES}) | |||||
| if(LITE_BUILD_WITH_RKNPU) | |||||
| #rknn sdk1.0.0 depend on libc++_shared, use gold to remove NEEDED so symbol check | |||||
| target_link_options(lite_examples PRIVATE "-fuse-ld=gold") | |||||
| endif() | |||||
| target_link_libraries(lite_examples lite_static) | |||||
| if(LITE_BUILD_WITH_MGE AND MGE_WITH_ROCM) | |||||
| # FIXME: hip obj can not find cpp obj only through lite_static | |||||
| target_link_libraries(lite_examples megdnn) | |||||
| endif() | |||||
| if(UNIX) | |||||
| if(APPLE OR ANDROID) | |||||
| target_link_libraries(lite_examples dl) | |||||
| else() | |||||
| target_link_libraries(lite_examples dl rt) | |||||
| endif() | |||||
| endif() | |||||
| install (TARGETS lite_examples | |||||
| EXPORT ${LITE_EXPORT_TARGETS} | |||||
| RUNTIME DESTINATION lite/bin) | |||||
| # add lite_examples_depends_shared for CI check symbol export valid | |||||
| add_executable(lite_examples_depends_shared ${SOURCES}) | |||||
| if(LITE_BUILD_WITH_RKNPU) | |||||
| #rknn sdk1.0.0 depend on libc++_shared, use gold to remove NEEDED so symbol check | |||||
| target_link_options(lite_examples_depends_shared PRIVATE "-fuse-ld=gold") | |||||
| endif() | |||||
| target_link_libraries(lite_examples_depends_shared lite_shared) | |||||
| if(UNIX) | |||||
| if(APPLE OR ANDROID) | |||||
| target_link_libraries(lite_examples_depends_shared dl) | |||||
| else() | |||||
| target_link_libraries(lite_examples_depends_shared dl rt) | |||||
| endif() | |||||
| endif() | |||||
| install (TARGETS lite_examples_depends_shared | |||||
| EXPORT ${LITE_EXPORT_TARGETS} | |||||
| RUNTIME DESTINATION lite/bin) | |||||
| add_subdirectory(cpp_example) | |||||
| add_subdirectory(c_example) | |||||
| @@ -0,0 +1,44 @@ | |||||
| add_executable(lite_c_examples ./main.c) | |||||
| if(LITE_BUILD_WITH_RKNPU) | |||||
| #rknn sdk1.0.0 depend on libc++_shared, use gold to remove NEEDED so symbol check | |||||
| target_link_options(lite_c_examples PRIVATE "-fuse-ld=gold") | |||||
| endif() | |||||
| target_link_libraries(lite_c_examples lite_static) | |||||
| if(LITE_BUILD_WITH_MGE AND MGE_WITH_ROCM) | |||||
| # FIXME: hip obj can not find cpp obj only through lite_static | |||||
| target_link_libraries(lite_c_examples megdnn) | |||||
| endif() | |||||
| if(UNIX) | |||||
| if(APPLE OR ANDROID) | |||||
| target_link_libraries(lite_c_examples dl) | |||||
| else() | |||||
| target_link_libraries(lite_c_examples dl rt) | |||||
| endif() | |||||
| endif() | |||||
| install (TARGETS lite_c_examples | |||||
| EXPORT ${LITE_EXPORT_TARGETS} | |||||
| RUNTIME DESTINATION lite/bin) | |||||
| # add lite_examples_depends_shared for CI check symbol export valid | |||||
| add_executable(lite_c_examples_depends_shared ./main.c) | |||||
| if(LITE_BUILD_WITH_RKNPU) | |||||
| #rknn sdk1.0.0 depend on libc++_shared, use gold to remove NEEDED so symbol check | |||||
| target_link_options(lite_c_examples_depends_shared PRIVATE "-fuse-ld=gold") | |||||
| endif() | |||||
| target_link_libraries(lite_c_examples_depends_shared lite_shared) | |||||
| if(UNIX) | |||||
| if(APPLE OR ANDROID) | |||||
| target_link_libraries(lite_c_examples_depends_shared dl) | |||||
| else() | |||||
| target_link_libraries(lite_c_examples_depends_shared dl rt) | |||||
| endif() | |||||
| endif() | |||||
| install (TARGETS lite_c_examples_depends_shared | |||||
| EXPORT ${LITE_EXPORT_TARGETS} | |||||
| RUNTIME DESTINATION lite/bin) | |||||
| @@ -0,0 +1,89 @@ | |||||
| /** | |||||
| * \file example/c_example/main.c | |||||
| * 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. | |||||
| */ | |||||
| #include "lite-c/global_c.h" | |||||
| #include "lite-c/network_c.h" | |||||
| #include "lite-c/tensor_c.h" | |||||
| #include <stdio.h> | |||||
| #include <string.h> | |||||
| #define LITE_CAPI_CHECK(_expr) \ | |||||
| do { \ | |||||
| int _ret = (_expr); \ | |||||
| if (_ret) { \ | |||||
| fprintf(stderr, "error msg: %s", LITE_get_last_error()); \ | |||||
| return -1; \ | |||||
| } \ | |||||
| } while (0) | |||||
| int basic_c_interface(const char* mode_path) { | |||||
| //! create and load the network | |||||
| LiteNetwork c_network; | |||||
| LITE_CAPI_CHECK( | |||||
| LITE_make_network(&c_network, *default_config(), *default_network_io())); | |||||
| LITE_CAPI_CHECK(LITE_load_model_from_path(c_network, mode_path)); | |||||
| //! set input data to input tensor | |||||
| LiteTensor c_input_tensor; | |||||
| LITE_CAPI_CHECK( | |||||
| LITE_get_io_tensor(c_network, "data", LITE_IO, &c_input_tensor)); | |||||
| void* dst_ptr; | |||||
| size_t length_in_byte; | |||||
| LITE_CAPI_CHECK(LITE_get_tensor_total_size_in_byte(c_input_tensor, | |||||
| &length_in_byte)); | |||||
| LITE_CAPI_CHECK(LITE_get_tensor_memory(c_input_tensor, &dst_ptr)); | |||||
| //! copy or forward data to network | |||||
| memset(dst_ptr, 5, length_in_byte); | |||||
| //! forward | |||||
| LITE_CAPI_CHECK(LITE_forward(c_network)); | |||||
| LITE_CAPI_CHECK(LITE_wait(c_network)); | |||||
| //! get the output data or read tensor data | |||||
| const char* output_name; | |||||
| LiteTensor c_output_tensor; | |||||
| //! get the first output tensor name | |||||
| LITE_CAPI_CHECK(LITE_get_output_name(c_network, 0, &output_name)); | |||||
| LITE_CAPI_CHECK(LITE_get_io_tensor(c_network, output_name, LITE_IO, | |||||
| &c_output_tensor)); | |||||
| void* output_ptr; | |||||
| size_t length_output_in_byte; | |||||
| LITE_CAPI_CHECK(LITE_get_tensor_memory(c_output_tensor, &output_ptr)); | |||||
| LITE_CAPI_CHECK(LITE_get_tensor_total_size_in_byte(c_output_tensor, | |||||
| &length_output_in_byte)); | |||||
| size_t out_length = length_output_in_byte / sizeof(float); | |||||
| printf("length=%zu\n", out_length); | |||||
| float max = -1.0f; | |||||
| float sum = 0.0f; | |||||
| for (size_t i = 0; i < out_length; i++) { | |||||
| float data = ((float*)(output_ptr))[i]; | |||||
| sum += data; | |||||
| if (max < data) | |||||
| max = data; | |||||
| } | |||||
| printf("max=%e, sum=%e\n", max, sum); | |||||
| return 0; | |||||
| } | |||||
| int main(int argc, char** argv) { | |||||
| if (argc < 2) { | |||||
| printf("usage: lite_c_examples <model file> , just test C interface " | |||||
| "build.\n"); | |||||
| return -1; | |||||
| } | |||||
| return basic_c_interface(argv[1]); | |||||
| } | |||||
| // vim: syntax=cpp.doxygen foldmethod=marker foldmarker=f{{{,f}}} | |||||
| @@ -0,0 +1,47 @@ | |||||
| file (GLOB_RECURSE SOURCES ./*.cpp) | |||||
| add_executable(lite_examples ${SOURCES}) | |||||
| if(LITE_BUILD_WITH_RKNPU) | |||||
| #rknn sdk1.0.0 depend on libc++_shared, use gold to remove NEEDED so symbol check | |||||
| target_link_options(lite_examples PRIVATE "-fuse-ld=gold") | |||||
| endif() | |||||
| target_link_libraries(lite_examples lite_static) | |||||
| if(LITE_BUILD_WITH_MGE AND MGE_WITH_ROCM) | |||||
| # FIXME: hip obj can not find cpp obj only through lite_static | |||||
| target_link_libraries(lite_examples megdnn) | |||||
| endif() | |||||
| if(UNIX) | |||||
| if(APPLE OR ANDROID) | |||||
| target_link_libraries(lite_examples dl) | |||||
| else() | |||||
| target_link_libraries(lite_examples dl rt) | |||||
| endif() | |||||
| endif() | |||||
| install (TARGETS lite_examples | |||||
| EXPORT ${LITE_EXPORT_TARGETS} | |||||
| RUNTIME DESTINATION lite/bin) | |||||
| # add lite_examples_depends_shared for CI check symbol export valid | |||||
| add_executable(lite_examples_depends_shared ${SOURCES}) | |||||
| if(LITE_BUILD_WITH_RKNPU) | |||||
| #rknn sdk1.0.0 depend on libc++_shared, use gold to remove NEEDED so symbol check | |||||
| target_link_options(lite_examples_depends_shared PRIVATE "-fuse-ld=gold") | |||||
| endif() | |||||
| target_link_libraries(lite_examples_depends_shared lite_shared) | |||||
| if(UNIX) | |||||
| if(APPLE OR ANDROID) | |||||
| target_link_libraries(lite_examples_depends_shared dl) | |||||
| else() | |||||
| target_link_libraries(lite_examples_depends_shared dl rt) | |||||
| endif() | |||||
| endif() | |||||
| install (TARGETS lite_examples_depends_shared | |||||
| EXPORT ${LITE_EXPORT_TARGETS} | |||||
| RUNTIME DESTINATION lite/bin) | |||||
| @@ -1,5 +1,5 @@ | |||||
| /** | /** | ||||
| * \file example/example.cpp | |||||
| * \file example/cpp_example/example.cpp | |||||
| * MegEngine is Licensed under the Apache License, Version 2.0 (the "License") | * MegEngine is Licensed under the Apache License, Version 2.0 (the "License") | ||||
| * | * | ||||
| * Copyright (c) 2014-2021 Megvii Inc. All rights reserved. | * Copyright (c) 2014-2021 Megvii Inc. All rights reserved. | ||||
| @@ -1,5 +1,5 @@ | |||||
| /** | /** | ||||
| * \file example/example.cpp | |||||
| * \file example/cpp_example/cpp_example/example.cpp | |||||
| * MegEngine is Licensed under the Apache License, Version 2.0 (the "License") | * MegEngine is Licensed under the Apache License, Version 2.0 (the "License") | ||||
| * | * | ||||
| * Copyright (c) 2014-2021 Megvii Inc. All rights reserved. | * Copyright (c) 2014-2021 Megvii Inc. All rights reserved. | ||||
| @@ -133,7 +133,11 @@ int main(int argc, char** argv) { | |||||
| auto example = (*map)[args.example_name]; | auto example = (*map)[args.example_name]; | ||||
| if (example) { | if (example) { | ||||
| printf("Begin to run %s example.\n", args.example_name.c_str()); | printf("Begin to run %s example.\n", args.example_name.c_str()); | ||||
| return example(args); | |||||
| if (example(args)) { | |||||
| return 0; | |||||
| } else { | |||||
| return -1; | |||||
| } | |||||
| } else { | } else { | ||||
| printf("The example of %s is not registed.", args.example_name.c_str()); | printf("The example of %s is not registed.", args.example_name.c_str()); | ||||
| return -1; | return -1; | ||||
| @@ -1,5 +1,5 @@ | |||||
| /** | /** | ||||
| * \file example/basic.cpp | |||||
| * \file example/cpp_example/basic.cpp | |||||
| * MegEngine is Licensed under the Apache License, Version 2.0 (the "License") | * MegEngine is Licensed under the Apache License, Version 2.0 (the "License") | ||||
| * | * | ||||
| * Copyright (c) 2014-2021 Megvii Inc. All rights reserved. | * Copyright (c) 2014-2021 Megvii Inc. All rights reserved. | ||||
| @@ -1,5 +1,5 @@ | |||||
| /** | /** | ||||
| * \file example/cpu_affinity.cpp | |||||
| * \file example/cpp_example/cpu_affinity.cpp | |||||
| * MegEngine is Licensed under the Apache License, Version 2.0 (the "License") | * MegEngine is Licensed under the Apache License, Version 2.0 (the "License") | ||||
| * | * | ||||
| * Copyright (c) 2014-2021 Megvii Inc. All rights reserved. | * Copyright (c) 2014-2021 Megvii Inc. All rights reserved. | ||||
| @@ -1,5 +1,5 @@ | |||||
| /** | /** | ||||
| * \file example/device_io.cpp | |||||
| * \file example/cpp_example/device_io.cpp | |||||
| * MegEngine is Licensed under the Apache License, Version 2.0 (the "License") | * MegEngine is Licensed under the Apache License, Version 2.0 (the "License") | ||||
| * | * | ||||
| * Copyright (c) 2014-2021 Megvii Inc. All rights reserved. | * Copyright (c) 2014-2021 Megvii Inc. All rights reserved. | ||||
| @@ -1,5 +1,5 @@ | |||||
| /** | /** | ||||
| * \file example/basic_c_interface.cpp | |||||
| * \file example/cpp_example/basic_c_interface.cpp | |||||
| * MegEngine is Licensed under the Apache License, Version 2.0 (the "License") | * MegEngine is Licensed under the Apache License, Version 2.0 (the "License") | ||||
| * | * | ||||
| * Copyright (c) 2014-2021 Megvii Inc. All rights reserved. | * Copyright (c) 2014-2021 Megvii Inc. All rights reserved. | ||||
| @@ -1,5 +1,5 @@ | |||||
| /** | /** | ||||
| * \file example/network_share_weights.cpp | |||||
| * \file example/cpp_example/network_share_weights.cpp | |||||
| * MegEngine is Licensed under the Apache License, Version 2.0 (the "License") | * MegEngine is Licensed under the Apache License, Version 2.0 (the "License") | ||||
| * | * | ||||
| * Copyright (c) 2014-2021 Megvii Inc. All rights reserved. | * Copyright (c) 2014-2021 Megvii Inc. All rights reserved. | ||||
| @@ -1,5 +1,5 @@ | |||||
| /** | /** | ||||
| * \file example/reset_io.cpp | |||||
| * \file example/cpp_example/reset_io.cpp | |||||
| * MegEngine is Licensed under the Apache License, Version 2.0 (the "License") | * MegEngine is Licensed under the Apache License, Version 2.0 (the "License") | ||||
| * | * | ||||
| * Copyright (c) 2014-2021 Megvii Inc. All rights reserved. | * Copyright (c) 2014-2021 Megvii Inc. All rights reserved. | ||||
| @@ -1,5 +1,5 @@ | |||||
| /** | /** | ||||
| * \file example/user_allocator.cpp | |||||
| * \file example/cpp_example/user_allocator.cpp | |||||
| * MegEngine is Licensed under the Apache License, Version 2.0 (the "License") | * MegEngine is Licensed under the Apache License, Version 2.0 (the "License") | ||||
| * | * | ||||
| * Copyright (c) 2014-2021 Megvii Inc. All rights reserved. | * Copyright (c) 2014-2021 Megvii Inc. All rights reserved. | ||||
| @@ -1,5 +1,5 @@ | |||||
| /** | /** | ||||
| * \file example/user_cryption.cpp | |||||
| * \file example/cpp_example/user_cryption.cpp | |||||
| * MegEngine is Licensed under the Apache License, Version 2.0 (the "License") | * MegEngine is Licensed under the Apache License, Version 2.0 (the "License") | ||||
| * | * | ||||
| * Copyright (c) 2014-2021 Megvii Inc. All rights reserved. | * Copyright (c) 2014-2021 Megvii Inc. All rights reserved. | ||||
| @@ -15,18 +15,18 @@ | |||||
| /*! | /*! | ||||
| * \brief The log level. | * \brief The log level. | ||||
| */ | */ | ||||
| typedef enum LiteLogLevel { | |||||
| typedef enum { | |||||
| DEBUG = 0, /*!< The lowest level and most verbose */ | DEBUG = 0, /*!< The lowest level and most verbose */ | ||||
| INFO = 1, /*!< The lowest level and most verbose */ | INFO = 1, /*!< The lowest level and most verbose */ | ||||
| WARN = 2, /*!< Print only warning and errors */ | WARN = 2, /*!< Print only warning and errors */ | ||||
| ERROR = 3, /*!< Print only errors */ | ERROR = 3, /*!< Print only errors */ | ||||
| } LiteLogLevel; | } LiteLogLevel; | ||||
| typedef enum LiteBackend { | |||||
| typedef enum { | |||||
| LITE_DEFAULT = 0, //! default backend is mge | LITE_DEFAULT = 0, //! default backend is mge | ||||
| } LiteBackend; | } LiteBackend; | ||||
| typedef enum LiteDeviceType { | |||||
| typedef enum { | |||||
| LITE_CPU = 0, | LITE_CPU = 0, | ||||
| LITE_CUDA = 1, | LITE_CUDA = 1, | ||||
| LITE_ATLAS = 3, | LITE_ATLAS = 3, | ||||
| @@ -36,7 +36,7 @@ typedef enum LiteDeviceType { | |||||
| LITE_DEVICE_DEFAULT = 5, | LITE_DEVICE_DEFAULT = 5, | ||||
| } LiteDeviceType; | } LiteDeviceType; | ||||
| typedef enum LiteDataType { | |||||
| typedef enum { | |||||
| LITE_FLOAT = 0, | LITE_FLOAT = 0, | ||||
| LITE_HALF = 1, | LITE_HALF = 1, | ||||
| LITE_INT = 2, | LITE_INT = 2, | ||||
| @@ -46,9 +46,9 @@ typedef enum LiteDataType { | |||||
| LITE_UINT = 6, | LITE_UINT = 6, | ||||
| LITE_UINT16 = 7, | LITE_UINT16 = 7, | ||||
| LITE_INT64 = 8, | LITE_INT64 = 8, | ||||
| } LiteCDataType; | |||||
| } LiteDataType; | |||||
| typedef enum LiteTensorPhase { | |||||
| typedef enum { | |||||
| //! Tensor maybe input or output | //! Tensor maybe input or output | ||||
| LITE_IO = 0, | LITE_IO = 0, | ||||
| //! Tensor is input | //! Tensor is input | ||||
| @@ -61,7 +61,7 @@ typedef enum LiteTensorPhase { | |||||
| * \brief the input and output type, include SHAPE and VALUE | * \brief the input and output type, include SHAPE and VALUE | ||||
| * sometimes user only need the shape of the output tensor | * sometimes user only need the shape of the output tensor | ||||
| */ | */ | ||||
| typedef enum LiteIOType { | |||||
| typedef enum { | |||||
| LITE_IO_VALUE = 0, | LITE_IO_VALUE = 0, | ||||
| LITE_IO_SHAPE = 1, | LITE_IO_SHAPE = 1, | ||||
| } LiteIOType; | } LiteIOType; | ||||
| @@ -88,7 +88,7 @@ typedef enum LiteIOType { | |||||
| * 5. LITE_ALGO_PROFILE | LITE_ALGO_OPTIMIZED | LITE_ALGO_REPRODUCIBLE means: | * 5. LITE_ALGO_PROFILE | LITE_ALGO_OPTIMIZED | LITE_ALGO_REPRODUCIBLE means: | ||||
| * profile the best algorithm form the optimzed and reproducible algorithms | * profile the best algorithm form the optimzed and reproducible algorithms | ||||
| */ | */ | ||||
| typedef enum LiteAlgoSelectStrategy { | |||||
| typedef enum { | |||||
| LITE_ALGO_HEURISTIC = 1 << 0, | LITE_ALGO_HEURISTIC = 1 << 0, | ||||
| LITE_ALGO_PROFILE = 1 << 1, | LITE_ALGO_PROFILE = 1 << 1, | ||||
| LITE_ALGO_REPRODUCIBLE = 1 << 2, | LITE_ALGO_REPRODUCIBLE = 1 << 2, | ||||