TNN 介绍
TNN benckmark
-
配置NDK(在benchmark\benchmark_android目录下的benchmark_models.sh文件中指定NDK的路径export ANDROID_NDK=youpath)
-
把目标手机链接到电脑上,使用adb连接
-
直接运行bench_android.sh,就会开始编译tnn,并在手机上完成模型部署和推理
TNN运行机制简介
完成了benchmark的运行之后,我们便从其入口开始(test\test.cc),梳理其运行机制,很容易发现程序的入口
int main(int argc, char* argv[]) {
return TNN_NS::test::Run(argc, argv);
}
核心函数是Run,该函数中的运行过程如下
net.Init-->net.CreateInst --> instance.ForwardAsync --> finished
int Run(int argc, char* argv[]) {
// parse command line params
if (!ParseAndCheckCommandLine(argc, argv)) //解析命令行参数,主要包括:后端设备、cpu线程数、推理次数、模型路径等
return -1;
#if (DUMP_INPUT_BLOB || DUMP_OUTPUT_BLOB)
g_tnn_dump_directory = FLAGS_op;
#endif
// Set the cpu affinity.
// usually, -dl 0-3 for little core, -dl 4-7 for big core
// only works when -dl flags were set. benchmark script not set -dl flags
SetCpuAffinity(); // 线程绑cpu核
ModelConfig model_config = GetModelConfig(); // 模型配置
NetworkConfig network_config = GetNetworkConfig();
InputShapesMap input_shape = GetInputShapesMap();
srand(102);
TNN net;
Status ret = net.Init(model_config)