From e579eb00df204153a54331d04fdc774dbbb8a526 Mon Sep 17 00:00:00 2001 From: superjomn Date: Sun, 7 Apr 2019 18:39:27 +0800 Subject: [PATCH] update --- paddle/fluid/lite/operators/fc_op_test.cc | 76 +++++++++++++++++++++++ paddle/fluid/lite/operators/op_params.cc | 15 +++++ paddle/fluid/lite/operators/op_params.h | 40 ++++++++++++ paddle/fluid/lite/utils/CMakeLists.txt | 1 + paddle/fluid/lite/utils/varient_test.cc | 56 +++++++++++++++++ 5 files changed, 188 insertions(+) create mode 100644 paddle/fluid/lite/operators/fc_op_test.cc create mode 100644 paddle/fluid/lite/operators/op_params.cc create mode 100644 paddle/fluid/lite/operators/op_params.h create mode 100644 paddle/fluid/lite/utils/CMakeLists.txt create mode 100644 paddle/fluid/lite/utils/varient_test.cc diff --git a/paddle/fluid/lite/operators/fc_op_test.cc b/paddle/fluid/lite/operators/fc_op_test.cc new file mode 100644 index 000000000..4279823d2 --- /dev/null +++ b/paddle/fluid/lite/operators/fc_op_test.cc @@ -0,0 +1,76 @@ +// Copyright (c) 2019 PaddlePaddle Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "paddle/fluid/lite/operators/fc_op.h" +#include +#include "paddle/fluid/lite/core/op_registry.h" + +namespace paddle { +namespace lite { +namespace operators { + +TEST(fc_op_lite, test) { + LOG(INFO) << "\n" << KernelRegistry::Global().DebugString(); + // prepare variables + Scope scope; + auto* x = scope.Var("x")->GetMutable(); + auto* w = scope.Var("w")->GetMutable(); + auto* bias = scope.Var("bias")->GetMutable(); + auto* output = scope.Var("output")->GetMutable(); + x->Resize({1, 10, 20}); + w->Resize({20, 20}); + bias->Resize({1, 10}); + output->Resize({10, 20}); + + // set data + for (int i = 0; i < 10 * 20; i++) { + x->mutable_data()[i] = i; + } + for (int i = 0; i < 20 * 20; i++) { + w->mutable_data()[i] = i; + } + for (int i = 0; i < 1 * 10; i++) { + bias->mutable_data()[i] = i; + } + for (int i = 0; i < 10 * 20; i++) { + output->mutable_data()[i] = 0.; + } + + // prepare op desc + framework::OpDesc desc; + desc.SetType("fc"); + desc.SetInput("Input", {"x"}); + desc.SetInput("W", {"w"}); + desc.SetInput("Bias", {"bias"}); + desc.SetOutput("Out", {"output"}); + desc.SetAttr("in_num_col_dims", static_cast(1)); + + FcOpLite fc("fc"); + + fc.SetValidPlaces({OpLite::Place{TARGET(kHost), PRECISION(kFloat)}}); + fc.PickKernel({OpLite::Place{TARGET(kHost), PRECISION(kFloat)}}); + + fc.Attach(desc, &scope); + fc.Run(); + + for (int i = 0; i < 10 * 20; i++) { + LOG(INFO) << output->data()[i]; + } +} + +} // namespace operators +} // namespace lite +} // namespace paddle + +USE_LITE_KERNEL(fc, kHost, kFloat); diff --git a/paddle/fluid/lite/operators/op_params.cc b/paddle/fluid/lite/operators/op_params.cc new file mode 100644 index 000000000..57c172935 --- /dev/null +++ b/paddle/fluid/lite/operators/op_params.cc @@ -0,0 +1,15 @@ +// Copyright (c) 2019 PaddlePaddle Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "paddle/fluid/lite/operators/op_params.h" diff --git a/paddle/fluid/lite/operators/op_params.h b/paddle/fluid/lite/operators/op_params.h new file mode 100644 index 000000000..972998154 --- /dev/null +++ b/paddle/fluid/lite/operators/op_params.h @@ -0,0 +1,40 @@ +// Copyright (c) 2019 PaddlePaddle Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#pragma once +#include "paddle/fluid/lite/core/tensor.h" +#include "paddle/fluid/lite/utils/all.h" + +/* + * This file contains all the argument parameter data structure for operators. + */ + +namespace paddle { +namespace lite { +namespace operators { + +struct FcParam { + Tensor* input{nullptr}; + Tensor* w{}; + Tensor* bias{}; + Tensor* output{}; + DDim in_mat_dims; + int in_num_col_dims{0}; +}; + +using param_t = variant; + +} // namespace operators +} // namespace lite +} // namespace paddle diff --git a/paddle/fluid/lite/utils/CMakeLists.txt b/paddle/fluid/lite/utils/CMakeLists.txt new file mode 100644 index 000000000..e4b318e59 --- /dev/null +++ b/paddle/fluid/lite/utils/CMakeLists.txt @@ -0,0 +1 @@ +cc_test(test_varient SRCS varient_test.cc) diff --git a/paddle/fluid/lite/utils/varient_test.cc b/paddle/fluid/lite/utils/varient_test.cc new file mode 100644 index 000000000..d9a98448d --- /dev/null +++ b/paddle/fluid/lite/utils/varient_test.cc @@ -0,0 +1,56 @@ +// Copyright (c) 2019 PaddlePaddle Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "paddle/fluid/lite/utils/varient.h" +#include +#include +#include +#include "paddle/fluid/lite/utils/all.h" + +namespace paddle { +namespace lite { +namespace utils { + +TEST(varient, test) { + variant a; + a.set(1); + ASSERT_EQ(a.get(), 1); + a.set(20); + ASSERT_EQ(a.get(), 20); +} + +TEST(varient, reference) { + variant a; + a.set("hello world"); + + auto& b = a.get(); + ASSERT_EQ(b, "hello world"); +} + +TEST(varient, get_wrong_type) { + variant a; + a.set(100); + bool exception = false; + try { + float b = a.get(); + LOG(INFO) << b + 1; + } catch (...) { + exception = true; + } + ASSERT_TRUE(exception); +} + +} // namespace utils +} // namespace lite +} // namespace paddle -- GitLab