未验证 提交 e0ca3107 编写于 作者: X xiebaiyuan 提交者: GitHub

[OPENCL][BACKEND] Avoid memory copy for MallocImage when host_ptr specified (#4153) (#4174)

* [OPENCL] if specify addr , do not need to modify. avoid mem copy

* test=develop
上级 c35c5aa0
......@@ -64,16 +64,16 @@ void *TargetWrapperCL::MallocImage<float>(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<uint16_t>(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<int32_t>(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;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册