Research Article

LTTng CLUST: A System-Wide Unified CPU and GPU Tracing Tool for OpenCL Applications

Listing 2

(1)  cl_int  clEnqueueWriteBuffer(cl_command_queue[],  cl_event  *  event)   
(2)   //  Check  if  device  tracing  enabled?
(3)   const  bool  trace  =
    __tracepoint_clust_provider__
    _clust_device_event.state;
(4)   bool  toDelete  =  event  ==  NULL;
(5)   if(caa_unlikely(trace))  
(6)      if(toDelete)  //  Dynamic  eventallocation
(7)      event  =  malloc(sizeof(cl_event));
(8)  
(9)  
(10)
(11)  tracepoint(clust_provider,
   cl_clEnqueueWriteBuffer_start,  [relevant
       arguments  to  record]);
(12)  cl_int  ret  =  reallib_clEnqueueWriteBuffer(command_queue,  buffer,  blocking_write,
   offset,  cb,  ptr,  num_events_in_wait_list,event_wait_list,  event);
(13)  tracepoint(clust_provider,cl_clEnqueueWriteBuffer_end);
(14)
(15)  if(caa_unlikely(trace))  
(16)     int  r  =  reallib_clSetEventCallback(*
   event,  CL_COMPLETE,  &eventCompleted,  (toDelete)?&ev_delete:&ev_keep);
(17)     if(r  !=  CL_SUCCESS)    [errormanagement…]  
(18)  
(19)
(20)   return  ret;
(21)