From 5ac9aa0b04eb60287204a723f301afcbb5c500dd Mon Sep 17 00:00:00 2001 From: Yangrl <2535184404@qq.com> Date: Mon, 25 Dec 2023 06:05:44 +0000 Subject: [PATCH 01/12] change_cc_test_old --- test/cpp/pir/core/CMakeLists.txt | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/test/cpp/pir/core/CMakeLists.txt b/test/cpp/pir/core/CMakeLists.txt index 66389b600f1565..d7ad9151efb6d5 100644 --- a/test/cpp/pir/core/CMakeLists.txt +++ b/test/cpp/pir/core/CMakeLists.txt @@ -4,20 +4,15 @@ paddle_test(ir_value_test SRCS ir_value_test.cc) paddle_test(ir_op_test SRCS ir_op_test.cc DEPS test_dialect) paddle_test(ir_region_test SRCS ir_region_test.cc) paddle_test(ir_builder_test SRCS ir_builder_test.cc) -cc_test_old( +paddle_test( ir_program_test SRCS ir_program_test.cc - DEPS - common - gtest - pir - op_dialect_vjp - phi) +) -cc_test_old(ir_infershape_test SRCS ir_infershape_test.cc DEPS common gtest) +paddle_test(ir_infershape_test SRCS ir_infershape_test.cc ) -cc_test_old(scalar_attribute_test SRCS scalar_attribute_test.cc DEPS gtest) +paddle_test(scalar_attribute_test SRCS scalar_attribute_test.cc ) file( DOWNLOAD https://paddle-ci.gz.bcebos.com/ir_translator_test/resnet50_main.prog From eb6c95e02cf63229bacf44704f6d79e9b33ce813 Mon Sep 17 00:00:00 2001 From: Yangrl <2535184404@qq.com> Date: Mon, 25 Dec 2023 06:07:19 +0000 Subject: [PATCH 02/12] change_cc_test_old --- test/cpp/pir/core/CMakeLists.txt | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/test/cpp/pir/core/CMakeLists.txt b/test/cpp/pir/core/CMakeLists.txt index d7ad9151efb6d5..eab172b2054a0c 100644 --- a/test/cpp/pir/core/CMakeLists.txt +++ b/test/cpp/pir/core/CMakeLists.txt @@ -4,15 +4,9 @@ paddle_test(ir_value_test SRCS ir_value_test.cc) paddle_test(ir_op_test SRCS ir_op_test.cc DEPS test_dialect) paddle_test(ir_region_test SRCS ir_region_test.cc) paddle_test(ir_builder_test SRCS ir_builder_test.cc) -paddle_test( - ir_program_test - SRCS - ir_program_test.cc -) - -paddle_test(ir_infershape_test SRCS ir_infershape_test.cc ) - -paddle_test(scalar_attribute_test SRCS scalar_attribute_test.cc ) +paddle_test(ir_program_test SRCS ir_program_test.cc) +paddle_test(ir_infershape_test SRCS ir_infershape_test.cc) +paddle_test(scalar_attribute_test SRCS scalar_attribute_test.cc) file( DOWNLOAD https://paddle-ci.gz.bcebos.com/ir_translator_test/resnet50_main.prog From cb3062cbe3f8a63eb633c433dca98e82864cf0c1 Mon Sep 17 00:00:00 2001 From: Yangrl <2535184404@qq.com> Date: Mon, 25 Dec 2023 07:12:04 +0000 Subject: [PATCH 03/12] change_cc_test_old --- paddle/phi/core/infermeta_utils.h | 2 +- paddle/phi/core/meta_tensor.h | 2 +- paddle/phi/infermeta/binary.h | 6 +++--- paddle/phi/kernels/elementwise_add_kernel.h | 8 ++++---- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/paddle/phi/core/infermeta_utils.h b/paddle/phi/core/infermeta_utils.h index 06036b2c138940..a7395a85a13e69 100644 --- a/paddle/phi/core/infermeta_utils.h +++ b/paddle/phi/core/infermeta_utils.h @@ -32,7 +32,7 @@ limitations under the License. */ namespace phi { -class InferMetaContext { +class TEST_API InferMetaContext { public: InferMetaContext() = default; explicit InferMetaContext(MetaConfig config) : config_(config) {} diff --git a/paddle/phi/core/meta_tensor.h b/paddle/phi/core/meta_tensor.h index b28081c8d4ef77..626cd238109b42 100644 --- a/paddle/phi/core/meta_tensor.h +++ b/paddle/phi/core/meta_tensor.h @@ -34,7 +34,7 @@ struct MetaConfig { is_run_mkldnn_kernel(is_run_mkldnn_kernel) {} // NOLINT }; -class MetaTensor { +class TEST_API MetaTensor { public: typedef void (*unspecified_bool_type)(); diff --git a/paddle/phi/infermeta/binary.h b/paddle/phi/infermeta/binary.h index 92443d66d42ced..1ee6a34baea0b7 100644 --- a/paddle/phi/infermeta/binary.h +++ b/paddle/phi/infermeta/binary.h @@ -211,9 +211,9 @@ void DropoutNdInferMeta(const MetaTensor& x, MetaTensor* out, MetaTensor* mask); -void ElementwiseInferMeta(const MetaTensor& x, - const MetaTensor& y, - MetaTensor* out); +TEST_API void ElementwiseInferMeta(const MetaTensor& x, + const MetaTensor& y, + MetaTensor* out); void ElementwiseRawInferMeta(const MetaTensor& x_meta, const MetaTensor& y_meta, diff --git a/paddle/phi/kernels/elementwise_add_kernel.h b/paddle/phi/kernels/elementwise_add_kernel.h index 05145863e8beb3..eef77a50eeae3e 100644 --- a/paddle/phi/kernels/elementwise_add_kernel.h +++ b/paddle/phi/kernels/elementwise_add_kernel.h @@ -19,10 +19,10 @@ namespace phi { template -void AddKernel(const Context& dev_ctx, - const DenseTensor& x, - const DenseTensor& y, - DenseTensor* out); +TEST_API void AddKernel(const Context& dev_ctx, + const DenseTensor& x, + const DenseTensor& y, + DenseTensor* out); template DenseTensor Add(const Context& dev_ctx, From c62e93181b8b62a1fb948feb650d1fb025658fd4 Mon Sep 17 00:00:00 2001 From: Yangrl <2535184404@qq.com> Date: Mon, 25 Dec 2023 09:35:50 +0000 Subject: [PATCH 04/12] update --- paddle/phi/common/int_array.h | 2 +- paddle/phi/core/infermeta_utils.h | 26 +++++++++++++------------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/paddle/phi/common/int_array.h b/paddle/phi/common/int_array.h index 6eab8609e54b26..e21390aaa4fc36 100644 --- a/paddle/phi/common/int_array.h +++ b/paddle/phi/common/int_array.h @@ -29,7 +29,7 @@ class Tensor; namespace experimental { template -class IntArrayBase { +class TEST_API IntArrayBase { public: // Constructor support implicit IntArrayBase() = default; diff --git a/paddle/phi/core/infermeta_utils.h b/paddle/phi/core/infermeta_utils.h index a7395a85a13e69..494fe160696fff 100644 --- a/paddle/phi/core/infermeta_utils.h +++ b/paddle/phi/core/infermeta_utils.h @@ -32,7 +32,7 @@ limitations under the License. */ namespace phi { -class TEST_API InferMetaContext { +class InferMetaContext { public: InferMetaContext() = default; explicit InferMetaContext(MetaConfig config) : config_(config) {} @@ -41,32 +41,32 @@ class TEST_API InferMetaContext { const MetaConfig& GetMetaConfig() const; void EmplaceBackInput(MetaTensor input); - void EmplaceBackOutput(MetaTensor output); - void EmplaceBackAttr(Attribute attr); + TEST_API void EmplaceBackOutput(MetaTensor output); + TEST_API void EmplaceBackAttr(Attribute attr); void EmplaceBackInputs( paddle::small_vector inputs); void EmplaceBackOutputs( paddle::small_vector outputs); - virtual const MetaTensor& InputAt(size_t idx) const; + TEST_API virtual const MetaTensor& InputAt(size_t idx) const; - virtual std::vector InputsBetween(size_t start, - size_t end) const; - virtual paddle::optional> + TEST_API virtual std::vector InputsBetween( + size_t start, size_t end) const; + TEST_API virtual paddle::optional> OptionalInputsBetween(size_t start, size_t end) const; - virtual MetaTensor* MutableOutputAt(size_t idx); - virtual std::vector MutableOutputBetween(size_t start, - size_t end); + TEST_API virtual MetaTensor* MutableOutputAt(size_t idx); + TEST_API virtual std::vector MutableOutputBetween(size_t start, + size_t end); template - const AttrType& AttrAt(size_t idx) const; + TEST_API const AttrType& AttrAt(size_t idx) const; - const Attribute& AttrAt(size_t idx) const; + TEST_API const Attribute& AttrAt(size_t idx) const; const std::pair& InputRangeAt(size_t idx) const; - const std::pair& OutputRangeAt(size_t idx) const; + TEST_API const std::pair& OutputRangeAt(size_t idx) const; virtual ~InferMetaContext() = default; From 43e41950e2aae8031cdf4e2861f6faacc0990e85 Mon Sep 17 00:00:00 2001 From: Yangrl <2535184404@qq.com> Date: Mon, 25 Dec 2023 11:06:39 +0000 Subject: [PATCH 05/12] update --- paddle/phi/common/int_array.h | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/paddle/phi/common/int_array.h b/paddle/phi/common/int_array.h index e21390aaa4fc36..29e411104c68cd 100644 --- a/paddle/phi/common/int_array.h +++ b/paddle/phi/common/int_array.h @@ -29,10 +29,10 @@ class Tensor; namespace experimental { template -class TEST_API IntArrayBase { +class IntArrayBase { public: // Constructor support implicit - IntArrayBase() = default; + TEST_API IntArrayBase() = default; IntArrayBase(const std::vector& vec) : array_(vec) {} // NOLINT @@ -58,12 +58,13 @@ class TEST_API IntArrayBase { explicit IntArrayBase(const common::DDim& dims); // The Tensor must have one dim - IntArrayBase(const T& tensor); // NOLINT + TEST_API IntArrayBase(const T& tensor); // NOLINT // The Tensor in vec must have only one element - IntArrayBase(const std::vector& tensor_list); // NOLINT + TEST_API IntArrayBase(const std::vector& tensor_list); // NOLINT - explicit IntArrayBase(const std::vector& tensor_ref_list); + TEST_API explicit IntArrayBase( + const std::vector& tensor_ref_list); template IntArrayBase(const IntArrayBase& other) : array_(other.GetData()) {} From 9646072d80b84b35279ecb975adfa40a7cd96592 Mon Sep 17 00:00:00 2001 From: Yangrl <2535184404@qq.com> Date: Tue, 26 Dec 2023 03:09:14 +0000 Subject: [PATCH 06/12] update --- paddle/fluid/pir/dialect/op_generator/op_gen.py | 2 +- paddle/phi/common/data_type.h | 2 +- paddle/phi/infermeta/nullary.h | 4 +++- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/paddle/fluid/pir/dialect/op_generator/op_gen.py b/paddle/fluid/pir/dialect/op_generator/op_gen.py index 8e56406583385c..7d4f7d2c420a56 100644 --- a/paddle/fluid/pir/dialect/op_generator/op_gen.py +++ b/paddle/fluid/pir/dialect/op_generator/op_gen.py @@ -89,7 +89,7 @@ """ OP_DECLARE_TEMPLATE = """ -class {op_name} : public pir::Op<{op_name}{interfaces}{traits}> {{ +class TEST_API {op_name} : public pir::Op<{op_name}{interfaces}{traits}> {{ public: using Op::Op; static const char *name() {{ return "{dialect_op_name}"; }} diff --git a/paddle/phi/common/data_type.h b/paddle/phi/common/data_type.h index 4c4555fd74bb0c..f28dd7e1c6ef1e 100644 --- a/paddle/phi/common/data_type.h +++ b/paddle/phi/common/data_type.h @@ -35,7 +35,7 @@ using bfloat16 = ::phi::dtype::bfloat16; using pstring = ::phi::dtype::pstring; // The enum value are consistent with jit/property.proto -enum class DataType { +enum class TEST_API DataType { UNDEFINED = 0, BOOL, diff --git a/paddle/phi/infermeta/nullary.h b/paddle/phi/infermeta/nullary.h index c424bba6f8a8b9..5eda8fc1a84618 100644 --- a/paddle/phi/infermeta/nullary.h +++ b/paddle/phi/infermeta/nullary.h @@ -48,7 +48,9 @@ void CreateVecShapeInferMeta(const std::vector& shape, void CreateArrayInferMeta(DataType dtype, MetaTensor* out); -void CreateInferMeta(const IntArray& shape, DataType dtype, MetaTensor* out); +TEST_API void CreateInferMeta(const IntArray& shape, + DataType dtype, + MetaTensor* out); void CreateInferMetaBase(const std::vector& shape, DataType dtype, From de19af9a1c84c2ba669e164453bf90f9be10f03a Mon Sep 17 00:00:00 2001 From: Yangrl <2535184404@qq.com> Date: Tue, 26 Dec 2023 05:04:36 +0000 Subject: [PATCH 07/12] update --- paddle/fluid/pir/dialect/op_generator/op_gen.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/paddle/fluid/pir/dialect/op_generator/op_gen.py b/paddle/fluid/pir/dialect/op_generator/op_gen.py index 7d4f7d2c420a56..497b2816f688ce 100644 --- a/paddle/fluid/pir/dialect/op_generator/op_gen.py +++ b/paddle/fluid/pir/dialect/op_generator/op_gen.py @@ -89,7 +89,7 @@ """ OP_DECLARE_TEMPLATE = """ -class TEST_API {op_name} : public pir::Op<{op_name}{interfaces}{traits}> {{ +class {TEST_API} {op_name} : public pir::Op<{op_name}{interfaces}{traits}> {{ public: using Op::Op; static const char *name() {{ return "{dialect_op_name}"; }} @@ -1351,8 +1351,12 @@ def AutoCodeGen(op_info_items, all_op_info_items, namespaces, dialect_name): ) # gen op_declare_str/op_defined_str + TEST_API = "" + if op_class_name in ["AbsOp", "FullOp"]: + TEST_API = "TEST_API" if len(op_non_mutable_attribute_name_list) == 0: op_declare_str = OP_DECLARE_TEMPLATE.format( + TEST_API=TEST_API, op_name=op_class_name, dialect_op_name=op_dialect_name, interfaces=op_interfaces_str, @@ -1372,6 +1376,7 @@ def AutoCodeGen(op_info_items, all_op_info_items, namespaces, dialect_name): op_defined_str = "" else: op_declare_str = OP_DECLARE_TEMPLATE.format( + TEST_API=TEST_API, op_name=op_class_name, dialect_op_name=op_dialect_name, interfaces=op_interfaces_str, From 6ccc76178576e4a2fea2d593a1b5bbf5e2788353 Mon Sep 17 00:00:00 2001 From: Yangrl <2535184404@qq.com> Date: Tue, 26 Dec 2023 07:56:41 +0000 Subject: [PATCH 08/12] update --- test/cpp/pir/core/ir_program_test.cc | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/test/cpp/pir/core/ir_program_test.cc b/test/cpp/pir/core/ir_program_test.cc index 4c28a5a0cf22b8..718e5a17938373 100644 --- a/test/cpp/pir/core/ir_program_test.cc +++ b/test/cpp/pir/core/ir_program_test.cc @@ -30,6 +30,8 @@ #include "paddle/pir/core/ir_context.h" #include "paddle/pir/core/program.h" #include "paddle/pir/core/utils.h" +// NOTE(Galaxy1458): File api.h is generated by dist_api_gen.py. +#include "paddle/phi/api/lib/api.h" // NOTE(zhangbo9674): File pd_op.h is generated by op_gen.py, see details in // paddle/fluid/pir/dialect/CMakeLists.txt. #include "paddle/fluid/pir/dialect/operator/ir/pd_op.h" @@ -150,15 +152,14 @@ TEST(program_test, program) { // (6) Def c = AddOp(a, b), execute this op. auto op3 = builder.Build(op1->result(0), op2->result(0), dense_tensor_dtype); - phi::CPUContext *dev_ctx = static_cast( - paddle::platform::DeviceContextPool::Instance().Get( - paddle::platform::CPUPlace())); - phi::DenseTensor c_tensor = - phi::Add(*dev_ctx, a_tensor, b_tensor); + + phi::DenseTensor *c_tensor = static_cast( + paddle::experimental::add(a_tensor, b_tensor).impl().get()); + std::shared_ptr variable_c = std::make_shared(); auto *dst_tensor = variable_c->GetMutable(); - *dst_tensor = c_tensor; + *dst_tensor = *c_tensor; EXPECT_EQ(dst_tensor->numel(), b_tensor.numel()); EXPECT_EQ(dst_tensor->dims(), b_tensor.dims()); EXPECT_EQ(dst_tensor->dtype(), b_tensor.dtype()); From f076a67859c93b6995ff2d0ea61fbe243e158d17 Mon Sep 17 00:00:00 2001 From: Yangrl <2535184404@qq.com> Date: Tue, 26 Dec 2023 08:30:27 +0000 Subject: [PATCH 09/12] change_cc_test_old --- test/cpp/pir/core/ir_program_test.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/cpp/pir/core/ir_program_test.cc b/test/cpp/pir/core/ir_program_test.cc index 718e5a17938373..b182ff5b38cf66 100644 --- a/test/cpp/pir/core/ir_program_test.cc +++ b/test/cpp/pir/core/ir_program_test.cc @@ -31,7 +31,7 @@ #include "paddle/pir/core/program.h" #include "paddle/pir/core/utils.h" // NOTE(Galaxy1458): File api.h is generated by dist_api_gen.py. -#include "paddle/phi/api/lib/api.h" +#include "paddle/phi/api/include/api.h" // NOTE(zhangbo9674): File pd_op.h is generated by op_gen.py, see details in // paddle/fluid/pir/dialect/CMakeLists.txt. #include "paddle/fluid/pir/dialect/operator/ir/pd_op.h" From 2a09067df1f0813e95279b5ec7b0595ea5cc461e Mon Sep 17 00:00:00 2001 From: Yangrl <2535184404@qq.com> Date: Tue, 26 Dec 2023 10:31:12 +0000 Subject: [PATCH 10/12] opt cmake --- test/cpp/pir/core/ir_program_test.cc | 282 ++++++++++++--------------- 1 file changed, 125 insertions(+), 157 deletions(-) diff --git a/test/cpp/pir/core/ir_program_test.cc b/test/cpp/pir/core/ir_program_test.cc index b182ff5b38cf66..b275ab385d94cd 100644 --- a/test/cpp/pir/core/ir_program_test.cc +++ b/test/cpp/pir/core/ir_program_test.cc @@ -30,8 +30,6 @@ #include "paddle/pir/core/ir_context.h" #include "paddle/pir/core/program.h" #include "paddle/pir/core/utils.h" -// NOTE(Galaxy1458): File api.h is generated by dist_api_gen.py. -#include "paddle/phi/api/include/api.h" // NOTE(zhangbo9674): File pd_op.h is generated by op_gen.py, see details in // paddle/fluid/pir/dialect/CMakeLists.txt. #include "paddle/fluid/pir/dialect/operator/ir/pd_op.h" @@ -71,139 +69,138 @@ void AddOp::Build(pir::Builder &, IR_DECLARE_EXPLICIT_TEST_TYPE_ID(AddOp) IR_DEFINE_EXPLICIT_TYPE_ID(AddOp) -TEST(program_test, program) { - // (1) Init environment. - pir::IrContext *ctx = pir::IrContext::Instance(); - pir::Dialect *builtin_dialect = - ctx->GetOrRegisterDialect(); - builtin_dialect->RegisterOp(); - pir::Dialect *paddle_dialect = - ctx->GetOrRegisterDialect(); - - // (2) Create an empty program object - pir::Program program(ctx); - - // (3) Create a float32 DenseTensor Parameter and save into Program - pir::Type fp32_dtype = pir::Float32Type::get(ctx); - phi::DDim dims = {2, 2}; - phi::DataLayout data_layout = phi::DataLayout::NCHW; - phi::LoD lod = {{0, 1, 2}}; - size_t offset = 0; - pir::Type dense_tensor_dtype = paddle::dialect::DenseTensorType::get( - ctx, fp32_dtype, dims, data_layout, lod, offset); - - std::vector data_a = {1, 2, 3, 4}; - std::unique_ptr parameter_a = - std::make_unique(reinterpret_cast(data_a.data()), - 4 * sizeof(float), - dense_tensor_dtype); - program.SetParameter("a", std::move(parameter_a)); - EXPECT_EQ(program.parameters_num() == 1, true); - - std::vector data_b = {5, 6, 7, 8}; - std::unique_ptr parameter_b = - std::make_unique(reinterpret_cast(data_b.data()), - 4 * sizeof(float), - dense_tensor_dtype); - program.SetParameter("b", std::move(parameter_b)); - EXPECT_EQ(program.parameters_num() == 2, true); - - // (4) Def a = ParameterOp("a"), and create DenseTensor for a. - pir::Builder builder(ctx, program.block()); - auto op1 = builder.Build("a", dense_tensor_dtype); - - EXPECT_EQ(&program, op1->GetParentProgram()); - EXPECT_EQ(op1->result_type(0).dialect().id(), paddle_dialect->id()); - using Interface = paddle::dialect::ParameterConvertInterface; - Interface *a_interface = - op1->result_type(0).dialect().GetRegisteredInterface(); - std::shared_ptr a_var = - a_interface->ParameterToVariable(program.GetParameter("a")); - const phi::DenseTensor &a_tensor = a_var->Get(); - EXPECT_EQ(a_tensor.numel(), 4); - EXPECT_EQ(a_tensor.dims(), dims); - EXPECT_EQ(a_tensor.dtype(), paddle::dialect::TransToPhiDataType(fp32_dtype)); - EXPECT_EQ(a_tensor.layout(), data_layout); - EXPECT_EQ(a_tensor.lod(), lod); - EXPECT_EQ(a_tensor.offset(), offset); - for (int64_t i = 0; i < a_tensor.numel(); i++) { - EXPECT_EQ(*(a_tensor.data() + i), data_a[i]); - } - - // (5) Def b = ParameterOp("b"), and create DenseTensor for b. - auto op2 = builder.Build("b", dense_tensor_dtype); - - EXPECT_EQ(op2->result_type(0).dialect().id(), paddle_dialect->id()); - Interface *b_interface = - op2->result_type(0).dialect().GetRegisteredInterface(); - std::shared_ptr b_var = - b_interface->ParameterToVariable(program.GetParameter("b")); - const phi::DenseTensor &b_tensor = b_var->Get(); - EXPECT_EQ(b_tensor.numel(), 4); - EXPECT_EQ(b_tensor.dims(), dims); - EXPECT_EQ(b_tensor.dtype(), paddle::dialect::TransToPhiDataType(fp32_dtype)); - EXPECT_EQ(b_tensor.layout(), data_layout); - EXPECT_EQ(b_tensor.lod(), lod); - EXPECT_EQ(b_tensor.offset(), offset); - for (int64_t i = 0; i < b_tensor.numel(); i++) { - EXPECT_EQ(*(b_tensor.data() + i), data_b[i]); - } - - // (6) Def c = AddOp(a, b), execute this op. - auto op3 = - builder.Build(op1->result(0), op2->result(0), dense_tensor_dtype); - - phi::DenseTensor *c_tensor = static_cast( - paddle::experimental::add(a_tensor, b_tensor).impl().get()); - - std::shared_ptr variable_c = - std::make_shared(); - auto *dst_tensor = variable_c->GetMutable(); - *dst_tensor = *c_tensor; - EXPECT_EQ(dst_tensor->numel(), b_tensor.numel()); - EXPECT_EQ(dst_tensor->dims(), b_tensor.dims()); - EXPECT_EQ(dst_tensor->dtype(), b_tensor.dtype()); - EXPECT_EQ(dst_tensor->layout(), b_tensor.layout()); - EXPECT_EQ(dst_tensor->lod(), b_tensor.lod()); - EXPECT_EQ(dst_tensor->offset(), b_tensor.offset()); - for (int64_t i = 0; i < dst_tensor->numel(); i++) { - EXPECT_EQ(*(dst_tensor->data() + i), data_a[i] + data_b[i]); - } +// (1) Init environment. +pir::IrContext *ctx = pir::IrContext::Instance(); +pir::Dialect *builtin_dialect = + ctx->GetOrRegisterDialect(); +builtin_dialect->RegisterOp(); +pir::Dialect *paddle_dialect = + ctx->GetOrRegisterDialect(); + +// (2) Create an empty program object +pir::Program program(ctx); + +// (3) Create a float32 DenseTensor Parameter and save into Program +pir::Type fp32_dtype = pir::Float32Type::get(ctx); +phi::DDim dims = {2, 2}; +phi::DataLayout data_layout = phi::DataLayout::NCHW; +phi::LoD lod = {{0, 1, 2}}; +size_t offset = 0; +pir::Type dense_tensor_dtype = paddle::dialect::DenseTensorType::get( + ctx, fp32_dtype, dims, data_layout, lod, offset); + +std::vector data_a = {1, 2, 3, 4}; +std::unique_ptr parameter_a = + std::make_unique(reinterpret_cast(data_a.data()), + 4 * sizeof(float), + dense_tensor_dtype); +program.SetParameter("a", std::move(parameter_a)); +EXPECT_EQ(program.parameters_num() == 1, true); + +std::vector data_b = {5, 6, 7, 8}; +std::unique_ptr parameter_b = + std::make_unique(reinterpret_cast(data_b.data()), + 4 * sizeof(float), + dense_tensor_dtype); +program.SetParameter("b", std::move(parameter_b)); +EXPECT_EQ(program.parameters_num() == 2, true); + +// (4) Def a = ParameterOp("a"), and create DenseTensor for a. +pir::Builder builder(ctx, program.block()); +auto op1 = builder.Build("a", dense_tensor_dtype); + +EXPECT_EQ(&program, op1->GetParentProgram()); +EXPECT_EQ(op1->result_type(0).dialect().id(), paddle_dialect->id()); +using Interface = paddle::dialect::ParameterConvertInterface; +Interface *a_interface = + op1->result_type(0).dialect().GetRegisteredInterface(); +std::shared_ptr a_var = + a_interface->ParameterToVariable(program.GetParameter("a")); +const phi::DenseTensor &a_tensor = a_var->Get(); +EXPECT_EQ(a_tensor.numel(), 4); +EXPECT_EQ(a_tensor.dims(), dims); +EXPECT_EQ(a_tensor.dtype(), paddle::dialect::TransToPhiDataType(fp32_dtype)); +EXPECT_EQ(a_tensor.layout(), data_layout); +EXPECT_EQ(a_tensor.lod(), lod); +EXPECT_EQ(a_tensor.offset(), offset); +for (int64_t i = 0; i < a_tensor.numel(); i++) { + EXPECT_EQ(*(a_tensor.data() + i), data_a[i]); +} - // (7) Def AbsOp(b) - auto abs_op = builder.Build(op1->result(0)); - paddle::dialect::OpYamlInfoInterface interface = - abs_op->dyn_cast(); - EXPECT_EQ(std::get<0>(interface.GetOpInfo())[0].name == "x", true); +// (5) Def b = ParameterOp("b"), and create DenseTensor for b. +auto op2 = builder.Build("b", dense_tensor_dtype); + +EXPECT_EQ(op2->result_type(0).dialect().id(), paddle_dialect->id()); +Interface *b_interface = + op2->result_type(0).dialect().GetRegisteredInterface(); +std::shared_ptr b_var = + b_interface->ParameterToVariable(program.GetParameter("b")); +const phi::DenseTensor &b_tensor = b_var->Get(); +EXPECT_EQ(b_tensor.numel(), 4); +EXPECT_EQ(b_tensor.dims(), dims); +EXPECT_EQ(b_tensor.dtype(), paddle::dialect::TransToPhiDataType(fp32_dtype)); +EXPECT_EQ(b_tensor.layout(), data_layout); +EXPECT_EQ(b_tensor.lod(), lod); +EXPECT_EQ(b_tensor.offset(), offset); +for (int64_t i = 0; i < b_tensor.numel(); i++) { + EXPECT_EQ(*(b_tensor.data() + i), data_b[i]); +} - // (8) Def SetParameterOp(c, "c") - auto op4 = builder.Build(op3->result(0), "c"); +// (6) Def c = AddOp(a, b), execute this op. +auto op3 = + builder.Build(op1->result(0), op2->result(0), dense_tensor_dtype); + +phi::DenseTensor *c_tensor = static_cast( + paddle::experimental::add(a_tensor, b_tensor).impl().get()); + +std::shared_ptr variable_c = + std::make_shared(); +auto *dst_tensor = variable_c -> GetMutable(); +*dst_tensor = *c_tensor; +EXPECT_EQ(dst_tensor->numel(), b_tensor.numel()); +EXPECT_EQ(dst_tensor->dims(), b_tensor.dims()); +EXPECT_EQ(dst_tensor->dtype(), b_tensor.dtype()); +EXPECT_EQ(dst_tensor->layout(), b_tensor.layout()); +EXPECT_EQ(dst_tensor->lod(), b_tensor.lod()); +EXPECT_EQ(dst_tensor->offset(), b_tensor.offset()); +for (int64_t i = 0; i < dst_tensor->numel(); i++) { + EXPECT_EQ(*(dst_tensor->data() + i), data_a[i] + data_b[i]); +} - EXPECT_EQ(op4->operand(0).type().dialect().id(), paddle_dialect->id()); - Interface *c_interface = - op4->operand(0).type().dialect().GetRegisteredInterface(); - // pir::Parameter *parameter_c = - // c_interface->VariableToParameter(variable_c.get()); - std::unique_ptr parameter_c = - c_interface->VariableToParameter(variable_c.get()); - EXPECT_EQ(parameter_c->type(), dense_tensor_dtype); - for (int64_t i = 0; i < dst_tensor->numel(); i++) { - EXPECT_EQ(*(dst_tensor->data() + i), - *(static_cast(parameter_c->data()) + i)); - } - program.SetParameter("c", std::move(parameter_c)); +// (7) Def AbsOp(b) +auto abs_op = builder.Build(op1->result(0)); +paddle::dialect::OpYamlInfoInterface interface = + abs_op->dyn_cast(); +EXPECT_EQ(std::get<0>(interface.GetOpInfo())[0].name == "x", true); + +// (8) Def SetParameterOp(c, "c") +auto op4 = builder.Build(op3->result(0), "c"); + +EXPECT_EQ(op4->operand(0).type().dialect().id(), paddle_dialect->id()); +Interface *c_interface = + op4->operand(0).type().dialect().GetRegisteredInterface(); +// pir::Parameter *parameter_c = +// c_interface->VariableToParameter(variable_c.get()); +std::unique_ptr parameter_c = + c_interface->VariableToParameter(variable_c.get()); +EXPECT_EQ(parameter_c->type(), dense_tensor_dtype); +for (int64_t i = 0; i < dst_tensor->numel(); i++) { + EXPECT_EQ(*(dst_tensor->data() + i), + *(static_cast(parameter_c->data()) + i)); +} +program.SetParameter("c", std::move(parameter_c)); - // (8) Traverse Program - EXPECT_EQ(program.block()->size() == 5, true); - EXPECT_EQ(program.parameters_num() == 3, true); +// (8) Traverse Program +EXPECT_EQ(program.block()->size() == 5, true); +EXPECT_EQ(program.parameters_num() == 3, true); - std::stringstream ss; - program.Print(ss); +std::stringstream ss; +program.Print(ss); - std::stringstream ss_ostram; - ss_ostram << program; +std::stringstream ss_ostram; +ss_ostram << program; - EXPECT_EQ(ss.str(), ss_ostram.str()); +EXPECT_EQ(ss.str(), ss_ostram.str()); } TEST(program_test, slice_combine_test) { @@ -262,32 +259,3 @@ TEST(program_test, slice_combine_test) { // (8) Traverse Program EXPECT_EQ(program.block()->size() == 4, true); } - -TEST(program_test, builder) { - pir::IrContext *ctx = pir::IrContext::Instance(); - ctx->GetOrRegisterDialect(); - pir::Program program(ctx); - pir::Builder builder = pir::Builder(ctx, program.block()); - - paddle::dialect::FullOp full_op = builder.Build( - std::vector{2, 2}, 1.5, phi::DataType::FLOAT32, phi::CPUPlace()); - pir::Type full_op_output = full_op->result_type(0); - EXPECT_EQ(program.block()->size(), 1u); - EXPECT_EQ(program.block()->back(), *full_op.operation()); - EXPECT_EQ(full_op.num_operands(), 0u); - EXPECT_EQ(full_op.num_results(), 1u); - EXPECT_EQ(full_op.attributes().size(), 5u); - EXPECT_EQ( - full_op_output.dyn_cast().offset() == 0, - true); - for (auto dim : common::vectorize( - full_op_output.dyn_cast() - .dims())) { - EXPECT_EQ(dim == 2, true); - } - - pir::ConstantOp constant = builder.Build( - pir::Int32Attribute::get(ctx, 2), pir::Int32Type::get(ctx)); - EXPECT_EQ(program.block()->size() == 2, true); - EXPECT_EQ(constant.value().dyn_cast().data() == 2, true); -} From cf9c24f2d374343b55343e1102cb9120a7d32536 Mon Sep 17 00:00:00 2001 From: Yangrl <2535184404@qq.com> Date: Tue, 26 Dec 2023 11:10:47 +0000 Subject: [PATCH 11/12] update --- .../fluid/pir/dialect/op_generator/op_gen.py | 6 +- test/cpp/pir/core/ir_program_test.cc | 134 ------------------ 2 files changed, 5 insertions(+), 135 deletions(-) diff --git a/paddle/fluid/pir/dialect/op_generator/op_gen.py b/paddle/fluid/pir/dialect/op_generator/op_gen.py index 497b2816f688ce..e3fbba6ed7bf7b 100644 --- a/paddle/fluid/pir/dialect/op_generator/op_gen.py +++ b/paddle/fluid/pir/dialect/op_generator/op_gen.py @@ -39,6 +39,10 @@ ) import gen as vjp_gen +# Note(Galaxy1458) The need_export_symbol_op_list is used +# for some unittests these need to export symbol op compiled with dynamic lib. +need_export_symbol_op_list = ['AbsOp', 'FullOp'] + # ===================================== # String Template for h file code gen # ===================================== @@ -1352,7 +1356,7 @@ def AutoCodeGen(op_info_items, all_op_info_items, namespaces, dialect_name): # gen op_declare_str/op_defined_str TEST_API = "" - if op_class_name in ["AbsOp", "FullOp"]: + if op_class_name in need_export_symbol_op_list: TEST_API = "TEST_API" if len(op_non_mutable_attribute_name_list) == 0: op_declare_str = OP_DECLARE_TEMPLATE.format( diff --git a/test/cpp/pir/core/ir_program_test.cc b/test/cpp/pir/core/ir_program_test.cc index b275ab385d94cd..b4c7c89ae85ce1 100644 --- a/test/cpp/pir/core/ir_program_test.cc +++ b/test/cpp/pir/core/ir_program_test.cc @@ -69,140 +69,6 @@ void AddOp::Build(pir::Builder &, IR_DECLARE_EXPLICIT_TEST_TYPE_ID(AddOp) IR_DEFINE_EXPLICIT_TYPE_ID(AddOp) -// (1) Init environment. -pir::IrContext *ctx = pir::IrContext::Instance(); -pir::Dialect *builtin_dialect = - ctx->GetOrRegisterDialect(); -builtin_dialect->RegisterOp(); -pir::Dialect *paddle_dialect = - ctx->GetOrRegisterDialect(); - -// (2) Create an empty program object -pir::Program program(ctx); - -// (3) Create a float32 DenseTensor Parameter and save into Program -pir::Type fp32_dtype = pir::Float32Type::get(ctx); -phi::DDim dims = {2, 2}; -phi::DataLayout data_layout = phi::DataLayout::NCHW; -phi::LoD lod = {{0, 1, 2}}; -size_t offset = 0; -pir::Type dense_tensor_dtype = paddle::dialect::DenseTensorType::get( - ctx, fp32_dtype, dims, data_layout, lod, offset); - -std::vector data_a = {1, 2, 3, 4}; -std::unique_ptr parameter_a = - std::make_unique(reinterpret_cast(data_a.data()), - 4 * sizeof(float), - dense_tensor_dtype); -program.SetParameter("a", std::move(parameter_a)); -EXPECT_EQ(program.parameters_num() == 1, true); - -std::vector data_b = {5, 6, 7, 8}; -std::unique_ptr parameter_b = - std::make_unique(reinterpret_cast(data_b.data()), - 4 * sizeof(float), - dense_tensor_dtype); -program.SetParameter("b", std::move(parameter_b)); -EXPECT_EQ(program.parameters_num() == 2, true); - -// (4) Def a = ParameterOp("a"), and create DenseTensor for a. -pir::Builder builder(ctx, program.block()); -auto op1 = builder.Build("a", dense_tensor_dtype); - -EXPECT_EQ(&program, op1->GetParentProgram()); -EXPECT_EQ(op1->result_type(0).dialect().id(), paddle_dialect->id()); -using Interface = paddle::dialect::ParameterConvertInterface; -Interface *a_interface = - op1->result_type(0).dialect().GetRegisteredInterface(); -std::shared_ptr a_var = - a_interface->ParameterToVariable(program.GetParameter("a")); -const phi::DenseTensor &a_tensor = a_var->Get(); -EXPECT_EQ(a_tensor.numel(), 4); -EXPECT_EQ(a_tensor.dims(), dims); -EXPECT_EQ(a_tensor.dtype(), paddle::dialect::TransToPhiDataType(fp32_dtype)); -EXPECT_EQ(a_tensor.layout(), data_layout); -EXPECT_EQ(a_tensor.lod(), lod); -EXPECT_EQ(a_tensor.offset(), offset); -for (int64_t i = 0; i < a_tensor.numel(); i++) { - EXPECT_EQ(*(a_tensor.data() + i), data_a[i]); -} - -// (5) Def b = ParameterOp("b"), and create DenseTensor for b. -auto op2 = builder.Build("b", dense_tensor_dtype); - -EXPECT_EQ(op2->result_type(0).dialect().id(), paddle_dialect->id()); -Interface *b_interface = - op2->result_type(0).dialect().GetRegisteredInterface(); -std::shared_ptr b_var = - b_interface->ParameterToVariable(program.GetParameter("b")); -const phi::DenseTensor &b_tensor = b_var->Get(); -EXPECT_EQ(b_tensor.numel(), 4); -EXPECT_EQ(b_tensor.dims(), dims); -EXPECT_EQ(b_tensor.dtype(), paddle::dialect::TransToPhiDataType(fp32_dtype)); -EXPECT_EQ(b_tensor.layout(), data_layout); -EXPECT_EQ(b_tensor.lod(), lod); -EXPECT_EQ(b_tensor.offset(), offset); -for (int64_t i = 0; i < b_tensor.numel(); i++) { - EXPECT_EQ(*(b_tensor.data() + i), data_b[i]); -} - -// (6) Def c = AddOp(a, b), execute this op. -auto op3 = - builder.Build(op1->result(0), op2->result(0), dense_tensor_dtype); - -phi::DenseTensor *c_tensor = static_cast( - paddle::experimental::add(a_tensor, b_tensor).impl().get()); - -std::shared_ptr variable_c = - std::make_shared(); -auto *dst_tensor = variable_c -> GetMutable(); -*dst_tensor = *c_tensor; -EXPECT_EQ(dst_tensor->numel(), b_tensor.numel()); -EXPECT_EQ(dst_tensor->dims(), b_tensor.dims()); -EXPECT_EQ(dst_tensor->dtype(), b_tensor.dtype()); -EXPECT_EQ(dst_tensor->layout(), b_tensor.layout()); -EXPECT_EQ(dst_tensor->lod(), b_tensor.lod()); -EXPECT_EQ(dst_tensor->offset(), b_tensor.offset()); -for (int64_t i = 0; i < dst_tensor->numel(); i++) { - EXPECT_EQ(*(dst_tensor->data() + i), data_a[i] + data_b[i]); -} - -// (7) Def AbsOp(b) -auto abs_op = builder.Build(op1->result(0)); -paddle::dialect::OpYamlInfoInterface interface = - abs_op->dyn_cast(); -EXPECT_EQ(std::get<0>(interface.GetOpInfo())[0].name == "x", true); - -// (8) Def SetParameterOp(c, "c") -auto op4 = builder.Build(op3->result(0), "c"); - -EXPECT_EQ(op4->operand(0).type().dialect().id(), paddle_dialect->id()); -Interface *c_interface = - op4->operand(0).type().dialect().GetRegisteredInterface(); -// pir::Parameter *parameter_c = -// c_interface->VariableToParameter(variable_c.get()); -std::unique_ptr parameter_c = - c_interface->VariableToParameter(variable_c.get()); -EXPECT_EQ(parameter_c->type(), dense_tensor_dtype); -for (int64_t i = 0; i < dst_tensor->numel(); i++) { - EXPECT_EQ(*(dst_tensor->data() + i), - *(static_cast(parameter_c->data()) + i)); -} -program.SetParameter("c", std::move(parameter_c)); - -// (8) Traverse Program -EXPECT_EQ(program.block()->size() == 5, true); -EXPECT_EQ(program.parameters_num() == 3, true); - -std::stringstream ss; -program.Print(ss); - -std::stringstream ss_ostram; -ss_ostram << program; - -EXPECT_EQ(ss.str(), ss_ostram.str()); -} - TEST(program_test, slice_combine_test) { // (1) Init environment. pir::IrContext *ctx = pir::IrContext::Instance(); From 328e44e09067d8cbc421ec0263f1f6485c202653 Mon Sep 17 00:00:00 2001 From: Yangrl <2535184404@qq.com> Date: Tue, 26 Dec 2023 12:28:03 +0000 Subject: [PATCH 12/12] update --- paddle/phi/core/infermeta_utils.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/paddle/phi/core/infermeta_utils.cc b/paddle/phi/core/infermeta_utils.cc index 18f3042bbf9c28..b644cf8021e43e 100644 --- a/paddle/phi/core/infermeta_utils.cc +++ b/paddle/phi/core/infermeta_utils.cc @@ -153,7 +153,7 @@ template const std::vector& InferMetaContext::AttrAt( template const Scalar& InferMetaContext::AttrAt(size_t idx) const; template const std::vector& InferMetaContext::AttrAt(size_t idx) const; template const IntArray& InferMetaContext::AttrAt(size_t idx) const; -template const DataType& InferMetaContext::AttrAt(size_t idx) const; +template TEST_API const DataType& InferMetaContext::AttrAt(size_t idx) const; template const DataLayout& InferMetaContext::AttrAt(size_t idx) const; template const Place& InferMetaContext::AttrAt(size_t idx) const; template const TensorRef& InferMetaContext::AttrAt(size_t idx) const;