Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 6fa73ea

Browse files
author
zhangdanfeng
committed
fill classification
Signed-off-by: zhangdanfeng <craft.zhang@spacemit.com>
1 parent a4b9c02 commit 6fa73ea

12 files changed

+616
-36
lines changed

‎.gitignore‎

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,4 +56,9 @@ dkms.conf
5656
*.swp
5757
tflite_*
5858
build*/
59-
m5out/
59+
m5out/
60+
fpga*
61+
dump*
62+
log*
63+
out*
64+
run*

‎Makefile-aarch64‎

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,13 @@ TARGET_TOOLCHAIN_PREFIX = aarch64-linux-gnu-
1717
TF_SRC_DIR ?=/home/craft/workspace/gem5/tensorflow_src
1818
TFLITE_INC_DIR ?=$(TF_SRC_DIR)
1919
FLATBUFFERS_INC_DIR ?=$(TF_SRC_DIR)/build/flatbuffers/include
20-
TFLITE_LIB_DIR ?=$(TF_SRC_DIR)/build
21-
TFLITE_FLATBUF_LIB_DIR ?=$(TF_SRC_DIR)/build/_deps/flatbuffers-build
22-
TFLITE_RUY_LIB_DIR ?=$(TF_SRC_DIR)/build/_deps/ruy-build/ruy
23-
TFLITE_FARMHASH_LIB_DIR ?=$(TF_SRC_DIR)/build/_deps/farmhash-build
24-
TFLITE_FFT2D_DIR ?=$(TF_SRC_DIR)/build/_deps/fft2d-build
25-
TFLITE_CPUINFO_DIR ?=$(TF_SRC_DIR)/build/_deps/cpuinfo-build
26-
TFLITE_CLOG_DIR ?=$(TF_SRC_DIR)/build/_deps/clog-build
20+
TFLITE_LIB_DIR ?=/home/craft/workspace/DNN/tensorflow-lite-cpp-examples/build_tflite_2_11_1_ARM
21+
TFLITE_FLATBUF_LIB_DIR ?=/home/craft/workspace/DNN/tensorflow-lite-cpp-examples/build_tflite_2_11_1_ARM/_deps/flatbuffers-build
22+
TFLITE_RUY_LIB_DIR ?=/home/craft/workspace/DNN/tensorflow-lite-cpp-examples/build_tflite_2_11_1_ARM/_deps/ruy-build/ruy
23+
TFLITE_FARMHASH_LIB_DIR ?=/home/craft/workspace/DNN/tensorflow-lite-cpp-examples/build_tflite_2_11_1_ARM/_deps/farmhash-build
24+
TFLITE_FFT2D_DIR ?=/home/craft/workspace/DNN/tensorflow-lite-cpp-examples/build_tflite_2_11_1_ARM/_deps/fft2d-build
25+
TFLITE_CPUINFO_DIR ?=/home/craft/workspace/DNN/tensorflow-lite-cpp-examples/build_tflite_2_11_1_ARM/_deps/cpuinfo-build
26+
TFLITE_CLOG_DIR ?=/home/craft/workspace/DNN/tensorflow-lite-cpp-examples/build_tflite_2_11_1_ARM/_deps/clog-build
2727

2828
OPENCV_SRC_DIR ?=/home/craft/workspace/gem5/opencv
2929
OPENCV_INC_DIR ?=$(OPENCV_SRC_DIR)/build/install/include/opencv4/
@@ -32,7 +32,7 @@ OPENCV_LIB_3RDPARTY_DIR ?=$(OPENCV_SRC_DIR)/build/install/lib/opencv4/3rdparty/
3232

3333
PHONY: all
3434

35-
all: classification/tflite_classification segmentation/tflite_segmentation detection/tflite_detection
35+
all: classification/tflite_classification_arm segmentation/tflite_segmentation detection/tflite_detection_arm
3636

