From: Junyan He <junyan...@intel.com> Signed-off-by: Junyan He <junyan...@intel.com> --- src/CMakeLists.txt | 1 + src/cl_event.c | 52 ++--------------------------------- src/gen/cl_event_gen.c | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 77 insertions(+), 50 deletions(-) create mode 100644 src/gen/cl_event_gen.c
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 33b2e8d..05c5302 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -111,6 +111,7 @@ set(OPENCL_SRC gen/cl_mem_gen.c gen/cl_image_gen.c gen/cl_compiler_gen.c + gen/cl_event_gen.c performance.c) if (X11_FOUND) diff --git a/src/cl_event.c b/src/cl_event.c index 6b018ee..cdc47fd 100644 --- a/src/cl_event.c +++ b/src/cl_event.c @@ -24,56 +24,8 @@ #include <stdio.h> // TODO: Need to move it to some device related file later. -static void -cl_event_update_timestamp_gen(cl_event event, cl_int status) -{ - cl_ulong ts = 0; - - if ((event->exec_data.type == EnqueueCopyBufferRect) || - (event->exec_data.type == EnqueueCopyBuffer) || - (event->exec_data.type == EnqueueCopyImage) || - (event->exec_data.type == EnqueueCopyBufferToImage) || - (event->exec_data.type == EnqueueCopyImageToBuffer) || - (event->exec_data.type == EnqueueNDRangeKernel) || - (event->exec_data.type == EnqueueFillBuffer) || - (event->exec_data.type == EnqueueFillImage)) { - - if (status == CL_QUEUED || status == CL_SUBMITTED) { - cl_gpgpu_event_get_gpu_cur_timestamp(event->queue->ctx->drv, &ts); - - if (ts == CL_EVENT_INVALID_TIMESTAMP) - ts++; - event->timestamp[CL_QUEUED - status] = ts; - return; - } else if (status == CL_RUNNING) { - assert(event->exec_data.gpgpu); - return; // Wait for the event complete and get run and complete then. - } else { - assert(event->exec_data.gpgpu); - cl_gpgpu_event_get_exec_timestamp(event->exec_data.gpgpu, 0, &ts); - if (ts == CL_EVENT_INVALID_TIMESTAMP) - ts++; - event->timestamp[2] = ts; - cl_gpgpu_event_get_exec_timestamp(event->exec_data.gpgpu, 1, &ts); - if (ts == CL_EVENT_INVALID_TIMESTAMP) - ts++; - event->timestamp[3] = ts; - - /* Set the submit time the same as running time if it is later. */ - if (event->timestamp[1] > event->timestamp[2] || - event->timestamp[2] - event->timestamp[1] > 0x0FFFFFFFFFF /*Overflowed */) - event->timestamp[1] = event->timestamp[2]; - - return; - } - } else { - cl_gpgpu_event_get_gpu_cur_timestamp(event->queue->ctx->drv, &ts); - if (ts == CL_EVENT_INVALID_TIMESTAMP) - ts++; - event->timestamp[CL_QUEUED - status] = ts; - return; - } -} +extern void +cl_event_update_timestamp_gen(cl_event event, cl_int status); LOCAL void cl_event_update_timestamp(cl_event event, cl_int state) diff --git a/src/gen/cl_event_gen.c b/src/gen/cl_event_gen.c new file mode 100644 index 0000000..aeefb29 --- /dev/null +++ b/src/gen/cl_event_gen.c @@ -0,0 +1,74 @@ +/* + * Copyright ?? 2012 Intel Corporation + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see <http://www.gnu.org/licenses/>. + * + */ + +#include "cl_gen.h" + +struct gen_gpgpu; +extern void gen_gpgpu_event_get_exec_timestamp(struct gen_gpgpu *gpgpu, int index, uint64_t *ret_ts); +extern void gen_gpgpu_event_get_gpu_cur_timestamp(struct gen_gpgpu *gpgpu, uint64_t *ret_ts); + +LOCAL void +cl_event_update_timestamp_gen(cl_event event, cl_int status) +{ + cl_ulong ts = 0; + + if ((event->exec_data.type == EnqueueCopyBufferRect) || + (event->exec_data.type == EnqueueCopyBuffer) || + (event->exec_data.type == EnqueueCopyImage) || + (event->exec_data.type == EnqueueCopyBufferToImage) || + (event->exec_data.type == EnqueueCopyImageToBuffer) || + (event->exec_data.type == EnqueueNDRangeKernel) || + (event->exec_data.type == EnqueueFillBuffer) || + (event->exec_data.type == EnqueueFillImage)) { + + if (status == CL_QUEUED || status == CL_SUBMITTED) { + gen_gpgpu_event_get_gpu_cur_timestamp(event->exec_data.gpgpu, &ts); + + if (ts == CL_EVENT_INVALID_TIMESTAMP) + ts++; + event->timestamp[CL_QUEUED - status] = ts; + return; + } else if (status == CL_RUNNING) { + assert(event->exec_data.gpgpu); + return; // Wait for the event complete and get run and complete then. + } else { + assert(event->exec_data.gpgpu); + gen_gpgpu_event_get_exec_timestamp(event->exec_data.gpgpu, 0, &ts); + if (ts == CL_EVENT_INVALID_TIMESTAMP) + ts++; + event->timestamp[2] = ts; + gen_gpgpu_event_get_exec_timestamp(event->exec_data.gpgpu, 1, &ts); + if (ts == CL_EVENT_INVALID_TIMESTAMP) + ts++; + event->timestamp[3] = ts; + + /* Set the submit time the same as running time if it is later. */ + if (event->timestamp[1] > event->timestamp[2] || + event->timestamp[2] - event->timestamp[1] > 0x0FFFFFFFFFF /*Overflowed */) + event->timestamp[1] = event->timestamp[2]; + + return; + } + } else { + gen_gpgpu_event_get_gpu_cur_timestamp(event->exec_data.gpgpu, &ts); + if (ts == CL_EVENT_INVALID_TIMESTAMP) + ts++; + event->timestamp[CL_QUEUED - status] = ts; + return; + } +} -- 2.7.4
_______________________________________________ Beignet mailing list Beignet@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/beignet