Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Xiaomi
Mace
提交
76af1f81
Mace
项目概览
Xiaomi
/
Mace
通知
106
Star
40
Fork
27
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
Mace
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
76af1f81
编写于
1月 09, 2018
作者:
L
liuqi
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fix tuning bug: add profiling=true at vaildate_gcn.sh.
上级
a038d23f
变更
13
隐藏空白更改
内联
并排
Showing
13 changed file
with
81 addition
and
52 deletion
+81
-52
mace/kernels/opencl/addn.cc
mace/kernels/opencl/addn.cc
+2
-0
mace/kernels/opencl/batch_norm_opencl.cc
mace/kernels/opencl/batch_norm_opencl.cc
+4
-4
mace/kernels/opencl/concat.cc
mace/kernels/opencl/concat.cc
+4
-3
mace/kernels/opencl/conv_2d_opencl_1x1.cc
mace/kernels/opencl/conv_2d_opencl_1x1.cc
+4
-4
mace/kernels/opencl/conv_2d_opencl_3x3.cc
mace/kernels/opencl/conv_2d_opencl_3x3.cc
+4
-3
mace/kernels/opencl/conv_2d_opencl_general.cc
mace/kernels/opencl/conv_2d_opencl_general.cc
+4
-3
mace/kernels/opencl/pooling_opencl.cc
mace/kernels/opencl/pooling_opencl.cc
+4
-4
mace/kernels/opencl/relu_opencl.cc
mace/kernels/opencl/relu_opencl.cc
+4
-4
mace/kernels/opencl/resize_bilinear_opencl.cc
mace/kernels/opencl/resize_bilinear_opencl.cc
+4
-4
mace/ops/addn_benchmark.cc
mace/ops/addn_benchmark.cc
+5
-2
mace/utils/tuner.h
mace/utils/tuner.h
+2
-0
mace/utils/tuner_test.cc
mace/utils/tuner_test.cc
+29
-12
tools/validate_gcn.sh
tools/validate_gcn.sh
+11
-9
未找到文件。
mace/kernels/opencl/addn.cc
浏览文件 @
76af1f81
...
...
@@ -55,11 +55,13 @@ static void AddN(const std::vector<const Tensor *> &input_tensors,
local_ws
[
1
]
=
std
::
min
<
uint32_t
>
(
batch_height_pixels
,
kwg_size
/
local_ws
[
0
]);
return
{{
local_ws
[
0
],
local_ws
[
1
]},
{
local_ws
[
1
],
local_ws
[
0
]},
{
kwg_size
/
4
,
4
},
{
kwg_size
/
16
,
16
},
{
kwg_size
/
32
,
32
},
{
kwg_size
/
64
,
64
},
{
kwg_size
/
128
,
128
},
{
kwg_size
/
256
,
256
},
{
kwg_size
/
512
,
512
},
{
kwg_size
,
1
},
{
1
,
kwg_size
}
};
...
...
mace/kernels/opencl/batch_norm_opencl.cc
浏览文件 @
76af1f81
...
...
@@ -65,9 +65,7 @@ void BatchNormFunctor<DeviceType::OPENCL, T>::operator()(
local_ws
[
0
]
=
std
::
min
<
uint32_t
>
(
channel_blocks
,
kwg_size
);
local_ws
[
1
]
=
std
::
min
<
uint32_t
>
(
width
,
kwg_size
/
local_ws
[
0
]);
local_ws
[
2
]
=
std
::
min
<
uint32_t
>
(
height
*
batch
,
kwg_size
/
(
local_ws
[
0
]
*
local_ws
[
1
]));
return
{{
8
,
128
,
1
},
//SNPE size
{
local_ws
[
0
],
local_ws
[
1
],
local_ws
[
2
]},
{
local_ws
[
2
],
local_ws
[
1
],
local_ws
[
0
]},
return
{{
local_ws
[
0
],
local_ws
[
1
],
local_ws
[
2
]},
{
kwg_size
/
16
,
4
,
4
},
{
kwg_size
/
32
,
4
,
8
},
{
kwg_size
/
32
,
8
,
4
},
...
...
@@ -83,7 +81,9 @@ void BatchNormFunctor<DeviceType::OPENCL, T>::operator()(
{
7
,
15
,
9
},
{
9
,
7
,
15
},
{
15
,
7
,
9
},
{
1
,
kwg_size
,
1
}};
{
1
,
kwg_size
,
1
},
{
8
,
128
,
1
},
//SNPE size
};
};
cl
::
Event
event
;
auto
func
=
[
&
](
const
std
::
vector
<
uint32_t
>
&
params
)
->
cl_int
{
...
...
mace/kernels/opencl/concat.cc
浏览文件 @
76af1f81
...
...
@@ -55,8 +55,7 @@ static void Concat2(const Tensor *input0,
local_ws
[
0
]
=
std
::
min
<
uint32_t
>
(
channel_blk
,
kwg_size
);
local_ws
[
1
]
=
std
::
min
<
uint32_t
>
(
width
,
kwg_size
/
local_ws
[
0
]);
local_ws
[
2
]
=
std
::
min
<
uint32_t
>
(
height
*
batch
,
kwg_size
/
(
local_ws
[
0
]
*
local_ws
[
1
]));
return
{{
4
,
15
,
8
},
//SNPE size
{
local_ws
[
0
],
local_ws
[
1
],
local_ws
[
2
]},
return
{{
local_ws
[
0
],
local_ws
[
1
],
local_ws
[
2
]},
{
local_ws
[
2
],
local_ws
[
1
],
local_ws
[
0
]},
{
kwg_size
/
16
,
4
,
4
},
{
kwg_size
/
32
,
4
,
8
},
...
...
@@ -73,7 +72,9 @@ static void Concat2(const Tensor *input0,
{
7
,
15
,
9
},
{
9
,
7
,
15
},
{
15
,
7
,
9
},
{
1
,
kwg_size
,
1
}};
{
1
,
kwg_size
,
1
},
{
4
,
15
,
8
},
//SNPE size
};
};
cl
::
Event
event
;
auto
func
=
[
&
](
const
std
::
vector
<
uint32_t
>
&
params
)
->
cl_int
{
...
...
mace/kernels/opencl/conv_2d_opencl_1x1.cc
浏览文件 @
76af1f81
...
...
@@ -72,9 +72,7 @@ void Conv1x1(const Tensor *input,
local_ws
[
0
]
=
std
::
min
<
uint32_t
>
(
channel_blocks
,
kwg_size
);
local_ws
[
1
]
=
std
::
min
<
uint32_t
>
(
width_blocks
,
kwg_size
/
local_ws
[
0
]);
local_ws
[
2
]
=
std
::
min
<
uint32_t
>
(
height
*
batch
,
kwg_size
/
(
local_ws
[
0
]
*
local_ws
[
1
]));
return
{{
4
,
15
,
8
},
//SNPE size
{
local_ws
[
0
],
local_ws
[
1
],
local_ws
[
2
]},
{
local_ws
[
2
],
local_ws
[
1
],
local_ws
[
0
]},
return
{{
local_ws
[
0
],
local_ws
[
1
],
local_ws
[
2
]},
{
kwg_size
/
16
,
4
,
4
},
{
kwg_size
/
32
,
4
,
8
},
{
kwg_size
/
32
,
8
,
4
},
...
...
@@ -90,7 +88,9 @@ void Conv1x1(const Tensor *input,
{
7
,
15
,
9
},
{
9
,
7
,
15
},
{
15
,
7
,
9
},
{
1
,
kwg_size
,
1
}};
{
1
,
kwg_size
,
1
},
{
4
,
15
,
8
},
//SNPE size
};
};
cl
::
Event
event
;
auto
func
=
[
&
](
const
std
::
vector
<
uint32_t
>&
params
)
->
cl_int
{
...
...
mace/kernels/opencl/conv_2d_opencl_3x3.cc
浏览文件 @
76af1f81
...
...
@@ -66,8 +66,7 @@ static void Conv2d3x3S12(const Tensor *input, const Tensor *filter,
local_ws
[
0
]
=
std
::
min
<
uint32_t
>
(
channel_blocks
,
kwg_size
);
local_ws
[
1
]
=
std
::
min
<
uint32_t
>
(
width_blocks
,
kwg_size
/
local_ws
[
0
]);
local_ws
[
2
]
=
std
::
min
<
uint32_t
>
(
height
*
batch
,
kwg_size
/
(
local_ws
[
0
]
*
local_ws
[
1
]));
return
{{
4
,
15
,
8
},
//SNPE size
{
local_ws
[
0
],
local_ws
[
1
],
local_ws
[
2
]},
return
{{
local_ws
[
0
],
local_ws
[
1
],
local_ws
[
2
]},
{
local_ws
[
2
],
local_ws
[
1
],
local_ws
[
0
]},
{
kwg_size
/
16
,
4
,
4
},
{
kwg_size
/
32
,
4
,
8
},
...
...
@@ -84,7 +83,9 @@ static void Conv2d3x3S12(const Tensor *input, const Tensor *filter,
{
7
,
15
,
9
},
{
9
,
7
,
15
},
{
15
,
7
,
9
},
{
1
,
kwg_size
,
1
}};
{
1
,
kwg_size
,
1
},
{
4
,
15
,
8
},
//SNPE size
};
};
cl
::
Event
event
;
auto
func
=
[
&
](
const
std
::
vector
<
uint32_t
>
&
params
)
->
cl_int
{
...
...
mace/kernels/opencl/conv_2d_opencl_general.cc
浏览文件 @
76af1f81
...
...
@@ -68,8 +68,7 @@ void Conv2dOpencl(const Tensor *input, const Tensor *filter,
local_ws
[
0
]
=
std
::
min
<
uint32_t
>
(
channel_blocks
,
kwg_size
);
local_ws
[
1
]
=
std
::
min
<
uint32_t
>
(
width_blocks
,
kwg_size
/
local_ws
[
0
]);
local_ws
[
2
]
=
std
::
min
<
uint32_t
>
(
height
*
batch
,
kwg_size
/
(
local_ws
[
0
]
*
local_ws
[
1
]));
return
{{
4
,
15
,
8
},
//SNPE size
{
local_ws
[
0
],
local_ws
[
1
],
local_ws
[
2
]},
return
{{
local_ws
[
0
],
local_ws
[
1
],
local_ws
[
2
]},
{
local_ws
[
2
],
local_ws
[
1
],
local_ws
[
0
]},
{
kwg_size
/
16
,
4
,
4
},
{
kwg_size
/
32
,
4
,
8
},
...
...
@@ -86,7 +85,9 @@ void Conv2dOpencl(const Tensor *input, const Tensor *filter,
{
7
,
15
,
9
},
{
9
,
7
,
15
},
{
15
,
7
,
9
},
{
1
,
kwg_size
,
1
}};
{
1
,
kwg_size
,
1
},
{
4
,
15
,
8
},
//SNPE size
};
};
cl
::
Event
event
;
auto
func
=
[
&
](
const
std
::
vector
<
uint32_t
>
&
params
)
->
cl_int
{
...
...
mace/kernels/opencl/pooling_opencl.cc
浏览文件 @
76af1f81
...
...
@@ -67,9 +67,7 @@ static void Pooling(const Tensor *input,
local_ws
[
0
]
=
std
::
min
<
uint32_t
>
(
channel_blocks
,
kwg_size
);
local_ws
[
1
]
=
std
::
min
<
uint32_t
>
(
out_width
,
kwg_size
/
local_ws
[
0
]);
local_ws
[
2
]
=
std
::
min
<
uint32_t
>
(
out_height
*
batch
,
kwg_size
/
(
local_ws
[
0
]
*
local_ws
[
1
]));
return
{{
4
,
15
,
8
},
//SNPE size
{
local_ws
[
0
],
local_ws
[
1
],
local_ws
[
2
]},
{
local_ws
[
2
],
local_ws
[
1
],
local_ws
[
0
]},
return
{{
local_ws
[
0
],
local_ws
[
1
],
local_ws
[
2
]},
{
kwg_size
/
16
,
4
,
4
},
{
kwg_size
/
32
,
4
,
8
},
{
kwg_size
/
32
,
8
,
4
},
...
...
@@ -85,7 +83,9 @@ static void Pooling(const Tensor *input,
{
7
,
15
,
9
},
{
9
,
7
,
15
},
{
15
,
7
,
9
},
{
1
,
kwg_size
,
1
}};
{
1
,
kwg_size
,
1
},
{
4
,
15
,
8
},
//SNPE size
};
};
cl
::
Event
event
;
auto
func
=
[
&
](
const
std
::
vector
<
uint32_t
>
&
params
)
->
cl_int
{
...
...
mace/kernels/opencl/relu_opencl.cc
浏览文件 @
76af1f81
...
...
@@ -55,9 +55,7 @@ void ReluFunctor<DeviceType::OPENCL, T>::operator()(const Tensor *input,
local_ws
[
0
]
=
std
::
min
<
uint32_t
>
(
channel_blocks
,
kwg_size
);
local_ws
[
1
]
=
std
::
min
<
uint32_t
>
(
width
,
kwg_size
/
local_ws
[
0
]);
local_ws
[
2
]
=
std
::
min
<
uint32_t
>
(
height
*
batch
,
kwg_size
/
(
local_ws
[
0
]
*
local_ws
[
1
]));
return
{{
4
,
15
,
8
},
//SNPE size
{
local_ws
[
0
],
local_ws
[
1
],
local_ws
[
2
]},
{
local_ws
[
2
],
local_ws
[
1
],
local_ws
[
0
]},
return
{{
local_ws
[
0
],
local_ws
[
1
],
local_ws
[
2
]},
{
kwg_size
/
16
,
4
,
4
},
{
kwg_size
/
32
,
4
,
8
},
{
kwg_size
/
32
,
8
,
4
},
...
...
@@ -73,7 +71,9 @@ void ReluFunctor<DeviceType::OPENCL, T>::operator()(const Tensor *input,
{
7
,
15
,
9
},
{
9
,
7
,
15
},
{
15
,
7
,
9
},
{
1
,
kwg_size
,
1
}};
{
1
,
kwg_size
,
1
},
{
4
,
15
,
8
},
//SNPE size
};
};
cl
::
Event
event
;
auto
func
=
[
&
](
const
std
::
vector
<
uint32_t
>
&
params
)
->
cl_int
{
...
...
mace/kernels/opencl/resize_bilinear_opencl.cc
浏览文件 @
76af1f81
...
...
@@ -64,9 +64,7 @@ void ResizeBilinearFunctor<DeviceType::OPENCL, T>::operator()(
local_ws
[
0
]
=
std
::
min
<
uint32_t
>
(
channel_blocks
,
kwg_size
);
local_ws
[
1
]
=
std
::
min
<
uint32_t
>
(
out_width
,
kwg_size
/
local_ws
[
0
]);
local_ws
[
2
]
=
std
::
min
<
uint32_t
>
(
out_height
*
batch
,
kwg_size
/
(
local_ws
[
0
]
*
local_ws
[
1
]));
return
{{
4
,
15
,
8
},
//SNPE size
{
local_ws
[
0
],
local_ws
[
1
],
local_ws
[
2
]},
{
local_ws
[
2
],
local_ws
[
1
],
local_ws
[
0
]},
return
{{
local_ws
[
0
],
local_ws
[
1
],
local_ws
[
2
]},
{
kwg_size
/
16
,
4
,
4
},
{
kwg_size
/
32
,
4
,
8
},
{
kwg_size
/
32
,
8
,
4
},
...
...
@@ -78,7 +76,9 @@ void ResizeBilinearFunctor<DeviceType::OPENCL, T>::operator()(
{
1
,
kwg_size
/
32
,
32
},
{
1
,
kwg_size
/
64
,
64
},
{
1
,
kwg_size
/
128
,
128
},
{
1
,
kwg_size
,
1
}};
{
1
,
kwg_size
,
1
},
{
4
,
15
,
8
},
//SNPE size
};
};
cl
::
Event
event
;
auto
func
=
[
&
](
const
std
::
vector
<
uint32_t
>
&
params
)
->
cl_int
{
...
...
mace/ops/addn_benchmark.cc
浏览文件 @
76af1f81
...
...
@@ -69,9 +69,12 @@ static void AddNBenchmark(int iters, int inputs, int n, int h, int w, int c) {
BM_ADDN_MACRO(INPUTS, N, H, W, C, TYPE, CPU); \
BM_ADDN_MACRO(INPUTS, N, H, W, C, TYPE, OPENCL);
BM_ADDN
(
2
,
1
,
240
,
240
,
256
,
float
);
BM_ADDN
(
2
,
1
,
256
,
256
,
32
,
float
);
BM_ADDN
(
2
,
1
,
128
,
128
,
32
,
float
);
// BM_ADDN(2, 1, 240, 240, 256, half);
BM_ADDN
(
4
,
1
,
240
,
240
,
256
,
float
);
BM_ADDN
(
4
,
1
,
128
,
128
,
3
,
float
);
BM_ADDN
(
2
,
1
,
256
,
256
,
3
,
float
);
BM_ADDN
(
2
,
1
,
512
,
512
,
3
,
float
);
// BM_ADDN(4, 1, 240, 240, 256, half);
}
// namespace mace
mace/utils/tuner.h
浏览文件 @
76af1f81
...
...
@@ -46,6 +46,8 @@ class Tuner {
// tune
std
::
vector
<
param_type
>
opt_param
=
default_param
;
RetType
res
=
Tune
<
RetType
>
(
param_generator
,
func
,
timer
,
&
opt_param
);
VLOG
(
1
)
<<
"Tuning result. "
<<
param_key
<<
": "
<<
internal
::
MakeString
(
opt_param
);
param_table_
[
param_key
]
=
opt_param
;
return
res
;
}
else
{
...
...
mace/utils/tuner_test.cc
浏览文件 @
76af1f81
...
...
@@ -9,10 +9,10 @@
namespace
mace
{
class
TunerTest
:
public
::
testing
::
Test
{
class
TunerTest
:
public
::
testing
::
Test
{
protected:
virtual
void
SetUp
()
{
remove
(
"/data/local/tmp/mace.config"
);
remove
(
"/data/local/tmp/mace.config"
);
setenv
(
"MACE_RUN_PARAMETER_PATH"
,
"/data/local/tmp/mace.config"
,
1
);
setenv
(
"MACE_TUNING"
,
"1"
,
1
);
}
...
...
@@ -20,7 +20,7 @@ class TunerTest: public ::testing::Test {
TEST_F
(
TunerTest
,
SimpleRun
)
{
int
expect
=
1
;
auto
TunerFunc
=
[
&
](
const
std
::
vector
<
int
>&
params
)
->
int
{
auto
TunerFunc
=
[
&
](
const
std
::
vector
<
unsigned
int
>
&
params
)
->
int
{
if
(
params
.
front
()
==
1
)
{
return
expect
;
}
else
{
...
...
@@ -29,19 +29,27 @@ TEST_F(TunerTest, SimpleRun) {
};
WallClockTimer
timer
;
std
::
vector
<
int
>
default_params
(
1
,
1
);
int
res
=
Tuner
<
int
>::
Get
()
->
template
TuneOrRun
<
int
>(
"SimpleRun"
,
default_params
,
nullptr
,
TunerFunc
,
&
timer
);
std
::
vector
<
unsigned
int
>
default_params
(
1
,
1
);
int
res
=
Tuner
<
unsigned
int
>::
Get
()
->
template
TuneOrRun
<
unsigned
int
>(
"SimpleRun"
,
default_params
,
nullptr
,
TunerFunc
,
&
timer
);
EXPECT_EQ
(
expect
,
res
);
default_params
[
0
]
=
2
;
res
=
Tuner
<
int
>::
Get
()
->
template
TuneOrRun
<
int
>(
"SimpleRun"
,
default_params
,
nullptr
,
TunerFunc
,
&
timer
);
EXPECT_EQ
(
expect
+
1
,
res
);
res
=
Tuner
<
unsigned
int
>::
Get
()
->
template
TuneOrRun
<
unsigned
int
>(
"SimpleRun"
,
default_params
,
nullptr
,
TunerFunc
,
&
timer
);
EXPECT_EQ
(
expect
+
1
,
res
);
}
TEST_F
(
TunerTest
,
SimpleTune
)
{
int
expect
=
3
;
auto
TunerFunc
=
[
&
](
const
std
::
vector
<
int
>&
params
)
->
int
{
auto
TunerFunc
=
[
&
](
const
std
::
vector
<
unsigned
int
>
&
params
)
->
int
{
if
(
params
.
front
()
==
expect
)
{
return
expect
;
}
else
{
...
...
@@ -50,17 +58,26 @@ TEST_F(TunerTest, SimpleTune) {
}
};
std
::
vector
<
int
>
default_params
(
1
,
1
);
auto
params_generator
=
[]()
->
std
::
vector
<
std
::
vector
<
int
>>
{
std
::
vector
<
unsigned
int
>
default_params
(
1
,
1
);
auto
params_generator
=
[]()
->
std
::
vector
<
std
::
vector
<
unsigned
int
>>
{
return
{{
1
},
{
2
},
{
3
},
{
4
}};
};
// tune
WallClockTimer
timer
;
int
res
=
Tuner
<
int
>::
Get
()
->
template
TuneOrRun
<
int
>(
"SimpleRun"
,
default_params
,
*
params_generator
,
TunerFunc
,
&
timer
);
int
res
=
Tuner
<
unsigned
int
>::
Get
()
->
template
TuneOrRun
<
unsigned
int
>(
"SimpleRun"
,
default_params
,
*
params_generator
,
TunerFunc
,
&
timer
);
EXPECT_EQ
(
expect
,
res
);
// run
res
=
Tuner
<
int
>::
Get
()
->
template
TuneOrRun
<
int
>(
"SimpleRun"
,
default_params
,
nullptr
,
TunerFunc
,
&
timer
);
res
=
Tuner
<
unsigned
int
>::
Get
()
->
template
TuneOrRun
<
unsigned
int
>(
"SimpleRun"
,
default_params
,
nullptr
,
TunerFunc
,
&
timer
);
EXPECT_EQ
(
expect
,
res
);
}
...
...
tools/validate_gcn.sh
浏览文件 @
76af1f81
...
...
@@ -39,6 +39,15 @@ build_and_run()
PRODUCTION_MODE_BUILD_FLAGS
=
"--define production=true"
fi
if
[[
"
${
TUNING_OR_NOT
}
"
!=
"0"
&&
"
$PRODUCTION_MODE
"
!=
true
]]
;
then
TUNING_MODE_BUILD_FLAGS
=
"--define profiling=true"
tuning_flag
=
1
round
=
0
# only warm up
else
tuning_flag
=
0
round
=
100
fi
bazel build
--verbose_failures
-c
opt
--strip
always mace/examples:mace_run
\
--crosstool_top
=
//external:android/crosstool
\
--host_crosstool_top
=
@bazel_tools//tools/cpp:toolchain
\
...
...
@@ -47,7 +56,8 @@ build_and_run()
--copt
=
"-D_GLIBCXX_USE_C99_MATH_TR1"
\
--copt
=
"-Werror=return-type"
\
--copt
=
"-DMACE_MODEL_TAG=
${
MODEL_TAG
}
"
\
$PRODUCTION_MODE_BUILD_FLAGS
||
exit
-1
$PRODUCTION_MODE_BUILD_FLAGS
\
$TUNING_MODE_BUILD_FLAGS
||
exit
-1
adb shell
"mkdir -p
${
PHONE_DATA_DIR
}
"
||
exit
-1
if
[
"
$PRODUCTION_MODE
"
=
false
]
;
then
...
...
@@ -56,14 +66,6 @@ build_and_run()
adb push
${
MODEL_DIR
}
/
${
INPUT_FILE_NAME
}
${
PHONE_DATA_DIR
}
||
exit
-1
adb push bazel-bin/mace/examples/mace_run
${
PHONE_DATA_DIR
}
||
exit
-1
if
[[
"
${
TUNING_OR_NOT
}
"
!=
"0"
&&
"
$PRODUCTION_MODE
"
!=
true
]]
;
then
tuning_flag
=
1
round
=
0
# only warm up
else
tuning_flag
=
0
round
=
2
fi
adb </dev/null shell
MACE_TUNING
=
${
tuning_flag
}
\
MACE_CPP_MIN_VLOG_LEVEL
=
$VLOG_LEVEL
\
MACE_RUN_PARAMETER_PATH
=
${
PHONE_DATA_DIR
}
/mace_run.config
\
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录