3737
LIBS = $(TFLITE_LIB_DIR)/libtensorflow-lite.a
3838
LIBS += $(TFLITE_RUY_LIB_DIR)/libruy_ctx.a \
@@ -62,7 +62,11 @@ LIBS += $(TFLITE_FARMHASH_LIB_DIR)/libfarmhash.a
6262
LIBS += $(TFLITE_FFT2D_DIR)/libfft2d_fftsg.a
6363
LIBS += $(TFLITE_FFT2D_DIR)/libfft2d_fftsg2d.a
6464
LIBS += $(TFLITE_CPUINFO_DIR)/libcpuinfo.a
65-
LIBS += $(TFLITE_CLOG_DIR)/libclog.a
65+
66+
# LIBS += /home/craft/workspace/DNN/tensorflow-lite-cpp-examples/build_tflite_2_11_1_ARM/_deps/xnnpack-build/libXNNPACK.a
67+
# LIBS += /home/craft/workspace/DNN/tensorflow-lite-cpp-examples/build_tflite_2_11_1_ARM/pthreadpool/libpthreadpool.a
68+
LIBS += build_tflite_2_11_1_ARM/_deps/cpuinfo-build/deps/clog/libclog.a
69+
# LIBS += $(TFLITE_CLOG_DIR)/libclog.a
6670

6771
LIBS += $(OPENCV_LIB_DIR)/libopencv_world.a
6872

@@ -79,19 +83,19 @@ CCFLAGS = --std=c++11 -O3 -DNDEBUG -fPIC
7983

8084
CXX := ${TARGET_TOOLCHAIN_PREFIX}g++
8185

82-
COMMON_SRC = model_utils.cc utils.cc
86+
COMMON_SRC = model_utils.cc utils.cc nms.cpp
8387

84-
classification/tflite_classification: classification.cc $(COMMON_SRC)
88+
classification/tflite_classification_arm: classification.cc $(COMMON_SRC)
8589
mkdir -p classification
86-
$(CXX) classification.cc $(COMMON_SRC) -o classification/tflite_classification $(LDFLAGS) $(LIBS) $(CXXFLAGS) $(CCFLAGS) $(INCLUDES)
90+
$(CXX) classification.cc $(COMMON_SRC) -o classification/tflite_classification_arm $(LDFLAGS) $(LIBS) $(CXXFLAGS) $(CCFLAGS) $(INCLUDES)
8791

8892
segmentation/tflite_segmentation: segmentation.cc $(COMMON_SRC)
8993
mkdir -p segmentation
9094
$(CXX) segmentation.cc $(COMMON_SRC) -o segmentation/tflite_segmentation $(LDFLAGS) $(LIBS) $(CXXFLAGS) $(CCFLAGS) $(INCLUDES)
9195

92-
detection/tflite_detection: detection.cc yolov5.cc $(COMMON_SRC)
96+
detection/tflite_detection_arm: detection.cc yolov5.cc yolov3.cc mobilenetssd.cc $(COMMON_SRC)
9397
mkdir -p detection
94-
$(CXX) detection.cc yolov5.cc $(COMMON_SRC) -o detection/tflite_detection $(LDFLAGS) $(LIBS) $(CXXFLAGS) $(CCFLAGS) $(INCLUDES)
98+
$(CXX) detection.cc yolov5.cc yolov3.cc mobilenetssd.cc $(COMMON_SRC) -o detection/tflite_detection_arm $(LDFLAGS) $(LIBS) $(CXXFLAGS) $(CCFLAGS) $(INCLUDES)
9599

96100
clean:
97-
rm -rf classification/tflite_classification segmentation/tflite_segmentation detection/tflite_detection
101+
rm -rf classification/tflite_classification_arm segmentation/tflite_segmentation detection/tflite_detection

