Skip to content

Commit 6fa73ea

Browse files
author
zhangdanfeng
committed
fill classification
Signed-off-by: zhangdanfeng <[email protected]>
1 parent a4b9c02 commit 6fa73ea

12 files changed

+616
-36
lines changed

.gitignore

+6-1
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

+19-15
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

+114
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

+90-17
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;
Binary file not shown.

0 commit comments

Comments
 (0)