Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
wmsofts
Paddle
提交
8705a79d
P
Paddle
项目概览
wmsofts
/
Paddle
与 Fork 源项目一致
Fork自
PaddlePaddle / Paddle
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
Paddle
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
8705a79d
编写于
1月 05, 2023
作者:
Y
Yuanle Liu
提交者:
GitHub
1月 05, 2023
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[Paddle Inference] add unitest for zero_copy_tensor with bool type (#49495)
上级
2811dcd0
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
215 addition
and
6 deletion
+215
-6
paddle/fluid/inference/api/paddle_infer_contrib.cc
paddle/fluid/inference/api/paddle_infer_contrib.cc
+13
-2
paddle/fluid/inference/tests/api/paddle_infer_api_copy_tensor_tester.cc
...nference/tests/api/paddle_infer_api_copy_tensor_tester.cc
+202
-4
未找到文件。
paddle/fluid/inference/api/paddle_infer_contrib.cc
浏览文件 @
8705a79d
...
...
@@ -89,6 +89,12 @@ void TensorUtils::CopyTensorImpl(Tensor* p_dst,
cb
,
cb_params
);
break
;
case
PaddleDType
::
BOOL
:
src
.
CopyToCpuImpl
(
dst
.
mutable_data
<
bool
>
(
PlaceType
::
kCPU
),
exec_stream
,
cb
,
cb_params
);
break
;
case
PaddleDType
::
FLOAT16
:
src
.
CopyToCpuImpl
(
dst
.
mutable_data
<
paddle
::
platform
::
float16
>
(
PlaceType
::
kCPU
),
...
...
@@ -98,7 +104,7 @@ void TensorUtils::CopyTensorImpl(Tensor* p_dst,
break
;
default:
PADDLE_THROW
(
paddle
::
platform
::
errors
::
Unimplemented
(
"Only INT32, INT64, UINT8, INT8, FLOAT16 and "
"Only INT32, INT64, UINT8, INT8,
BOOL,
FLOAT16 and "
"FLOAT32 is supported in Tensor. Others not implements"
));
}
// gpu => gpu or cpu => gpu
...
...
@@ -142,6 +148,11 @@ void TensorUtils::CopyTensorImpl(Tensor* p_dst,
src_data
=
static_cast
<
void
*>
(
src
.
data
<
int8_t
>
(
&
src_place
,
&
data_size
));
data_len
=
data_size
*
sizeof
(
int8_t
);
break
;
case
PaddleDType
::
BOOL
:
dst_data
=
static_cast
<
void
*>
(
dst
.
mutable_data
<
bool
>
(
PlaceType
::
kGPU
));
src_data
=
static_cast
<
void
*>
(
src
.
data
<
bool
>
(
&
src_place
,
&
data_size
));
data_len
=
data_size
*
sizeof
(
bool
);
break
;
case
PaddleDType
::
FLOAT16
:
dst_data
=
static_cast
<
void
*>
(
dst
.
mutable_data
<
paddle
::
platform
::
float16
>
(
PlaceType
::
kGPU
));
...
...
@@ -151,7 +162,7 @@ void TensorUtils::CopyTensorImpl(Tensor* p_dst,
break
;
default:
PADDLE_THROW
(
paddle
::
platform
::
errors
::
Unimplemented
(
"Only INT32, INT64, UINT8, INT8, FLOAT16 and "
"Only INT32, INT64, UINT8, INT8,
BOOL,
FLOAT16 and "
"FLOAT32 is supported in Tensor. Others not implements"
));
}
...
...
paddle/fluid/inference/tests/api/paddle_infer_api_copy_tensor_tester.cc
浏览文件 @
8705a79d
...
...
@@ -15,6 +15,7 @@ limitations under the License. */
#include <cuda_runtime.h>
#include <gtest/gtest.h>
#include <array>
#include <cstring>
#include <numeric>
...
...
@@ -207,30 +208,167 @@ static void test_copy_tensor(PlaceType src_place, PlaceType dst_place) {
TEST
(
CopyTensor
,
float32
)
{
test_copy_tensor
<
float
>
(
PlaceType
::
kCPU
,
PlaceType
::
kCPU
);
test_copy_tensor
<
float
>
(
PlaceType
::
kCPU
,
PlaceType
::
kGPU
);
test_copy_tensor
<
float
>
(
PlaceType
::
kGPU
,
PlaceType
::
kCPU
);
test_copy_tensor
<
float
>
(
PlaceType
::
kGPU
,
PlaceType
::
kGPU
);
}
TEST
(
CopyTensor
,
int32
)
{
test_copy_tensor
<
int32_t
>
(
PlaceType
::
kCPU
,
PlaceType
::
kCPU
);
test_copy_tensor
<
int32_t
>
(
PlaceType
::
kCPU
,
PlaceType
::
kGPU
);
test_copy_tensor
<
int32_t
>
(
PlaceType
::
kGPU
,
PlaceType
::
kCPU
);
test_copy_tensor
<
int32_t
>
(
PlaceType
::
kGPU
,
PlaceType
::
kGPU
);
}
TEST
(
CopyTensor
,
int64
)
{
test_copy_tensor
<
int64_t
>
(
PlaceType
::
kCPU
,
PlaceType
::
kCPU
);
test_copy_tensor
<
int64_t
>
(
PlaceType
::
kCPU
,
PlaceType
::
kGPU
);
test_copy_tensor
<
int64_t
>
(
PlaceType
::
kGPU
,
PlaceType
::
kCPU
);
test_copy_tensor
<
int64_t
>
(
PlaceType
::
kGPU
,
PlaceType
::
kGPU
);
}
TEST
(
CopyTensor
,
int8
)
{
test_copy_tensor
<
int8_t
>
(
PlaceType
::
kCPU
,
PlaceType
::
kCPU
);
test_copy_tensor
<
int8_t
>
(
PlaceType
::
kCPU
,
PlaceType
::
kGPU
);
test_copy_tensor
<
int8_t
>
(
PlaceType
::
kGPU
,
PlaceType
::
kCPU
);
test_copy_tensor
<
int8_t
>
(
PlaceType
::
kGPU
,
PlaceType
::
kGPU
);
}
TEST
(
CopyTensor
,
uint8
)
{
test_copy_tensor
<
uint8_t
>
(
PlaceType
::
kCPU
,
PlaceType
::
kCPU
);
test_copy_tensor
<
uint8_t
>
(
PlaceType
::
kCPU
,
PlaceType
::
kGPU
);
test_copy_tensor
<
uint8_t
>
(
PlaceType
::
kGPU
,
PlaceType
::
kCPU
);
test_copy_tensor
<
uint8_t
>
(
PlaceType
::
kGPU
,
PlaceType
::
kGPU
);
}
TEST
(
CopyTensor
,
float16
)
{
TEST
(
CopyTensor
,
bool_cpu_to_cpu
)
{
paddle
::
framework
::
Scope
scope
;
auto
tensor_src
=
paddle_infer
::
InferApiTesterUtils
::
CreateInferTensorForTest
(
"tensor_src"
,
PlaceType
::
kCPU
,
static_cast
<
void
*>
(
&
scope
));
auto
tensor_dst
=
paddle_infer
::
InferApiTesterUtils
::
CreateInferTensorForTest
(
"tensor_dst"
,
PlaceType
::
kCPU
,
static_cast
<
void
*>
(
&
scope
));
std
::
array
<
bool
,
6
>
data_src
;
data_src
.
fill
(
true
);
tensor_src
->
Reshape
({
2
,
3
});
tensor_src
->
CopyFromCpu
(
data_src
.
data
());
std
::
array
<
bool
,
4
>
data_dst
;
data_dst
.
fill
(
false
);
tensor_dst
->
Reshape
({
2
,
2
});
tensor_dst
->
CopyFromCpu
(
data_dst
.
data
());
paddle_infer
::
contrib
::
TensorUtils
::
CopyTensor
(
tensor_dst
.
get
(),
*
tensor_src
);
EXPECT_EQ
(
tensor_dst
->
shape
().
size
(),
(
size_t
)
2
);
EXPECT_EQ
(
tensor_dst
->
shape
()[
0
],
2
);
EXPECT_EQ
(
tensor_dst
->
shape
()[
1
],
3
);
std
::
array
<
bool
,
6
>
data_check
;
data_check
.
fill
(
false
);
tensor_dst
->
CopyToCpu
<
bool
>
(
data_check
.
data
());
for
(
int
i
=
0
;
i
<
6
;
i
++
)
{
EXPECT_TRUE
(
data_check
[
i
]
==
true
);
}
}
TEST
(
CopyTensor
,
bool_gpu_to_gpu
)
{
paddle
::
framework
::
Scope
scope
;
auto
tensor_src
=
paddle_infer
::
InferApiTesterUtils
::
CreateInferTensorForTest
(
"tensor_src"
,
PlaceType
::
kGPU
,
static_cast
<
void
*>
(
&
scope
));
auto
tensor_dst
=
paddle_infer
::
InferApiTesterUtils
::
CreateInferTensorForTest
(
"tensor_dst"
,
PlaceType
::
kGPU
,
static_cast
<
void
*>
(
&
scope
));
std
::
array
<
bool
,
6
>
data_src
;
data_src
.
fill
(
true
);
tensor_src
->
Reshape
({
2
,
3
});
tensor_src
->
CopyFromCpu
(
data_src
.
data
());
std
::
array
<
bool
,
4
>
data_dst
;
data_dst
.
fill
(
false
);
tensor_dst
->
Reshape
({
2
,
2
});
tensor_dst
->
CopyFromCpu
(
data_dst
.
data
());
paddle_infer
::
contrib
::
TensorUtils
::
CopyTensor
(
tensor_dst
.
get
(),
*
tensor_src
);
EXPECT_EQ
(
tensor_dst
->
shape
().
size
(),
(
size_t
)
2
);
EXPECT_EQ
(
tensor_dst
->
shape
()[
0
],
2
);
EXPECT_EQ
(
tensor_dst
->
shape
()[
1
],
3
);
std
::
array
<
bool
,
6
>
data_check
;
data_check
.
fill
(
false
);
tensor_dst
->
CopyToCpu
<
bool
>
(
data_check
.
data
());
for
(
int
i
=
0
;
i
<
6
;
i
++
)
{
EXPECT_TRUE
(
data_check
[
i
]
==
true
);
}
}
TEST
(
CopyTensor
,
bool_gpu_to_cpu
)
{
paddle
::
framework
::
Scope
scope
;
auto
tensor_src
=
paddle_infer
::
InferApiTesterUtils
::
CreateInferTensorForTest
(
"tensor_src"
,
PlaceType
::
kGPU
,
static_cast
<
void
*>
(
&
scope
));
auto
tensor_dst
=
paddle_infer
::
InferApiTesterUtils
::
CreateInferTensorForTest
(
"tensor_dst"
,
PlaceType
::
kCPU
,
static_cast
<
void
*>
(
&
scope
));
std
::
array
<
bool
,
6
>
data_src
;
data_src
.
fill
(
true
);
tensor_src
->
Reshape
({
2
,
3
});
tensor_src
->
CopyFromCpu
(
data_src
.
data
());
std
::
array
<
bool
,
4
>
data_dst
;
data_dst
.
fill
(
false
);
tensor_dst
->
Reshape
({
2
,
2
});
tensor_dst
->
CopyFromCpu
(
data_dst
.
data
());
paddle_infer
::
contrib
::
TensorUtils
::
CopyTensor
(
tensor_dst
.
get
(),
*
tensor_src
);
EXPECT_EQ
(
tensor_dst
->
shape
().
size
(),
(
size_t
)
2
);
EXPECT_EQ
(
tensor_dst
->
shape
()[
0
],
2
);
EXPECT_EQ
(
tensor_dst
->
shape
()[
1
],
3
);
std
::
array
<
bool
,
6
>
data_check
;
data_check
.
fill
(
false
);
tensor_dst
->
CopyToCpu
<
bool
>
(
data_check
.
data
());
for
(
int
i
=
0
;
i
<
6
;
i
++
)
{
EXPECT_TRUE
(
data_check
[
i
]
==
true
);
}
}
TEST
(
CopyTensor
,
bool_cpu_to_gpu
)
{
paddle
::
framework
::
Scope
scope
;
auto
tensor_src
=
paddle_infer
::
InferApiTesterUtils
::
CreateInferTensorForTest
(
"tensor_src"
,
PlaceType
::
kCPU
,
static_cast
<
void
*>
(
&
scope
));
auto
tensor_dst
=
paddle_infer
::
InferApiTesterUtils
::
CreateInferTensorForTest
(
"tensor_dst"
,
PlaceType
::
kGPU
,
static_cast
<
void
*>
(
&
scope
));
std
::
array
<
bool
,
6
>
data_src
;
data_src
.
fill
(
true
);
tensor_src
->
Reshape
({
2
,
3
});
tensor_src
->
CopyFromCpu
(
data_src
.
data
());
std
::
array
<
bool
,
4
>
data_dst
;
data_dst
.
fill
(
false
);
tensor_dst
->
Reshape
({
2
,
2
});
tensor_dst
->
CopyFromCpu
(
data_dst
.
data
());
paddle_infer
::
contrib
::
TensorUtils
::
CopyTensor
(
tensor_dst
.
get
(),
*
tensor_src
);
EXPECT_EQ
(
tensor_dst
->
shape
().
size
(),
(
size_t
)
2
);
EXPECT_EQ
(
tensor_dst
->
shape
()[
0
],
2
);
EXPECT_EQ
(
tensor_dst
->
shape
()[
1
],
3
);
std
::
array
<
bool
,
6
>
data_check
{
false
};
data_check
.
fill
(
false
);
tensor_dst
->
CopyToCpu
<
bool
>
(
data_check
.
data
());
for
(
int
i
=
0
;
i
<
6
;
i
++
)
{
EXPECT_TRUE
(
data_check
[
i
]
==
true
);
}
}
TEST
(
CopyTensor
,
float16_cpu_to_cpu
)
{
paddle
::
framework
::
Scope
scope
;
auto
tensor_src
=
paddle_infer
::
InferApiTesterUtils
::
CreateInferTensorForTest
(
"tensor_src"
,
PlaceType
::
kCPU
,
static_cast
<
void
*>
(
&
scope
));
...
...
@@ -252,7 +390,7 @@ TEST(CopyTensor, float16) {
EXPECT_EQ
(
tensor_dst
->
shape
()[
0
],
2
);
EXPECT_EQ
(
tensor_dst
->
shape
()[
1
],
3
);
std
::
vector
<
float16
>
data_check
(
6
,
float16
(
1
.0
));
std
::
vector
<
float16
>
data_check
(
6
,
float16
(
2
.0
));
tensor_dst
->
CopyToCpu
<
float16
>
(
data_check
.
data
());
for
(
int
i
=
0
;
i
<
6
;
i
++
)
{
...
...
@@ -260,7 +398,7 @@ TEST(CopyTensor, float16) {
}
}
TEST
(
CopyTensor
,
float16_gpu
)
{
TEST
(
CopyTensor
,
float16_gpu
_to_gpu
)
{
paddle
::
framework
::
Scope
scope
;
auto
tensor_src
=
paddle_infer
::
InferApiTesterUtils
::
CreateInferTensorForTest
(
"tensor_src"
,
PlaceType
::
kGPU
,
static_cast
<
void
*>
(
&
scope
));
...
...
@@ -282,7 +420,67 @@ TEST(CopyTensor, float16_gpu) {
EXPECT_EQ
(
tensor_dst
->
shape
()[
0
],
2
);
EXPECT_EQ
(
tensor_dst
->
shape
()[
1
],
3
);
std
::
vector
<
float16
>
data_check
(
6
,
float16
(
1.0
));
std
::
vector
<
float16
>
data_check
(
6
,
float16
(
2.0
));
tensor_dst
->
CopyToCpu
<
float16
>
(
data_check
.
data
());
for
(
int
i
=
0
;
i
<
6
;
i
++
)
{
EXPECT_TRUE
(
data_check
[
i
]
==
float16
(
1.0
));
}
}
TEST
(
CopyTensor
,
float16_cpu_to_gpu
)
{
paddle
::
framework
::
Scope
scope
;
auto
tensor_src
=
paddle_infer
::
InferApiTesterUtils
::
CreateInferTensorForTest
(
"tensor_src"
,
PlaceType
::
kCPU
,
static_cast
<
void
*>
(
&
scope
));
auto
tensor_dst
=
paddle_infer
::
InferApiTesterUtils
::
CreateInferTensorForTest
(
"tensor_dst"
,
PlaceType
::
kGPU
,
static_cast
<
void
*>
(
&
scope
));
using
paddle
::
platform
::
float16
;
std
::
vector
<
float16
>
data_src
(
6
,
float16
(
1.0
));
tensor_src
->
Reshape
({
2
,
3
});
tensor_src
->
CopyFromCpu
(
data_src
.
data
());
std
::
vector
<
float16
>
data_dst
(
4
,
float16
(
2.0
));
tensor_dst
->
Reshape
({
2
,
2
});
tensor_dst
->
CopyFromCpu
(
data_dst
.
data
());
paddle_infer
::
contrib
::
TensorUtils
::
CopyTensor
(
tensor_dst
.
get
(),
*
tensor_src
);
EXPECT_EQ
(
tensor_dst
->
shape
().
size
(),
(
size_t
)
2
);
EXPECT_EQ
(
tensor_dst
->
shape
()[
0
],
2
);
EXPECT_EQ
(
tensor_dst
->
shape
()[
1
],
3
);
std
::
vector
<
float16
>
data_check
(
6
,
float16
(
2.0
));
tensor_dst
->
CopyToCpu
<
float16
>
(
data_check
.
data
());
for
(
int
i
=
0
;
i
<
6
;
i
++
)
{
EXPECT_TRUE
(
data_check
[
i
]
==
float16
(
1.0
));
}
}
TEST
(
CopyTensor
,
float16_gpu_to_cpu
)
{
paddle
::
framework
::
Scope
scope
;
auto
tensor_src
=
paddle_infer
::
InferApiTesterUtils
::
CreateInferTensorForTest
(
"tensor_src"
,
PlaceType
::
kGPU
,
static_cast
<
void
*>
(
&
scope
));
auto
tensor_dst
=
paddle_infer
::
InferApiTesterUtils
::
CreateInferTensorForTest
(
"tensor_dst"
,
PlaceType
::
kCPU
,
static_cast
<
void
*>
(
&
scope
));
using
paddle
::
platform
::
float16
;
std
::
vector
<
float16
>
data_src
(
6
,
float16
(
1.0
));
tensor_src
->
Reshape
({
2
,
3
});
tensor_src
->
CopyFromCpu
(
data_src
.
data
());
std
::
vector
<
float16
>
data_dst
(
4
,
float16
(
2.0
));
tensor_dst
->
Reshape
({
2
,
2
});
tensor_dst
->
CopyFromCpu
(
data_dst
.
data
());
paddle_infer
::
contrib
::
TensorUtils
::
CopyTensor
(
tensor_dst
.
get
(),
*
tensor_src
);
EXPECT_EQ
(
tensor_dst
->
shape
().
size
(),
(
size_t
)
2
);
EXPECT_EQ
(
tensor_dst
->
shape
()[
0
],
2
);
EXPECT_EQ
(
tensor_dst
->
shape
()[
1
],
3
);
std
::
vector
<
float16
>
data_check
(
6
,
float16
(
2.0
));
tensor_dst
->
CopyToCpu
<
float16
>
(
data_check
.
data
());
for
(
int
i
=
0
;
i
<
6
;
i
++
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录