Research Article

Optimized Data Transfers Based on the OpenCL Event Management Mechanism

Listing 6

A simple pseudocode of a clDataTransfer function.
()  cl_int clDataTransferFunc( ,
()                cl_uint numevts,      /* the number of events in the list */
()                cl_event* wlist,      /* event list */
()                cl_evett* evtret )    /* event object of event object */
()  {
()   /* create a new user event object whose status is CL_SUBMITTED */
()   *evtret = clCreateUserEvent();
()
()   if( non_blocking = CL_TRUE)
()  pthread_create(,cldtThreadFunc,);
() else
()  cldtThreadFunc();
()
() return CL_SUCCESS;
() }
()
() /* numevt, wlist, and evtret are passed from the caller */
() void* cldtThreadFunc(void* p)
() {
() clWaitForEvent(numevt, wlist);
()
() /* pipelined data transfer */
()
() clSetUserEventStatus(*evtret, CL_COMPLETE);
() return NULL;
() }