‎build-tflite-profile.sh‎

Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
riscv64-unknown-linux-gnu-g++ -o tflite_profile -Wl,--start-group \
2+
build_tflite_2_11_x/_deps/fft2d-build/libfft2d_alloc.a \
3+
\
4+
build_tflite_2_11_x/_deps/fft2d-build/libfft2d_fftsg.a \
5+
build_tflite_2_11_x/_deps/fft2d-build/libfft2d_fftsg2d.a \
6+
build_tflite_2_11_x/_deps/fft2d-build/libfft2d_fftsg3d.a \
7+
build_tflite_2_11_x/_deps/fft2d-build/libfft2d_shrtdct.a \
8+
build_tflite_2_11_x/_deps/cpuinfo-build/deps/clog/libclog.a \
9+
build_tflite_2_11_x/_deps/cpuinfo-build/libcpuinfo.a \
10+
build_tflite_2_11_x/_deps/cpuinfo-build/libcpuinfo_internals.a \
11+
build_tflite_2_11_x/_deps/abseil-cpp-build/absl/strings/libabsl_cord.a \
12+
build_tflite_2_11_x/_deps/abseil-cpp-build/absl/strings/libabsl_cordz_sample_token.a \
13+
build_tflite_2_11_x/_deps/abseil-cpp-build/absl/strings/libabsl_strings.a \
14+
build_tflite_2_11_x/_deps/abseil-cpp-build/absl/strings/libabsl_cordz_handle.a \
15+
build_tflite_2_11_x/_deps/abseil-cpp-build/absl/strings/libabsl_cordz_functions.a \
16+
build_tflite_2_11_x/_deps/abseil-cpp-build/absl/strings/libabsl_cord_internal.a \
17+
build_tflite_2_11_x/_deps/abseil-cpp-build/absl/strings/libabsl_strings_internal.a \
18+
build_tflite_2_11_x/_deps/abseil-cpp-build/absl/strings/libabsl_str_format_internal.a \
19+
build_tflite_2_11_x/_deps/abseil-cpp-build/absl/strings/libabsl_cordz_info.a \
20+
build_tflite_2_11_x/_deps/abseil-cpp-build/absl/time/libabsl_time_zone.a \
21+
build_tflite_2_11_x/_deps/abseil-cpp-build/absl/time/libabsl_time.a \
22+
build_tflite_2_11_x/_deps/abseil-cpp-build/absl/time/libabsl_civil_time.a \
23+
build_tflite_2_11_x/_deps/abseil-cpp-build/absl/types/libabsl_bad_any_cast_impl.a \
24+
build_tflite_2_11_x/_deps/abseil-cpp-build/absl/types/libabsl_bad_optional_access.a \
25+
build_tflite_2_11_x/_deps/abseil-cpp-build/absl/types/libabsl_bad_variant_access.a \
26+
build_tflite_2_11_x/_deps/abseil-cpp-build/absl/profiling/libabsl_exponential_biased.a \
27+
build_tflite_2_11_x/_deps/abseil-cpp-build/absl/profiling/libabsl_periodic_sampler.a \
28+
build_tflite_2_11_x/_deps/abseil-cpp-build/absl/container/libabsl_hashtablez_sampler.a \
29+
build_tflite_2_11_x/_deps/abseil-cpp-build/absl/container/libabsl_raw_hash_set.a \
30+
build_tflite_2_11_x/_deps/abseil-cpp-build/absl/flags/libabsl_flags_config.a \
31+
build_tflite_2_11_x/_deps/abseil-cpp-build/absl/flags/libabsl_flags_internal.a \
32+
build_tflite_2_11_x/_deps/abseil-cpp-build/absl/flags/libabsl_flags_usage.a \
33+
build_tflite_2_11_x/_deps/abseil-cpp-build/absl/flags/libabsl_flags_parse.a \
34+
build_tflite_2_11_x/_deps/abseil-cpp-build/absl/flags/libabsl_flags_program_name.a \
35+
build_tflite_2_11_x/_deps/abseil-cpp-build/absl/flags/libabsl_flags_usage_internal.a \
36+
build_tflite_2_11_x/_deps/abseil-cpp-build/absl/flags/libabsl_flags_reflection.a \
37+
build_tflite_2_11_x/_deps/abseil-cpp-build/absl/flags/libabsl_flags_marshalling.a \
38+
build_tflite_2_11_x/_deps/abseil-cpp-build/absl/flags/libabsl_flags_commandlineflag_internal.a \
39+
build_tflite_2_11_x/_deps/abseil-cpp-build/absl/flags/libabsl_flags_private_handle_accessor.a \
40+
build_tflite_2_11_x/_deps/abseil-cpp-build/absl/flags/libabsl_flags_commandlineflag.a \
41+
build_tflite_2_11_x/_deps/abseil-cpp-build/absl/flags/libabsl_flags.a \
42+
build_tflite_2_11_x/_deps/abseil-cpp-build/absl/status/libabsl_status.a \
43+
build_tflite_2_11_x/_deps/abseil-cpp-build/absl/status/libabsl_statusor.a \
44+
build_tflite_2_11_x/_deps/abseil-cpp-build/absl/synchronization/libabsl_graphcycles_internal.a \
45+
build_tflite_2_11_x/_deps/abseil-cpp-build/absl/synchronization/libabsl_synchronization.a \
46+
build_tflite_2_11_x/_deps/abseil-cpp-build/absl/random/libabsl_random_internal_pool_urbg.a \
47+
build_tflite_2_11_x/_deps/abseil-cpp-build/absl/random/libabsl_random_internal_randen_hwaes_impl.a \
48+
build_tflite_2_11_x/_deps/abseil-cpp-build/absl/random/libabsl_random_internal_randen.a \
49+
build_tflite_2_11_x/_deps/abseil-cpp-build/absl/random/libabsl_random_internal_distribution_test_util.a \
50+
build_tflite_2_11_x/_deps/abseil-cpp-build/absl/random/libabsl_random_internal_platform.a \
51+
build_tflite_2_11_x/_deps/abseil-cpp-build/absl/random/libabsl_random_distributions.a \
52+
build_tflite_2_11_x/_deps/abseil-cpp-build/absl/random/libabsl_random_internal_seed_material.a \
53+
build_tflite_2_11_x/_deps/abseil-cpp-build/absl/random/libabsl_random_seed_sequences.a \
54+
build_tflite_2_11_x/_deps/abseil-cpp-build/absl/random/libabsl_random_internal_randen_hwaes.a \
55+
build_tflite_2_11_x/_deps/abseil-cpp-build/absl/random/libabsl_random_internal_randen_slow.a \
56+
build_tflite_2_11_x/_deps/abseil-cpp-build/absl/random/libabsl_random_seed_gen_exception.a \
57+
build_tflite_2_11_x/_deps/abseil-cpp-build/absl/hash/libabsl_city.a \
58+
build_tflite_2_11_x/_deps/abseil-cpp-build/absl/hash/libabsl_hash.a \
59+
build_tflite_2_11_x/_deps/abseil-cpp-build/absl/hash/libabsl_low_level_hash.a \
60+
build_tflite_2_11_x/_deps/abseil-cpp-build/absl/numeric/libabsl_int128.a \
61+
build_tflite_2_11_x/_deps/abseil-cpp-build/absl/base/libabsl_base.a \
62+
build_tflite_2_11_x/_deps/abseil-cpp-build/absl/base/libabsl_throw_delegate.a \
63+
build_tflite_2_11_x/_deps/abseil-cpp-build/absl/base/libabsl_log_severity.a \
64+
build_tflite_2_11_x/_deps/abseil-cpp-build/absl/base/libabsl_malloc_internal.a \
65+
build_tflite_2_11_x/_deps/abseil-cpp-build/absl/base/libabsl_raw_logging_internal.a \
66+
build_tflite_2_11_x/_deps/abseil-cpp-build/absl/base/libabsl_spinlock_wait.a \
67+
build_tflite_2_11_x/_deps/abseil-cpp-build/absl/base/libabsl_scoped_set_env.a \
68+
build_tflite_2_11_x/_deps/abseil-cpp-build/absl/base/libabsl_strerror.a \
69+
build_tflite_2_11_x/_deps/abseil-cpp-build/absl/debugging/libabsl_symbolize.a \
70+
build_tflite_2_11_x/_deps/abseil-cpp-build/absl/debugging/libabsl_stacktrace.a \
71+
build_tflite_2_11_x/_deps/abseil-cpp-build/absl/debugging/libabsl_leak_check.a \
72+
build_tflite_2_11_x/_deps/abseil-cpp-build/absl/debugging/libabsl_examine_stack.a \
73+
build_tflite_2_11_x/_deps/abseil-cpp-build/absl/debugging/libabsl_failure_signal_handler.a \
74+
build_tflite_2_11_x/_deps/abseil-cpp-build/absl/debugging/libabsl_demangle_internal.a \
75+
build_tflite_2_11_x/_deps/abseil-cpp-build/absl/debugging/libabsl_debugging_internal.a \
76+
build_tflite_2_11_x/_deps/flatbuffers-build/libflatbuffers.a \
77+
build_tflite_2_11_x/_deps/farmhash-build/libfarmhash.a \
78+
build_tflite_2_11_x/_deps/ruy-build/ruy/libruy_kernel_arm.a \
79+
build_tflite_2_11_x/_deps/ruy-build/ruy/libruy_denormal.a \
80+
build_tflite_2_11_x/_deps/ruy-build/ruy/libruy_wait.a \
81+
build_tflite_2_11_x/_deps/ruy-build/ruy/libruy_kernel_avx512.a \
82+
build_tflite_2_11_x/_deps/ruy-build/ruy/libruy_apply_multiplier.a \
83+
build_tflite_2_11_x/_deps/ruy-build/ruy/libruy_cpuinfo.a \
84+
build_tflite_2_11_x/_deps/ruy-build/ruy/libruy_pack_avx2_fma.a \
85+
build_tflite_2_11_x/_deps/ruy-build/ruy/libruy_tune.a \
86+
build_tflite_2_11_x/_deps/ruy-build/ruy/libruy_trmul.a \
87+
build_tflite_2_11_x/_deps/ruy-build/ruy/libruy_system_aligned_alloc.a \
88+
build_tflite_2_11_x/_deps/ruy-build/ruy/libruy_ctx.a \
89+
build_tflite_2_11_x/_deps/ruy-build/ruy/libruy_pack_avx512.a \
90+
build_tflite_2_11_x/_deps/ruy-build/ruy/libruy_context_get_ctx.a \
91+
build_tflite_2_11_x/_deps/ruy-build/ruy/libruy_blocking_counter.a \
92+
build_tflite_2_11_x/_deps/ruy-build/ruy/libruy_block_map.a \
93+
build_tflite_2_11_x/_deps/ruy-build/ruy/libruy_prepacked_cache.a \
94+
build_tflite_2_11_x/_deps/ruy-build/ruy/libruy_have_built_path_for_avx2_fma.a \
95+
build_tflite_2_11_x/_deps/ruy-build/ruy/libruy_have_built_path_for_avx.a \
96+
build_tflite_2_11_x/_deps/ruy-build/ruy/libruy_pack_arm.a \
97+
build_tflite_2_11_x/_deps/ruy-build/ruy/libruy_context.a \
98+
build_tflite_2_11_x/_deps/ruy-build/ruy/libruy_thread_pool.a \
99+
build_tflite_2_11_x/_deps/ruy-build/ruy/libruy_prepare_packed_matrices.a \
100+
build_tflite_2_11_x/_deps/ruy-build/ruy/profiler/libruy_profiler_profiler.a \
101+
build_tflite_2_11_x/_deps/ruy-build/ruy/profiler/libruy_profiler_instrumentation.a \
102+
build_tflite_2_11_x/_deps/ruy-build/ruy/libruy_kernel_avx2_fma.a \
103+
build_tflite_2_11_x/_deps/ruy-build/ruy/libruy_have_built_path_for_avx512.a \
104+
build_tflite_2_11_x/_deps/ruy-build/ruy/libruy_pack_avx.a \
105+
build_tflite_2_11_x/_deps/ruy-build/ruy/libruy_allocator.a \
106+
build_tflite_2_11_x/_deps/ruy-build/ruy/libruy_kernel_avx.a \
107+
build_tflite_2_11_x/_deps/ruy-build/ruy/libruy_frontend.a \
108+
build_tflite_2_11_x/_deps/gemmlowp-build/libgemmlowp_eight_bit_int_gemm.a \
109+
/home/craft/workspace/DNN/XNNPACK/build/linux/JDSK/libXNNPACK.a \
110+
/home/craft/workspace/DNN/XNNPACK/build/linux/JDSK/pthreadpool/libpthreadpool.a \
111+
/home/craft/tcm/user/libtcm.a \
112+
build_tflite_2_11_x/tools/benchmark/libbenchmark_model.a \
113+
build_tflite_2_11_x/libtensorflow-lite.a \
114+
-Wl,--end-group -lstdc++ -lpthread -lm -ldl -lrt -latomic -static -g -Og -DDEBUG -fPIC -march=rv64gcv -mabi=lp64d -std=gnu++11

