Skip to content

Commit cd25adb

Browse files
authored
Merge pull request #7659 from guoshengCS/enhance-reduceOp-datatype
Register reduce_op_kernel with multiple data types
2 parents 2b19a68 + b83ff45 commit cd25adb

File tree

3 files changed

+33
-9
lines changed

3 files changed

+33
-9
lines changed

paddle/operators/reduce_op.cc

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -190,10 +190,22 @@ REGISTER_OP(reduce_min, ops::ReduceOp, ops::ReduceMinOpMaker, reduce_min_grad,
190190
#define REGISTER_REDUCE_CPU_KERNEL(reduce_type, functor, grad_functor) \
191191
REGISTER_OP_CPU_KERNEL(reduce_type, \
192192
ops::ReduceKernel<paddle::platform::CPUDeviceContext, \
193-
float, ops::functor>); \
193+
float, ops::functor>, \
194+
ops::ReduceKernel<paddle::platform::CPUDeviceContext, \
195+
double, ops::functor>, \
196+
ops::ReduceKernel<paddle::platform::CPUDeviceContext, \
197+
int, ops::functor>, \
198+
ops::ReduceKernel<paddle::platform::CPUDeviceContext, \
199+
int64_t, ops::functor>); \
194200
REGISTER_OP_CPU_KERNEL( \
195201
reduce_type##_grad, \
196202
ops::ReduceGradKernel<paddle::platform::CPUDeviceContext, float, \
203+
ops::grad_functor>, \
204+
ops::ReduceGradKernel<paddle::platform::CPUDeviceContext, double, \
205+
ops::grad_functor>, \
206+
ops::ReduceGradKernel<paddle::platform::CPUDeviceContext, int, \
207+
ops::grad_functor>, \
208+
ops::ReduceGradKernel<paddle::platform::CPUDeviceContext, int64_t, \
197209
ops::grad_functor>);
198210

199211
FOR_EACH_KERNEL_FUNCTOR(REGISTER_REDUCE_CPU_KERNEL);

paddle/operators/reduce_op.cu

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,22 @@ namespace ops = paddle::operators;
2020
#define REGISTER_REDUCE_GPU_KERNEL(reduce_type, functor, grad_functor) \
2121
REGISTER_OP_CUDA_KERNEL( \
2222
reduce_type, ops::ReduceKernel<paddle::platform::CUDADeviceContext, \
23-
float, ops::functor>); \
23+
float, ops::functor>, \
24+
ops::ReduceKernel<paddle::platform::CUDADeviceContext, double, \
25+
ops::functor>, \
26+
ops::ReduceKernel<paddle::platform::CUDADeviceContext, int, \
27+
ops::functor>, \
28+
ops::ReduceKernel<paddle::platform::CUDADeviceContext, int64_t, \
29+
ops::functor>); \
2430
REGISTER_OP_CUDA_KERNEL( \
2531
reduce_type##_grad, \
2632
ops::ReduceGradKernel<paddle::platform::CUDADeviceContext, float, \
33+
ops::grad_functor>, \
34+
ops::ReduceGradKernel<paddle::platform::CUDADeviceContext, double, \
35+
ops::grad_functor>, \
36+
ops::ReduceGradKernel<paddle::platform::CUDADeviceContext, int, \
37+
ops::grad_functor>, \
38+
ops::ReduceGradKernel<paddle::platform::CUDADeviceContext, int64_t, \
2739
ops::grad_functor>);
2840

2941
FOR_EACH_KERNEL_FUNCTOR(REGISTER_REDUCE_GPU_KERNEL);

python/paddle/v2/fluid/tests/test_reduce_op.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
class TestSumOp(OpTest):
2121
def setUp(self):
2222
self.op_type = "reduce_sum"
23-
self.inputs = {'X': np.random.random((5, 6, 10)).astype("float32")}
23+
self.inputs = {'X': np.random.random((5, 6, 10)).astype("float64")}
2424
self.outputs = {'Out': self.inputs['X'].sum(axis=0)}
2525

2626
def test_check_output(self):
@@ -33,7 +33,7 @@ def test_check_grad(self):
3333
class TestMeanOp(OpTest):
3434
def setUp(self):
3535
self.op_type = "reduce_mean"
36-
self.inputs = {'X': np.random.random((5, 6, 2, 10)).astype("float32")}
36+
self.inputs = {'X': np.random.random((5, 6, 2, 10)).astype("float64")}
3737
self.attrs = {'dim': 1}
3838
self.outputs = {'Out': self.inputs['X'].mean(axis=self.attrs['dim'])}
3939

@@ -49,7 +49,7 @@ class TestMaxOp(OpTest):
4949

5050
def setUp(self):
5151
self.op_type = "reduce_max"
52-
self.inputs = {'X': np.random.random((5, 6, 10)).astype("float32")}
52+
self.inputs = {'X': np.random.random((5, 6, 10)).astype("float64")}
5353
self.attrs = {'dim': -1}
5454
self.outputs = {'Out': self.inputs['X'].max(axis=self.attrs['dim'])}
5555

@@ -62,7 +62,7 @@ class TestMinOp(OpTest):
6262

6363
def setUp(self):
6464
self.op_type = "reduce_min"
65-
self.inputs = {'X': np.random.random((5, 6, 10)).astype("float32")}
65+
self.inputs = {'X': np.random.random((5, 6, 10)).astype("float64")}
6666
self.attrs = {'dim': 2}
6767
self.outputs = {'Out': self.inputs['X'].min(axis=self.attrs['dim'])}
6868

@@ -73,7 +73,7 @@ def test_check_output(self):
7373
class TestKeepDimReduce(OpTest):
7474
def setUp(self):
7575
self.op_type = "reduce_sum"
76-
self.inputs = {'X': np.random.random((5, 6, 10)).astype("float32")}
76+
self.inputs = {'X': np.random.random((5, 6, 10)).astype("float64")}
7777
self.attrs = {'dim': -2, 'keep_dim': True}
7878
self.outputs = {
7979
'Out': self.inputs['X'].sum(axis=self.attrs['dim'], keepdims=True)
@@ -89,7 +89,7 @@ def test_check_grad(self):
8989
class Test1DReduce(OpTest):
9090
def setUp(self):
9191
self.op_type = "reduce_sum"
92-
self.inputs = {'X': np.random.random(20).astype("float32")}
92+
self.inputs = {'X': np.random.random(20).astype("float64")}
9393
self.outputs = {'Out': self.inputs['X'].sum(axis=0)}
9494

9595
def test_check_output(self):
@@ -102,7 +102,7 @@ def test_check_grad(self):
102102
class TestReduceAll(OpTest):
103103
def setUp(self):
104104
self.op_type = "reduce_sum"
105-
self.inputs = {'X': np.random.random((5, 6, 2, 10)).astype("float32")}
105+
self.inputs = {'X': np.random.random((5, 6, 2, 10)).astype("float64")}
106106
self.attrs = {'reduce_all': True}
107107
self.outputs = {'Out': self.inputs['X'].sum()}
108108

0 commit comments

Comments
 (0)