Skip to content

Commit 9b17c3f

Browse files
author
xutianbing
committed
rewrite unit test using Daoyuan's new FunctionTest.
1 parent 877decd commit 9b17c3f

File tree

3 files changed

+47
-106
lines changed

3 files changed

+47
-106
lines changed

paddle/function/CosSimOp.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -76,12 +76,12 @@ class CosSimForwardFunc : public FunctionBase {
7676
}
7777

7878
void calc(const BufferArgs& inputs, const BufferArgs& outputs) override {
79-
CHECK_EQ(inputs.size(), 2);
80-
CHECK_EQ(outputs.size(), 1);
79+
CHECK_EQ(inputs.size(), 2UL);
80+
CHECK_EQ(outputs.size(), 1UL);
8181

82-
CHECK_EQ(inputs[0].shape().ndims(), (size_t)2);
83-
CHECK_EQ(inputs[1].shape().ndims(), (size_t)2);
84-
CHECK_EQ(outputs[0].shape().ndims(), (size_t)2);
82+
CHECK_EQ(inputs[0].shape().ndims(), 2UL);
83+
CHECK_EQ(inputs[1].shape().ndims(), 2UL);
84+
CHECK_EQ(outputs[0].shape().ndims(), 2UL);
8585

8686
CHECK_EQ(inputs[0].shape()[0], outputs[0].shape()[0]);
8787
CHECK_EQ(inputs[0].shape()[1], inputs[1].shape()[1]);
@@ -196,8 +196,8 @@ class CosSimBackwardFunc : public FunctionBase {
196196
}
197197

198198
void calc(const BufferArgs& inputs, const BufferArgs& outputs) override {
199-
CHECK_EQ(inputs.size(), 4);
200-
CHECK_EQ(outputs.size(), 2);
199+
CHECK_EQ(inputs.size(), 4UL);
200+
CHECK_EQ(outputs.size(), 2UL);
201201
/// dim of out_grad and out_val == 1, column vector
202202
CHECK_EQ(inputs[0].shape()[1], 1UL);
203203
CHECK_EQ(inputs[1].shape()[1], 1UL);

paddle/function/CosSimOpTest.cpp

Lines changed: 24 additions & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -22,114 +22,40 @@ void testCosSimForward(size_t height_x,
2222
size_t height_y,
2323
size_t width,
2424
real scale) {
25-
FunctionCompare compare("CosSimForward", FuncConfig().set("scale", scale));
26-
27-
CpuMatrix cpu_arg1(height_x, width);
28-
CpuMatrix gpu_arg1(height_x, width);
29-
CpuMatrix cpu_arg2(height_y, width);
30-
CpuMatrix gpu_arg2(height_y, width);
31-
cpu_arg1.randomizeUniform();
32-
gpu_arg1.copyFrom(cpu_arg1);
33-
cpu_arg2.randomizeUniform();
34-
cpu_arg2.add(-0.5);
35-
gpu_arg2.copyFrom(cpu_arg2);
36-
CpuMatrix cpu_out(height_x, 1);
37-
GpuMatrix gpu_out(height_x, 1);
38-
39-
BufferArgs cpu_inputs;
40-
BufferArgs cpu_outputs;
41-
cpu_inputs.addArg(cpu_arg1);
42-
cpu_inputs.addArg(cpu_arg2);
43-
cpu_outputs.addArg(cpu_out, ASSIGN_TO);
44-
45-
BufferArgs gpu_inputs;
46-
BufferArgs gpu_outputs;
47-
gpu_inputs.addArg(gpu_arg1);
48-
gpu_inputs.addArg(gpu_arg2);
49-
gpu_outputs.addArg(gpu_out, ASSIGN_TO);
50-
51-
compare.getCpuFunction()->calc(cpu_inputs, cpu_outputs);
52-
compare.getGpuFunction()->calc(gpu_inputs, gpu_outputs);
53-
54-
autotest::TensorCheckErr(cpu_out, gpu_out);
55-
}
56-
57-
TEST(Matrix, cosSimForward) {
58-
for (auto height_x : {10, 100, 1000}) {
59-
for (auto height_y : {1, height_x}) {
60-
for (auto width : {10, 100, 1000}) {
61-
for (auto scale : {1.0, 2.0}) {
62-
testCosSimForward(height_x, height_y, width, scale);
63-
}
64-
}
65-
}
66-
}
25+
FunctionCompare test("CosSimForward", FuncConfig().set("scale", scale));
26+
// prepare input arguments
27+
test.addInputs(BufferArg(VALUE_TYPE_FLOAT, TensorShape{height_x, width}));
28+
test.addInputs(BufferArg(VALUE_TYPE_FLOAT, TensorShape{height_y, width}));
29+
test.addOutputs(BufferArg(VALUE_TYPE_FLOAT, TensorShape{height_x, 1}),
30+
ASSIGN_TO);
31+
// run Function
32+
test.run();
6733
}
6834

6935
void testCosSimBackward(size_t height_x,
7036
size_t height_y,
7137
size_t width,
7238
real scale) {
73-
FunctionCompare compare("CosSimBackward", FuncConfig().set("scale", scale));
74-
75-
CpuMatrix cpu_out_grad(height_x, 1);
76-
CpuMatrix cpu_out_val(height_x, 1);
77-
CpuMatrix cpu_in1_val(height_x, width);
78-
CpuMatrix cpu_in2_val(height_x, width);
79-
CpuMatrix cpu_in1_grad(height_x, width);
80-
CpuMatrix cpu_in2_grad(height_x, width);
81-
82-
cpu_out_grad.randomizeUniform();
83-
cpu_out_val.randomizeUniform();
84-
cpu_in1_val.randomizeUniform();
85-
cpu_in2_val.randomizeUniform();
86-
cpu_in1_grad.randomizeUniform();
87-
cpu_in2_grad.randomizeUniform();
88-
89-
GpuMatrix gpu_out_grad(height_x, 1);
90-
GpuMatrix gpu_out_val(height_x, 1);
91-
GpuMatrix gpu_in1_val(height_x, width);
92-
GpuMatrix gpu_in2_val(height_x, width);
93-
GpuMatrix gpu_in1_grad(height_x, width);
94-
GpuMatrix gpu_in2_grad(height_x, width);
95-
96-
gpu_out_grad.copyFrom(cpu_out_grad);
97-
gpu_out_val.copyFrom(cpu_out_val);
98-
gpu_in1_val.copyFrom(cpu_in1_val);
99-
gpu_in2_val.copyFrom(cpu_in2_val);
100-
gpu_in1_grad.copyFrom(cpu_in1_grad);
101-
gpu_in2_grad.copyFrom(cpu_in2_grad);
102-
103-
BufferArgs cpu_inputs;
104-
BufferArgs cpu_outputs;
105-
cpu_inputs.addArg(cpu_out_grad);
106-
cpu_inputs.addArg(cpu_out_val);
107-
cpu_inputs.addArg(cpu_in1_val);
108-
cpu_inputs.addArg(cpu_in2_val);
109-
cpu_outputs.addArg(cpu_in1_grad, ADD_TO);
110-
cpu_outputs.addArg(cpu_in2_grad, ADD_TO);
111-
112-
BufferArgs gpu_inputs;
113-
BufferArgs gpu_outputs;
114-
gpu_inputs.addArg(gpu_out_grad);
115-
gpu_inputs.addArg(gpu_out_val);
116-
gpu_inputs.addArg(gpu_in1_val);
117-
gpu_inputs.addArg(gpu_in2_val);
118-
gpu_outputs.addArg(gpu_in1_grad, ADD_TO);
119-
gpu_outputs.addArg(gpu_in2_grad, ADD_TO);
120-
121-
compare.getCpuFunction()->calc(cpu_inputs, cpu_outputs);
122-
compare.getGpuFunction()->calc(gpu_inputs, gpu_outputs);
123-
124-
autotest::TensorCheckErr(cpu_in1_grad, gpu_in1_grad);
125-
autotest::TensorCheckErr(cpu_in2_grad, gpu_in2_grad);
39+
FunctionCompare test("CosSimBackward", FuncConfig().set("scale", scale));
40+
// prepare input arguments
41+
test.addInputs(BufferArg(VALUE_TYPE_FLOAT, TensorShape{height_x, 1}));
42+
test.addInputs(BufferArg(VALUE_TYPE_FLOAT, TensorShape{height_x, 1}));
43+
test.addInputs(BufferArg(VALUE_TYPE_FLOAT, TensorShape{height_x, width}));
44+
test.addInputs(BufferArg(VALUE_TYPE_FLOAT, TensorShape{height_y, width}));
45+
test.addOutputs(BufferArg(VALUE_TYPE_FLOAT, TensorShape{height_x, width}),
46+
ADD_TO);
47+
test.addOutputs(BufferArg(VALUE_TYPE_FLOAT, TensorShape{height_y, width}),
48+
ADD_TO);
49+
// run Function
50+
test.run();
12651
}
12752

128-
TEST(Matrix, cosSimBackward) {
129-
for (auto height_x : {1, 10, 100}) {
53+
TEST(Matrix, cosSim) {
54+
for (auto height_x : {10, 100, 1000}) {
13055
for (auto height_y : {1, height_x}) {
131-
for (auto width : {1, 10, 100}) {
56+
for (auto width : {10, 100, 1000}) {
13257
for (auto scale : {1.0, 2.0}) {
58+
testCosSimForward(height_x, height_y, width, scale);
13359
testCosSimBackward(height_x, height_y, width, scale);
13460
}
13561
}

paddle/function/FunctionTest.h

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,7 @@ class FunctionCompare {
157157
cpuSparse_->randomizeUniform();
158158
gpuSparse_->copyFrom(*cpuSparse_, stream);
159159
hl_stream_synchronize(stream);
160+
160161
void addInputs(const SequenceArg& input) {
161162
size_t batchSize = input.shape()[0];
162163
size_t numSeqs = batchSize / 10 + 1;
@@ -300,6 +301,21 @@ class FunctionCompare {
300301
}
301302

302303
void initOutputs() {
304+
for (size_t i = 0; i < cpuOutputs_.size(); i++) {
305+
initArg(*cpuOutputs_[i]);
306+
307+
// TODO: Need a BufferCopy used to copy from one BufferArg to another.
308+
CpuVector cpuVector(cpuOutputs_[i]->shape().getElements(),
309+
(real*)cpuOutputs_[i]->data());
310+
GpuVector gpuVector(gpuOutputs_[i]->shape().getElements(),
311+
(real*)gpuOutputs_[i]->data());
312+
313+
gpuVector.copyFrom(cpuVector);
314+
}
315+
}
316+
317+
void compareOutputs() {
318+
>>>>>>> rewrite unit test using Daoyuan's new FunctionTest.
303319
for (size_t i = 0; i < cpuOutputs_.size(); i++) {
304320
if (cpuOutputs_[i]->isSparseArg()) {
305321
continue; /// sparse matrix already init
@@ -334,7 +350,6 @@ class FunctionCompare {
334350
}
335351
336352
protected:
337-
<<<<<<< HEAD
338353
std::shared_ptr<FunctionBase> cpuFunc_;
339354
std::shared_ptr<FunctionBase> gpuFunc_;
340355
std::vector<CpuMemHandlePtr> cpuMemory_;

0 commit comments

Comments
 (0)