@@ -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, | ||||