Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
机器未来
Paddle
提交
1e1a33b5
P
Paddle
项目概览
机器未来
/
Paddle
与 Fork 源项目一致
Fork自
PaddlePaddle / Paddle
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
Paddle
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
1e1a33b5
编写于
9月 06, 2016
作者:
H
Haonan
提交者:
Yu Yang
9月 08, 2016
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Argument concat for subsequence start positions
Change-Id: Ia60c008a8c922f66e6b5e2ca3e488fc4625d6506
上级
c3c76d69
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
35 addition
and
11 deletion
+35
-11
paddle/parameter/Argument.cpp
paddle/parameter/Argument.cpp
+35
-11
未找到文件。
paddle/parameter/Argument.cpp
浏览文件 @
1e1a33b5
...
@@ -269,6 +269,9 @@ void Argument::concat(const std::vector<Argument>& args,
...
@@ -269,6 +269,9 @@ void Argument::concat(const std::vector<Argument>& args,
const
std
::
vector
<
int
>&
selectRows
,
const
std
::
vector
<
int
>&
selectRows
,
const
std
::
vector
<
int
>&
seqStartPos
,
bool
useGpu
,
const
std
::
vector
<
int
>&
seqStartPos
,
bool
useGpu
,
hl_stream_t
stream
,
PassType
passType
)
{
hl_stream_t
stream
,
PassType
passType
)
{
CHECK
(
!
subSequenceStartPositions
)
<<
"undefined behavior for subsequence positions"
;
size_t
batchSize
=
selectRows
.
size
();
size_t
batchSize
=
selectRows
.
size
();
auto
copyArg
=
[
batchSize
,
stream
](
MatrixPtr
&
dst
,
MatrixPtr
src
,
auto
copyArg
=
[
batchSize
,
stream
](
MatrixPtr
&
dst
,
MatrixPtr
src
,
int
startRow
,
int
pos
,
int
size
,
int
startRow
,
int
pos
,
int
size
,
...
@@ -347,9 +350,11 @@ void Argument::concat(const std::vector<Argument>& args, bool useGpu,
...
@@ -347,9 +350,11 @@ void Argument::concat(const std::vector<Argument>& args, bool useGpu,
hl_stream_t
stream
,
PassType
passType
)
{
hl_stream_t
stream
,
PassType
passType
)
{
int32_t
batchSize
=
0
;
int32_t
batchSize
=
0
;
int64_t
numSequences
=
0
;
int64_t
numSequences
=
0
;
int64_t
numSubSequences
=
0
;
for
(
auto
&
arg
:
args
)
{
for
(
auto
&
arg
:
args
)
{
batchSize
+=
arg
.
getBatchSize
();
batchSize
+=
arg
.
getBatchSize
();
numSequences
+=
arg
.
getNumSequences
();
numSequences
+=
arg
.
getNumSequences
();
numSubSequences
+=
arg
.
getNumSubSequences
();
}
}
auto
copyArg
=
[
batchSize
,
stream
](
MatrixPtr
&
dst
,
MatrixPtr
src
,
auto
copyArg
=
[
batchSize
,
stream
](
MatrixPtr
&
dst
,
MatrixPtr
src
,
...
@@ -393,8 +398,26 @@ void Argument::concat(const std::vector<Argument>& args, bool useGpu,
...
@@ -393,8 +398,26 @@ void Argument::concat(const std::vector<Argument>& args, bool useGpu,
std
::
copy
(
src
->
begin
(),
src
->
end
(),
dst
->
begin
()
+
startRow
);
std
::
copy
(
src
->
begin
(),
src
->
end
(),
dst
->
begin
()
+
startRow
);
};
};
auto
copySequencePos
=
[]
(
ICpuGpuVectorPtr
&
dstSeq
,
const
ICpuGpuVectorPtr
&
srcSeq
,
int
dstNumSequences
,
int
srcNumSequences
,
int
&
startSequences
,
int
startRow
)
{
if
(
srcSeq
)
{
ICpuGpuVector
::
resizeOrCreate
(
dstSeq
,
dstNumSequences
+
1
,
false
);
const
int
*
src
=
srcSeq
->
getData
(
false
);
int
*
dest
=
dstSeq
->
getMutableData
(
false
);
for
(
int
i
=
0
;
i
<
srcNumSequences
+
1
;
++
i
)
{
dest
[
i
+
startSequences
]
=
src
[
i
]
+
startRow
;
}
startSequences
+=
srcNumSequences
;
}
else
{
dstSeq
.
reset
();
}
};
int
startRow
=
0
;
int
startRow
=
0
;
int
startSequences
=
0
;
int
startSequences
=
0
;
int
startSubSequences
=
0
;
dataId
=
args
[
0
].
dataId
;
dataId
=
args
[
0
].
dataId
;
for
(
auto
&
arg
:
args
)
{
for
(
auto
&
arg
:
args
)
{
CHECK_EQ
(
arg
.
dataId
,
dataId
)
<<
"Arguments in concat should have"
CHECK_EQ
(
arg
.
dataId
,
dataId
)
<<
"Arguments in concat should have"
...
@@ -403,17 +426,18 @@ void Argument::concat(const std::vector<Argument>& args, bool useGpu,
...
@@ -403,17 +426,18 @@ void Argument::concat(const std::vector<Argument>& args, bool useGpu,
copyArg
(
value
,
arg
.
value
,
startRow
,
useGpu
);
copyArg
(
value
,
arg
.
value
,
startRow
,
useGpu
);
if
(
passType
!=
PASS_TEST
)
copyArg
(
grad
,
arg
.
grad
,
startRow
,
useGpu
);
if
(
passType
!=
PASS_TEST
)
copyArg
(
grad
,
arg
.
grad
,
startRow
,
useGpu
);
copyIds
(
ids
,
arg
.
ids
,
startRow
,
useGpu
);
copyIds
(
ids
,
arg
.
ids
,
startRow
,
useGpu
);
if
(
arg
.
sequenceStartPositions
)
{
copySequencePos
(
sequenceStartPositions
,
ICpuGpuVector
::
resizeOrCreate
(
sequenceStartPositions
,
arg
.
sequenceStartPositions
,
numSequences
+
1
,
numSequences
,
false
);
arg
.
getNumSequences
(),
const
int
*
src
=
arg
.
sequenceStartPositions
->
getData
(
false
);
startSequences
,
int
*
dest
=
sequenceStartPositions
->
getMutableData
(
false
);
startRow
);
for
(
int
i
=
0
;
i
<
arg
.
getNumSequences
()
+
1
;
++
i
)
{
copySequencePos
(
subSequenceStartPositions
,
dest
[
i
+
startSequences
]
=
src
[
i
]
+
startRow
;
arg
.
subSequenceStartPositions
,
}
numSubSequences
,
startSequences
+=
arg
.
getNumSequences
();
arg
.
getNumSubSequences
(),
}
startSubSequences
,
startRow
);
copyStrs
(
strs
,
arg
.
strs
,
startRow
,
useGpu
);
copyStrs
(
strs
,
arg
.
strs
,
startRow
,
useGpu
);
startRow
+=
arg
.
getBatchSize
();
startRow
+=
arg
.
getBatchSize
();
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录