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