Skip to content

Commit e902afd

Browse files
authored
[PHI][CINN] Change several pool ops parameters from int32 to int64 (#72639)
1 parent b2ae891 commit e902afd

File tree

25 files changed

+257
-155
lines changed

25 files changed

+257
-155
lines changed

paddle/cinn/hlir/dialect/operator/ir/ops.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@
5454
interfaces : paddle::dialect::InferSymbolicShapeInterface
5555

5656
- op : pool2d
57-
args : (Tensor x, int[] kernel_size, int[] stride_size, int[] padding_size, bool ceil_mode, bool exclusive, str data_format, str pooling_type, bool global_pooling, bool adaptive, str padding_algorithm)
57+
args : (Tensor x, int64_t[] kernel_size, int64_t[] stride_size, int64_t[] padding_size, bool ceil_mode, bool exclusive, str data_format, str pooling_type, bool global_pooling, bool adaptive, str padding_algorithm)
5858
output : Tensor(out)
5959
infer_meta :
6060
func : Pool2DInferMeta

paddle/fluid/pir/dialect/operator/interface/infer_symbolic_shape/unary_infer_sym.cc

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ symbol::ShapeOrDataDimExprs Pool2dRawInferSymbolicShape(
117117
op->attributes().at("strides").dyn_cast<pir::ArrayAttribute>();
118118
for (size_t i = 0; i < stride_attr.size(); i++) {
119119
res.emplace_back(
120-
stride_attr.at(i).dyn_cast<pir::Int32Attribute>().data());
120+
stride_attr.at(i).dyn_cast<pir::Int64Attribute>().data());
121121
}
122122
return res;
123123
}();
@@ -156,7 +156,7 @@ symbol::ShapeOrDataDimExprs Pool2dRawInferSymbolicShape(
156156
op->attributes().at("paddings").dyn_cast<pir::ArrayAttribute>();
157157
for (size_t i = 0; i < padding_attr.size(); i++) {
158158
paddings.emplace_back(
159-
padding_attr.at(i).dyn_cast<pir::Int32Attribute>().data());
159+
padding_attr.at(i).dyn_cast<pir::Int64Attribute>().data());
160160
}
161161
return GetRealPadding(paddings,
162162
global_pooling,
@@ -2841,8 +2841,8 @@ bool Pool2dOpInferSymbolicShape(pir::Operation *op,
28412841

28422842
bool Pool3dOpInferSymbolicShape(pir::Operation *op,
28432843
pir::InferSymbolicShapeContext *infer_context) {
2844-
std::vector<int> kernel_size_ =
2845-
paddle::dialect::details::GetVectorAttr<int>(op, "kernel_size");
2844+
std::vector<int64_t> kernel_size_ =
2845+
paddle::dialect::details::GetVectorAttr<int64_t>(op, "kernel_size");
28462846
std::vector<symbol::DimExpr> kernel_size;
28472847
for (size_t i = 0; i < kernel_size_.size(); ++i) {
28482848
kernel_size.push_back(symbol::DimExpr(kernel_size_[i]));

paddle/fluid/pir/drr/src/ir_operation_factory.cc

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -401,14 +401,14 @@ void OperationFactory::RegisterManualOpCreator() {
401401
common::errors::InvalidArgument(
402402
"'strides' Attribute is expected for "
403403
"Pool2dOp. "));
404-
std::vector<int> strides;
404+
std::vector<int64_t> strides;
405405
for (size_t i = 0;
406406
i < attrs.at("strides").dyn_cast<pir::ArrayAttribute>().size();
407407
i++) {
408408
strides.push_back(attrs.at("strides")
409409
.dyn_cast<pir::ArrayAttribute>()
410410
.at(i)
411-
.dyn_cast<pir::Int32Attribute>()
411+
.dyn_cast<pir::Int64Attribute>()
412412
.data());
413413
}
414414

@@ -417,14 +417,14 @@ void OperationFactory::RegisterManualOpCreator() {
417417
common::errors::InvalidArgument(
418418
"'paddings' Attribute is expected for "
419419
"Pool2dOp. "));
420-
std::vector<int> paddings;
420+
std::vector<int64_t> paddings;
421421
for (size_t i = 0;
422422
i < attrs.at("paddings").dyn_cast<pir::ArrayAttribute>().size();
423423
i++) {
424424
paddings.push_back(attrs.at("paddings")
425425
.dyn_cast<pir::ArrayAttribute>()
426426
.at(i)
427-
.dyn_cast<pir::Int32Attribute>()
427+
.dyn_cast<pir::Int64Attribute>()
428428
.data());
429429
}
430430

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
op_patches:
2+
- op_name : pd_op.lp_pool2d
3+
actions:
4+
- action : modify_attr
5+
object : strides
6+
type : pir::ArrayAttribute
7+
default :
8+
- type: pir::Int64Attribute
9+
- type: pir::Int64Attribute
10+
- action : modify_attr
11+
object : paddings
12+
type : pir::ArrayAttribute
13+
default :
14+
- type: pir::Int64Attribute
15+
- type: pir::Int64Attribute
16+
- op_name : pd_op.pool2d
17+
actions:
18+
- action : modify_attr
19+
object : strides
20+
type : pir::ArrayAttribute
21+
default :
22+
- type: pir::Int64Attribute
23+
- type: pir::Int64Attribute
24+
- action : modify_attr
25+
object : paddings
26+
type : pir::ArrayAttribute
27+
default :
28+
- type: pir::Int64Attribute
29+
- type: pir::Int64Attribute
30+
- op_name : pd_op.pool3d
31+
actions:
32+
- action : modify_attr
33+
object : kernel_size
34+
type : pir::ArrayAttribute
35+
default :
36+
- type: pir::Int64Attribute
37+
- type: pir::Int64Attribute
38+
- type: pir::Int64Attribute
39+
- action : modify_attr
40+
object : strides
41+
type : pir::ArrayAttribute
42+
default :
43+
- type: pir::Int64Attribute
44+
- type: pir::Int64Attribute
45+
- type: pir::Int64Attribute
46+
- action : modify_attr
47+
object : paddings
48+
type : pir::ArrayAttribute
49+
default :
50+
- type: pir::Int64Attribute
51+
- type: pir::Int64Attribute
52+
- type: pir::Int64Attribute

paddle/fluid/pir/transforms/tensorrt/trt_op_marker_pass.cc

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -370,9 +370,9 @@ class Pool2dOpPattern
370370
}
371371

372372
auto padding_attr = op->attribute<pir::ArrayAttribute>("paddings");
373-
std::vector<int32_t> paddings;
373+
std::vector<int64_t> paddings;
374374
for (const auto &attr : padding_attr.AsVector()) {
375-
paddings.push_back(attr.dyn_cast<pir::Int32Attribute>().data());
375+
paddings.push_back(attr.dyn_cast<pir::Int64Attribute>().data());
376376
}
377377
if (paddings.size() > 2) {
378378
VLOG(3) << "The padding size should be less than 2";
@@ -435,10 +435,10 @@ class Pool2dOpPattern
435435
int g_post_pad_w = 0;
436436
int input_height = input_dims[input_dims.size() - 2];
437437
int input_width = input_dims[input_dims.size() - 1];
438-
std::vector<int32_t> strides;
438+
std::vector<int64_t> strides;
439439
auto strides_attr = op->attribute<pir::ArrayAttribute>("strides");
440440
for (const auto &attr : strides_attr.AsVector()) {
441-
strides.push_back(attr.dyn_cast<pir::Int32Attribute>().data());
441+
strides.push_back(attr.dyn_cast<pir::Int64Attribute>().data());
442442
}
443443
if (input_height > 0 &&
444444
input_height - kernel_size[0] + 2 * paddings[0] < 0) {

paddle/phi/backends/onednn/onednn_reuse.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1546,8 +1546,8 @@ class PoolingOneDNNHandler
15461546
PoolingOneDNNHandler(const OneDNNContext& dev_ctx,
15471547
const std::string& pooling_type,
15481548
const IntArray& kernel_size,
1549-
const std::vector<int>& strides,
1550-
const std::vector<int>& paddings,
1549+
const std::vector<int64_t>& strides,
1550+
const std::vector<int64_t>& paddings,
15511551
bool global_pooling,
15521552
const std::string& padding_algorithm,
15531553
bool ceil_mode,
@@ -1647,8 +1647,8 @@ class PoolingOneDNNHandler
16471647
PoolingOneDNNHandler(const OneDNNContext& dev_ctx,
16481648
const std::string& pooling_type,
16491649
const IntArray& kernel_size,
1650-
const std::vector<int>& strides,
1651-
const std::vector<int>& paddings,
1650+
const std::vector<int64_t>& strides,
1651+
const std::vector<int64_t>& paddings,
16521652
bool global_pooling,
16531653
const std::string& padding_algorithm,
16541654
bool ceil_mode,

paddle/phi/infermeta/unary.cc

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2655,10 +2655,13 @@ void MaxPoolV2InferMeta(const MetaTensor& x,
26552655
false,
26562656
common::errors::InvalidArgument(
26572657
"max_pool2d_v2 op does not support adaptive."));
2658+
std::vector<int64_t> kernel_size_(kernel_size.begin(), kernel_size.end());
2659+
std::vector<int64_t> strides_(strides.begin(), strides.end());
2660+
std::vector<int64_t> paddings_(paddings.begin(), paddings.end());
26582661
Pool2DInferMeta(x,
2659-
kernel_size,
2660-
strides,
2661-
paddings,
2662+
kernel_size_,
2663+
strides_,
2664+
paddings_,
26622665
false,
26632666
false,
26642667
data_format,
@@ -3383,8 +3386,8 @@ void PNormInferMeta(const MetaTensor& x,
33833386

33843387
void Pool2DInferMeta(const MetaTensor& x,
33853388
const IntArray& kernel_size,
3386-
const std::vector<int>& strides,
3387-
const std::vector<int>& paddings,
3389+
const std::vector<int64_t>& strides,
3390+
const std::vector<int64_t>& paddings,
33883391
bool ceil_mode,
33893392
bool exclusive,
33903393
const std::string& data_format,
@@ -3410,8 +3413,8 @@ void Pool2DInferMeta(const MetaTensor& x,
34103413
out->share_lod(x);
34113414
out->set_dtype(x.dtype());
34123415
} else {
3413-
std::vector<int> kernel_size_val(kernel_size.GetData().begin(),
3414-
kernel_size.GetData().end());
3416+
std::vector<int64_t> kernel_size_val(kernel_size.GetData().begin(),
3417+
kernel_size.GetData().end());
34153418
PoolInferMeta(x,
34163419
kernel_size_val,
34173420
strides,
@@ -3468,9 +3471,9 @@ void SendV2InferMeta(const int peer, const int ring_id) {
34683471
}
34693472

34703473
void PoolInferMeta(const MetaTensor& x,
3471-
const std::vector<int>& kernel_size,
3472-
const std::vector<int>& strides,
3473-
const std::vector<int>& paddings,
3474+
const std::vector<int64_t>& kernel_size,
3475+
const std::vector<int64_t>& strides,
3476+
const std::vector<int64_t>& paddings,
34743477
bool ceil_mode,
34753478
bool exclusive,
34763479
const std::string& data_format,
@@ -3480,8 +3483,8 @@ void PoolInferMeta(const MetaTensor& x,
34803483
const std::string& padding_algorithm,
34813484
MetaTensor* out,
34823485
MetaConfig config) {
3483-
std::vector<int> paddings_ = paddings;
3484-
std::vector<int> kernel_size_ = kernel_size;
3486+
std::vector<int64_t> paddings_ = paddings;
3487+
std::vector<int64_t> kernel_size_ = kernel_size;
34853488

34863489
auto x_dims = x.dims();
34873490
PADDLE_ENFORCE_EQ(
@@ -3555,13 +3558,12 @@ void PoolInferMeta(const MetaTensor& x,
35553558
if ((!config.is_runtime) && (data_dims[i] < 0)) {
35563559
output_shape.push_back(data_dims[i]);
35573560
} else {
3558-
output_shape.push_back(
3559-
funcs::PoolOutputSize(static_cast<int>(data_dims[i]),
3560-
kernel_size_[i],
3561-
paddings_[2 * i],
3562-
paddings_[2 * i + 1],
3563-
strides[i],
3564-
ceil_mode));
3561+
output_shape.push_back(funcs::PoolOutputSize(data_dims[i],
3562+
kernel_size_[i],
3563+
paddings_[2 * i],
3564+
paddings_[2 * i + 1],
3565+
strides[i],
3566+
ceil_mode));
35653567
}
35663568
}
35673569
}

paddle/phi/infermeta/unary.h

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -529,9 +529,9 @@ void PNormInferMeta(const MetaTensor& x,
529529
MetaTensor* out);
530530

531531
void PoolInferMeta(const MetaTensor& x,
532-
const std::vector<int>& kernel_size,
533-
const std::vector<int>& strides,
534-
const std::vector<int>& paddings,
532+
const std::vector<int64_t>& kernel_size,
533+
const std::vector<int64_t>& strides,
534+
const std::vector<int64_t>& paddings,
535535
bool ceil_mode,
536536
bool exclusive,
537537
const std::string& data_format,
@@ -544,8 +544,8 @@ void PoolInferMeta(const MetaTensor& x,
544544

545545
void Pool2DInferMeta(const MetaTensor& x,
546546
const IntArray& kernel_size,
547-
const std::vector<int>& strides,
548-
const std::vector<int>& paddings,
547+
const std::vector<int64_t>& strides,
548+
const std::vector<int64_t>& paddings,
549549
bool ceil_mode,
550550
bool exclusive,
551551
const std::string& data_format,

paddle/phi/kernels/funcs/pooling.h

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -498,20 +498,21 @@ class FractionalMaxPool3dGradFunctor {
498498
DenseTensor* input_grad);
499499
};
500500

501-
inline int PoolOutputSize(int input_size,
502-
int filter_size,
503-
int padding_1,
504-
int padding_2,
505-
int stride,
506-
bool ceil_mode) {
501+
template <typename T = int>
502+
inline T PoolOutputSize(T input_size,
503+
T filter_size,
504+
T padding_1,
505+
T padding_2,
506+
T stride,
507+
bool ceil_mode) {
507508
PADDLE_ENFORCE_NE(
508509
stride,
509510
0,
510511
common::errors::InvalidArgument(
511512
"The stride of PoolOutputSize shall not be 0, but received %d.",
512513
stride));
513514

514-
int output_size;
515+
T output_size;
515516
if (!ceil_mode) {
516517
output_size =
517518
(input_size - filter_size + padding_1 + padding_2) / stride + 1;

paddle/phi/kernels/gpudnn/pool_grad_kernel.cu

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -307,8 +307,8 @@ void Pool2dGradGPUDNNKernel(const Context& ctx,
307307
const DenseTensor& out,
308308
const DenseTensor& dout,
309309
const IntArray& kernel_size,
310-
const std::vector<int>& strides,
311-
const std::vector<int>& paddings,
310+
const std::vector<int64_t>& strides,
311+
const std::vector<int64_t>& paddings,
312312
bool ceil_mode,
313313
bool exclusive,
314314
const std::string& data_format,
@@ -319,13 +319,15 @@ void Pool2dGradGPUDNNKernel(const Context& ctx,
319319
DenseTensor* dx) {
320320
std::vector<int> kernel_size_val(kernel_size.GetData().begin(),
321321
kernel_size.GetData().end());
322+
std::vector<int> strides_val(strides.begin(), strides.end());
323+
std::vector<int> paddings_val(paddings.begin(), paddings.end());
322324
PoolGradRawGPUDNNKernel<T, Context>(ctx,
323325
x,
324326
out,
325327
dout,
326328
kernel_size_val,
327-
strides,
328-
paddings,
329+
strides_val,
330+
paddings_val,
329331
exclusive,
330332
data_format,
331333
pooling_type,
@@ -339,8 +341,8 @@ template <typename T, typename Context>
339341
void Pool2dDoubleGradGPUDNNKernel(const Context& ctx,
340342
const DenseTensor& x,
341343
const IntArray& kernel_size,
342-
const std::vector<int>& strides,
343-
const std::vector<int>& paddings,
344+
const std::vector<int64_t>& strides,
345+
const std::vector<int64_t>& paddings,
344346
bool ceil_mode,
345347
bool exclusive,
346348
const std::string& data_format,
@@ -374,9 +376,9 @@ void Pool3dGradGPUDNNKernel(const Context& ctx,
374376
const DenseTensor& x,
375377
const DenseTensor& out,
376378
const DenseTensor& dout,
377-
const std::vector<int>& kernel_size,
378-
const std::vector<int>& strides,
379-
const std::vector<int>& paddings,
379+
const std::vector<int64_t>& kernel_size,
380+
const std::vector<int64_t>& strides,
381+
const std::vector<int64_t>& paddings,
380382
bool ceil_mode,
381383
bool exclusive,
382384
const std::string& data_format,
@@ -385,13 +387,16 @@ void Pool3dGradGPUDNNKernel(const Context& ctx,
385387
bool adaptive,
386388
const std::string& padding_algorithm,
387389
DenseTensor* dx) {
390+
std::vector<int> kernel_size_val(kernel_size.begin(), kernel_size.end());
391+
std::vector<int> strides_val(strides.begin(), strides.end());
392+
std::vector<int> paddings_val(paddings.begin(), paddings.end());
388393
PoolGradRawGPUDNNKernel<T, Context>(ctx,
389394
x,
390395
out,
391396
dout,
392-
kernel_size,
393-
strides,
394-
paddings,
397+
kernel_size_val,
398+
strides_val,
399+
paddings_val,
395400
exclusive,
396401
data_format,
397402
pooling_type,

0 commit comments

Comments
 (0)