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; | | () } |
|