Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Xiaomi
Mace
提交
8d8bbfcf
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,发现更多精彩内容 >>
提交
8d8bbfcf
编写于
2月 28, 2018
作者:
吴
吴承辉
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'minor_fix' into 'master'
Minor fixes about logging and const tensor interface See merge request !248
上级
751fd049
9f9dc890
变更
10
显示空白变更内容
内联
并排
Showing
10 changed file
with
65 addition
and
52 deletion
+65
-52
mace/core/mace.cc
mace/core/mace.cc
+2
-2
mace/core/net.cc
mace/core/net.cc
+3
-5
mace/core/runtime/hexagon/hexagon_control_wrapper.cc
mace/core/runtime/hexagon/hexagon_control_wrapper.cc
+8
-8
mace/core/serializer.cc
mace/core/serializer.cc
+28
-20
mace/core/serializer.h
mace/core/serializer.h
+4
-2
mace/core/tensor.h
mace/core/tensor.h
+4
-2
mace/core/workspace.cc
mace/core/workspace.cc
+9
-9
mace/public/mace.h
mace/public/mace.h
+2
-2
mace/utils/logging.h
mace/utils/logging.h
+1
-0
tools/export_lib.sh
tools/export_lib.sh
+4
-2
未找到文件。
mace/core/mace.cc
浏览文件 @
8d8bbfcf
...
...
@@ -10,7 +10,7 @@
namespace
mace
{
ConstTensor
::
ConstTensor
(
const
std
::
string
&
name
,
unsigned
char
*
data
,
const
unsigned
char
*
data
,
const
std
::
vector
<
int64_t
>
&
dims
,
const
DataType
data_type
,
uint32_t
node_id
)
:
...
...
@@ -23,7 +23,7 @@ ConstTensor::ConstTensor(const std::string &name,
node_id_
(
node_id
)
{}
ConstTensor
::
ConstTensor
(
const
std
::
string
&
name
,
unsigned
char
*
data
,
const
unsigned
char
*
data
,
const
std
::
vector
<
int64_t
>
&
dims
,
const
int
data_type
,
uint32_t
node_id
)
:
...
...
mace/core/net.cc
浏览文件 @
8d8bbfcf
...
...
@@ -22,7 +22,7 @@ SimpleNet::SimpleNet(const std::shared_ptr<const OperatorRegistry> op_registry,
const
NetMode
mode
)
:
NetBase
(
op_registry
,
net_def
,
ws
,
type
),
device_type_
(
type
)
{
VLOG
(
1
)
<<
"Constructing SimpleNet "
<<
net_def
->
name
(
);
MACE_LATENCY_LOGGER
(
1
,
"Constructing SimpleNet "
,
net_def
->
name
()
);
for
(
int
idx
=
0
;
idx
<
net_def
->
op_size
();
++
idx
)
{
const
auto
&
operator_def
=
net_def
->
op
(
idx
);
VLOG
(
3
)
<<
"Creating operator "
<<
operator_def
.
name
()
<<
"("
...
...
@@ -41,10 +41,8 @@ bool SimpleNet::Run(RunMetadata *run_metadata) {
MACE_LATENCY_LOGGER
(
1
,
"Running net"
);
for
(
auto
iter
=
operators_
.
begin
();
iter
!=
operators_
.
end
();
++
iter
)
{
auto
&
op
=
*
iter
;
VLOG
(
3
)
<<
"Running operator "
<<
op
->
debug_def
().
name
()
<<
"("
<<
op
->
debug_def
().
type
()
<<
")."
;
MACE_LATENCY_LOGGER
(
2
,
"Running operator "
,
op
->
debug_def
().
name
());
MACE_LATENCY_LOGGER
(
2
,
"Running operator "
,
op
->
debug_def
().
name
(),
"("
,
op
->
debug_def
().
type
(),
")"
);
bool
future_wait
=
(
device_type_
==
DeviceType
::
OPENCL
&&
(
run_metadata
!=
nullptr
||
std
::
distance
(
iter
,
operators_
.
end
())
==
1
));
...
...
mace/core/runtime/hexagon/hexagon_control_wrapper.cc
浏览文件 @
8d8bbfcf
...
...
@@ -64,29 +64,29 @@ bool HexagonControlWrapper::SetupGraph(const NetDef &net_def) {
std
::
thread
const_thread
([
&
]()
{
std
::
cout
<<
"thread function
\n
"
;
std
::
vector
<
hexagon_nn_const_node
>
const_node_list
;
for
(
const
ConstTensor
&
tensor_proto
:
net_def
.
tensors
())
{
std
::
vector
<
int
>
tensor_shape
(
tensor_proto
.
dims
().
begin
(),
tensor_proto
.
dims
().
end
());
for
(
const
ConstTensor
&
const_tensor
:
net_def
.
tensors
())
{
std
::
vector
<
int
>
tensor_shape
(
const_tensor
.
dims
().
begin
(),
const_tensor
.
dims
().
end
());
while
(
tensor_shape
.
size
()
<
4
)
{
tensor_shape
.
insert
(
tensor_shape
.
begin
(),
1
);
}
hexagon_nn_const_node
const_node
;
const_node
.
node_id
=
node_id
(
tensor_proto
.
node_id
());
const_node
.
node_id
=
node_id
(
const_tensor
.
node_id
());
const_node
.
tensor
.
batches
=
tensor_shape
[
0
];
const_node
.
tensor
.
height
=
tensor_shape
[
1
];
const_node
.
tensor
.
width
=
tensor_shape
[
2
];
const_node
.
tensor
.
depth
=
tensor_shape
[
3
];
if
(
tensor_proto
.
data_type
()
==
DataType
::
DT_INT32
&&
tensor_proto
.
data_size
()
==
0
)
{
if
(
const_tensor
.
data_type
()
==
DataType
::
DT_INT32
&&
const_tensor
.
data_size
()
==
0
)
{
const_node
.
tensor
.
data
=
NULL
;
const_node
.
tensor
.
dataLen
=
0
;
}
else
{
const_node
.
tensor
.
data
=
const_cast
<
unsigned
char
*>
(
tensor_proto
.
data
());
const_cast
<
unsigned
char
*>
(
const_tensor
.
data
());
const_node
.
tensor
.
dataLen
=
tensor_proto
.
data_size
()
*
GetEnumTypeSize
(
tensor_proto
.
data_type
());
const_tensor
.
data_size
()
*
GetEnumTypeSize
(
const_tensor
.
data_type
());
}
const_node_list
.
push_back
(
const_node
);
// 255 is magic number: why fastrpc limits sequence length to that?
...
...
mace/core/serializer.cc
浏览文件 @
8d8bbfcf
...
...
@@ -12,56 +12,64 @@ std::unique_ptr<ConstTensor> Serializer::Serialize(const Tensor &tensor,
return
nullptr
;
}
std
::
unique_ptr
<
Tensor
>
Serializer
::
Deserialize
(
const
ConstTensor
&
proto
,
std
::
unique_ptr
<
Tensor
>
Serializer
::
Deserialize
(
const
ConstTensor
&
const_tensor
,
DeviceType
type
)
{
std
::
unique_ptr
<
Tensor
>
tensor
(
new
Tensor
(
GetDeviceAllocator
(
type
),
proto
.
data_type
()));
new
Tensor
(
GetDeviceAllocator
(
type
),
const_tensor
.
data_type
()));
std
::
vector
<
index_t
>
dims
;
for
(
const
index_t
d
:
proto
.
dims
())
{
for
(
const
index_t
d
:
const_tensor
.
dims
())
{
dims
.
push_back
(
d
);
}
tensor
->
Resize
(
dims
);
switch
(
proto
.
data_type
())
{
switch
(
const_tensor
.
data_type
())
{
case
DT_HALF
:
tensor
->
Copy
<
half
>
(
reinterpret_cast
<
const
half
*>
(
proto
.
data
()),
proto
.
data_size
());
tensor
->
Copy
<
half
>
(
reinterpret_cast
<
const
half
*>
(
const_tensor
.
data
()),
const_tensor
.
data_size
());
break
;
case
DT_FLOAT
:
tensor
->
Copy
<
float
>
(
reinterpret_cast
<
const
float
*>
(
proto
.
data
()),
proto
.
data_size
());
tensor
->
Copy
<
float
>
(
reinterpret_cast
<
const
float
*>
(
const_tensor
.
data
()),
const_tensor
.
data_size
());
break
;
case
DT_DOUBLE
:
tensor
->
Copy
<
double
>
(
reinterpret_cast
<
const
double
*>
(
proto
.
data
()),
proto
.
data_size
());
tensor
->
Copy
<
double
>
(
reinterpret_cast
<
const
double
*>
(
const_tensor
.
data
()),
const_tensor
.
data_size
());
break
;
case
DT_INT32
:
tensor
->
Copy
<
int32_t
>
(
reinterpret_cast
<
const
int32_t
*>
(
proto
.
data
()),
proto
.
data_size
());
tensor
->
Copy
<
int32_t
>
(
reinterpret_cast
<
const
int32_t
*>
(
const_tensor
.
data
()),
const_tensor
.
data_size
());
break
;
case
DT_INT64
:
tensor
->
Copy
<
int64_t
>
(
reinterpret_cast
<
const
int64_t
*>
(
proto
.
data
()),
proto
.
data_size
());
tensor
->
Copy
<
int64_t
>
(
reinterpret_cast
<
const
int64_t
*>
(
const_tensor
.
data
()),
const_tensor
.
data_size
());
break
;
case
DT_UINT8
:
tensor
->
Copy
<
uint8_t
>
(
reinterpret_cast
<
const
uint8_t
*>
(
proto
.
data
()),
proto
.
data_size
());
tensor
->
Copy
<
uint8_t
>
(
reinterpret_cast
<
const
uint8_t
*>
(
const_tensor
.
data
()),
const_tensor
.
data_size
());
break
;
case
DT_INT16
:
tensor
->
CopyWithCast
<
int32_t
,
uint16_t
>
(
reinterpret_cast
<
const
int32_t
*>
(
proto
.
data
()),
proto
.
data_size
());
reinterpret_cast
<
const
int32_t
*>
(
const_tensor
.
data
()),
const_tensor
.
data_size
());
break
;
case
DT_INT8
:
tensor
->
CopyWithCast
<
int32_t
,
int8_t
>
(
reinterpret_cast
<
const
int32_t
*>
(
proto
.
data
()),
proto
.
data_size
());
reinterpret_cast
<
const
int32_t
*>
(
const_tensor
.
data
()),
const_tensor
.
data_size
());
break
;
case
DT_UINT16
:
tensor
->
CopyWithCast
<
int32_t
,
int16_t
>
(
reinterpret_cast
<
const
int32_t
*>
(
proto
.
data
()),
proto
.
data_size
());
reinterpret_cast
<
const
int32_t
*>
(
const_tensor
.
data
()),
const_tensor
.
data_size
());
break
;
case
DT_BOOL
:
tensor
->
CopyWithCast
<
int32_t
,
bool
>
(
reinterpret_cast
<
const
int32_t
*>
(
proto
.
data
()),
proto
.
data_size
());
reinterpret_cast
<
const
int32_t
*>
(
const_tensor
.
data
()),
const_tensor
.
data_size
());
break
;
default:
MACE_NOT_IMPLEMENTED
;
...
...
mace/core/serializer.h
浏览文件 @
8d8bbfcf
...
...
@@ -15,9 +15,11 @@ class Serializer {
Serializer
()
{}
~
Serializer
()
{}
std
::
unique_ptr
<
ConstTensor
>
Serialize
(
const
Tensor
&
tensor
,
const
std
::
string
&
name
);
std
::
unique_ptr
<
ConstTensor
>
Serialize
(
const
Tensor
&
tensor
,
const
std
::
string
&
name
);
std
::
unique_ptr
<
Tensor
>
Deserialize
(
const
ConstTensor
&
proto
,
DeviceType
type
);
std
::
unique_ptr
<
Tensor
>
Deserialize
(
const
ConstTensor
&
const_tensor
,
DeviceType
type
);
DISABLE_COPY_AND_ASSIGN
(
Serializer
);
};
...
...
mace/core/tensor.h
浏览文件 @
8d8bbfcf
...
...
@@ -324,12 +324,12 @@ class Tensor {
}
}
}
MappingGuard
(
MappingGuard
&&
other
)
{
tensor_
=
other
.
tensor_
;
other
.
tensor_
=
nullptr
;
}
MappingGuard
(
const
MappingGuard
&
other
)
=
delete
;
MappingGuard
&
operator
=
(
const
MappingGuard
&
other
)
=
delete
;
~
MappingGuard
()
{
if
(
tensor_
!=
nullptr
)
tensor_
->
Unmap
();
}
...
...
@@ -339,6 +339,8 @@ class Tensor {
private:
const
Tensor
*
tensor_
;
std
::
vector
<
size_t
>
mapped_image_pitch_
;
DISABLE_COPY_AND_ASSIGN
(
MappingGuard
);
};
private:
...
...
mace/core/workspace.cc
浏览文件 @
8d8bbfcf
...
...
@@ -72,15 +72,15 @@ Tensor *Workspace::GetTensor(const std::string &name) {
void
Workspace
::
LoadModelTensor
(
const
NetDef
&
net_def
,
DeviceType
type
)
{
MACE_LATENCY_LOGGER
(
1
,
"Load model tensors"
);
Serializer
serializer
;
for
(
auto
&
tensor_proto
:
net_def
.
tensors
())
{
MACE_LATENCY_LOGGER
(
2
,
"Load tensor "
,
tensor_proto
.
name
());
VLOG
(
3
)
<<
"
Load tensor: "
<<
tensor_proto
.
name
()
<<
",
with data type: "
<<
tensor_proto
.
data_type
()
<<
",
has
shape: "
<<
MakeString
(
std
::
vector
<
index_t
>
(
tensor_proto
.
dims
().
begin
(),
tensor_proto
.
dims
().
end
()));
tensor_map_
[
tensor_proto
.
name
()]
=
serializer
.
Deserialize
(
tensor_proto
,
type
);
for
(
auto
&
const_tensor
:
net_def
.
tensors
())
{
MACE_LATENCY_LOGGER
(
2
,
"Load tensor "
,
const_tensor
.
name
());
VLOG
(
3
)
<<
"
Tensor name: "
<<
const_tensor
.
name
()
<<
",
data type: "
<<
const_tensor
.
data_type
()
<<
", shape: "
<<
MakeString
(
std
::
vector
<
index_t
>
(
const_tensor
.
dims
().
begin
(),
const_tensor
.
dims
().
end
()));
tensor_map_
[
const_tensor
.
name
()]
=
serializer
.
Deserialize
(
const_tensor
,
type
);
}
if
(
type
==
DeviceType
::
OPENCL
)
{
CreateImageOutputTensor
(
net_def
);
...
...
mace/public/mace.h
浏览文件 @
8d8bbfcf
...
...
@@ -73,12 +73,12 @@ enum DataType {
class
ConstTensor
{
public:
ConstTensor
(
const
std
::
string
&
name
,
unsigned
char
*
data
,
const
unsigned
char
*
data
,
const
std
::
vector
<
int64_t
>
&
dims
,
const
DataType
data_type
=
DT_FLOAT
,
uint32_t
node_id
=
0
);
ConstTensor
(
const
std
::
string
&
name
,
unsigned
char
*
data
,
const
unsigned
char
*
data
,
const
std
::
vector
<
int64_t
>
&
dims
,
const
int
data_type
,
uint32_t
node_id
=
0
);
...
...
mace/utils/logging.h
浏览文件 @
8d8bbfcf
...
...
@@ -113,6 +113,7 @@ class LatencyLogger {
:
vlog_level_
(
vlog_level
),
message_
(
message
)
{
if
(
VLOG_IS_ON
(
vlog_level_
))
{
start_micros_
=
NowMicros
();
VLOG
(
vlog_level_
)
<<
message_
<<
" started"
;
}
}
~
LatencyLogger
()
{
...
...
tools/export_lib.sh
浏览文件 @
8d8bbfcf
...
...
@@ -161,8 +161,10 @@ rm -rf ${EXPORT_LIB_DIR}
mkdir
-p
${
EXPORT_LIB_DIR
}
cp
${
MACE_SOURCE_DIR
}
/mace/public/
*
.h
${
EXPORT_INCLUDE_DIR
}
/mace/public/
||
exit
1
# utils is noti part of public API
cp
${
MACE_SOURCE_DIR
}
/mace/utils/
*
.h
${
EXPORT_INCLUDE_DIR
}
/mace/utils/
||
exit
1
# utils is not part of public API
cp
${
MACE_SOURCE_DIR
}
/mace/utils/env_time.h
${
EXPORT_INCLUDE_DIR
}
/mace/utils/
||
exit
1
cp
${
MACE_SOURCE_DIR
}
/mace/utils/logging.h
${
EXPORT_INCLUDE_DIR
}
/mace/utils/
||
exit
1
cp
${
MACE_SOURCE_DIR
}
/mace/utils/string_util.h
${
EXPORT_INCLUDE_DIR
}
/mace/utils/
||
exit
1
cp
${
LIBMACE_TEMP_DIR
}
/libmace.a
${
LIBMACE_TEMP_DIR
}
/libmace_dev.a
${
LIBMACE_TEMP_DIR
}
/libmace_prod.a
${
EXPORT_LIB_DIR
}
/
||
exit
1
echo
"Step 6: Remove temporary file"
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录