From 9bf15fefab2fea01ac8f52aa967f5693c511d0a4 Mon Sep 17 00:00:00 2001 From: xiebaiyuan Date: Thu, 20 Aug 2020 02:39:43 -0500 Subject: [PATCH] [OPENCL][BACKEND] Avoid memory copy for MallocImage when host_ptr specified (#4153) * [OPENCL] if specify addr , do not need to modify. avoid mem copy * test=develop --- lite/backends/opencl/target_wrapper.cc | 60 +++++++++++++------------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/lite/backends/opencl/target_wrapper.cc b/lite/backends/opencl/target_wrapper.cc index 950f2fc442..e39e64245a 100644 --- a/lite/backends/opencl/target_wrapper.cc +++ b/lite/backends/opencl/target_wrapper.cc @@ -64,16 +64,16 @@ void *TargetWrapperCL::MallocImage(const size_t cl_image2d_width, void *host_ptr) { cl::ImageFormat img_format(CL_RGBA, GetCLChannelType(PRECISION(kFloat))); cl_int status; - cl::Image2D *cl_image = - new cl::Image2D(CLRuntime::Global()->context(), - CL_MEM_READ_WRITE | (host_ptr ? CL_MEM_COPY_HOST_PTR - : CL_MEM_ALLOC_HOST_PTR), - img_format, - cl_image2d_width, - cl_image2d_height, - 0, - host_ptr, - &status); + cl::Image2D *cl_image = new cl::Image2D( + CLRuntime::Global()->context(), + (host_ptr ? CL_MEM_READ_ONLY : CL_MEM_READ_WRITE) | + (host_ptr ? CL_MEM_COPY_HOST_PTR : CL_MEM_ALLOC_HOST_PTR), + img_format, + cl_image2d_width, + cl_image2d_height, + 0, + host_ptr, + &status); if (status != CL_SUCCESS) { delete cl_image; cl_image = nullptr; @@ -88,16 +88,16 @@ void *TargetWrapperCL::MallocImage(const size_t cl_image2d_width, void *host_ptr) { cl::ImageFormat img_format(CL_RGBA, GetCLChannelType(PRECISION(kFP16))); cl_int status; - cl::Image2D *cl_image = - new cl::Image2D(CLRuntime::Global()->context(), - CL_MEM_READ_WRITE | (host_ptr ? CL_MEM_COPY_HOST_PTR - : CL_MEM_ALLOC_HOST_PTR), - img_format, - cl_image2d_width, - cl_image2d_height, - 0, - host_ptr, - &status); + cl::Image2D *cl_image = new cl::Image2D( + CLRuntime::Global()->context(), + (host_ptr ? CL_MEM_READ_ONLY : CL_MEM_READ_WRITE) | + (host_ptr ? CL_MEM_COPY_HOST_PTR : CL_MEM_ALLOC_HOST_PTR), + img_format, + cl_image2d_width, + cl_image2d_height, + 0, + host_ptr, + &status); if (status != CL_SUCCESS) { delete cl_image; cl_image = nullptr; @@ -112,16 +112,16 @@ void *TargetWrapperCL::MallocImage(const size_t cl_image2d_width, void *host_ptr) { cl::ImageFormat img_format(CL_RGBA, GetCLChannelType(PRECISION(kInt32))); cl_int status; - cl::Image2D *cl_image = - new cl::Image2D(CLRuntime::Global()->context(), - CL_MEM_READ_WRITE | (host_ptr ? CL_MEM_COPY_HOST_PTR - : CL_MEM_ALLOC_HOST_PTR), - img_format, - cl_image2d_width, - cl_image2d_height, - 0, - host_ptr, - &status); + cl::Image2D *cl_image = new cl::Image2D( + CLRuntime::Global()->context(), + (host_ptr ? CL_MEM_READ_ONLY : CL_MEM_READ_WRITE) | + (host_ptr ? CL_MEM_COPY_HOST_PTR : CL_MEM_ALLOC_HOST_PTR), + img_format, + cl_image2d_width, + cl_image2d_height, + 0, + host_ptr, + &status); if (status != CL_SUCCESS) { delete cl_image; cl_image = nullptr; -- GitLab