‎classification.cc‎

Lines changed: 90 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,11 @@ classification/imagenet_inception_v2_classification_5.tflite -i \
3838
classification/dog.jpg -l classification/labels.txt -c 1 -b 0 -s 255 -t 1
3939
# label: Blenheim spaniel with probability 11.0233 有bug
4040
41+
qemu-riscv64 classification/tflite_classification_arm -m \
42+
classification/imagenet_inception_v3_classification_5.tflite -i \
43+
classification/dog.jpg -l classification/labels.txt -c 1 -b 0 -s 255 -t 1
44+
# label: Blenheim spaniel with probability 22.116
45+
4146
qemu-riscv64 classification/tflite_classification -m \
4247
classification/imagenet_resnet_v1_50_classification_5.tflite -i \
4348
classification/dog.jpg -l classification/labels.txt -c 1 -b 0 -s 255 -t 1
@@ -131,21 +136,27 @@ void DisplayFrames(char *display_win, int input_source, Mat &show_image,
131136
void display_usage() {
132137
std:
133138
cout << "tflite_classification\n"
134-
<< "--tflite_model, -m: model_name.tflite\n"
135-
<< "--input_src, -r: [0|1|2] input source: image 0, video 1, camera 2\n"
139+
<< "--frame_cnt, -c: the number of frames to be used\n"
136140
<< "--input_path, -i: path of the input image/video or video port for "
137141
"camera, e.g., 1 for /dev/video1\n"
138142
<< "--labels, -l: labels for the model\n"
139-
<< "--frame_cnt, -c: the number of frames to be used\n"
143+
<< "--tflite_model, -m: model_name.tflite\n"
144+
<< "--profiling, -p: [0|1], profiling or not\n"
145+
<< "--input_src, -r: [0|1|2] input source: image 0, video 1, camera 2\n"
140146
<< "--input_mean, -b: input mean\n"
141147
<< "--input_std, -s: input standard deviation\n"
142-
<< "--profiling, -p: [0|1], profiling or not\n"
143148
<< "--threads, -t: number of threads\n"
149+
<< "--feature_copy, -f: feature copy to tcm\n"
150+
<< "--weight_copy, -w: weight copy to tcm\n"
151+
<< "--profile, -d: profile all layer\n"
152+
<< "--conv_profile, -P: profile convlution\n"
153+
<< "--freq, -F: cpu freq MHz\n"
154+
<< "--affinity, -a: process affinity\n"
155+
<< "--only_conv, -C: only run convlution\n"
156+
<< "--only_misc, -M: only run other op except convlution\n"
144157
<< "\n";
145158
}
146159

147-
#ifdef MEM_PROFILE
148-
149160
#ifdef __cplusplus
150161
extern "C" {
151162
#endif
@@ -154,12 +165,23 @@ extern size_t packed_feature_in_byte;
154165

155166
extern size_t packed_weight_access_in_byte;
156167
extern size_t packed_feature_access_in_byte;
168+
169+
extern bool PROFILE;
170+
extern bool CONV_PROFILE;
171+
172+
extern long FREQ;
173+
174+
extern bool FEA_CPY2TCM;
175+
extern bool FILTER_CPY2TCM;
176+
177+
extern bool ONLY_CONV;
178+
extern bool ONLY_MISC;
179+
180+
extern long ELAPSEDTIME;
157181
#ifdef __cplusplus
158182
}
159183
#endif
160184

161-
#endif
162-
163185
// (input - mean) / std
164186
/*
165187
* Main function
@@ -180,30 +202,35 @@ int main(int argc, char **argv) {
180202
while (1) {
181203
static struct option long_options[] = {
182204
{"frame_cnt", required_argument, nullptr, 'c'},
183-
{"input_src", required_argument, nullptr, 'r'},
184205
{"input_path", required_argument, nullptr, 'i'},
185206
{"labels", required_argument, nullptr, 'l'},
186207
{"tflite_model", required_argument, nullptr, 'm'},
187208
{"profiling", required_argument, nullptr, 'p'},
188-
{"threads", required_argument, nullptr, 't'},
209+
{"input_src", required_argument, nullptr, 'r'},
189210
{"input_mean", required_argument, nullptr, 'b'},
190211
{"input_std", required_argument, nullptr, 's'},
212+
{"threads", required_argument, nullptr, 't'},
213+
{"feature_copy", required_argument, nullptr, 'f'},
214+
{"weight_copy", required_argument, nullptr, 'w'},
215+
{"profile", required_argument, nullptr, 'd'},
216+
{"conv_profile", required_argument, nullptr, 'P'},
217+
{"freq", required_argument, nullptr, 'F'},
218+
{"affinity", required_argument, nullptr, 'a'},
219+
{"only_conv", required_argument, nullptr, 'C'},
220+
{"only_misc", required_argument, nullptr, 'M'},
191221
{nullptr, 0, nullptr, 0}};
192222

193223
/* getopt_long stores the option index here. */
194224
int option_index = 0;
195225

196-
c = getopt_long(argc, argv, "b:c:i:l:m:p:r:s:t:h", long_options,
197-
&option_index);
226+
c = getopt_long(argc, argv, "c:i:l:m:p:r:b:s:t:f:w:d:P:F:a:C:M:h",
227+
long_options, &option_index);
198228

199229
/* Detect the end of the options. */
200230
if (c == -1)
201231
break;
202232

203233
switch (c) {
204-
case 'b':
205-
input_mean = strtod(optarg, nullptr);
206-
break;
207234
case 'c':
208235
frame_cnt = strtol(optarg, nullptr, 10);
209236
break;
@@ -222,12 +249,57 @@ int main(int argc, char **argv) {
222249
case 'r':
223250
input_source = (eInputType)strtol(optarg, nullptr, 10);
224251
break;
252+
case 'b':
253+
input_mean = strtod(optarg, nullptr);
254+
break;
225255
case 's':
226256
input_std = strtod(optarg, nullptr);
227257
break;
228258
case 't':
229259
num_threads = strtol(optarg, nullptr, 10);
230260
break;
261+
case 'f':
262+
FEA_CPY2TCM = strtol(optarg, nullptr, 10);
263+
break;
264+
case 'w':
265+
FILTER_CPY2TCM = strtol(optarg, nullptr, 10);
266+
break;
267+
case 'd':
268+
PROFILE = strtol(optarg, nullptr, 10);
269+
break;
270+
case 'P':
271+
CONV_PROFILE = strtol(optarg, nullptr, 10);
272+
break;
273+
case 'F':
274+
FREQ = strtol(optarg, nullptr, 10);
275+
break;
276+
case 'a': {
277+
char *core_id_str = strtok(optarg, ",");
278+
cpu_set_t mask;
279+
CPU_ZERO(&mask);
280+
while (core_id_str) {
281+
long core_id = strtol(core_id_str, nullptr, 10);
282+
if (core_id > -1) {
283+
CPU_SET(core_id, &mask);
284+
fprintf(stderr, "set affinity to %d!\n", core_id);
285+
} else {
286+
fprintf(stderr, "noaffinity set!\n");
287+
}
288+
core_id_str = strtok(NULL, ",");
289+
}
290+
int result = sched_setaffinity(0, sizeof(mask), &mask);
291+
if (result == 0) {
292+
fprintf(stderr, "set process affinity suc!\n");
293+
} else {
294+
fprintf(stderr, "set process affinity err %d!\n", result);
295+
}
296+
} break;
297+
case 'C':
298+
ONLY_CONV = strtol(optarg, nullptr, 10);
299+
break;
300+
case 'M':
301+
ONLY_MISC = strtol(optarg, nullptr, 10);
302+
break;
231303
case 'h':
232304
display_usage();
233305
exit(-1);
@@ -350,9 +422,10 @@ int main(int argc, char **argv) {
350422

351423
if (profiling) {
352424
std::cout << "Inference time for frame " << frame_index << ": "
353-
<< inference_time_ms << " ms" << std::endl;
425+
<< inference_time_ms << " ms"
426+
<< " XNNPACKrun: " << ELAPSEDTIME << "ms" << std::endl;
354427
}
355-
428+
ELAPSEDTIME = 0;
356429
// Report the inference output
357430
std::string last_label = "None";
358431
int argmax = -1;
23.3 MB
Binary file not shown.

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /