Research Article
Optimized Data Transfers Based on the OpenCL Event Management Mechanism
Listing 1
A simple pseudocode combining OpenCL and MPI.
() cl_command_queue cmd; | () cl_kernel kern; | () cl_event evt; | () | () for(int i(0);i<N;++i){ | () // (1) computation on a device | () clEnqueueNDRangeKernel(cmd,kern,…,0,NULL,&evt); | () | () // (2) read the result from device to host | () clEnqueueReadBuffer(cmd,…,1,&evt,NULL); | () clFinish(cmd); // the host thread is blocked | () | () // (3) exchange data with other nodes | () MPI_Sendrecv(…); // blocking function call | () | () // (4) write the received data to device memory | () clEnqueueWriteBuffer(cmd,…); | () } |
|