From fbb0d3b5f05f5e09e9ba509c2cbb57f8606f4af3 Mon Sep 17 00:00:00 2001 From: Yuan Shuai Date: Wed, 11 Dec 2019 14:45:29 +0800 Subject: [PATCH] [LITE][OPENCL] add 3 data layouts for opencl image2d (#2561) * add 3 layout for opencl image. test=develop --- lite/CMakeLists.txt | 6 ++++-- lite/api/paddle_place.cc | 20 ++++++++++++++----- lite/api/paddle_place.h | 7 +++++-- lite/api/python/pybind/pybind.cc | 3 +++ lite/core/op_registry.cc | 23 ++++++++++++++++++++++ lite/core/op_registry.h | 33 ++++++++++++++++++++++++++++++++ 6 files changed, 83 insertions(+), 9 deletions(-) diff --git a/lite/CMakeLists.txt b/lite/CMakeLists.txt index ebb7616012..df6b7d3648 100644 --- a/lite/CMakeLists.txt +++ b/lite/CMakeLists.txt @@ -179,8 +179,10 @@ if (LITE_WITH_LIGHT_WEIGHT_FRAMEWORK AND LITE_WITH_ARM) add_dependencies(tiny_publish_cxx_lib paddle_light_api_shared) add_dependencies(tiny_publish_cxx_lib bundle_light_api) add_dependencies(publish_inference tiny_publish_cxx_lib) - add_custom_command(TARGET tiny_publish_cxx_lib POST_BUILD - COMMAND ${CMAKE_STRIP} "-s" ${INFER_LITE_PUBLISH_ROOT}/cxx/lib/libpaddle_light_api_shared.so) + if(NOT "${CMAKE_BUILD_TYPE}" STREQUAL "Debug") + add_custom_command(TARGET tiny_publish_cxx_lib POST_BUILD + COMMAND ${CMAKE_STRIP} "-s" ${INFER_LITE_PUBLISH_ROOT}/cxx/lib/libpaddle_light_api_shared.so) + endif() endif() endif() endif() diff --git a/lite/api/paddle_place.cc b/lite/api/paddle_place.cc index 894d839185..6d12df67ac 100644 --- a/lite/api/paddle_place.cc +++ b/lite/api/paddle_place.cc @@ -77,7 +77,8 @@ const std::string& PrecisionToStr(PrecisionType precision) { } const std::string& DataLayoutToStr(DataLayoutType layout) { - static const std::string datalayout2string[] = {"unk", "NCHW", "any", "NHWC"}; + static const std::string datalayout2string[] = { + "unk", "NCHW", "any", "NHWC", "ImageDefault", "ImageFolder", "ImageNW"}; auto x = static_cast(layout); CHECK_LT(x, static_cast(DATALAYOUT(NUM))); return datalayout2string[x]; @@ -115,8 +116,13 @@ const std::string& PrecisionRepr(PrecisionType precision) { } const std::string& DataLayoutRepr(DataLayoutType layout) { - static const std::string datalayout2string[] = { - "kUnk", "kNCHW", "kAny", "kNHWC"}; + static const std::string datalayout2string[] = {"kUnk", + "kNCHW", + "kAny", + "kNHWC", + "kImageDefault", + "kImageFolder", + "kImageNW"}; auto x = static_cast(layout); CHECK_LT(x, static_cast(DATALAYOUT(NUM))); return datalayout2string[x]; @@ -146,8 +152,12 @@ std::set ExpandValidPrecisions(PrecisionType precision) { } std::set ExpandValidLayouts(DataLayoutType layout) { - static const std::set valid_set( - {DATALAYOUT(kNCHW), DATALAYOUT(kAny), DATALAYOUT(kNHWC)}); + static const std::set valid_set({DATALAYOUT(kNCHW), + DATALAYOUT(kAny), + DATALAYOUT(kNHWC), + DATALAYOUT(kImageDefault), + DATALAYOUT(kImageFolder), + DATALAYOUT(kImageNW)}); if (layout == DATALAYOUT(kAny)) { return valid_set; } diff --git a/lite/api/paddle_place.h b/lite/api/paddle_place.h index 07284be095..1aa4152235 100644 --- a/lite/api/paddle_place.h +++ b/lite/api/paddle_place.h @@ -71,8 +71,11 @@ enum class DataLayoutType : int { kUnk = 0, kNCHW = 1, kNHWC = 3, - kAny = 2, // any data layout - NUM = 4, // number of fields. + kImageDefault = 4, // for opencl image2d + kImageFolder = 5, // for opencl image2d + kImageNW = 6, // for opencl image2d + kAny = 2, // any data layout + NUM = 7, // number of fields. }; typedef enum { diff --git a/lite/api/python/pybind/pybind.cc b/lite/api/python/pybind/pybind.cc index 2df2e8f8f8..7d4ed4e987 100644 --- a/lite/api/python/pybind/pybind.cc +++ b/lite/api/python/pybind/pybind.cc @@ -165,6 +165,9 @@ void BindLitePlace(py::module *m) { py::enum_(*m, "DataLayoutType") .value("NCHW", DataLayoutType::kNCHW) .value("NHWC", DataLayoutType::kNHWC) + .value("ImageDefault", DataLayoutType::kImageDefault) + .value("ImageFolder", DataLayoutType::kImageFolder) + .value("ImageNW", DataLayoutType::kImageNW) .value("Any", DataLayoutType::kAny); // Place diff --git a/lite/core/op_registry.cc b/lite/core/op_registry.cc index 490a1e116d..716ce9d6a8 100644 --- a/lite/core/op_registry.cc +++ b/lite/core/op_registry.cc @@ -40,6 +40,18 @@ std::list> KernelRegistry::Create( return Create(op_type); \ + case DATALAYOUT(kImageDefault): \ + return Create(op_type); \ + case DATALAYOUT(kImageFolder): \ + return Create(op_type); \ + case DATALAYOUT(kImageNW): \ + return Create(op_type); \ default: \ LOG(FATAL) << "unsupported kernel layout " << DataLayoutToStr(layout); \ } @@ -147,6 +159,17 @@ KernelRegistry::KernelRegistry() INIT_FOR(kOpenCL, kFloat, kAny); INIT_FOR(kOpenCL, kInt8, kNCHW); INIT_FOR(kOpenCL, kAny, kAny); + INIT_FOR(kOpenCL, kFP16, kNCHW); + INIT_FOR(kOpenCL, kFP16, kNHWC); + INIT_FOR(kOpenCL, kFP16, kImageDefault); + INIT_FOR(kOpenCL, kFP16, kImageFolder); + INIT_FOR(kOpenCL, kFP16, kImageNW); + INIT_FOR(kOpenCL, kFloat, kImageDefault); + INIT_FOR(kOpenCL, kFloat, kImageFolder); + INIT_FOR(kOpenCL, kFloat, kImageNW); + INIT_FOR(kOpenCL, kAny, kImageDefault); + INIT_FOR(kOpenCL, kAny, kImageFolder); + INIT_FOR(kOpenCL, kAny, kImageNW); INIT_FOR(kNPU, kFloat, kNCHW); INIT_FOR(kNPU, kInt8, kNCHW); diff --git a/lite/core/op_registry.h b/lite/core/op_registry.h index 81dba38d93..0df5cb41ec 100644 --- a/lite/core/op_registry.h +++ b/lite/core/op_registry.h @@ -176,6 +176,39 @@ class KernelRegistry final { KernelRegistryForTarget *, // + KernelRegistryForTarget *, // + KernelRegistryForTarget *, // + KernelRegistryForTarget *, // + KernelRegistryForTarget *, // + KernelRegistryForTarget *, // + KernelRegistryForTarget *, // + KernelRegistryForTarget *, // + KernelRegistryForTarget *, // + KernelRegistryForTarget *, // + KernelRegistryForTarget *, // + KernelRegistryForTarget *, // KernelRegistryForTarget