make Beignet as intermedia layer of CMRT

Graphics / Beignet - Guo Yejun [intel.com] - 8 December 2015 21:27 UTC

CMRT is C for Media Runtime on Intel GPU, see https://github.com/01org/cmrt. There is a request to , in other words, application programer write OpenCL APIs to execute the CM kernel on GPU, the following shows the key code, and please refer to the next patch of unit test for detail.

prog = clCreateProgramWithBinary("cm kernel"); clBuildProgram(prog); kernel = clCreateKernel(prog, "kernel name"); image = clCreateImage(); clSetKernelArg(kernel, image); clEnqueueNDRangeKernel(kernel);

Inside Beignet, once cm kernel is invoked, the following relative APIs will be directly passed to CMRT library (libcmrt.so) which is loaded
via dlopen only when necessary. Since we use this simple method to keep the code clean, OpenCL spec is not strictly followed, and cl_event is not supported for this case.

v2: add comments about the cm queue in fuction cmrt_enqueue

e2c46c8 make Beignet as intermedia layer of CMRT
CMakeLists.txt | 6 +
src/CMakeLists.txt | 7 ++
src/cl_api.c | 39 +++++-
src/cl_cmrt.cpp | 311 ++++++++++++++++++++++++++++++++++++++++++++++++
src/cl_cmrt.h | 45 +++++++
src/cl_command_queue.c | 7 ++
src/cl_command_queue.h | 2 +
src/cl_device_id.h | 3 +
src/cl_gt_device.h | 1 +
src/cl_kernel.c | 11 ++
src/cl_kernel.h | 2 +
src/cl_mem.c | 7 ++
src/cl_mem.h | 3 +
src/cl_program.c | 57 +++++++--
src/cl_program.h | 10 +-
15 files changed, 497 insertions(+), 14 deletions(-)

Upstream: cgit.freedesktop.org


  • Share