Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
magicwindyyd
mindspore
提交
bfa4f8f0
M
mindspore
项目概览
magicwindyyd
/
mindspore
与 Fork 源项目一致
Fork自
MindSpore / mindspore
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
M
mindspore
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
bfa4f8f0
编写于
6月 30, 2020
作者:
M
mindspore-ci-bot
提交者:
Gitee
6月 30, 2020
浏览文件
操作
浏览文件
下载
差异文件
!2730 Enable lazy allocation for Tensor.
Merge pull request !2730 from hewei/tensor_lazy_allocation
上级
71fd4321
216ebcb9
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
19 addition
and
12 deletion
+19
-12
mindspore/ccsrc/ir/tensor.cc
mindspore/ccsrc/ir/tensor.cc
+19
-12
未找到文件。
mindspore/ccsrc/ir/tensor.cc
浏览文件 @
bfa4f8f0
...
...
@@ -35,7 +35,7 @@ using Bool = unsigned char;
static
std
::
string
MakeId
()
{
// Use atomic to make id generator thread safe.
static
std
::
atomic
<
uint64_t
>
last_id
{
1
};
return
std
::
to_string
(
last_id
.
fetch_add
(
1
,
std
::
memory_order_relaxed
));
return
"T"
+
std
::
to_string
(
last_id
.
fetch_add
(
1
,
std
::
memory_order_relaxed
));
}
static
TypeId
TypeIdOf
(
const
TypePtr
&
data_type
,
TypeId
defaultTypeId
)
{
...
...
@@ -127,41 +127,47 @@ std::vector<T> CopyData(const std::vector<int> &shape, void *data, size_t data_l
template
<
typename
T
>
class
TensorDataImpl
:
public
TensorData
{
public:
explicit
TensorDataImpl
(
const
std
::
vector
<
int
>
&
shape
)
:
shape_
(
shape
),
data
_
(
SizeOf
(
shape
))
{}
explicit
TensorDataImpl
(
const
std
::
vector
<
int
>
&
shape
)
:
ndim_
(
shape
.
size
()),
data_size
_
(
SizeOf
(
shape
))
{}
TensorDataImpl
(
const
std
::
vector
<
int
>
&
shape
,
void
*
data
,
size_t
data_len
)
:
shape_
(
shape
),
data_
(
CopyData
<
T
>
(
shape
,
data
,
data_len
))
{}
:
ndim_
(
shape
.
size
()),
data_size_
(
SizeOf
(
shape
)
),
data_
(
CopyData
<
T
>
(
shape
,
data
,
data_len
))
{}
TensorDataImpl
(
const
std
::
vector
<
int
>
&
shape
,
void
*
data
,
TypeId
data_type
)
:
shape_
(
shape
),
data_
(
CopyData
<
T
>
(
shape
,
data
,
data_type
))
{}
:
ndim_
(
shape
.
size
()),
data_size_
(
SizeOf
(
shape
)
),
data_
(
CopyData
<
T
>
(
shape
,
data
,
data_type
))
{}
template
<
typename
InputIt
>
TensorDataImpl
(
const
std
::
vector
<
int
>
&
shape
,
InputIt
first
,
InputIt
last
)
:
shape_
(
shape
),
data_
(
first
,
last
)
{}
TensorDataImpl
(
const
std
::
vector
<
int
>
&
shape
,
InputIt
first
,
InputIt
last
)
:
ndim_
(
shape
.
size
()),
data_size_
(
SizeOf
(
shape
)),
data_
(
first
,
last
)
{}
template
<
typename
Scalar
>
TensorDataImpl
(
const
std
::
vector
<
int
>
&
shape
,
Scalar
scalar
)
:
shape_
(
shape
),
data_
({
static_cast
<
T
>
(
scalar
)})
{}
TensorDataImpl
(
const
std
::
vector
<
int
>
&
shape
,
Scalar
scalar
)
:
ndim_
(
shape
.
size
()),
data_size_
(
SizeOf
(
shape
)),
data_
({
static_cast
<
T
>
(
scalar
)})
{}
ssize_t
size
()
const
override
{
return
data_
.
size
(
);
}
ssize_t
size
()
const
override
{
return
static_cast
<
ssize_t
>
(
data_size_
);
}
ssize_t
itemsize
()
const
override
{
return
static_cast
<
ssize_t
>
(
sizeof
(
T
));
}
ssize_t
nbytes
()
const
override
{
return
size
()
*
itemsize
();
}
ssize_t
ndim
()
const
override
{
return
static_cast
<
ssize_t
>
(
shape_
.
size
()
);
}
ssize_t
ndim
()
const
override
{
return
static_cast
<
ssize_t
>
(
ndim_
);
}
void
*
data
()
override
{
static
std
::
vector
<
T
>
empty_data
(
1
);
if
(
data_
.
empty
()
)
{
// Prevent null pointer for empty
data
.
if
(
data_
size_
==
0
)
{
// Prevent null pointer for empty
shape
.
return
empty_data
.
data
();
}
if
(
data_
.
empty
())
{
// Lazy allocation.
data_
.
resize
(
data_size_
);
}
return
data_
.
data
();
}
bool
equals
(
const
TensorData
&
other
)
const
override
{
auto
ptr
=
dynamic_cast
<
const
TensorDataImpl
<
T
>
*>
(
&
other
);
if
(
ptr
)
{
return
(
ptr
==
this
)
||
((
shape_
==
ptr
->
shap
e_
)
&&
(
data_
==
ptr
->
data_
));
return
(
ptr
==
this
)
||
((
ndim_
==
ptr
->
ndim_
)
&&
(
data_size_
==
ptr
->
data_siz
e_
)
&&
(
data_
==
ptr
->
data_
));
}
return
false
;
}
...
...
@@ -177,7 +183,8 @@ class TensorDataImpl : public TensorData {
}
private:
std
::
vector
<
int
>
shape_
;
size_t
ndim_
{
0
};
size_t
data_size_
{
0
};
std
::
vector
<
T
>
data_
;
};
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录