summaryrefslogtreecommitdiff
path: root/src/cl_event.c
diff options
context:
space:
mode:
authorMidhun Kodiyath <midhunchandra.kodiyath@intel.com>2015-09-22 17:19:25 -0700
committerYang Rong <rong.r.yang@intel.com>2015-09-23 11:26:59 +0800
commit13a303902a036e92306057bc30024748c5d754b7 (patch)
tree69f1fdd29cf20382c84ac54198da6d247525a9a2 /src/cl_event.c
parentf9094e59bbef31585bce9d301a0d319a38a11e13 (diff)
downloadbeignet-13a303902a036e92306057bc30024748c5d754b7.tar.gz
Calculate appropriate timestamps for cl profile
Fix to calculate the current cpu monotonic raw timestamp in nanoseconds for enqueued,submitted,start and finshed and send this to application based on the parameter queries. Signed-off-by: Midhun Kodiyath <midhunchandra.kodiyath@intel.com> Reviewed-by: "Yang, Rong R" <rong.r.yang@intel.com>
Diffstat (limited to 'src/cl_event.c')
-rw-r--r--src/cl_event.c55
1 files changed, 55 insertions, 0 deletions
diff --git a/src/cl_event.c b/src/cl_event.c
index bbc1776d..bf441977 100644
--- a/src/cl_event.c
+++ b/src/cl_event.c
@@ -613,6 +613,61 @@ cl_int cl_event_barrier_with_wait_list(cl_command_queue queue,
return CL_SUCCESS;
}
+cl_ulong cl_event_get_cpu_timestamp(cl_ulong *cpu_time)
+{
+ struct timespec ts;
+
+ if(clock_gettime(CLOCK_MONOTONIC_RAW,&ts) != 0){
+ printf("CPU Timmer error\n");
+ return CL_FALSE;
+ }
+ *cpu_time = (1000000000.0) * (cl_ulong) ts.tv_sec + (cl_ulong) ts.tv_nsec;
+
+ return CL_SUCCESS;
+}
+
+cl_int cl_event_get_queued_cpu_timestamp(cl_event event)
+{
+ cl_int ret_val;
+
+ ret_val = cl_event_get_cpu_timestamp(&event->queued_timestamp);
+
+ return ret_val;
+}
+
+cl_ulong cl_event_get_timestamp_delta(cl_ulong start_timestamp,cl_ulong end_timestamp)
+{
+ cl_ulong ret_val;
+
+ if(end_timestamp > start_timestamp){
+ ret_val = end_timestamp - start_timestamp;
+ }
+ else {
+ /*if start time stamp is greater than end timstamp then set ret value to max*/
+ ret_val = ((cl_ulong) 1 << 32);
+ }
+
+ return ret_val;
+}
+
+cl_ulong cl_event_get_start_timestamp(cl_event event)
+{
+ cl_ulong ret_val;
+
+ ret_val = cl_event_get_timestamp_delta(event->timestamp[0],event->timestamp[2]);
+
+ return ret_val;
+}
+
+cl_ulong cl_event_get_end_timestamp(cl_event event)
+{
+ cl_ulong ret_val;
+
+ ret_val = cl_event_get_timestamp_delta(event->timestamp[0],event->timestamp[3]);
+
+ return ret_val;
+}
+
cl_int cl_event_get_timestamp(cl_event event, cl_profiling_info param_name)
{
cl_ulong ret_val = 0;